Solana 链上 AMM 深度解析:Solana 构建者的 Raydium 见解

Raydium 是 Solana 链上的一个 DeFi 应用,它通过集成自动做市商(AMM)与 OpenBook(前身 Serum)的中央限价订单簿(CLOB),实现了一种混合模型。其核心机制包括使用斐波那契数列进行流动性分配,优化交易价格和滑点,并允许用户进行无需许可的池子创建。

Raydium

介绍

Raydium 是一个 DeFi 应用,它允许交易者以无需信任的方式将一种 Token 兑换为另一种 Token。 它是 Solana 上早期进行交易的自动化做市商之一(尽管不是第一个)。

自动化做市商是订单簿的替代方案,假设读者已经熟悉订单簿。

AMM 的工作原理

自动化做市商在池子(智能合约)中持有两种 Token(Token X 和 Token Y)。它允许任何人从池子中提取 Token X,但他们必须存入一定数量的 Token Y,以便池子中资产的“总额”不减少,其中我们将“总额”视为两种资产数量的乘积。

AMM 公式

这里 x′ 和 y′ 是交易后池子的 Token 余额,x 和 y 是交易前池子的 Token 余额。

这保证了池子的资产持有量只能保持不变或增加。大多数池子都会收取一定费用。余额的乘积不仅应该增加,而且至少应该增加一定数量以支付费用。

资产由 流动性提供者 提供给池子,他们收到所谓的 LP Token 来代表他们在池子中的份额。

AMM 的优点

在 AMM 中,价格发现是自动的。它由池子中资产的比例决定。具体来说,如果我们有 Token x 和 Token y,价格的确定方式如下:

AMM 的价格发现

y 的价格发现也是如此。具体来说,放入池子中的资产 x 越多,它就越“丰富”,x 的价格就会下降。

无需等待合适的“买入”或“卖出”订单出现。它总是存在。如果 AMM 中的价格与另一个交易所的价格不匹配,那么交易者将套利差价,使价格恢复平衡。

我们应该强调,这是“现货”或“边际”价格。如果你购买任何数量的 x,你支付的实际价格将比此计算结果更差。

AMM 的缺点

即使是小额订单也会影响 AMM 中的价格。

流动性提供者无法控制其资产的售价,并且会遭受无常损失。

Raydium AMM

Raydium AMM 于 2021 年推出,是 Solana 区块链上一个关键的去中心化金融 (DeFi) 协议,以其创新的混合模型而闻名,该模型将自动化做市商 (AMM) 与 OpenBook(前身为 Serum)的中心限价订单簿 (CLOB) 相结合。

Raydium 池子兑换

与仅依赖池子储备的 Uniswap 等传统 AMM 不同,Raydium 与 OpenBook 的集成允许流动性提供者 (LP) 利用更广泛的订单流,从而减少滑点并提高资本效率。 主要功能包括:

  • 无需许可的池子:任何人都可以为任何 Token 对创建池子,从而促进创新。
  • 收益机会:LP 赚取交易费用,并且可以参与农场或使用 RAY Token 进行质押。
  • 最佳价格兑换:一项评估 AMM 池子与 OpenBook 以获得最佳交易执行的功能。

自成立以来,Raydium 在 Solana 中推动了大量的流动性,支持新 Token 上市的 AcceleRaytor 启动板和激励流动性供应的无需许可的农场等功能。 它的采用突显了其在推动 Solana DeFi 增长方面的作用。

Raydium 高级兑换流程

本分析深入探讨 Raydium 的技术架构、指令流程、基于斐波那契的流动性分配等独特功能以及开发人员的注意事项,这些都来自官方文档、二手来源和可用的开源代码。

高级架构

Raydium AMM 在 Solana 上运行,利用其基于账户的模型来管理状态和执行指令。 该架构围绕以下内容展开:

  • 池子账户:存储 Token 对的流动性,维持恒定乘积公式。

恒定乘积公式

  • 用户账户:处理用户 Token 余额以进行兑换和提供流动性。
  • 授权账户:程序派生地址 (PDA),用于安全地管理池子操作。
  • OpenBook 集成:将池子链接到 OpenBook 市场以实现共享流动性。

指令流程包括:

  1. 初始化:设置包含 Token 对和参数的池子。
  2. 流动性提供:用户存入 Token,接收 LP Token。
  3. 兑换:Token在池子内交换或通过 OpenBook 路由。
  4. 移除流动性:LP 销毁 LP Token 以提取其份额。

Raydium 的混合模型在以下方面表现出色:当不存在直接池子或有更好的定价可用时,它能够通过 OpenBook 路由交易,如Raydium FAQ 中所述。

核心机制深入研究

Raydium 的 AMM 程序用 Rust 实现,包含以下关键文件:

  • entrypoint.rs:指令处理的程序入口点。
  • instruction.rs:定义 AMMInstruction 枚举,包括 SwapBaseIn、SwapBaseOut 和 MonitorStep。
  • processor.rs:包含执行指令的逻辑,例如兑换计算。
  • state.rs:管理池子状态和帐户的数据结构。
  • error.rs:处理特定于程序的错误。
  • math.rs:包括数学实用程序,特别是斐波那契数列生成器。

关键账户

每个 Raydium 池子都依赖于多个帐户:

这些账户确保安全且隔离的操作,PDA 最大程度地降低了未经授权的访问风险。

指令流

Raydium 的指令在 instructions.rs 中定义,包括:

  • Initialize2:设置一个池子,创建帐户并链接到 OpenBook 市场。 预计有 14 个账户,包括 AMM 状态和金库。
  • Deposit:允许 LP 添加 Token,并根据池子储备铸造 LP Token。 需要 14-15 个帐户。
  • Withdraw:允许 LP 销毁 LP Token 并提取 Token。 预计有 20-23 个帐户。
  • SwapBaseIn:兑换指定的输入量,预计有 17-18 个帐户。 使用 amount_in 和 minimum_amount_out。
  • SwapBaseOut:兑换指定的输出量,预计有 17-18 个帐户。 使用 max_amount_in 和 amount_out。
  • MonitorStep:管理 OpenBook 订单,使用 plan_order_limit 和 place_order_limit 等参数。

Raydium 资金转移流程

processor.rs 文件实现了这些指令,验证帐户并执行逻辑。 例如,process_swap_base_in 使用恒定乘积公式计算输出,并根据费用进行调整(通常为 0.25%,其中 0.22% 给 LP,0.03% 用于 RAY 回购)。

兑换机制

兑换遵循恒定乘积公式:

Raydium 使用的恒定乘积公式

基本性质成立:储备的乘积在交易前后必须保持不变。

假设一个 SOL-USDC 池子有:

  • 1,000 SOL (reserve_in)
  • 100,000 USDC (reserve_out)
  • 你要兑换 10 SOL (input_amount)

扣除费用,并通过用户指定的容差来管理滑点。 这篇 Medium 文章 详细介绍了一个 SOL-USDC 兑换的 TypeScript 示例。

Raydium 的最佳价格兑换功能(可能在链下)会将 AMM 池子价格与 OpenBook 的订单簿进行比较。

如果 OpenBook 提供更好的价格(例如,通过市场订单匹配现有的限价订单),则交易可能会路由到那里。 这是从 Raydium FAQ 和 Decoding Raydium Swaps 中推断出来的,它们指出当不存在直接池子或为了更好的执行而通过 OpenBook 路由。

OpenBook 集成

Raydium 的突出特点是其向 OpenBook 提供流动性,使用斐波那契数列来下达限价订单。 math.rs 文件包含一个生成序列的 fibonacci 方法(例如,0、1、2、3、5、8、13)。 这些数字可能决定价格水平(例如,与市场价格的 23.6%、38.2% 的偏差)或订单规模, 从而确保当前价格附近的价差较小,而更广泛的价差处具有更深的流动性。 MonitorStep 指令管理这些订单,根据池子储备对其进行调整,如 Raydium AMM 仓库中所述。

