在 Web3 的世界里,限价单 与 DEX API 已经成为链上交易不可或缺的组件。开发者无论想在前端集成无滑点交换,或是后端批量执行策略,都离不开 Router 合约与代币授权合约的精确调用。本文把各大公链最常用的合约地址一次性列出,并给出面向 智能合约、限价单 API、钱包即服务 场景的落地要点与示例代码。现在,直接把复杂度降到零门槛。
什么是 DEX Router 合约?为什么限价单必须引用它
- Router 合约 = 交易撮合发动机:负责把用户的限价单签名解析成链上执行指令,按指定价格撮合成交。
- 链无关地址:为简化开发,几乎所有 EVM 链共用一条字节码(
0x2ae8947...49F2);只要你把 RPC 切到对应链,签名验证、计算手续费、返回路由,全部一步到位。 - 成本优势:统一地址意味着测试网与主网的部署脚本可以零改动复用。哪怕是跨链迁移,前端只需改动
chainId。
👉 想了解如何一行代码直接调用该 Router 实现的限价单交易吗?
多链 Router 合约地址清单
下列 Router 地址与链网络一一对应,已在主流 DEX API 文档中验证,可安心直连:
- Ethereum ─ Router:0x2ae8947FB81f0AAd5955Baeff9Dcc7779A3e49F2(主网 & Goerli)
- Optimism ─ Router:同上
- Polygon ─ Router:同上
- BNB Chain ─ Router:同上
- OKC ─ Router:同上
- Avalanche C-Chain ─ Router:同上
- Fantom ─ Router:同上
- Arbitrum ─ Router:同上
所有链共享字节码的另一个好处是 审计报告只需读一次。若你在组织内部做过形式化验证,可以直接比对字节码哈希,避免重复工作。
代币授权合约(Approve)地址合集
限价单执行前,钱包必须先向授权合约授予交易额度。下面给出各链的 独家合约地址 —— 请勿混用,否则会出现 “Approve fail” 错:
- Ethereum:0x40aA958dd87FC8305b97f2BA922CDdCa374bcD7f
- Optimism:0x68D6B739D2020067D1e2F713b999dA97E4d54812
- Polygon:0x3B86917369B83a6892f553609F3c2F439C184e31
- BNB Chain:0x2c34A2Fb1d0b4f55de51E1d0bDEfaDDce6b7cDD6
- OKC:0x70cBb871E8f30Fc8Ce23609E9E0Ea87B6b222F58
- Avalanche C-Chain:0x40aA958dd87FC8305b97f2BA922CDdCa374bcD7f
- Fantom:0x70cBb871E8f30Fc8Ce23609E9E0Ea87B6b222F58
- Arbitrum:0x70cBb871E8f30Fc8Ce23609E9E0Ea87B6b222F58
注意:授权合约与 Router 合约是两个独立逻辑。前者管“授权额度”,后者管“撮合”,执行步骤必须 先 Approve → 调用限价单。
限价单 API 基本流程
第 1 步:构造订单结构
{
"tokenIn": "0x...",
"tokenOut": "0x...",
"amountIn": "1000000000000000000",
"price": "3150.55",
"expiry": 1719129600,
"salt": 12345678
}核心关键词:限价单、智能合约、订单签名
第 2 步:离线签名
- 使用 EIP-712 结构签名,避免 gas 浪费。
- 把签名结果作为参数传给 Router 的
executeLimitOrder函数。
第 3 步:上传至 Relayer
DEX API 的 Relayer 节点会广播到 mempool。确认后返回交易哈希。
第 4 步:链上撮合
Router 合约验证:
- 签名是否与链下订单匹配;
- Approve 额度是否足够;
- 价格区间是否优于链上流动池实时价。
👉 想用 Node.js 调试一次完整流程并把耗时降到 1 秒以内?
常见问题 FAQ
Q1:限价单与市价单相比,API 响应会不会慢?
A:在链下签名阶段,二者耗时一致;链上撮合的确需要矿工/验证者确认,通常为 1–12 秒(由 gas price 决定)。为了稳定体验,建议针对高频策略采用 serverless relay + 并行广播。
Q2:我已经调用过一次 Approve,是否每次都要再点?
A:只要设置 approve amount 为 uint(-1) ,后续同一 token 无需重复授权。但若你出于安全考虑不想无限额度,可通过子账户 & 子授权策略控制。
Q3:能不能直接把 Router 合约 fork 到自己网络?
A:可以。Router 源码完全开源,且无专利限制;只要更新 owner、factory 等常量即可。注意在三方审计报告中同步说明新部署地址。
Q4:我发现签名验证一直报错,但订单格式肉眼检查无误?
A:大概率是 salt 采用 number 类型导致溢出。改用 string 的十进制或大整数库即可解决。
示例:const salt = BigInt(Date.now()) % 2n**32n。
Q5:可以多链同时挂单吗?
A:可以。限价单结构中带 chainId 字段,API 端会根据字段自动分发到链对应 Router,无需你额外部署 intrachain relayers。
实战 Demo:从钱包即服务到执行限价单
假设你准备跑一个“价格监控机器人”脚本,每 30 秒扫描 ETH/USDC on Polygon 价差并自动挂限价单。整个流程梳理如下:
- 用 钱包即服务 MPC 服务创建私钥碎片 → API 导出公钥。
- 前端监听价格 WebSocket → 触发下单事件。
后端
/createLimitOrder路由:- 从缓存读取 Router 地址
(Polygon)、“授权合约地址”、“token metadata”。 - 根据风控阈值计算
price、amountIn。 - 构建
order EIP-712→ 签名 → 推送到 Relayer。
- 从缓存读取 Router 地址
- 监听交易回执,更新业务数据库,容错重试多达 3 次。
仅需 200 行左右的 Python 或 Node.js 代码即可完成。这样,开发者仅需专注于策略本身,而非底层合约差异。
小结
- 本文已汇聚 智能合约、限价单、DEX API、钱包即服务、Router 地址、代币授权合约地址 六大关键词的全部要点。
- Router 地址在八大公链保持一致、授权地址链链不同 —— 牢记这两条,可避免 90% 的部署坑。
祝你开发顺利,零撸 gas 跑策略!