jev-trader:每 300ms 让 AI 在 Monad 链上下真实交易订单,这是什么?一文读懂
【免费下载链接】jev-traderOne AI trade decision every Monad block. Jev on Kuru MON-USDC.项目地址: https://gitcode.com/gh_mirrors/je/jev-trader
🤖jev-trader是一个运行在 Monad 链上的AI 交易机器人:它盯住 Kuru 交易所的 MON-USDC 订单簿,由一个名为 Jev 的 TypeSafe AI 模型在每个区块(约 300 毫秒)只回答一个问题——买还是卖,然后在订单簿上挂出一笔真实的 post-only 限价单。它不是模拟盘,而是真金白银的链上交易,并配有一个实时刷新的仪表盘网页,让你亲眼看到 AI 每 300ms 做一次决策、上一笔订单的全过程。
一句话概括这个项目:"This AI makes a real trade decision every 300 ms on Monad."而且 AI 推理一小时的成本(约 $0.20)甚至比链上 gas 还便宜。
🧠 jev-trader 是什么:AI 决策 + 链上执行的极简组合
传统交易机器人通常由"策略规则 + 行情数据"驱动,而 jev-trader 把决策环节直接交给 AI 模型。整个系统由三部分构成:
| 组件 | 作用 | 对应文件 |
|---|---|---|
| 决策层(AI 模型) | 每个区块读订单簿,输出 buy / sell 及概率 | src/model.ts |
| 执行层(链上交易) | 编码并发送 Kuru 的batchUpdate限价单 | src/market.ts |
| 展示层(仪表盘) | SSE 流式推送每区块事件,前端实时渲染 | src/server.ts、web/src/app/page.tsx |
它的盈利逻辑很朴素:作为maker(挂单方)而非 taker,在最优买价/卖价内侧一个 tick 处挂单,等别人的吃单砸进来成交——赚的是价差(spread),而不是付出价差。
产品理念定义在 SPEC.md 里,核心原则是:单屏、无登录、无设置,"画面的运动本身就是内容",每 300ms 必须有东西在变化。
⚡ 核心机制:每 300ms 的"决策-下单"循环
这是整个项目最精彩的部分,主循环实现在 src/trader.ts 的onBlock方法中。每个区块到来时,它做四件事:
- 读订单簿:一次
eth_call读取 Kuru 的 MON-USDC 订单簿(约 18ms); - 问 AI:把盘口、价差、近 30 秒的成交与深度打包成一份紧凑的"交易状态",问模型一个选择题——"再过约 100 个区块,MON 价格会更高还是更低?",模型在约 100ms 内返回带概率的 buy / sell;
- 上一笔订单:在模型指出的那一边,挂出 200 MON 的 post-only 限价单(最优价内侧 1 个 tick),同时取消上一区块留下的旧单,一笔
batchUpdate交易搞定; - 记账:更新仓位、已实现/未实现盈亏、gas 与 AI 花费,并把整个区块事件推给仪表盘。
📌 如果上一笔订单还没处理完,新区块就被标记为late(迟到),本块只 hold 不下单——保证任意时刻只有一个请求在飞,绝不追赶过期区块。
🏎️ 为什么能在 300ms 里跑完?热路径上只有 2 次 RPC
这是理解项目工程含金量的关键。为了把"决策 + 下单"塞进一个区块,热循环恰好只做两次 RPC 往返(详见 README.md 的 "The 300 ms budget" 章节):
- ✅ 一次
eth_call:读订单簿(src/book.ts,手工解码getL2Book返回数据,比 SDK 少一次网络往返); - ✅ 一次
eth_sendRawTransaction:发送签名好的交易,RPC 收到哈希即返回。
而被刻意排除在热路径之外的:
- ❌
eth_estimateGas——Monad 按 gas limit 收费,所以 limit 在启动时估算一次后硬编码; - ❌ gas 价格查询——使用静态 type-2 费用(400 gwei 上限 + 2 gwei 优先级);
- ❌ 同步等待回执——回执、费用刷新、保证金检查都在后续区块的空闲时间里异步完成(见 src/market.ts 的
pollPending与refresh)。
实测数据(dry run + mock 模型):订单簿读取 p50 约 18ms,整个循环 p50 约 100ms。区块来源由 src/chain.ts 提供:WebSocketnewHeads为主、150ms 轮询兜底,突发区块会合并成"只处理最新一个"。
📋 项目结构一览:每个文件各管一件事
后端只有 7 个核心文件,职责清晰(src/ 目录):
| 文件 | 一句话说明 |
|---|---|
| src/config.ts | 全部环境变量配置:RPC 地址、市场地址、gas、仓位上限、模型选择 |
| src/chain.ts | 区块推送源(WebSocket + 轮询兜底)、原始 RPC 封装 |
| src/book.ts | 最小往返的订单簿读取器,手解 ABI 数据 |
| src/market.ts | Kuru 市场操作:读簿、手编码batchUpdate、保证金、异步确认 |
| src/model.ts | Model接口 +JevModel(真 AI)/MockModel(动量启发式替身) |
| src/trader.ts | 主循环:单请求在飞、迟到即 hold、仓位与盈亏记账 |
| src/server.ts | Bun 服务器:快照/、历史/history、SSE 流/events |
前端是一个 Next.js 单页应用(web/src/),组件与后端事件一一对应:决策面板 DecisionPanel、价格曲线 FlowChart、交易流水 Feed、六格计数器 StatsRow。数据经 useFeed.ts 从 SSE 流入,web/README.md 有更细的前端说明。
🚀 本地跑起来:3 条命令 + 免费 dry-run 模式
配置入口在 src/config.ts,全部走环境变量。最棒的是:不配私钥就是 dry-run——真实的订单簿、真实的 AI 决策,只是成交被模拟(订单挂一个区块,被真实盘口穿越时即视为成交)。
快速启动步骤:
- 复制环境模板:
cp .env.example .env - 安装依赖:
bun install - 启动:
bun run start
几个关键开关(默认值见 src/config.ts):
MODEL=jev+TYPESAFE_AI_API_KEY:启用真正的 Jev AI(默认mock是动量+盘口失衡+噪声的确定性替身,src/model.ts);TRADE_SIZE_MON:单笔数量,默认 200(Kuru 该市场的最低单量);MAX_POSITION_MON:仓位上限,触顶后订单自动翻到减仓一侧(capped: true,概率仍显示模型原意);DRY_RUN/ 缺少PRIVATE_KEY:进入模拟成交模式。
仓库还附了验证脚本:scripts/bench-read.ts对比自研订单簿读取器与 SDK 的精度和延迟,scripts/dry-encode.ts离线签名一笔买/卖并断言 calldata 与 SDK 完全一致——"手编码"不是猜的,是逐字节对齐过的。
📊 仪表盘:每 300ms 都在动的单屏直播间
前端页面严格遵循 SPEC.md 的五段式布局,一切为了"录一段 20 秒的屏摄就能让人看懂":
- 头部:标题 + 跳动红点 + 每 300ms 递增的区块号 + 钱包地址 + 模型徽章(真 Jev 显示
jev-latest,替身模型挂琥珀色stand-in徽章); - 价格主图:MON/USDC 中间价滚动窗口,每个成交打一个绿/红三角标记,几乎每个区块都有;
- 决策面板(招牌元素):买/卖概率双向条、本块决策延迟(如 "94 ms")、底部 60 格 tick 条(绿买红卖、琥珀色迟到);
- 计数器行:区块数、决策数、成交数、AI 花费与 gas 花费并排放置——"AI 比 gas 还便宜"这个卖点直接可视化,无需注解;
- 成交流水:最近 12 笔成交,含区块、方向、数量、价格、延迟与交易哈希。
数据经 src/server.ts 的 SSE 端点/events推送:连接时先发snapshot,之后每区块一条block事件、回执落地时quote事件、成交时fill事件。项目还有一个已部署的公开 dry-run 实例可玩(地址见 README.md),打开就能看到 mock 模型每 300ms 下单的真实节奏。
🎯 总结:它想证明什么?
jev-trader 不是要给你一套能抄的策略(SPEC.md 明确写着"模型并非以盈利为目标"、无回测、无策略讲解)。它想证明的是:
- AI 决策可以快:TypeSafe 模型不产文本、直接返回带概率的结构化决策,100ms 出答案,快过一个区块周期;
- 成本可以低到反直觉:AI 推理一小时 ≈ $0.20,同期 gas ≈ $2–5,"The AI costs less than the gas";
- 一切真实可验证:钱包地址、交易哈希、区块高度全部上链,盈亏红绿照晒,亏损和盈利一样直白。
一个 300ms 节奏的"AI 心跳",配上克制的深色交易台美学——这就是 jev-trader 的核心体验:让 AI 的每个决策都以链上订单的形式,肉眼可见地发生。
【免费下载链接】jev-traderOne AI trade decision every Monad block. Jev on Kuru MON-USDC.项目地址: https://gitcode.com/gh_mirrors/je/jev-trader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考