自定义做市算法
AMM 蓝图的模块化设计允许开发者通过实现核心的 Pool 实例方法来定义和扩展自己的做市算法。这种设计定义了一个通用的接口,使不同的算法可以无缝接入到 AMM 系统中。
接口
AMM 自定义算法必须实现的接口:
Pool.new: 初始化 Pool 实例。
Pool:balances: 返回池中资产余额。
Pool:Info: 返回池的元信息。
Pool:updateLiquidity: 更新池的流动性。
Pool:updateAfterSwap: 更新 Swap 之后池中输入或输出资产的余额。
Pool:getAmountOut: 计算给定输入资产数量对应的输出资产数量。
开发者需要确保实现以上接口,满足 AMM 蓝图的调用约定。
以下通过解析 BigOrder 做市算法的实现,帮助开发者更直观地理解如何开发自定义的做市算法。
BigOrder 做市算法解析
BigOrder 是一个简单的 AMM 做市算法实现,它基于指定的输入资产和输出资产的固定比率来进行兑换。
该算法使用场景如下:
例如,某用户希望以 20 USDC 的价格卖出 10,000 个 AR。如果直接在 DEX 交易所进行 Swap,可能因流动性不足导致滑点较大。为避免这种情况,该用户可以部署一个基于 BigOrder 算法的 AMM Agent,并设置 tokenIn 为 10,000 AR,tokenOut 为 200,000 USDC。这样,Agent 将以设定的兑换比率接入 FFP 进行撮合交易,相当于为 FFP 提供了一笔 10,000 AR 的流动性。当 FFP 中出现购买 AR 且符合价格匹配的挂单时,该 Agent 就能自动进行吃单成交。Agent 会持续的在 FFP 中进行吃单,知道 10,000 AR 被兑换完成为止。
代码解析如下:
1. Pool.new
用于初始化一个新的 BigOrder 池实例。
接收初始化参数如下:
tokenIn 和 tokenOut 是输入和输出资产类型。
amountIn 和 amountOut 用于指定兑换比率。
balancesTokenIn 和 balancesTokenOut 用于记录资产余额。
2. Pool:balances
用于返回池子中当前两种资产的余额。
3. Pool:Info
返回池的元信息。
4. Pool:updateLiquidity
该算法不需要更新流动性池信息。
5. Pool:updateAfterSwap
在完成一笔交易后更新池内的资产余额。
6: Pool:getAmountOut
根据输入资产类型和数量,计算可兑换的输出资产数量。
基于固定比率的公式:
完整代码
总结
BigOrder 是一种简单易用的做市算法,其实现逻辑简单清晰,所以非常适合用来例举 AMM 蓝图的自定义实现做市算法。开发者可以参考 BigOrder 实现更多的做市算法,比如 Uniswap V2 V3 做市曲线算法。
Last updated
Was this helpful?