第一步:理解需求LP提供流动性,获取收益凭证普通用户参与swap,以币换币我输入多少币,计算能获得多少币?我要获得多少币,需要输入多少币?第二步:计算公式,怎么算呢?流动性不变,进来0.997dx个Token,换出去多少个yToken呢?基础公式:(x0+dx
第一步:理解需求
第二步:计算公式,怎么算呢?
流动性不变,进来0.997dx 个 Token,换出去多少个y Token呢?
# getAmountOut
uint amountInWithFee = amountIn.mul(997);
uint numerator = amountInWithFee.mul(reserveOut);
uint denominator = reserveIn.mul(1000).add(amountInWithFee);
amountOut = numerator / denominator;
第三步:工程实现,怎么使用代码实现我这些功能呢?
第四步:遗留问题
扣的手续费去哪里了?
多个交易对怎么交易,怎么扣手续费?
第一步,用户调用路由合约的swapExactTokensForTokens或swapTokensForExactTokens两类方法;
第二步,用户调用transferFrom将钱转给Pair(Pair也是一个合约,由Factory创建);
第三步,Pair内部依据AMM公式完成交换;
第四步,Pair将交换后的token转给用户;
amountOutMin
参数确保实际输出量 ≥ 用户设定阈值,否则交易回滚。K
值,使 LP Token 增值。lock
修饰符阻止交换过程中重入攻击(如:在 swap
回调中再次调用 swap
)。如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!