このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
2026-07 プログラムアップグレード以降、AMM v4 の OpenBook / Serum 依存関係は削除されました。レガシー v1 の
SwapBaseIn / SwapBaseOut、Deposit、Withdraw 命令は古いアカウントレイアウトを保持しており、後方互換性のためにマーケットアカウントは古い位置で受け入れられますが、検証または使用されなくなりました(CPI は発行されません)。新しい統合では V2 スワップエントリポイントを使用してください。これらはマーケットアカウントを完全に省略します。いくつかの命令は削除され、リバートするようになりました。変更ログエントリを参照してください。以下のアカウントリストは Raydium SDK のフィールド名を使用しています。基礎となる IDL は時々 serum_* プレフィックスを使用します。2026-09 プログラムアップグレードでは、1 つの管理命令 WithdrawExcessLamports(タグ 18)が追加され、CreateConfigAccount からレント sysvar が削除されました。トレーダーまたは LP が呼び出すすべてのものは変わりません。2026-09-09 変更ログエントリを参照してください。命令インベントリ
SDK はユーザー向け命令のビルダーのみを公開します。メンテナンス命令は通常、Raydium キーパーによって呼び出されます。
削除 / 呼び出し不可(クライアントビルダーが削除されました):
Initialize(タグ 0、Initialize2 を使用)、MonitorStep(2)、MigrateToOpenBook(5)、WithdrawSrm(8)、PreInitialize(10、Initialize2 を使用)、SimulateInfo(12)、AdminCancelOrders(13)。
これらのタグの 1 つを含むトランザクションは失敗します。プログラムは命令を実行しません。7 つすべてを処理するエラーパスではなく、削除されたものとして扱ってください。
Initialize2
既存の OpenBook マーケットにバインドされた新しい AMM v4 プールをブートストラップします。
引数
W、署名者 S)
受け付けられる 2 つのレイアウト。 上記の 19 アカウントのリストが推奨されるものです。後方互換性の
ために、プログラムは 21 アカウントのレガシー レイアウトも読み取ります。これは位置 7 に無視される
amm_open_orders を、位置 16 に無視される market_program を挿入したもので — リポジトリ内の
initialize2 命令ビルダーが今も出力しているのはこちらです。それ以外の長さはレガシー レイアウトに
対して位置的に解析され、失敗します。- クリエーターにミントされる LP =
sqrt(init_coin_amount × init_pc_amount) − 10^coin_mint.decimals。LP のデシマルはcoin_mint.decimalsと等しいため、差し引かれる量はちょうど LP トークン 1 枚分です。それは決してミントされず、永久に流通から外れます。sqrt(...)がそれを下回る場合、命令はInitLpAmountTooLessで失敗します。 AmmInfo.lp_amountはsqrt(...)の全額を格納し、ミントされた量では ありません — したがってlp_mint.supplyはamm.lp_amountより永久に LP トークン 1 枚分だけ小さくなります。すべての比例計算はamm.lp_amountを使用します。- OpenBook オーダーは投稿されません(オーダーブック グリッドは削除されました)。
AmmInfo.marketはスロット 15 で渡されたアカウントを記録しますが、AmmInfo.open_ordersとAmmInfo.market_programはどちらもPubkey::default()として書き込まれ、coin_lot_size/pc_lot_size/min_sizeは0に初期化されます。21 アカウントのレガシー レイアウトでは、余分なamm_open_ordersとmarket_programのアカウントは読み取られて破棄されます。
InvalidCoinMint(coin と pc のミントが同一)、InvalidConfigAccount(誤った amm_config PDA)、InvalidFee(誤ったプール作成手数料の宛先)、InvalidProgramAddress(誤った amm_authority または誤った nonce)、RepeatCreateAmm(このマーケットのプールが既に存在する)、InitLpAmountTooLess、InvalidSupply(いずれかの init 量が 0、または LP ミントに既に供給がある)、AlreadyInUse。
Deposit
リクイディティを追加します。
引数
計算 — 標準的な按分。プールの有効リザーブ(ボルト + オンブック)を使用して、SDK は指定された LP 量をもたらす coin/pc ペアを計算し、
max_* に対してチェックします。どちらかの側がキャップを超える場合、ExceededSlippage でリバートします。
Withdraw
LP をバーン、両側を受け取ります。
引数
OpenBook からのセットル手順はもはやありません — 比例計算はボルト残高を直接使用します。
SwapBaseIn
正確な入力スワップ。常にAMM パススワップです(OpenBook マッチングを通じてルーティングされません)。
新しいコードでは V2 バリアントを使用してください。 AMM v4 の OpenBook 依存関係が削除されたため、V1 エントリポイント(
SwapBaseIn、SwapBaseOut)は引き続き完全な 17 アカウントリスト(またはオプションのターゲットオーダーアカウント付きで 18)を期待しますが、OpenBook/マーケットアカウントは位置的に受け入れられ、無視されます — 検証されず、CPI は発行されません。間違ったアカウント数を渡すと、引き続き WrongAccountsNumber でリバートしますが、マーケットアカウント内容はもはやチェックされません。新しい統合では SwapBaseInV2 / SwapBaseOutV2 を使用してください。これらはより小さなアカウントリストを取り、今日の正規実行パスを表します。V1 フォームは完全性のため、および既存のオンチェーントランザクションを読むためにここに記載されています。
計算 —
products/amm-v4/math を参照してください。
前提条件
AmmStatus::from_u64(amm.status).swap_permission()が true であること — すなわちstatusが1(Initialized)、6(SwapOnly)または7(WaitingTrade)であること。statusはビットマスクではなく列挙値です。products/amm-v4/accountsを参照してください。amm.state_data.pool_open_time <= now。amount_in > 0。user_source_token_accountは少なくともamount_inを保有しています。
- ユーザーはソーストークンの
amount_inを失い、デストトークンのamount_out ≥ minimum_amount_outを獲得します。 - スワップ手数料はボルトに残り、不変量
kを上昇させます。need_take_pnl_*カウンターはスワップでは 変更されません — プロトコル PnL は、次のDeposit、WithdrawまたはWithdrawPnlの際にkの差分から再計算されます(Processor::calc_take_pnl)。 - 注記:
state_data.swap_*_in_amount/swap_*_out_amount分析カウンターは更新されなくなりました — それらの値は凍結されています。ボリューム分析にはトレードログを使用してください。
ExceededSlippage、InvalidInput、InvalidStatus、NotAllowed(coin/pc ミント同一)。
SwapBaseOut
正確な出力、SwapBaseIn の逆。同じアカウント。
引数
SwapBaseInV2 / SwapBaseOutV2
OpenBook アカウントを完全にスキップするバリアントスワップエントリポイント(タグ 16 / 17)。計算は V1 パスと同じですが、アカウントリストは AMM 側とユーザーだけに縮小します — 8 アカウント、amm_open_orders は渡されません:
プールリザーブはボルト残高(保留中の PnL を差し引いたもの)になるため、クォート計算は簡潔で v1 パスと同じです。V2 を使用してコンピュートを節約し、(現在無視されている)マーケットアカウントの渡しを避けてください。Raydium ルーターは AMM v4 を通じてルーティングする場合、常に V2 フォームを使用します。
引数は V1 フォームと同じです(
SwapBaseInV2 の場合は amount_in / minimum_amount_out、SwapBaseOutV2 の場合は max_amount_in / amount_out)。
MonitorStep およびその他の削除された命令
歴史的に、MonitorStep はプールの OpenBook インタラクションをクランクしました:満たされたオーダーをセットル(OpenBook CPI を介してマーケットボルトからプールボルトへ収益を移動)、古いオーダーをキャンセル、target_orders と amm_open_orders の間のギャップを閉じるために新しいオーダーを投稿しました。OpenBook 依存関係が削除されたため、クランクするものはなく、命令は削除されました。それでも呼び出すキーパーまたは統合は、呼び出しを削除する必要があります。
WithdrawPnl / TakePnl
蓄積されたプロトコル手数料の管理者スイープ。
引数
WithdrawPnlは引数を取りません。need_take_pnl_*を読み、正確な金額を移動します。
効果
need_take_pnl_coinをpool_coin_token_accountからpnl_coin_token_accountに転送します。- pc についても同じです。
need_take_pnl_coinとneed_take_pnl_pcをゼロにします。- ロジック変更:ボルト残高が蓄積された PnL をカバーするのに不十分な場合、命令は
TakePnlErrorを直接返します(オーダーブック状態を操作しなくなります)。
SetParams
Raydium マルチシグによって呼び出される管理者パラメータ変更。引数は param: u8 タグ + ペイロードです。
CreateConfigAccount / UpdateConfigAccount
プログラムレベルの AmmConfig PDA(シード ["amm_config_account_seed"])の管理者管理。このアカウントが保持する意味のあるフィールドはちょうど 3 つ — pnl_owner、cancel_owner、create_pool_fee — に加えて 2 つの予約パディング領域のみで、プール作成フラグは存在しません。UpdateConfigAccount は param = 0 で pnl_owner、param = 1 で cancel_owner、param = 2 で create_pool_fee を設定します。
2026-09 で変更、後方互換。
CreateConfigAccount はレント sysvar を読まなくなります。そのアカウントリストは現在4 アカウントで、5 から削除されました:プログラムは渡された sysvar アカウントを逆シリアル化する代わりに
Rent::get() からレントパラメータを読みます — Solana 3.0 依存関係バンプが自然にしたもの。削除されたアカウントはリストの最後にあり、ハンドラーは長さチェックなしで next_account_info を通じて位置的にアカウントを読みます。古い 5 アカウントリストを引き続き渡す既存の管理者ツールは、したがって機能し続けます:末尾のレントアカウントは単に読まれません。便利な場合は更新してください。緊急ではありません。UpdateConfigAccount は変わりません。Initialize2 はレント sysvar を位置 3 に保持し、引き続き使用します:プログラムは Rent::from_account_info を呼び出すのを停止しましたが、プールのボルトと LP ミントを作成する spl_token::initialize_account と initialize_mint CPI に引き続き転送されます。アカウントリストから削除しないでください。
WithdrawExcessLamports
プログラムが制御するアカウント上のレント免除最小値を超えるラムポートのスイープを管理します。SIMD-0437 レント削減が各ステップの前に作成されたアカウントに残す過剰資金を回復するために、2026-09 アップグレードで追加されました。
過剰分のみを移動します。トークン残高、アカウントデータ、所有者、およびプール状態は変わりません。命令は既に最小値にあるアカウントでは no-op です — したがって、繰り返し実行し、各ロールアウトステップ後に再度実行するのは安全です。
引数 — なし。ペイロードは単一のタグバイト 18 です。
アカウント
各ソースアカウントの処理方法
プログラムはソースアカウントの
owner でディスパッチします:
一般的なエラー —
InvalidSignAccount(間違った署名者)、InvalidSplTokenProgram(スロット 3 の間違ったプログラム)、InvalidProgramAddress(間違った amm_authority)、LamportsCalculateError(カスタムコード 60;wSOL ラウンドトリップはゼロに正味化されませんでした)、およびプログラム所有パスからの InsufficientFunds(アカウントが独自のレント最小値より少ない場合)。
SDK ビルダーなし。 @raydium-io/raydium-sdk-v2 はこの命令のビルダーを出荷しません。raydium-sdk-V2-demo リポジトリも同様です — これは管理者パスです。手動でエンコードしてください。solana-fundamentals/rent-and-reclaimable-rent のウォレット側スイープが行うのと同じ方法で。
状態変更マトリックス
OpenBook 列は削除されました — どの命令もオーダーブックに触れなくなります。次のステップ
products/amm-v4/code-demos— スワップと LP フローの TypeScript 例。products/amm-v4/fees—WithdrawPnlの詳細と手数料分割。reference/error-codes— 前方参照テーブル(AMM v4 エラーはそのページにリストされています)。
- Raydium AMM プログラム —
raydium-io/raydium-amm - Raydium SDK v2
Liquidityモジュール - OpenBook プログラム — マーケット側のアカウント検証

