jev-trader:每个区块决策一次的 Monad 链上做市机器人
jev-trader:Monad 链上做市机器人,每个区块问 Jev 买还是卖,挂 post-only 限价单等 taker 成交,无私钥时 dry-run。
项目资料
GitHub Ecosystem- 许可证
- MIT
- 主语言
- TypeScript
- 星标
- 2,954
- 核查时间
- 2026-10-12
以上快照资料以核查当日为准,可能随版本或运营策略变化。
链上自动交易多数思路是「快」:监控价格、条件触发、市价单吃单成交,付掉价差和滑点。jev-trader 是 2026 年 9 月中旬开源的另一种思路(MIT,TypeScript,截至 2026-10-12 已 2.9k star):一个跑在 Monad 链上的做市机器人,盯 Kuru 的 MON-USDC 订单簿,每个区块(约 300 毫秒)问一次 Jev 买还是卖,然后挂一笔 post-only 限价单,贴在盘口内侧一 tick,等 taker 来成交——赚价差,而不是付价差。
核心功能
- 纯 maker 策略:只挂 post-only 限价单,成交依赖 taker 撞过来;每下一笔新单,都在同一个 batchUpdate 里撤掉此前全部挂单,盘口上始终只有一笔。
- 决策的输入输出:模型看到订单簿状态,输出 buy 或 sell,预测视野默认 100 个区块(约 30 秒);执行层把答案变成一笔贴着盘口内侧一 tick 的 post-only 限价单,不做市价吃单。
- 300 毫秒预算的拆解:热循环只做两次 RPC 往返——一次 eth_call 读订单簿,一次 eth_sendRawTransaction(接受即返回);官方 README 记录盘口读取 p50 18 ms、整圈 p50 100 ms(dry run 加 mock model 口径)。
- 刻意不做的几件事:不做 eth_estimateGas(Monad 按 gas limit 收费,limit 硬编码或启动时推导一次)、不用 eth_sendRawTransactionSync、不查 gas price(静态 type-2 费用);收据、费用估算和 vault 检查全部挪出热路径,后续区块再算。
- 没有私钥就 dry-run:默认跑真实订单簿、真实决策、模拟成交;设 MODEL=jev 和 TYPESAFE_AI_API_KEY 才换成 Jev 决策,默认的 mock 是一个动量启发式替身。
- 可观测的事件流:SSE 推送每区块的 decision、quote、fill,每 15 秒一个 ping;/history 保留最近 1000 个区块事件;收据 10 个区块没到就记为 lost。
- 自带两个基准脚本:bench-read.ts 对比自研盘口读取器和官方 SDK 的精确度与延迟;dry-encode.ts 离线签一笔买和一笔卖,断言 calldata 与 SDK 一致。
典型使用场景
- 零资金验证做市策略的量化开发者:本地 dry-run,从 SSE 流里看每区块的决策、报价和模拟成交,不碰真钱。
- Monad 生态里想自动做市的用户:配好 PRIVATE_KEY、MODEL=jev 和 key,让机器人在 MON-USDC 上持续挂单。
- 研究低延迟循环的人:用 bench-read.ts 量自己的读取器比官方 SDK 快多少、丢不丢精度。
快速上手
cp .env.example .env
bun install
bun run start
不带 PRIVATE_KEY 启动即是 dry-run;README 还挂了一个 Railway 上的 dry-run 实例(https://jev-trader-production.up.railway.app),可以直接看事件流。HORIZON_BLOCKS 默认 100(约 30 秒),是模型预测的视野长度。
小结
jev-trader 适合想研究链上做市和低延迟决策循环的人当参考实现,不适合当「设了私钥就能收钱」的策略来用。要认清的几点:市场和链都是单一的——只有 Monad 上的 Kuru MON-USDC;Monad 按 gas limit 收费,订单落地与否这笔钱都付;实时发送是「即发即忘」,收据晚一两个区块才到,10 个区块不到记为丢失。最重要的是:README 没有任何业绩或回测数据,示例事件里的小额盈亏是演示数据,也没有任何金融风险声明——当实验看可以,当策略不行。代码 MIT 协议,TypeScript 编写,bun 运行。这个项目在 Jev 生态十例里是离钱最近的一个。