Skip to main content
このページは 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

リクイディティを追加します。 引数
アカウント(要約)
受け付けられるアカウント数は 11、14、15 のみで、それ以外はありません。 レガシー レイアウトは 14 アカウント(末尾に無視されるアカウントを 1 つ加えた 15 アカウント)です:同じリストの位置 4 に 無視される amm_open_orders、位置 9 に無視される market、そして位置 14 に無視される market_event_queue を追加したものです。それ以外の数では WrongAccountsNumber で失敗します。
計算 — 標準的な按分。プールの有効リザーブ(ボルト + オンブック)を使用して、SDK は指定された LP 量をもたらす coin/pc ペアを計算し、max_* に対してチェックします。どちらかの側がキャップを超える場合、ExceededSlippage でリバートします。

Withdraw

LP をバーン、両側を受け取ります。 引数
アカウント — 推奨される 11 アカウント レイアウト
Withdraw は Deposit の逆ではありません。 受け付けられるアカウント数は 11、または 20 から 23 です。レガシーな 20 アカウント レイアウトは、ユーザーの LP アカウントを 2 つの受け取り側 ATA の 前 に置き、無視される 5 つのマーケット アカウントを挟み込みます: token_program, amm(W), amm_authority, amm_open_orders(W), amm_target_orders(W), lp_mint(W), pool_coin_token_account(W), pool_pc_token_account(W), market_program, market(W), market_coin_vault(W), market_pc_vault(W), market_vault_signer, user_lp_token_account(W), user_coin_token_account(W), user_pc_token_account(W), user_owner(S), market_event_queue(W), market_bids(W), market_asks(W)。 22 および 23 アカウントの形式は、位置 8 の後に無視されるパディング アカウントを 2 つ挿入します。 それ以外の数では WrongAccountsNumber で失敗します。
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 およびその他の削除された命令

削除 — 呼び出し不可。 2026-07 アップグレード以降、MonitorStep(タグ 2)はプログラムから削除され、呼び出された場合はリバートします(unimplemented!)。クライアントビルダーも削除されました。同じことが MigrateToOpenBook(5)、WithdrawSrm(8)、SimulateInfo(12)、AdminCancelOrders(13)、およびレガシー Initialize(0)/ PreInitialize(10)プール作成エントリポイントに適用されます — 代わりに Initialize2 を使用してください。
歴史的に、MonitorStep はプールの OpenBook インタラクションをクランクしました:満たされたオーダーをセットル(OpenBook CPI を介してマーケットボルトからプールボルトへ収益を移動)、古いオーダーをキャンセル、target_orders と amm_open_orders の間のギャップを閉じるために新しいオーダーを投稿しました。OpenBook 依存関係が削除されたため、クランクするものはなく、命令は削除されました。それでも呼び出すキーパーまたは統合は、呼び出しを削除する必要があります。

WithdrawPnl / TakePnl

蓄積されたプロトコル手数料の管理者スイープ。 引数
  • WithdrawPnl は引数を取りません。need_take_pnl_* を読み、正確な金額を移動します。
破壊的変更(管理者のみ)。 アカウントリストは 17(+1 オプション)から10に削除されました — amm_open_orders と 6 つすべてのマーケットアカウントが削除されました — 互換性解析なし。古いレイアウトはミスアライン(古い #5 は amm_open_orders、現在は pool_coin_token_account)し、InvalidCoinVault などのエラーで失敗します。管理者ツールは更新する必要があります。
アカウント(新しい 10 アカウントレイアウト) 効果
  • need_take_pnl_coin を pool_coin_token_account から pnl_coin_token_account に転送します。
  • pc についても同じです。
  • need_take_pnl_coin と need_take_pnl_pc をゼロにします。
  • ロジック変更:ボルト残高が蓄積された PnL をカバーするのに不十分な場合、命令は TakePnlError を直接返します(オーダーブック状態を操作しなくなります)。
蓄積された PnL は既に不変から除外されているため、リザーブに変更はありません。

SetParams

Raydium マルチシグによって呼び出される管理者パラメータ変更。引数は param: u8 タグ + ペイロードです。
破壊的変更(管理者のみ)。 アカウントリストは [amm (W), admin (S)] だけに削除されました(権限、オープンオーダー、ターゲットオーダー、ボルト、およびすべてのマーケットアカウントが削除されました)。param 列挙型は番号が付け直され、トリミングされました:Status = 0、State = 1、Fees = 2(以前は 9)、SetOpenTime = 3(以前は 11)。すべてのオーダーブックグリッドパラメータと AmmOwner、LastOrderDistance、UpdateOpenOrder が削除され、SetParamsInstruction 構造体は new_pubkey と last_order_distance を削除しました。管理者ツールは更新する必要があります。

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 列は削除されました — どの命令もオーダーブックに触れなくなります。

次のステップ

ソース: