メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
Raydium のプロダクト プログラムは独立したコードベースですが、共有された規約セットに対して設計されています。このページは、その規約の正式なリファレンスです。プロダクト別の章では、規約がどのようにアカウントに実装されるかを説明します。このページでは、規約そのものを説明します。

ここで「共有」が意味すること

コードベース全体を通じて、3 つのレベルの共有が存在します。
  • 規約の共有。 すべてのプログラムは同じ PDA 導出パターン、同じ手数料分割形状、同じオブザーベーション アカウントのアイデアを使用します。ただし、各プログラムはそれぞれ独自のプログラムで、独自のシードを使用して実装します。
  • アカウント共有。 ごく少数のアカウントは、複数のプール間で文字通り同じレコード(CPMM のグローバル オーソリティ PDA、AmmConfig アカウント)です。
  • オフチェーン共有。 1 つの REST API と 1 つの TypeScript SDK がすべての 4 つのプログラムの前面に立ちます。どのプログラムを呼び出すかに関わらず、統合者は 1 つの HTTP ホストと 1 つの NPM パッケージと対話します。
以下の 5 つのプリミティブが、プログラム境界を越えるすべてのものをカバーします。

1. オーソリティ PDA

すべての Raydium プログラムには、そのトークン ヴォルトを所有する PDA が正確に 1 つあります。ユーザーはヴォルト オーソリティを直接保有することはありません。オーソリティ PDA は、資金を引き出すことができる唯一の署名者であり、有効なプログラム命令が署名するよう指示したときのみ署名します。 パターンはプロダクト全体で同一です。シードは異なります。
プログラムオーソリティ PDA シード注記
AMM v4[poolId]プール単位のオーソリティ。v4 のプール単位設計と同じ形状。
CPMM[b"vault_and_lp_mint_auth_seed"]すべての CPMM プール間で共有される単一 PDA。 プール固有のシードなし。
CLMM[b"pool_vault_and_lp_mint_auth_seed"]すべての CLMM プール間で共有される単一 PDA。
Farm v3 / v5 / v6[farmId]ファーム単位。PDA はそのファームのステーキング + リワード ヴォルトを所有します。
LaunchLab[b"vault_auth", launchId]ローンチ単位。卒業前のベース + クォート ヴォルトを所有します。
これにより以下のことが生じます。
  • CPMM と CLMM の場合、オーソリティ PDA はグローバル アカウントです。そのタイプのすべてのプールはそれを使用します。CPMM に CPI している場合、プールごとではなく 1 回必要です。
  • プール単位 / ファーム単位のオーソリティの場合、プール/ファーム ID から PDA を導出します。SDK は getPoolKeys / getFarmKeys でこれを行います。直接統合する場合は、findProgramAddressSync で導出します。
  • ヴォルト所有権は変更できません。 トークン アカウントがオーソリティ PDA を所有者として作成されると、そのプログラムによって呼び出された PDA のみが転送できます。管理者オーバーライドはありません。
プログラムごとの正確なシードと ATA レイアウトについては、products/cpmm/accountsproducts/clmm/accountsproducts/amm-v4/accountsproducts/farm-staking/accountsproducts/launchlab/accounts を参照してください。

2. 管理アカウント設定アカウント

CPMM と CLMM は、AmmConfig と呼ばれる設定アカウント パターンを共有します。これは、小さなグローバル アカウントで、u16 でインデックス付けされ、手数料率とそれがある全体手数料ティアに適用される管理先を保持します。プールは作成時に設定にバインドし、再バインドされません。
// CPMM AmmConfig(省略形 — CLMM バージョンは構造的に似ています)
pub struct AmmConfig {
    pub bump: u8,
    pub disable_create_pool: bool,        // このティアでの新規プール作成をゲート
    pub index: u16,                       // ティア インデックス
    pub trade_fee_rate: u64,              // トレードの手数料に行く部分
    pub protocol_fee_rate: u64,           // トレード手数料のプロトコルへの部分
    pub fund_fee_rate: u64,               // トレード手数料のファンドへの部分
    pub create_pool_fee: u64,             // 1 回限りのプール作成手数料
    pub protocol_owner: Pubkey,           // CollectProtocolFee の署名者
    pub fund_owner: Pubkey,               // CollectFundFee の署名者
    pub padding: [u64; 16],
}
ルール:
  • 手数料ティアはグローバルです。 プールが「これは 0.25% プールです」と言う場合、作成時に trade_fee_rate が 0.25% だった AmmConfig にバインドしていることを意味します。プール単位のレート オーバーライドはありません。
  • 設定は変更できますが、プールは従いません。 設定オーソリティが AmmConfig を編集すると、その設定にバインドされたすべての既存プールは新しいレートを即座に取得します。これはバグではなく機能です。プロトコル レベルの経済的な変更がプール単位のマイグレーションなしに伝播する方法です。
  • disable_create_pool は非推奨レバーです。 手数料ティアが日没すると、プロトコル マルチシグはこのフラグを設定します — 既存プールは動作し続けますが、新しいプールはティアを選択できません。
  • protocol_owner / fund_owner は手数料徴収呼び出しの署名者です。それらをマルチシグに設定することが、手数料引き出しをゲートしています。それらは手数料自体の宛先アドレスではなく、それは同じアカウント上の protocol_fee_destination / fund_fee_destination です。
