首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《纸上谈兵·solidity》第 36 课:去中心化交易所(DEX)实战 — 上线

《纸上谈兵·solidity》第 36 课:去中心化交易所(DEX)实战 — 上线

原创
作者头像
孟斯特
发布2025-09-20 10:15:19
发布2025-09-20 10:15:19
1480
举报
文章被收录于专栏:EthereumEthereum

前文中,我们介绍了DEX合约的简单实现,并对核心功能进行了验证测试,接下来就是上线了。


6. 前端

前端要点:

  • 用 ethers v6 的 BrowserProviderSigner(之前在教程使用过)
  • 在发起 swap 之前先估算 amountOut(用 on-chain getReserves()getAmountOut 公式)并展示滑点风险(比如设置 minAmountOut = amountOut * (1 - slippage))
  • 对用户友好显示价格、预估滑点、手续费和池子深度

前端注意点(非常重要):

前端必须计算 minAmountOut(根据滑点设置),并提交给链上 swap。上面示例里我们直接 used minOut naive 版本演示思路,实际请确保精确的整数 math 与 token decimals。 显示 price impactpool depth(reserves)和 expected fee,并在用户确认对话框里再次提醒。 对 ERC20 的 decimals 要按 token 实际值处理(用 token.decimals() RPC 调用)。 使用 estimateGasgasLimit 预估,防止交易失败。


7. 安全与审计要点

  1. 滑点与前端保护:强制用户设置 slippage tolerance 与显示 price impact,避免被链上前端 MEV 抽走。
  2. 闪电贷 & 价格操控:任何基于 on-chain 单一价格的协议都易受闪电贷操控;在更复杂场景用 TWAP 或外部预言机。
  3. 重入:在 Pair 的 swapmintburn 函数使用 CEI 与 nonReentrant(示例中有)。
  4. 整数精度:谨慎使用 uint112/uint256,并在 math 中避免精度误差。
  5. ERC20 不返 bool 问题:使用 SafeERC20
  6. 初始流动性:锁定初始流动性(prevent front-running initial add)并用合理机制避免被人“擦除”初始 k。
  7. 检查 overflow/underflow:Solidity ^0.8 自带检查,但仍要注意乘法可能溢出,尽量用 uint256
  8. 权限与升级:生产环境中 router/factory/feeTo 等应当由治理(多签)管理;升级合约必须受多签或 timelock 控制。
  9. 广泛测试:包含大量 fuzz 测试(Foundry fuzz)、Slither 静态检查、Echidna 模糊测试。

8. 练习题

基础练习

  1. 实现 getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) 并在 Router 中使用,写测试确认输出一致性。
  2. SimplePair 中的 mint / burn 做得更严谨:LPToken 的 transferFrom/mint/burn 按 UniswapV2 的逻辑实现(包括 MINIMUM_LIQUIDITY)。

进阶练习

  1. 在 Pair 中加入 kLast 用于 fee-on-transfer 模式(Uniswap 的 feeTo),并实现 collectFees
  2. 实现 Router 的 swapExactTokensForTokensSupportingFeeOnTransferTokens 来支持有转账手续费(token tax) 的代币。

高级练习

  1. 实现多跳 Router(getAmountsOutswapExactTokensForTokens 支持 path[])。
  2. 把 Pair 改为可升级代理(注意升级也要受到多签控制),并写出升级流程测试。
  3. 给 Pair 添加 TWAP oracle(用累加器技术记录 price0CumulativeLast/price1CumulativeLast),并写出计算 TWAP 的方法与测试。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 6. 前端
  • 7. 安全与审计要点
  • 8. 练习题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档