在前文中,我们介绍了DEX合约的简单实现,并对核心功能进行了验证测试,接下来就是上线了。
前端要点:
BrowserProvider
与 Signer
(之前在教程使用过)getReserves()
和 getAmountOut
公式)并展示滑点风险(比如设置 minAmountOut = amountOut * (1 - slippage))前端注意点(非常重要):
前端必须计算
minAmountOut
(根据滑点设置),并提交给链上 swap。上面示例里我们直接 usedminOut
naive 版本演示思路,实际请确保精确的整数 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 删除。