AMM v4 には AmmConfig がありません。その手数料パラメータはプール単位で、作成時にハードコードされています。Farm と LaunchLab はそれぞれのチャプターでカバーされている独自の同等物(FarmConfigLaunchConfig)を持っています。 誰が何を変更できるかの完全な表は security/admin-and-multisig にあります。現在のユーザー向け手数料分割は ray/protocol-fees にあります。

3. プロトコル・ファンド・クリエイター手数料分割

すべての CPMM と CLMM スワップ手数料は、出ていく際に最大 4 つの宛先に分割されます。
                         total swap fee

              ┌───────────────┼───────────────┬──────────────┐
              ▼               ▼               ▼              ▼
        LP pool side     Protocol         Fund         Creator
        (raises k)       treasury         multisig     (LaunchLab pools)
機械的には:
  1. トレード手数料はプールに蓄積します。 手数料はスワップの入力側から削除され、手数料後の金額が定積乗法に見えます。これが「LP が手数料を獲得する」という意味です。k が上昇し、暗黙の LP トークンの価値ごともそうです。
  2. プロトコル/ファンド/クリエイター部分がその LP 側の蓄積からプール単位のカウンター アカウントに控除されます。 それらはプール状態(protocol_fees_token{0,1}fund_fees_token{0,1} など)に保持されます。誰かが CollectProtocolFee / CollectFundFee / CollectCreatorFee を呼び出すまで。それらはその時までプールのヴォルトを離れません。スワップの観点から見ると、それらはまだ「プール内」です。
  3. 徴収はそれらを移動します。 実行する署名者(AmmConfig 上の protocol_owner / fund_owner キー、または LaunchLab プール向けのローンチ クリエイター)は徴収命令を呼び出し、プログラムはプール ヴォルトから宛先 ATA に転送します。
いくつかの負荷を担う観察:
  • 分割パーセンテージはトレード手数料の端数であって、トレードではありません。 0.25% のトレード手数料と 12% のプロトコル シェアは、プロトコルがトレードの 0.25% × 12% = 0.03% を取得することを意味します。トレードの 12% ではなく。
  • クリエイター手数料は LaunchLab 卒業プールにのみ存在します。 標準 CPMM/CLMM プールには 3 方向分割(LP / プロトコル / ファンド)があります。LaunchLab は、誰がトークンをローンチしたかにルーティングされた 4 番目のスロットを追加します。これは Initialize で設定され、不変です。
  • AMM v4 は 2 方向のみ分割し、プール単位でハードコードされます。ファンド スロットなし、クリエイター スロットなし。
  • ファンド対プロトコル — 両者ともプロトコル財務宛先ですが、異なる署名者と異なる意図される用途があります。protocol は歴史的に操作に資金を提供します。fund はより長期的な財務です。2 つの間の分割それ自体が調整可能です。
特定のレートは reference/fee-comparisonray/protocol-fees にあります。

4. オブザーベーション アカウント(TWAP リング バッファ)

CPMM と CLMM は両方とも、プール単位でオブザーベーション アカウントを維持します。これは、他のコントラクトが操作耐性のある TWAP を導出するために使用できる固定サイズの (timestamp, cumulative_price) サンプルのリング バッファです。
// CPMM ObservationState(省略形)
pub struct ObservationState {
    pub initialized: bool,
    pub observation_index: u16,            // 次に上書きするスロット
    pub pool_id: Pubkey,
    pub observations: [Observation; OBSERVATION_NUM],
    pub padding: [u64; 4],
}

pub struct Observation {
    pub block_timestamp: u64,
    pub cumulative_token_0_price_x32: u128,  // 初期化以降の (price × dt) の合計
    pub cumulative_token_1_price_x32: u128,
}
仕組みは次のとおりです。
  • すべてのスワップが update_observation を呼び出します。 プログラムは現在の価格を読み、前のオブザーベーションからの経過秒数を乗算し、累積カウンターに追加します。新しいエントリは最も古いスロット(リング バッファ スタイル)を上書きします。
  • ウィンドウ上の TWAP = (cumul[end] − cumul[start]) / (timestamp[end] − timestamp[start])。消費者は目的のウィンドウをブラケットする 2 つのオブザーベーションを選んで除算します。
  • Raydium 自体は TWAP を価格付けに使用しません。 AMM 数学は、スポット準備金を直接読みます。オブザーベーション外部性です。Raydium は、他のコントラクトが読めるようにそれらを書く費用を支払います。
  • AMM v4 はオブザーベーション アカウントを持ちません。 これは ObservationState デザインより古い。v4 TWAP を望む統合者は、ログ履歴からオフチェーンで計算する必要があります。
レイアウトの詳細とインデックス数学は products/cpmm/accountsproducts/clmm/accounts にあります。

5. REST API + SDK + IDL

オフチェーン サーフェスは、すべてのプロダクトで使用される単一のトリオです。
  • REST APIhttps://api-v3.raydium.io。すべてのオンチェーン状態のほぼ読み取り専用のインデックス付きビューと引用エンジン。1 つのホスト、1 つのスキーマ。
  • TypeScript SDK — NPM の @raydium-io/raydium-sdk-v2。すべてのプログラムのトランザクションを構築して署名します。見積もり/メタデータ用に API と通信し、署名前の状態更新用に Solana RPC と通信します。
  • IDL レジストリ — 公開されたすべてのプログラムの Anchor IDL は raydium-idl リポジトリに存在します(プログラムごとに 1 つの JSON:CPMM、CLMM、LaunchLab)。TypeScript SDK はこれらの IDL を内部的に消費します。ダウンストリーム Rust / Python クライアントは同じファイルから再生成します。
それぞれの間の境界は明確です。
部分読み込み元書き込み先古さの許容範囲
REST APIインデクサー(チェーン ログを解析)— (統合者向けの読み取り専用)数秒
SDKAPI + RPCトランザクションを構築。ブロードキャストしないなし — 署名前に状態を再取得する必要がある
IDLプログラム ソースプログラム アップグレードごとにバージョン管理
よくある間違いは、REST API 出力をトランザクションに直接与えることです。しないでください。署名しているスロットで Solana RPC から関連するプール/ポジション状態を再取得してください。SDK はファースト パーティのフローに対してこれを自動的に行います。SDK をバイパスする場合は、自分で行う必要があります。 完全なリファレンスは sdk-api/ にあり、IDL サーフェスは特に sdk-api/anchor-idl にあります。

6. インデクサーと価格フィード

REST API は Raydium 独自のインデクサーによって給されます。インデクサーは Solana RPC の fleet からプログラム ログにサブスクライブし、非正規化されたレコードを SQL ストアに書き込みます。統合者に対する 2 つの結果:
  • インデクサーは「クロスプログラム状態を知っている」唯一のもの。 CPMM プールを CLMM の対応にマッピングすること、プログラム バージョン全体で 24 時間ボリューム番号を計算すること、LP ミントに関連付けられたファームを取得することなど、それはすべてインデクサー作業です。プログラム自体はそれを行いません。
  • インデクサーのダウンタイムは API のダウンタイム。 API がスタイルまたは空のデータを返す場合、インデクサーが容疑者です。オンチェーン状態は影響を受けません。独自の RPC と SDK を持つ統合者は、トランザクションを続行できます。
価格フィードは別の懸念事項です。API はほとんどのプール応答で priceUsd フィールドを公開します。これはインデクサーのプール準備金の見方のスナップショットと引用リファレンス価格(共通の基軸として USDC プール)からオフチェーンで計算されます。UI には十分です。オンチェーン オラクルとして使用するのは安全ではありません。そのためにオブザーベーション TWAP を使用してください。

共有されていないこと

新しい読者は多くの場合、存在するより多くの共有を仮定するため、明示的にリストアップする価値があります。
  • プログラムは相互に呼び出しません。 CPMM スワップは決して CLMM または AMM v4 に CPI しません。複数の AMM を構成する唯一のプログラムは、AMM ルーティング プログラムです。それ自体も細いもので、単に各 AMM に順番に CPI を発行します。
  • プログラム間での共有アップグレード オーソリティなし。 オンチェーン プログラムごとに、独自のプログラム アップグレード キー(3/4 マルチシグと 24 時間タイムロック)があります。それらはリンクされていません。
  • ファームと AMM 間での共有状態なし。 ファームは、それがステークするどの LP が CPMM プール、CLMM ポジション NFT ミント、または無関係の SPL トークンのどれであるかを知りません。ファーム プログラムはステーキング ミントを不透明として扱います。
  • オラクル依存なし。 価格はオンチェーン準備金。Pyth/Switchboard フォールバックはありません。AMM はクリアする前にオラクルをチェックしません。

ポインタ

ソース:
  • Raydium SDK v2 — PDA シード、アカウント レイアウト、IDL 定義の情報源。
  • Raydium IDL レジストリ — Anchor IDL。
  • 上記でインラインで引用されたプロダクト単位のアカウント ページ。