Raydium 白皮书详细介绍了这种方法,该方法提高了资本效率并减少了滑点,从而将 Raydium 与传统的 AMM 区分开来。

独特的实施细节

  • 斐波那契流动性分配:通过在斐波那契导出的价格水平上放置限价订单,Raydium 优化了流动性深度,从而平衡了小额交易的窄价差和大额交易的支持。
  • 最佳价格兑换:可能通过前端或交易 API 实现,此功能评估 AMM 和 OpenBook 价格,从而路由交易以实现最佳执行。
  • 无需许可的设计:支持任何人创建池子和农场,Burn & Earn 计划允许项目在索取费用的同时锁定流动性。

斐波那契流动性分配

斐波那契流动性分配 用于优化 OpenBook(前身为 Serum)上的流动性,OpenBook 是一个中心限价订单簿 (CLOB)。 这种方法包括在从斐波那契比率得出的价格水平上下达限价订单,从而平衡了小额交易的窄价差和大额交易的更深流动性。 下面,我们将探讨这种机制的工作原理以及它如何在 Raydium 的智能合约中实现。

什么是斐波那契流动性分配?

斐波那契流动性分配利用斐波那契数列的数学属性——斐波那契数列是一系列数字,其中每个数字都是前两个数字之和(例如,0、1、1、2、3、5、8 等)。

从这个序列中,得出特定的比率(例如,23.6%、38.2%、50%、61.8%),这些比率通常用于金融市场以识别关键的支撑位和阻力位。

Raydium 应用这些比率在 OpenBook 上围绕当前市场价格策略性地下达买入和卖出限价订单。

它如何优化流动性

  • 窄价差:较小的订单放置在更接近当前价格的位置(例如,高于或低于 23.6%),从而确保小额交易的低成本交易。
  • 大额交易支持:较大的订单放置在更远的位置(例如,高于或低于 38.2% 或 61.8%),从而提供更深的流动性以吸收更大的交易,而不会导致大幅价格波动。

例如,如果 Token 对(例如 SOL/USDC)的当前价格为 100 美元:

  • 买入订单:放置在 76.4 美元(低于 23.6%)、61.8 美元(低于 38.2%)等。
  • 卖出订单:放置在 123.6 美元(高于 23.6%)、138.2 美元(高于 38.2%)等。

斐波那契水平的样子图示

这会创建一个订单网格,就像一个流动性“安全网”,有效地支持频繁的小额交易和偶尔的大额交易。

它在智能合约中如何工作

智能合约工作流程

此序列图概述了智能合约的工作流程。 它从用户或系统触发 MonitorStep 指令开始。 Raydium AMM 程序获取当前价格,使用 math.rs 计算斐波那契价格水平,根据 processor.rs 中的池子储备确定订单规模,并将订单提交给 OpenBook。 确认后,池子状态将更新,从而完成该流程。

1. math.rs 中的斐波那契比率计算

math.rs 文件负责斐波那契流动性分配的数学基础:

  • 斐波那契数列生成:一个函数(例如,斐波那契)生成一个数列,直到指定的级别。
  • 比率推导:计算常见的斐波那契比率(23.6%、38.2%、50%、61.8%),通常基于黄金比率(φ ≈ 1.618)。 例如:
    • 23.6% = 1 — (1/φ²)
    • 38.2% = 1 — (1/φ³)
    • 61.8% = 1/φ
  • 价格水平计算:这些比率应用于当前市场价格,以确定限价订单的准确价格点。 对于 100 美元的价格,计算可能如下所示:
    • 以低于 23.6% 的价格买入:100 美元 × (1–0.236) = 76.4 美元
    • 以高于 23.6% 的价格卖出:100 美元 × (1 + 0.236) = 123.6 美元

此文件提供了合约的其他部分所依赖的核心实用程序函数。

2. processor.rs 中的订单放置和逻辑

