本文档介绍去中心化交易所(DEX)的技术架构设计,涵盖聚合询价、拆单算法、数据同步、高可用等核心模块。
基于链上流动性,提供一套类似中心化交易所的核心交易功能。相比中心化交易所:
| 对比 | 中心化交易所(CEX) | 去中心化交易所(DEX) |
|---|---|---|
| 流程 | KYC → 转入 → 交易 → 提币 | 连接钱包 → 交易 |
| 币对数量 | 有限(需上币审核) | 更多(池子即币对) |
| 资产托管 | 平台托管 | 用户自持 |
| 跑路风险 | 存在 | 不存在 |
AMM 是 DEX 的核心交易方式,与传统订单簿模式不同。
恒定乘积做市商(CPMM):x * y = k
示例:池子有 3 个 A 和 9 个 B(k=27),用户用 0.5A 兑换 B:
| 步骤 | 计算 |
|---|---|
| 池中 A 变为 3.5 | B = 27 / 3.5 = 7.714 |
| 用户得到 B | 9 - 7.714 = 1.286 |
| 兑换比例 | 0.5 : 1.286 = 1 : 2.571(原价 1:3) |
| 滑点 | 约 16% |
AMM 类型:
| 类型 | 公式 | 代表 |
|---|---|---|
| 恒定乘积(CPMM) | x × y = k | Uniswap V2 |
| 恒定总和(CSMM) | x + y = k | — |
| 恒定平均值(CMMM) | (x × y × z)^(1/3) = k | Balancer |
| 混合型(CFMM) | 恒定和 + 恒定积结合 | Curve |
聚合某条链上各个 DEX,为用户找到 A→B 兑换的最优路径。
核心优势:通过拆单分散到多个 DEX 获取更优价格。
示例(卖 3 ETH 换 USDT):
| 方式 | 结果 |
|---|---|
| 单一交易所(币安) | 1×790 + 2×780 = 2350U |
| 聚合 Swap(多所拆分) | 1×800 + 1×780 + 1×790 = 2370U |
聚合器还支持多跳路由:如 ETH→USDT→BTC 可在链上一步完成。
| 术语 | 说明 |
|---|---|
| 颗粒度 | 拆单的最小比例单位(如 5% 颗粒度) |
| 二级拆单 | 一级 10% + 二级 5% 的粒度优化 |
| 跳转次数 | A 兑换 D 的路径步数(如 A→B→D 为 2 跳) |
| Base 币 | 深度好的主流币/稳定币,作为路由中间币 |
| 约束 | 配置 |
|---|---|
| Base 币数量 | 有限制(非 Base 币种支持直接兑换) |
| 跳转次数 | 线上限制 3 跳 |
| 颗粒度 | 线上限制 5% |
| 协议类型 | 代表 |
|---|---|
| 类 Uniswap V2 | SushiSwap, PancakeSwap, Uniswap V2 |
| 异构协议 | Balancer V1/V2, Curve V1, Uniswap V3 |
需要快速支撑不同协议和不同链的接入。
| 风险点 | 应对 |
|---|---|
| calldata 篡改 | 签名验证 |
| 池子数据同步错误 | 异常数据检测 |
| 协议翻译错误 | 多重校验 |
| 数据幂等性 | 时间 + 块高度控制 |
| 模块 | 方案 |
|---|---|
| 任务服务 | 2 台机器高可用 |
| 数据同步 | 2 台机器,Kafka rebalance 控制 |
| 询价服务 | 2 台机器轮询 + gRPC 负载均衡 |
| 前置缓存 | 3 台机器,抢占式任务 |
| API 服务 | 2 台机器高可用 |
| 层级 | 技术 |
|---|---|
| 存储 | Redis, MySQL |
| 消息队列 | Kafka, Redisson 队列 |
| 配置中心 | Apollo |
| 链交互 | Web3j |
| 服务通信 | Feign, gRPC |
| 监控告警 | Lark 报警, 系统监控 |
通过 Kafka 同步链上所有 DEX 的深度数据入库:
缓存两个币种之间所有可能的路径:
缓存与币对深度相关的数据:
根据 fromToken 和 toToken 返回最优兑换结果。
扩展功能:
DEX 聚合器的核心竞争力在于询价算法的准确性和性能。通过多协议聚合、多级拆单、路径优化,为用户在链上获取最优兑换价格。架构设计上需重点关注数据同步的实时性、询价服务的高可用、以及 calldata 的安全性。