Skip to main content
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
Stable AMM 是独立的程序;其池端账户结构类似于 AMM v4(AmmInfo、金库、权限),并额外包含一个存储查找表的 ModelDataInfo 账户。本页涵盖两者。

清单

纯 AMM。 Stable AMM 在自己的金库中持有所有流动性,不依赖 OpenBook。它在早期生命周期中曾有 OpenBook 做市路径,但该路径已多年处于休眠状态,2026-06-22 升级移除了遗留代码。因此下面的 serum_* 市场账户和 amm_open_orders遗留的:它们可能仍会出现在旧布局交易中以保持向后兼容性,但程序不验证或读取它们,新布局指令完全省略它们。
活跃清单现在完全是池端的:

AmmInfo

根状态账户。布局几乎与 AMM v4 相同——池参数、小数位、费用、金库/铸币引用——加上一个新增项:指向查找表的 model_data_key 字段。
关键集成方面的字段:
  • model_data_key — 查找表的地址。必须传递给每条指令。
  • fees — 与 AMM v4 相同的结构。默认为 0.25% 交易费,0.22% LP / 0.03% 协议分割。
  • coin_vaultpc_vault — 池的金库。
  • status — 位掩码,控制 swap/deposit/withdraw/crank 是否启用。
  • out_put.need_take_pnl_* — 由 WithdrawPnl 清扫。

ModelDataInfo

查找表。价格/数量点的大型稀疏数组。
生命周期: 构建这些表的设置指令——InitModelData(创建账户)和 UpdateModelData(填充元素,设置 valid_data_count)——在 2026-06-22 升级中被移除。现有池上的表现在是固定的。在运行时,剩余的可调用指令仍然使用它们:
  • Swap / deposit / withdraw 调用查找函数,在 elements[0..valid_data_count] 内进行二分搜索和插值。

DataElement

表中的原子条目。必须排序(x 升序,y 降序,price 升序)以使二分搜索正常工作。
填充表时,管理员指定这些预缩放值。程序不在链上验证排序顺序(为了速度),所以排序错误会导致报价不正确。

权限和金库

与 AMM v4 相同:
  • amm_authority 是使用种子 ["amm authority"] 派生的单个程序范围 PDA。它拥有所有池金库并签署它们的操作。
  • 金库是 SPL Token 账户,其所有者是 amm_authority,而不是 ATA。
不支持 Token-2022。

状态位掩码

与 AMM v4 相同。控制 swap/deposit/withdraw/crank 是否启用。

费用和 PnL 跟踪

out_put 结构跟踪:
  • need_take_pnl_coinneed_take_pnl_pc — 已累积但尚未清扫的协议费。WithdrawPnl 将这些移出。
  • swap_coin_in_amountswap_pc_in_amount 等 — 分析计数器。
池资产计算(解耦后)。 因为不再有资金作为 OpenBook 未平仓订单托管,池的总资产现在完全从金库计算:
从 OpenOrders 余额重建池价值的索引器和报价代码必须删除该项。

账户大小

ModelDataInfo 很大(约 1.2 MB,因为 50,000 个元素 × 每个元素 24 字节)。这就是为什么创建 Stable 池需要显式租金和账户预分配。Raydium SDK 和工具透明地处理这个问题;集成方很少需要手动分配。

从头派生账户

与 AMM v4 一样,Stable AMM 使用有种子的密钥(不是纯 PDA)。规范池身份通过以下方式派生:
类似地用于金库、LP 铸币、目标订单等。实际上,使用 SDK 或 API 来获取预计算的地址。

在哪里阅读什么

来源: