AMM 蓝图

AMM 蓝图为开发者提供了基于 AMM 的模块化模板,允许开发者实现自己的做市算法,或使用内置的两种算法:UniswapV2 曲线 和 恒定价格算法。以下是代码逻辑和功能的详细解析。

核心功能概述

1. 池管理

  • 支持添加新池、和设置池的流动性。

  • 每个池子可以基于不同的做市算法(如 UniswapV2、BigOrder)。

  • 每个池子的状态都被抽象到 FFP.Pools 内进行单独维护。

2. 订单操作

  • 支持用户通过池子完成交易(如兑换交易)

  • 验证订单输入与输出的有效性。

  • 创建满足池子价格的 Note 票据为订单服务。

3. 结算操作

  • 执行 FFP 结算中心结算请求完成 Note 的最终结算。

  • 维护订单的结算状态(如完成结算、过期、拒绝等)。

  • 自动处理已过期或完成的票据。

4. 做市策略灵活性

  • 使用 AlgoToPool 映射表为池子选择不同的做市算法。

  • 开发者可以基于此框架实现新的做市算法。

代码详解

1. 池管理

创建池

code

代码逻辑:

  • 检查是否已有相同的池子存在。

  • 指定做市算法创建池子。

  • 将池子加入到 FFP.Pools。

池流动性设置

code

代码逻辑:

  • 查找指定池子,并调用池子对象的 updateLiquidity 方法。

  • 更新完成后通知结果。

2. 订单操作

创建订单

code

代码逻辑:

  • 校验输入参数和当前池子状态,池子的 Executing 相当于全局锁,确保池子按照先后顺序结算 Note。

  • 调用 pool.getAmountOut 计算交易的输出。

  • 调用 FFP 协议创建票据,并存储到 FFP.Notes。

票据结算执行

code

FFP 结算中心会主动调用该接口进行票据结算操作。

代码逻辑:

  • 验证票据和池子状态。

  • 调用 validateAmountOut 验证当前结算的票据是否满足 amm 做市价格。

  • 转移票据上指定的资产到 FFP 结算中心进行结算操作。

结算完成通知

code

该方法用于监听 FFP 结算 Note 转移过来的资产或者资产的退款(结算失败)。

代码逻辑:

  • 判断 Note 是否存在。

  • 判断 Note 相关的 pool 是否存在

  • 如果是结算成功,则需要修改 pool 中的做市流动性

  • 更新相关变量。

3. 查询接口

查询 pools

code

该方法返回创建的所有 pool 信息。

查询 Note

code

该方法根据 MakeTx 查询对应的 Note 并返回。

查询价格

code

该方法用于返回实时兑换价格信息。

完整代码

amm.lua
utils.lua
./algo/bigorder.lua
./algo/uniswapv2.lua

开发之前,把以上代码按照路径复制到开发环境即可。

总结

AMM 蓝图通过灵活的架构设计,允许开发者轻松实现和扩展各种 AMM 功能,同时保证交易和流动性管理的高效性。

Last updated

Was this helpful?