Skip to content

DEX 设计

本文档介绍去中心化交易所(DEX)的技术架构设计,涵盖聚合询价、拆单算法、数据同步、高可用等核心模块。


一、概述

1.1 背景

基于链上流动性,提供一套类似中心化交易所的核心交易功能。相比中心化交易所:

对比中心化交易所(CEX)去中心化交易所(DEX)
流程KYC → 转入 → 交易 → 提币连接钱包 → 交易
币对数量有限(需上币审核)更多(池子即币对)
资产托管平台托管用户自持
跑路风险存在不存在

1.2 目标

  • 整体询价超越 1inch(结果和性能两方面)
  • 提供稳定的询价 API 产品
  • 交易成功率达到 99% 以上

二、核心概念

2.1 AMM(自动化做市商)

AMM 是 DEX 的核心交易方式,与传统订单簿模式不同。

恒定乘积做市商(CPMM)x * y = k

示例:池子有 3 个 A 和 9 个 B(k=27),用户用 0.5A 兑换 B:

步骤计算
池中 A 变为 3.5B = 27 / 3.5 = 7.714
用户得到 B9 - 7.714 = 1.286
兑换比例0.5 : 1.286 = 1 : 2.571(原价 1:3)
滑点约 16%

AMM 类型

类型公式代表
恒定乘积(CPMM)x × y = kUniswap V2
恒定总和(CSMM)x + y = k
恒定平均值(CMMM)(x × y × z)^(1/3) = kBalancer
混合型(CFMM)恒定和 + 恒定积结合Curve

2.2 聚合 Swap

聚合某条链上各个 DEX,为用户找到 A→B 兑换的最优路径。

核心优势:通过拆单分散到多个 DEX 获取更优价格。

示例(卖 3 ETH 换 USDT):

方式结果
单一交易所(币安)1×790 + 2×780 = 2350U
聚合 Swap(多所拆分)1×800 + 1×780 + 1×790 = 2370U

聚合器还支持多跳路由:如 ETH→USDT→BTC 可在链上一步完成。

2.3 关键术语

术语说明
颗粒度拆单的最小比例单位(如 5% 颗粒度)
二级拆单一级 10% + 二级 5% 的粒度优化
跳转次数A 兑换 D 的路径步数(如 A→B→D 为 2 跳)
Base 币深度好的主流币/稳定币,作为路由中间币

三、业务架构

3.1 业务数据流转

ChainDEX-BackendClientChainDEX-BackendClient1. 连接钱包2. 授权5. 用户下单6. 组装 calldata 用户签名7. 签名上链3. 封装 calldata 签名上链4. 结果推送8. 结果推送

3.2 询价数据流转

池子深度监听

落库

推送数据

区间池子排序

询价

GRPC

询价算法计算

链上数据

DEX-DTS
数据同步

数据库

DEX-ForCache
前置缓存

DEX-Consult
询价服务

Client

DEX-Rest
API 服务


四、关键设计

4.1 设计约束

约束配置
Base 币数量有限制(非 Base 币种支持直接兑换)
跳转次数线上限制 3 跳
颗粒度线上限制 5%

4.2 协议接入

协议类型代表
类 Uniswap V2SushiSwap, PancakeSwap, Uniswap V2
异构协议Balancer V1/V2, Curve V1, Uniswap V3

需要快速支撑不同协议和不同链的接入。

4.3 性能优化

  • 线程池合理配置
  • 协议算法优化
  • 重复运算前置
  • 准确性和性能之间的均衡选择

4.4 安全性保障

风险点应对
calldata 篡改签名验证
池子数据同步错误异常数据检测
协议翻译错误多重校验
数据幂等性时间 + 块高度控制

4.5 高可用设计

模块方案
任务服务2 台机器高可用
数据同步2 台机器,Kafka rebalance 控制
询价服务2 台机器轮询 + gRPC 负载均衡
前置缓存3 台机器,抢占式任务
API 服务2 台机器高可用

五、架构

5.1 技术选型

层级技术
存储Redis, MySQL
消息队列Kafka, Redisson 队列
配置中心Apollo
链交互Web3j
服务通信Feign, gRPC
监控告警Lark 报警, 系统监控

5.2 核心模块

服务层

计算层

数据层

数据同步模块
链上深度数据入库

路径缓存模块
币种间路径计算

梯度缓存模块
币对深度排序

询价系统模块
SOR 拆单算法

分片计算

协议解析

API 服务

PMM 做市商

Limit Order

跨链交易


六、详细模块设计

6.1 数据同步模块

通过 Kafka 同步链上所有 DEX 的深度数据入库:

  • 数据消费需要进行幂等处理
  • 通过时间和块高度控制历史脏数据入库
  • 支持启动同步加载

6.2 路径缓存模块

缓存两个币种之间所有可能的路径:

  • 缓存主流币、稳定币之间的兑换路径
  • 通过 Base Token路径层级控制缓存大小
  • 添加/删除币种时路径需重新计算
  • Curve 多币种池子(3/4 币种)需严格缓存顺序

6.3 梯度缓存模块

缓存与币对深度相关的数据:

  • 每个 Pair 缓存最优 20 个(可配置)深度池子
  • 池子深度变化时及时刷新

6.4 询价系统模块(SOR 拆单算法)

根据 fromToken 和 toToken 返回最优兑换结果。

扩展功能:

  • 跨链交易:跨链 Swap 整体逻辑
  • PMM(Private Market Maker):做市商主动挂单/撤单,订单内存化方案
  • Limit Order:限价单功能

总结

链上深度数据

数据同步 + 缓存

路径计算 + 梯度排序

SOR 拆单询价

最优兑换路径

组装 Calldata

用户签名上链

DEX 聚合器的核心竞争力在于询价算法的准确性和性能。通过多协议聚合、多级拆单、路径优化,为用户在链上获取最优兑换价格。架构设计上需重点关注数据同步的实时性、询价服务的高可用、以及 calldata 的安全性。