Skip to main content
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Entri ini mencakup pembaruan program CPMM yang akan datang. Telah diverifikasi terhadap cabang rilis lokal sebelum deployment. Konfirmasi program yang di-deploy sebelum mengandalkan instruksi baru atau perilaku CreateAmmConfig yang berubah.
Perubahan utama CPMM adalah perpindahan framework: Anchor 0.32.1 ke =1.0.2, dan toolchain build dari Agave 2.3.0 ke 3.1.10. Bersama dengan itu ada empat perubahan perilaku, tiga di antaranya hanya penting untuk admin tooling dan satu — penghapusan whitelist mint — yang mengubah mint Token-2022 mana yang dapat digunakan untuk pool baru. Semua yang dipanggil trader, LP, atau pool creator tetap memiliki account list, argument, dan math yang sama.

TL;DR untuk integrator

  • Tidak ada instruksi yang menghadap pengguna yang berubah. Initialize, InitializeWithPermission, Deposit, Withdraw, SwapBaseInput, SwapBaseOutput, dan keempat path Collect*Fee identik byte-for-byte. Tidak ada account layout yang berubah.
  • Satu instruksi ditambahkan: CollectExcessLamports. Hanya admin, tanpa argument, sumber dilewatkan sebagai remaining_accounts. Mengembalikan lamports di atas minimum rent-exempt dari vault CPMM, LP mint, dan PDA, dan tidak menyentuh apa pun yang lain. Lihat products/cpmm/instructions.
  • Satu kode error ditambahkan: 6015 LamportsCalculateError. Kode 60006014 tidak berubah.
  • CreateAmmConfig tidak lagi menyalin penandatangan ke dalam field fee-owner. Config baru mendapatkan kunci protocol_fee_owner dan fund_fee_owner yang hardcoded. Account AmmConfig yang sudah ada tidak tersentuh — terus baca protocol_owner / fund_owner dari account daripada mengasumsikan nilai apa pun.
  • Hardcoded MINT_WHITELIST Token-2022 empat alamat sudah hilang. Registry PDA SupportMintAssociated sekarang satu-satunya bypass CPMM dari extension allow-list. Pool yang sudah ada tidak terpengaruh; pemeriksaan berjalan hanya saat pembuatan pool.
  • ClosePermissionPda menerima dedicated permission-PDA creator authority, bukan hanya admin bersama.
  • Refresh IDL diperlukan. Satu instruksi baru, satu varian error baru.
  • Paket client TypeScript diubah nama. @coral-xyz/anchor dibekukan di 0.32.1; client Anchor 1.x dipublikasikan sebagai @anchor-lang/core.

CollectExcessLamports

Langkah 1 dari SIMD-0437 mendarat di mainnet pada 3 September 2026, mengurangi minimum rent-exempt sebesar 9% dengan empat langkah lagi akan datang. Setiap vault pool CPMM, LP mint, PoolState, AmmConfig, ObservationState, Permission, dan account SupportMintAssociated yang dibuat sebelum langkah sekarang over-funded, dan lamports dalam account yang dimiliki program hanya dapat dipindahkan oleh program itu. Instruksi mengambil empat account tetap — wallet penandatangan/tujuan, PDA authority vault_and_lp_mint_auth_seed, dan kedua token program — kemudian sejumlah account sumber dalam remaining_accounts. Dispatch pada owner setiap account sumber: CPI ke WithdrawExcessLamports token program (discriminant 38) untuk token account atau mint, debit langsung untuk PDA milik CPMM, dan diam-diam lewati apa pun yang lain. Wrapped SOL adalah kasus yang perlu dipahami. Saldo lamport native token account adalah saldo token-nya, jadi kedua token program menolak WithdrawExcessLamports pada satu. CPMM malah CPI SyncNative (melipat excess yang disumbangkan ke wrapped amount), mengukur berapa banyak amount tumbuh, UnwrapLamports (discriminant 45) untuk tepat delta itu, dan kemudian memerlukan wrapped balance sama dengan nilai pre-sync-nya — LamportsCalculateError jika tidak. Vault pool sisi SOL mempertahankan likuiditas penuhnya melalui sweep, dan tidak ada LP yang melihat perubahan harga di seluruhnya. Penandatangan dapat berupa admin program bersama atau wallet collect-lamports dedicated; alamat ada di reference/program-addresses.

CreateAmmConfig menulis fixed fee owners

Sebelum rilis ini, create_amm_config menetapkan kedua field fee-owner dari penandatangan yang memanggil:
Sekarang menulis konstanta program sendiri:
Karena CreateAmmConfig di-gate ke crate::admin::ID, efek praktisnya adalah tier fee yang baru dibuat disapu oleh wallet operasional dedicated dari awal alih-alih oleh admin multisig, dan admin tidak dapat mengumpulkan dari config yang baru saja dibuat tanpa terlebih dahulu merotasi field melalui param UpdateAmmConfig 3 atau 4. Dua konstanta mengikuti pola cfg devnet/mainnet yang sama seperti alamat program lainnya, dan di devnet keduanya resolve ke kunci yang sama. Lihat reference/program-addresses.
Ini bukan migrasi. Setiap AmmConfig yang sudah ada mempertahankan apa pun protocol_owner dan fund_owner yang dibuat dengannya. Alat koleksi yang mulai hardcoding konstanta baru akan gagal pada config yang lebih lama, dan satu yang mengasumsikan “kunci admin” akan gagal pada yang baru. Baca field-nya.

Whitelist mint Token-2022 dihapus

is_supported_mint dulu short-circuit pada hardcoded MINT_WHITELIST dari empat alamat sebelum iterasi extension mint. Array itu — dan HashSet yang dibangun darinya pada setiap panggilan — dihapus. Yang tersisa adalah:
  1. Legacy SPL Token mint lulus tanpa syarat.
  2. Mint dengan initialized SupportMintAssociated PDA di [b"support_mint", mint] lulus tanpa syarat.
  3. Jika tidak, setiap extension pada mint harus salah satu dari TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount.
Registry PDA telah ada di program untuk sementara, dengan pasangan CreateSupportMintAssociated / CloseSupportMintAssociated sendiri dan dedicated authority sendiri bersama admin bersama, dan dikonsultasikan dari Initialize dan InitializeWithPermission. Menghapus array statis berarti onboarding mint sekarang murni tindakan on-chain daripada upgrade program — yang merupakan intinya. Pool yang sudah ada tidak terpengaruh, karena pemeriksaan mint berjalan hanya saat pembuatan pool. Yang berubah adalah membuat pool CPMM baru untuk salah satu dari empat mint yang dulunya di-whitelist memerlukan mint itu memiliki registry PDA — yang penting sudah ada di mainnet. Gambaran lengkap, termasuk apa yang dilakukan dan tidak dilakukan registry, ada di reference/token-2022-support.

Pelebaran penandatangan ClosePermissionPda

CreatePermissionPda sudah menerima admin bersama atau dedicated permission-PDA creator authority, sementara ClosePermissionPda dikunci ke admin dengan constraint address =. Path close sekarang mengambil pasangan yang sama:
Jadi authority yang mengeluarkan grant juga dapat mencabut, tanpa routing melalui multisig. Error pada penandatangan yang tidak sah adalah InvalidOwner (6001) kedua cara — constraint address = lama sudah membawa error kustom itu — jadi hanya set penandatangan yang diterima yang melebar.

Perubahan toolchain dan dependency

Anchor 1.0 mengubah dua hal di setiap call site CPI, yang penting jika Anda mengintegrasikan CPMM dari program Anda sendiri: CpiContext::new mengambil Pubkey program daripada AccountInfo-nya, dan Context memiliki satu parameter lifetime alih-alih empat. Di sisi client RequestBuilder::instructions() mengembalikan Vec<Instruction> daripada Result<...>, CommitmentConfig berasal dari anchor_client alih-alih solana_sdk, dan spl-associated-token-account 8.0 memindahkan address helper-nya di bawah ::address dan program ID-nya ke ::program::ID. Lihat sdk-api/rust-cpi. Dua detail build-system, tidak ada yang memiliki efek on-chain: crate program mendeklarasikan fitur localnet yang mengkompilasi wallet lokal sebagai admin dari variabel environment CPSWAP_LOCALNET_ADMIN (jadi test yang di-gate admin benar-benar dapat menandatangani — yarn test:local-admin menghubungkannya), dan blok [profile.release] duplikat di programs/cp-swap/Cargo.toml dihapus. Cargo mengabaikan [profile] di luar workspace root, jadi blok root sudah yang berlaku — termasuk fakta bahwa panic = "abort" blok level-program tidak pernah diterapkan.

Apa yang tidak berubah

  • Setiap account layout. PoolState, AmmConfig, ObservationState, Permission, SupportMintAssociated — ukuran sama, offset sama.
  • Error code 60006014.
  • Extension allow-list itu sendiri. Masih lima extension yang sama.
  • Fee rate, fee accrual, dan curve. CollectExcessLamports memindahkan lamports yang tidak pernah bagian dari reserve pool apa pun.
  • spl_memo. Constraint memo-program Withdraw pindah dari spl_memo::id() ke anchor_spl::memo::ID — alamat yang sama di bawah export anchor-spl yang diubah nama.
  • Program ID. Tidak berubah.

Halaman yang diperbarui

  • products/cpmm/instructionsCollectExcessLamports ditambahkan dengan account list dan tabel dispatch per-owner; CreateAmmConfig mendapat argument creator_fee_rate dan catatan pada fixed fee owners; baris ringkasan instruksi ditambahkan untuk CollectExcessLamports, CreateSupportMintAssociated, CloseSupportMintAssociated; penandatangan ClosePermissionPda dikoreksi; precondition Initialize ditulis ulang untuk bypass registry-only; baris matriks perubahan state ditambahkan.
  • products/cpmm/accounts — bagian Token-2022 ditulis ulang di sekitar registry PDA, dengan penghapusan whitelist dipanggil; penandatangan ClosePermissionPda dikoreksi.
  • products/cpmm/overview — kalimat whitelist ditulis ulang.
  • products/cpmm/code-demos — skeleton Rust CPI diperbarui untuk Anchor 1.0.
  • reference/token-2022-support — bagian bypass-path ditulis ulang di sekitar registry PDA, dengan MINT_WHITELIST yang dihapus dipindahkan ke bagian “removed bypasses”.
  • reference/error-codes6015 didokumentasikan.
  • reference/program-addresses — bagian “CPMM support-mint registry authority”, “CPMM fee-owner wallets”, dan “Excess-lamports collection wallets” baru; catatan ClosePermissionPda dikoreksi.
  • sdk-api/rust-cpi, solana-fundamentals/toolchain, integration-guides/cpi-integration — pin Anchor 1.0 dan catatan migrasi CPI.
  • solana-fundamentals/rent-and-reclaimable-rent — bagian “What the Raydium programs sweep on their own side” baru.