processor.rs 文件包含执行斐波那契策略的逻辑:

  • 当前价格确定:处理器获取当前的池子价格,该价格来自 AMM 池子中 Token 对的储备(例如,使用针对 OpenBook 集成调整的恒定乘积公式)。
  • 订单放置:使用来自 math.rs 的斐波那契比率,它计算价格水平并在 OpenBook 上下达限价订单:
    • 买入订单:按斐波那契水平放置在当前价格以下。
    • 卖出订单:按相应的水平放置在当前价格以上。
  • 订单规模确定:每个订单的规模是根据池子的流动性和所需的深度确定的:
    • 当前价格附近的小订单,以实现窄价差。
    • 更远的大订单,以实现更深的流动性。
  • 与 OpenBook 的交互:处理器与 OpenBook 的市场程序交互,以提交这些限价订单,从而将 AMM 池子的流动性链接到 CLOB。

3. instruction.rs 中通过 MonitorStep 进行的动态调整

instruction.rs 文件定义了 MonitorStep 指令,该指令是维护斐波那契订单网格的关键:

  • 目的:根据市场状况和池子储备定期调整限价订单的放置和规模。

流程

  1. 检查池子储备:评估 Raydium 池子中的当前 Token 余额。
  2. 重新计算价格水平:如果市场价格发生变化,请使用 math.rs 更新斐波那契导出的价格点。
  3. 更新订单:取消过时的订单并在 OpenBook 上下达新订单,从而确保流动性分配与当前价格和储备水平保持一致。
  • 参数:包括 plan_order_limit(最大计划订单)和 place_order_limit(每个步骤放置的最大订单数)等设置,以控制调整范围。

这种动态调整确保了流动性在价格波动时保持最佳状态。

4. state.rs 中的状态管理

state.rs 文件跟踪池子的状态,这对于斐波那契逻辑至关重要:

  • 存储的数据:包括每个 Token 的储备量、OpenBook 市场 ID,以及可能的当前订单网格状态。
  • 用法:为 processor.rs 中的价格计算和订单调整提供输入数据(例如,储备)。

实施示例

让我们来看一个简化的场景:

  • 当前价格:100 美元(从池子储备计算得出)。
  • 斐波那契水平:使用 23.6% 和 38.2%。
  • 智能合约步骤
  1. math.rs:计算:
    • 以 76.4 美元买入(100 美元 × 0.764)。
    • 以 123.6 美元卖出(100 美元 × 1.236)。
    • 以 61.8 美元买入(100 美元 × 0.618)。
    • 以 138.2 美元卖出(100 美元 × 1.382)。

2. processor.rs:在 OpenBook 上下达限价订单:

  • 以 76.4 美元买入 10 SOL。
  • 以 123.6 美元卖出 10 SOL。
  • 以 61.8 美元买入 20 SOL(更大的规模,以实现更深的流动性)。
  • 以 138.2 美元卖出 20 SOL。
  • MonitorStep:在价格转移到 105 美元后,重新计算并调整订单(例如,以 80.2 美元买入,以 129.8 美元卖出)。

此网格确保流动性在战略水平上可用,从而适应市场变化。

为什么它很重要

通过使用斐波那契导出的价格水平,Raydium 实现了:

  • 效率:窄价差降低了用户的交易成本。
  • 稳定性:更深的流动性可防止大额交易对价格产生重大影响。
  • 创新:以数学上优雅的方式结合了 AMM 和 CLOB 机制,使其与其他 DeFi 协议区分开来。

结论

Raydium AMM 是一款复杂的 DeFi 协议,它将 AMM 效率与 CLOB 深度相结合,从而利用了 Solana 的速度和低成本。 其基于斐波那契的流动性分配、最佳价格兑换和无需许可的设计使其与众不同,但有限的代码透明度需要谨慎。 鼓励开发人员探索 Raydium AMM 仓库和 Raydium SDK,以构建创新的 DeFi 应用程序。

  • 原文链接: extremelysunnyyk.medium....
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Yong kang Chia
Yong kang Chia
江湖只有他的大名,没有他的介绍。