ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

jev-trader 性能核心:如何在 300ms 内读盘+AI决策+下单?只留 2 次 RPC 往返的终极优化

jev-trader 性能核心:如何在 300ms 内读盘+AI决策+下单?只留 2 次 RPC 往返的终极优化 jev-trader 性能核心如何在 300ms 内读盘AI决策下单只留 2 次 RPC 往返的终极优化【免费下载链接】jev-traderOne AI trade decision every Monad block. Jev on Kuru MON-USDC.项目地址: https://gitcode.com/gh_mirrors/je/jev-traderjev-trader 是一个运行在 Monad 链上的 AI 交易机器人每个 300ms 区块TypeSafe 的 Jev 模型都会看一眼 Kuru 交易所的 MON-USDC 订单簿回答买还是卖并由真实钱包挂出一张 post-only 限价单。它的性能目标极其苛刻——读盘、AI 决策、下单必须塞进一个区块。而答案惊人地简洁整条热路径只保留 2 次 RPC 往返。⏱️ 300ms 预算为什么速度是生死线Monad 的区块时间只有 300ms。jev-trader 的规则是每块一决策、每块一订单一旦这个区块里还有上一块的请求没跑完本块只能记为late迟到不下单并在 src/trader.ts#L89-L93 中直接跳过。eth_call读盘→ AI 决策~100ms→ eth_sendRawTransaction发单想在这个窗口里跑完三步唯一的手段就是砍掉一切非必要 RPC。热路径src/trader.ts#L85-L131里恰好只剩两发请求第几次RPC 方法干什么公开节点实测1eth_call一次性读出整个 L2 订单簿p50 约 18ms2eth_sendRawTransaction发送已签名交易收到 txHash 即返回毫秒级 第一次往返一次 eth_call 读完订单簿官方的 Kuru SDK 读盘要串行发两次eth_call先getL2Book再getVaultParams。但 jev-trader 分析后发现MON-USDC 市场的 AMM 金库深度为 0第二次调用纯属浪费延迟。于是项目在 src/book.ts#L72-L89 手写了一个最小读盘器直接调getL2Book()的选择子手动解码 ABI 返回值并按 SDK 的位级逻辑floor/ceil到 tick、按价格归组还原订单簿保证结果与 SDK逐位一致。如果哪天金库真的上线两个调用也会被合并进同一个 JSON-RPC 批处理——仍然只有一次 HTTP 往返src/book.ts#L7-L9。 第二次往返签名即发发完就走发单这一步src/market.ts#L135-L152同样做了减法核心是buildTxsrc/market.ts#L175-L182构造的这笔交易在签名前就万事俱备❌ 不用eth_estimateGas——Monad 按 gas limit 收费limit 在启动时估算一次并硬编码src/market.ts#L257-L272之后永不重查❌ 不用eth_gasPrice——静态 type-2 手续费MAX_FEE_GWEI封顶 2 gwei 优先费见 src/config.ts#L22-L28❌ 不用eth_sendRawTransactionSync——同步版要阻塞到交易被 Proposed白白多等一个区块✅ 本地维护 noncebatchUpdate一笔交易同时完成撤销旧单 挂出新单收到 txHash 立即返回。回执确认、gas 实际花费、成交fill解析全部在后续区块异步补账src/trader.ts#L133-L138从不拖慢当前块的决策。 AI 决策吃下剩下的 ~200ms读盘 ~18ms 发单 ~毫秒级中间留给模型约 200ms。Jev 是一个 System One 风格的模型不输出文本直接返回带概率的结构化决策单次推理约 100ms正好卡进预算src/model.ts#L59-L77。模型看到的不是原始报文而是精心压缩的状态盘口五档、多档深度、买卖单量差CVD、最近 100 块的收益率路径——全部在 src/trader.ts#L219-L243 本地拼装完成零额外 RPC。没配 API Key 时会用mock动量模型顶上它甚至故意sleep80ms 模拟真实推理时长让管线行为与生产一致src/model.ts#L80-L98。 其余一切全部移出热路径任务频率为什么可以慢交易回执轮询eth_getTransactionReceipt每块并行发起、异步落地影响的是上几块的单确认不影响本块决策交易日志成交拉取eth_getLogs每块一次结果异步收割成交由 taker 打穿我们的挂单产生晚一块入账无妨gas 价格估算 保证金余额 金库检查每 200 块都是慢变量新区块通知WebSocketnewHeads 150ms HTTP 轮询兜底合并为只跑最新块见 src/chain.ts#L21-L50 实测数据p50 100ms预算余量 3 倍官方在 dry-run 下测得读盘 p50 18ms整循环 p50 100ms其中 80ms 还是 mock 模型的推理占位——也就是说真实场景下整条链路稳定在区块时间的三分之一以内。项目还配了两个自证清白的脚本scripts/bench-read.ts手写读盘器 vs 官方 SDK同块逐位对比 延迟横评scripts/dry-encode.ts离线签名买/卖两笔单断言手编码的batchUpdatecalldata 与 SDK 完全等价、价格严格对齐 tick 且永不穿盘。 快速上手cp .env.example .env bun install bun run start没有PRIVATE_KEY时自动进入 dry-run真实的盘口、真实的决策、模拟的成交设置MODELjev与TYPESAFE_AI_API_KEY即切换为真 Jev 模型。架构总览见 SPEC.md入口在 index.ts。✅ 优化要点清单数清热路径上的每一次网络往返只留 2 次其余全异步能合并的 RPC 就批处理能省掉的参数查询就在启动时一次算好手写最小解码器替代 SDK砍掉业务上不需要的调用同时用基准脚本保证逐位等价发完就走只等 txHash回执和成交晚一块到账也不影响决策节奏用 p50 而不是平均值验收18ms 读盘、100ms 全循环为 300ms 预算留出 3 倍安全垫。【免费下载链接】jev-traderOne AI trade decision every Monad block. Jev on Kuru MON-USDC.项目地址: https://gitcode.com/gh_mirrors/je/jev-trader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表