このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このエントリは、今後の CPMM プログラム更新をカバーしています。デプロイ前にローカルリリースブランチに対して検証されました。新しい命令または変更された
CreateAmmConfig の動作に依存する前に、デプロイされたプログラムを確認してください。0.32.1 から =1.0.2 へ、ビルドツールチェーンを Agave 2.3.0 から 3.1.10 へ移行します。これに伴い 4 つの動作変更があります。そのうち 3 つは管理ツールにのみ関係し、1 つ(ミントホワイトリストの削除)は新しいプール用に使用できる Token-2022 ミントを変更します。
トレーダー、LP、またはプール作成者が呼び出すすべてのものは、アカウントリスト、引数、および数学を保持します。
インテグレーター向け TL;DR
- ユーザー向けの命令は変更されていません。
Initialize、InitializeWithPermission、Deposit、Withdraw、SwapBaseInput、SwapBaseOutput、および 4 つのCollect*Feeパスはすべてバイト単位で同一です。アカウントレイアウトは変更されていません。 - 1 つの命令が追加されます:
CollectExcessLamports。 管理者のみ、引数なし、渡されたアカウントはremaining_accountsとして渡されます。CPMM 制御のボルト、LP ミント、および PDA からレント免除最小値を超えるラムポートを返し、他には何も触れません。products/cpmm/instructionsを参照してください。 - 1 つのエラーコードが追加されます:
6015LamportsCalculateError。 コード6000–6014は変更されていません。 CreateAmmConfigは署名者をフィーオーナーフィールドにコピーしなくなりました。 新しい設定は、ハードコードされたprotocol_fee_ownerおよびfund_fee_ownerキーを取得します。既存のAmmConfigアカウントは変更されません — アカウントからprotocol_owner/fund_ownerを読み取り続けてください。どちらかの値を想定しないでください。- ハードコードされた 4 アドレスの Token-2022
MINT_WHITELISTは削除されました。SupportMintAssociatedPDA レジストリは、拡張機能許可リストのバイパスの CPMM の唯一の方法になりました。既存のプールは影響を受けません。チェックはプール作成時にのみ実行されます。 ClosePermissionPdaは共有管理者だけでなく、専用のパーミッション PDA 作成者権限を受け入れます。- IDL の更新が必要です。 1 つの新しい命令、1 つの新しいエラーバリアント。
- TypeScript クライアントパッケージの名前が変更されました。
@coral-xyz/anchorは0.32.1で固定されています。Anchor 1.x クライアントは@anchor-lang/coreとして公開されます。
CollectExcessLamports
SIMD-0437 のステップ 1 は 2026 年 9 月 3 日にメインネットに着陸し、レント免除最小値を 9% 削減し、さらに 4 つのステップが続きます。ステップの前に作成されたすべての CPMM プールボルト、LP ミント、PoolState、AmmConfig、ObservationState、Permission、および SupportMintAssociated アカウントは現在過剰に資金提供されており、プログラム所有のアカウント内のラムポートはそのプログラムによってのみ移動できます。
命令は 4 つの固定アカウント(署名者/宛先ウォレット、vault_and_lp_mint_auth_seed 権限 PDA、および両方のトークンプログラム)を取得し、その後 remaining_accounts に任意の数のソースアカウントを取得します。各ソースアカウントの所有者に基づいてディスパッチします:トークンアカウントまたはミント用のトークンプログラムの WithdrawExcessLamports(判別式 38)への CPI、CPMM 所有の PDA の直接デビット、その他はサイレントにスキップします。
ラップされた SOL は理解する価値のあるケースです。ネイティブトークンアカウントのラムポート残高はそのトークン残高であるため、両方のトークンプログラムは 1 つで WithdrawExcessLamports を拒否します。代わりに CPMM は SyncNative を CPI します(寄付されたエクセスをラップされた amount に折り込む)、金額がどれだけ増加したかを測定し、正確にその差分に対して UnwrapLamports(判別式 45)を実行し、その後ラップされた残高が事前同期値と等しいことを要求します — 等しくない場合は LamportsCalculateError。SOL 側のプールボルトはスイープを通じて完全な流動性を保持し、LP は 1 つ全体で価格変更を見ません。
署名者は共有プログラム管理者または専用の収集ラムポートウォレットのいずれかです。アドレスは reference/program-addresses にあります。
CreateAmmConfig は固定フィーオーナーを書き込みます
このリリースの前に、create_amm_config は両方のフィーオーナーフィールドを呼び出し署名者から設定しました:
CreateAmmConfig は crate::admin::ID にゲートされているため、実際の効果は、新しく作成されたフィーティアが最初から管理マルチシグの代わりに専用の運用ウォレットによってスイープされ、管理者は UpdateAmmConfig パラメータ 3 または 4 を通じてフィールドをローテーションしない限り、作成したばかりの設定から収集することはできません。
2 つの定数は、プログラムの残りのアドレスと同じ devnet/mainnet cfg パターンに従い、devnet では両方とも同じキーに解決されます。reference/program-addresses を参照してください。
Token-2022 ミントホワイトリストが削除されました
is_supported_mint は、ミントの拡張機能を反復する前に、ハードコードされた 4 つのアドレスの MINT_WHITELIST でショートサーキットしていました。そのアレイ — および毎回それから構築された HashSet — は削除されました。残っているのは:
- レガシー SPL Token ミントは無条件でパスします。
[b"support_mint", mint]で初期化されたSupportMintAssociatedPDA を持つミントは無条件でパスします。- それ以外の場合、ミント上のすべての拡張機能は
TransferFeeConfig、MetadataPointer、TokenMetadata、InterestBearingConfig、ScaledUiAmountの 1 つである必要があります。
CreateSupportMintAssociated / CloseSupportMintAssociated ペアと共有管理者と並んで独自の専用権限を持ち、Initialize と InitializeWithPermission の両方から参照されます。静的配列を削除することは、ミントのオンボーディングがプログラムアップグレードではなく純粋なオンチェーンアクションになったことを意味します — これが要点です。
既存のプールは影響を受けません。ミントチェックはプール作成時にのみ実行されるためです。変わるのは、以前ホワイトリストに登録されていた 4 つのミントの 1 つに対して新しい CPMM プールを作成するには、そのミントがレジストリ PDA を持つ必要があることです — 重要なものはメインネットで既に持っています。レジストリが何をするか、何をしないかを含む完全な図は、reference/token-2022-support にあります。
ClosePermissionPda 署名者の拡大
CreatePermissionPda は既に共有管理者または専用のパーミッション PDA 作成者権限のいずれかを受け入れていましたが、ClosePermissionPda は address = 制約で管理者に固定されていました。クローズパスは同じペアを取得するようになりました:
InvalidOwner(6001)のいずれかです — 古い address = 制約は既にそのカスタムエラーを実行していました — 受け入れられた署名者のセットのみが拡大しました。
ツールチェーンと依存関係の変更
Anchor 1.0 は、すべての CPI 呼び出しサイトで 2 つのことを変更します。これは、独自のプログラムから CPMM を統合する場合に重要です:
CpiContext::new はプログラムの AccountInfo ではなく Pubkey を取得し、Context は 4 つのライフタイムパラメータの代わりに 1 つを持ちます。クライアント側では RequestBuilder::instructions() は Result<...> ではなく Vec<Instruction> を返し、CommitmentConfig は solana_sdk ではなく anchor_client から来ます。spl-associated-token-account 8.0 はアドレスヘルパーを ::address の下に移動し、プログラム ID を ::program::ID に移動しました。sdk-api/rust-cpi を参照してください。
2 つのビルドシステムの詳細。どちらもオンチェーン効果はありません:プログラム crate は、CPSWAP_LOCALNET_ADMIN 環境変数からローカルウォレットを admin としてコンパイルする localnet フィーチャーを宣言します(管理者ゲートテストが実際に署名できるように — yarn test:local-admin がそれを配線します)。programs/cp-swap/Cargo.toml の重複した [profile.release] ブロックは削除されました。Cargo はワークスペースルートの外の [profile] を無視するため、ルートブロックは既に有効なものでした — プログラムレベルのブロックの panic = "abort" が適用されなかったという事実を含めて。
変更されなかったもの
- すべてのアカウントレイアウト。
PoolState、AmmConfig、ObservationState、Permission、SupportMintAssociated— 同じサイズ、同じオフセット。 - エラーコード
6000–6014。 - 拡張機能許可リスト自体。 依然として同じ 5 つの拡張機能。
- フィーレート、フィー発生、および曲線。
CollectExcessLamportsは、プールの準備金の一部ではなかったラムポートを移動します。 spl_memo。Withdrawのメモプログラム制約はspl_memo::id()からanchor_spl::memo::IDに移動しました — 名前が変更されたanchor-splエクスポートの下の同じアドレス。- プログラム ID。 変更されていません。
更新されたページ
products/cpmm/instructions—CollectExcessLamportsがアカウントリストと所有者ごとのディスパッチテーブルで追加されました。CreateAmmConfigはcreator_fee_rate引数と固定フィーオーナーに関する注記を取得します。CollectExcessLamports、CreateSupportMintAssociated、CloseSupportMintAssociatedの命令サマリー行が追加されました。ClosePermissionPda署名者が修正されました。Initialize前提条件がレジストリのみのバイパス用に書き直されました。状態変更マトリックス行が追加されました。products/cpmm/accounts— Token-2022 セクションがレジストリ PDA の周りに書き直され、ホワイトリスト削除が呼び出されました。ClosePermissionPda署名者が修正されました。products/cpmm/overview— ホワイトリスト文が書き直されました。products/cpmm/code-demos— Rust CPI スケルトンが Anchor 1.0 用に更新されました。reference/token-2022-support— バイパスパスセクションがレジストリ PDA の周りに書き直され、削除されたMINT_WHITELISTが「削除されたバイパス」セクションに移動されました。reference/error-codes—6015が文書化されました。reference/program-addresses— 新しい「CPMM サポートミントレジストリ権限」、「CPMM フィーオーナーウォレット」、および「エクセスラムポート収集ウォレット」セクション。ClosePermissionPda注記が修正されました。sdk-api/rust-cpi、solana-fundamentals/toolchain、integration-guides/cpi-integration— Anchor 1.0 ピンと CPI マイグレーション注記。solana-fundamentals/rent-and-reclaimable-rent— 新しい「Raydium プログラムが独自側でスイープするもの」セクション。

