
在前文中,我们介绍了DEX合约的简单实现,并对核心功能进行了验证测试,接下来就是上线了。
前端要点:
BrowserProvider 与 Signer(之前在教程使用过)getReserves() 和 getAmountOut 公式)并展示滑点风险(比如设置 minAmountOut = amountOut * (1 - slippage))前端注意点(非常重要):
前端必须计算
minAmountOut(根据滑点设置),并提交给链上 swap。上面示例里我们直接 usedminOutnaive 版本演示思路,实际请确保精确的整数 math 与 token decimals。 显示price impact、pool depth(reserves)和expected fee,并在用户确认对话框里再次提醒。 对 ERC20 的decimals要按 token 实际值处理(用token.decimals()RPC 调用)。 使用estimateGas与gasLimit预估,防止交易失败。
swap、mint、burn 函数使用 CEI 与 nonReentrant(示例中有)。uint112/uint256,并在 math 中避免精度误差。SafeERC20。uint256。基础练习
getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) 并在 Router 中使用,写测试确认输出一致性。SimplePair 中的 mint / burn 做得更严谨:LPToken 的 transferFrom/mint/burn 按 UniswapV2 的逻辑实现(包括 MINIMUM_LIQUIDITY)。进阶练习
kLast 用于 fee-on-transfer 模式(Uniswap 的 feeTo),并实现 collectFees。swapExactTokensForTokensSupportingFeeOnTransferTokens 来支持有转账手续费(token tax) 的代币。高级练习
getAmountsOut、swapExactTokensForTokens 支持 path[])。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。