st st
547 posts


Amms-rs 是一个用于在 EVM 兼容区块链上与自动化做市商(AMMs)交互的 Rust 工具包。它的前身是 cfmms-rs 也是一个非常知名、非常牛逼的库!
它常用于构建 DEX(去中心化交易所)工具、交易机器人(bots)或套利系统,用于监控 AMM 池子价格、执行模拟交易等操作。
它目前支持 UniswapV2、UniswapV3、Balancer、ERC4626 Vaults 四种协议,当然你可以可以直接 Fork 它魔改来适用自己的程序。
🔶 Amms-rs 主要分为两个模块
▫️state_space 模块,池子 AMM 状态管理负责池发现、同步等工作:
- StateSpaceBuilder-用于配置和状态初始化
- StateSpaceManager-通过 WebSocket 订阅进行持续同
- StateSpace-以地址为键的 AMM 实例哈希映射存 (HashMap)
- StateChangeCache-用于处理链重组状态变更的缓存缓存区
- StateSpaceError-状态管理操作中的错误类
▫️AMM 模块,AMM 抽象层通过 `AutomatedMarketMaker` 特征和 `AMM` 枚举定义通用接口,主要拥有:
- address()-返回池合约地址
- sync_events()-返回状态更新的事件签名
- sync(log: Log)-从事件日志更新池状态
- simulate_swap()-在不修改状态的情况下计算交换输出
- simulate_swap_mut()-计算状态变更后的兑换输出
- tokens()-返回池中的代币地
- calculate_price()-计算两种代币之间的价
🔶 初始化以及同步方法
StateSpaceBuilder 是初始化和配置 amms-rs StateSpace的主入口点,可以设置同步的起始区块号,以及 with_factories() 配置工厂合约同步,with_amms() 直接将 AMM 实例添加到同步,with_filters() 配置过滤器同步,这几个相互之间可以搭配混合适用。
StateSpaceManager 可以在新区块到达时进行状态更新,原理是 subscribe() 创建与 RPC 节点的 WebSocket 连接 -> 监听区块 -> 匹配池子的变更签名 -> 更新 AMM 状态
其中 StateSpace.sync() 是状态同步的核心,输入: [Log] - 当前区块的事件日志数组,输出: Result, StateSpaceError> - 获取更新后的 AMM 地址
🔶 模拟交易
AutomatedMarketMaker::simulate_swap() 方法在本地计算输出金额而不执行交易,这非常适用于套利检测、价格报价和 MEV 策略!因为 amms-rs 拥有强大的 AMM 协议实现。
可以直接计算输出数量、生成 Calldata 等
以上内容是自己炒冷饭,为重新梳理流程的个人复习总结,有问题各位大佬请指出!



中文



















