Skip to main content
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
LaunchLab mengekspos set instruksi yang ketat: enam panggilan yang menghadap pengguna ditambah beberapa primitif admin. SDK membungkus semuanya; halaman ini mendokumentasikan permukaan mentah untuk agregator, alat pemantauan, dan program yang memerlukan CPI.Upgrade program 2026-09 membangun kembali LaunchLab di Anchor 1.0.2 / Solana 3.1.10 dan menghapus tiga mekanisme transisi: Initialize yang sudah usang sekarang selalu gagal, MigrateToAmm kehilangan tiga argumennya dan setiap akun OpenBook, dan gerbang get_upgrade_timestamp yang membuat beberapa pemeriksaan bersyarat pada jam sudah hilang. Ini juga menambahkan satu instruksi admin, CollectExcessLamports. Lihat entri changelog 2026-09-09.

Inventaris instruksi

Pemisahan “ExactIn/ExactOut” mencerminkan SwapBaseInput / SwapBaseOutput CPMM — di rantai mereka adalah diskriminator instruksi terpisah dengan pembulatan sedikit berbeda. Pemilihan jalur kelulusan. Setiap panggilan InitializeV2 dan InitializeWithToken2022 baru harus menetapkan migrate_type = 1 (CPSWAP). Setiap upaya untuk menginisialisasi pool baru yang terikat AMM v4 mengembalikan MigrateTypeNotMatch. amm_creator_fee_on hanya memilih apakah biaya pembuat CPMM yang dihasilkan berlaku untuk token kutipan atau kedua token; itu tidak memilih program target. Initialize warisan tidak dapat membuat peluncuran sama sekali lagi (lihat di bawah). MigrateToAmm tetap dapat dipanggil untuk PoolState yang ada yang diinisialisasi dengan migrate_type = 0 sebelum pembatasan ini. Rilis tidak menulis ulang status pool yang ada atau menghapus instruksi warisan. Program token sisi kutipan. Mint kutipan dapat dimiliki oleh program SPL Token atau Token-2022. Setiap instruksi yang menyentuhnya — CreateConfig, InitializeV2, InitializeWithToken2022, keempat instruksi perdagangan, CollectFee, CollectMigrateFee, ClaimCreatorFee, ClaimPlatformFee, dan ClaimPlatformFeeFromVault — mengambil program pemilik di slot akun quote-program-nya. Posisi akun tidak berubah; hanya nilai yang diterima yang berubah. Lewatkan program yang benar-benar memiliki GlobalConfig.quote_mint, yang dapat Anda baca dari bit1 PoolState.token_program_flag untuk peluncuran yang ada (lihat accounts) atau dari pemilik akun mint sebaliknya. Initialize yang sudah usang tidak relevan di sini: akun quote-program-nya masih diketik ke SPL Token, dan sejak upgrade 2026-09 instruksi gagal sebelum membaca akun apa pun. Luncurkan melalui InitializeV2 atau InitializeWithToken2022. MigrateToCpswap adalah pengecualian lainnya, dalam arah yang berlawanan — mengambil kedua program tanpa syarat daripada satu per mint. Lihat akun migrasi di bawah.

Initialize

Dihapus secara efektif sejak upgrade 2026-09 — instruksi ini selalu gagal. Handler initialize sekarang hanya log Not supported. Please use initialize_v2 instruction dan NotApproved (6000). Itu dipertahankan murni agar diskriminatornya tetap terisi dan IDL tetap mempertahankan bentuk yang stabil. (Struct Accounts tidak berubah, jadi validasi yang dihasilkan Anchor masih berjalan terlebih dahulu; transaksi kembali terlepas dari apa pun.)Sebelumnya itu dijaga pada jam: itu bekerja sampai tiga hari setelah cutover get_upgrade_timestamp dan gagal setelahnya. Pembantu timestamp itu hilang, jadi kegagalan sekarang tanpa syarat. Peluncuran yang ada yang dibuat melaluinya tidak terpengaruh — mereka berdagang dan lulus secara normal melalui MigrateToAmm atau MigrateToCpswap tergantung pada migrate_type yang disimpan mereka.Argumen dan daftar akun di bawah adalah milik InitializeV2. Initialize yang sudah usang mengambil 18 akun yang sama dalam urutan yang sama dan hanya tiga argumen pertama — ia tidak memiliki amm_fee_on — dan slot quote_token_program-nya bertipe SPL Token, bukan Interface<TokenInterface>.
Buat peluncuran baru. InitializeV2 hanya menambahkan argumen amm_fee_on di atas Initialize yang sudah usang; jumlah dan urutan akunnya identik, dan satu-satunya perbedaan di tingkat akun adalah quote_token_program bertipe Interface<TokenInterface> sehingga quote mint Token-2022 diterima. Argumen Empat argumen posisional, bukan satu struct. (InitializeWithToken2022 menambahkan yang kelima, transfer_fee_extension_param: Option<TransferFeeExtensionParams>; Initialize yang sudah usang tidak memiliki amm_fee_on.)
Varian tersebut harus cocok dengan global_config.curve_type atau instruksi dibatalkan dengan InputNotMatchCurveConfig (6003). Tidak ada open_time, tidak ada argumen quote_mint (nilainya berasal dari global_config), tidak ada struct fees dan tidak ada post_graduation_lp_policy — pelepasan LP diatur pada PlatformConfig, bukan per peluncuran. Akun — 18 total (16 dideklarasikan ditambah dua yang ditambahkan oleh #[event_cpi]) Kondisi awal
  • quote_mint ∈ launch_config.allowed_quote_mints.
  • base_supply_graduation ≤ base_supply_max.
  • Parameter biaya lulus pemeriksaan launch_config.max_*_fee_rate.
  • open_time ≥ now − slop (SDK memberlakukan ≥ now; program mentoleransi backdating ringan).
  • curve_type dikenali.
Kondisi akhir
  • base_mint memiliki supply = curve_param.supply, semuanya di base_vault.
  • Otoritas mint dicabut di dalam instruksi yang sama ini (set_authority(MintTokens, None)) tepat setelah supply dicetak — bukan pada saat kelulusan. Karena itu base mint permanen bersupply tetap, dan tidak ada instruksi berikutnya yang dapat mencetak lebih banyak.
  • PoolState diinisialisasi dengan status = Fund (0), real_a = 0, real_b = 0.
  • total_fund_raising_b berasal langsung dari curve_param.total_quote_fund_raising.
  • Untuk InitializeWithToken2022 dengan TransferFeeConfig terlampir: transfer_fee_config_authority = launch_authority, dan withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth ketika bidang itu diatur, sebaliknya launch_authority. Sisi penarikan ditulis pada pembuatan mint tepatnya sehingga platform dapat menyapu biaya yang ditahan sebelum kelulusan. Lihat platform-config.
Kesalahan umumNotApproved (6000, tanpa syarat, untuk Initialize yang sudah usang), InvalidInput (6002, lantai supply / rate / penggalangan dana dari GlobalConfig dilanggar), InputNotMatchCurveConfig (6003, varian curve_param tidak cocok dengan global_config.curve_type), MigrateTypeNotMatch (6007, migrate_type != 1), MathOverflow (6008), VestingRatioTooHigh (6010), NoSupportExtension (6017), NotEnoughRemainingAccounts (6018), InvalidPlatformAllowConfig (6022), CurveParamNotMatchPlatformRule (6025). Pemeriksaan Anchor address = / constraint = yang gagal muncul sebagai kode 2xxx, bukan salah satu dari kode di atas — tidak ada InvalidQuoteMint, FeeRateTooHigh maupun InvalidCurveParams di enum error program.

Buy (varian kanonik: BuyExactIn)

Pengguna menyediakan jumlah input tetap; kurva menghitung outputnya. Argumen
Akun Remaining accounts — pipa biaya, dibaca dalam urutan persis ini:
  1. share_fee_receiverhanya ketika share_fee_rate > 0.
  2. system_program — selalu; diperiksa == System::id(), jika tidak InvalidInput.
  3. platform_fee_vault — PDA [platform_config, quote_token_mint]; dibuat saat pertama kali dipakai.
  4. creator_fee_vault — PDA [creator, quote_token_mint]; dibuat saat pertama kali dipakai.
Kekurangan akun mengembalikan NotEnoughRemainingAccounts (6018). Tidak ada slot associated_token_program, dan system_program adalah akun remaining, bukan akun yang dideklarasikan. Kondisi awal
  • launch_state.status == Active.
  • now ≥ open_time.
  • user_quote_ata.balance ≥ quote_in.
  • quote_in > 0.
Efek
  1. Pisahkan quote_in menjadi quote_in_after_fee dan bagian biaya.
  2. Newton-selesaikan kurva untuk base_out yang diberikan kutipan pasca-biaya.
  3. require(base_out ≥ minimum_base_out) sebaliknya kembali ExceededSlippage.
  4. Pindahkan quote_in pengguna → vault. Pindahkan base_out vault → pengguna.
  5. Perbarui base_sold += base_out, quote_reserve_real += quote_in_after_fee × (lp_share / total_share).
  6. Perbarui penghitung biaya (protocol_fees_quote, creator_fees_quote).
  7. state_data.num_buys += 1.
  8. Jika quote_reserve_real ≥ quote_reserve_target setelah pembaruan, SDK biasanya merantai instruksi Graduate dalam transaksi yang sama. Program tidak auto-graduate di dalam BuyGraduate berikutnya diperlukan.

BuyExactOut

Pengguna menentukan base_out yang tepat; program menghitung quote_in. Argumen
Akun yang sama dan kontrak remaining-account yang sama seperti BuyExactIn. Menggunakan integral kuadrat bentuk tertutup (atau CPMM terbalik, untuk curve_type 1) daripada iterasi Newton.

Sell / SellExactIn / SellExactOut

Cerminan dari Buy. Pengguna mengembalikan base_in ke kurva dan menerima quote_out. Biaya dikurangkan dari quote_out, jadi pengguna menerima lebih sedikit daripada hasil terintegrasi mentah. Kondisi awal
  • user_base_ata.balance ≥ base_in.
  • Penjualan tidak dapat mendorong base_sold di bawah 0 (berlebihan dengan di atas mengingat akuntansi konsisten).
  • Peluncuran adalah Active.
Efek — simetris dengan Buy. base_sold berkurang, quote_reserve_real berkurang. Biaya masih terkumpul.

Biaya transfer sisi kutipan

Ketika mint kutipan membawa TransferFeeConfig, jumlah yang dipindahkan vault dan jumlah yang didebit atau dikreditkan pembayar berbeda, dan batas slippage diperiksa terhadap sisi pembayar. Pada mint kutipan tanpa ekstensi setiap kasus di bawah identik dengan mint warisan biasa. Dua konsekuensi untuk penawaran:
  • Batas yang dihitung seolah-olah mint bebas biaya ditolak. Melewatkan biaya-bebas biaya sebagai maximum_amount_in, atau hasil bebas-biaya sebagai minimum_amount_out, kembali dengan ExceededSlippage.
  • real_quote maju hanya dengan apa yang mencapai vault. BuyExactIn dari amount_in pada mint kutipan 5% memindahkan real_quote sebesar amount_in × 0.95.
Mint kutipan 100%-biaya (10000 basis poin) tidak dapat dibalik dan kembali dengan CalculateOverflow pada jalur exact-out. Kedua mint sisi perdagangan juga dibatasi pada program yang dilewatkan di slot pencocokan mereka, jadi base_token_program yang tidak cocok sekarang gagal daripada diabaikan. Lihat algorithms/token-2022-transfer-fees untuk matematika biaya yang mendasar.

Akun sisa perdagangan

Keempat instruksi perdagangan mengambil pipa biaya mereka melalui remaining_accounts, dalam urutan ini:
Berubah di 2026-09: tiga terakhir sekarang tanpa syarat, dan system_program divalidasi. Sebelum rilis ini program hanya membacanya ketika unix_timestamp >= get_upgrade_timestamp(), dan melewatkan pemisahan biaya platform/pembuat sepenuhnya sebelum saat itu. Timestamp sudah lama berlalu, jadi perilaku di mainnet tidak berubah dalam praktik — tetapi cabang hilang dari kode, dan pembangun yang masih menghilangkan tiga akun sekarang selalu gagal dengan NotEnoughRemainingAccounts (6018) daripada hanya setelah cutover. Slot system_program juga diperiksa terhadap System::id() dan mengembalikan InvalidInput (6002) jika menyimpan apa pun yang lain, di mana sebelumnya akun apa pun diterima di posisi itu.

MigrateToAmm / MigrateToCpswap

Lulus peluncuran ke pool yang dapat diperdagangkan setelah kurva mencapai total_quote_fund_raising. Peluncuran baru adalah CPMM-only. MigrateToAmm dipertahankan untuk pool yang ada yang migrate_type tersimpan adalah 0. Siapa yang menandatangani
  • MigrateToAmmmigrate_to_amm_wallet yang dicatat pada GlobalConfig pengikatan.
  • MigrateToCpswapmigrate_to_cpswap_wallet yang dicatat pada GlobalConfig pengikatan.
Dompet ini biasanya dipegang oleh crank kelulusan yang dioperasikan Raydium; dalam praktik kelulusan mendarat detik setelah ambang batas terlampaui, terlepas dari siapa yang memicu pembelian terakhir. Argumen Tidak ada satupun.
Perubahan yang merusak (dompet migrasi saja, 2026-09). MigrateToAmm menghapus ketiga argumen — base_lot_size, quote_lot_size, market_vault_signer_noncedan sembilan akun. Data instruksinya sekarang diskriminator telanjang, jadi pembangun lama mengirim 17 byte argumen yang tidak terduga dan menyediakan daftar akun yang tidak lagi selaras.Ini mengikuti penghapusan OpenBook AMM v4 sendiri: Initialize2 AMM v4 tidak lagi mengambil market_program atau amm_open_orders, jadi LaunchLab tidak memiliki apa pun yang tersisa untuk diteruskan. Program juga berhenti CPI-ing initialize_openbook_market, yang merupakan konfigurasi tiga argumen.Akun dihapus: openbook_program, request_queue, event_queue, bids, asks, market_vault_signer, market_base_vault, market_quote_vault, dan amm_open_orders. Akun market tetap di posisinya — AMM v4 masih mencatatnya sebagai bidang referensi — tetapi sekarang dideklarasikan sebagai #[account(mut)] telanjang: tidak ada pemilik, alamat atau batasan seed. Itu sepenuhnya tidak divalidasi, itu diteruskan langsung ke CPI Initialize2 AMM v4, dan program tidak lagi menginisialisasinya. Pemanggil yang menginginkan akun pasar menjadi pasar yang benar-benar diinisialisasi harus membuatnya sendiri sebelumnya.Daftar 23-akun yang tersisa adalah, dalam urutan: payer, base_mint, quote_mint, market, amm_program, amm_pool, amm_authority, amm_lp_mint, amm_base_vault, amm_quote_vault, amm_target_orders, amm_config, amm_create_fee_destination, authority, pool_state, global_config, base_vault, quote_vault, pool_lp_token, spl_token_program, associated_token_program, system_program, rent_program.MigrateToCpswap tidak terpengaruh — itu tidak pernah memiliki argumen.
Efek (umum untuk keduanya)
  1. Verifikasi pool_state.status == Migrate (yaitu, quote_reserve_target telah tercapai). Sebaliknya kembali dengan PoolMigrated (status sudah Migrated) atau PoolFunding (masih dalam pendanaan).
  2. Verifikasi pool_state.migrate_type cocok dengan instruksi (0 untuk AMM, 1 untuk CPMM). Sebaliknya kembali dengan MigrateTypeNotMatch.
  3. Hitung cadangan pasca-kelulusan:
    • base_amount_out = base_vault.amount − vesting_schedule.total_locked_amount
    • quote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
  4. CPI ke program target (AMM v4 Initialize2 atau CPMM InitializeWithPermission) dengan cadangan tersebut untuk membuat pool pasca-kelulusan.
  5. Untuk migrasi CPMM yang dieksekusi setelah upgrade 2026-08-17, gabungkan platform_scale + creator_scale menjadi satu saham LP terkunci milik platform dan mint paling banyak satu Fee Key NFT ke platform_nft_wallet. Bakar sisa burn_scale. Sebelum upgrade, creator_scale dikunci secara terpisah dan Fee Key-nya pergi ke pembuat token. Migrasi historis yang selesai tidak dimodifikasi. Untuk kelulusan AMM v4 warisan, disposisi LP mengikuti aliran yang ada dari instruksi itu.
  6. (Tidak ada langkah mint-authority. base_mint.mint_authority sudah diatur ke None pada pembuatan peluncuran — lihat catatan di bawah.)
  7. Balik pool_state.status = Migrated, atur vesting_schedule.start_time = block_time + cliff_period.
Penyerahan otoritas transfer-fee Token-2022 — ketika mint dasar adalah mint Token-2022 yang membawa TransferFeeConfig dan PlatformConfig.transfer_fee_extension_auth bukan default, migrasi juga menetapkan kembali otoritas ekstensi itu ke kunci platform:
  • transfer_fee_config_authority selalu ditetapkan kembali. PDA authority peluncuran memegangnya untuk seluruh fase pra-kelulusan, jadi selalu ada sesuatu untuk dipindahkan.
  • WithheldWithdraw ditetapkan kembali hanya ketika PDA authority masih memegangnya. Peluncuran yang dibuat dari 2026-08-27 ke depan sudah membawa transfer_fee_extension_auth pada otoritas itu dari pembuatan mint, jadi langkah dilewati. Penjaga adalah apa yang membuat migrasi tidak kembali pada mint tersebut — PDA tidak dapat menandatangani otoritas yang tidak lagi dipegang.
Jika transfer_fee_extension_auth adalah Pubkey::default() pada waktu migrasi, tidak ada otoritas yang bergerak dan keduanya tetap dengan PDA authority selamanya. Lihat platform-config.
Pasokan mint dasar tetap dari pembuatan, bukan dari kelulusan. InitializeV2 dan InitializeWithToken2022 mencetak seluruh pasokan ke vault dasar dan kemudian segera mencabut MintTokens dalam instruksi yang sama, jadi base_mint.mint_authority adalah None untuk seluruh kehidupan peluncuran. Migrasi tidak menyentuhnya. (Revisi sebelumnya dari halaman ini menempatkan pencabutan pada kelulusan; itu salah.) Satu-satunya otoritas yang dapat dipindahkan migrasi adalah yang Token-2022 transfer-fee yang dijelaskan di bawah.
Kondisi akhirBuyExactIn, BuyExactOut, SellExactIn, SellExactOut akan menolak dari titik ini dengan PoolMigrated. Pool AMM yang dihasilkan adalah kanonik dan berdagang seperti pool AMM v4 / CPMM lainnya. Kesalahan umumPoolFunding, PoolMigrated, MigrateTypeNotMatch, InvalidCpSwapConfig, MathOverflow.

Akun sisa migrasi CPMM

Klien yang membangun MigrateToCpswap harus menggunakan indeks remaining_accounts tetap ini: Instruksi memerlukan setidaknya sepuluh akun yang tersisa. Akun support-mint adalah input CPI read-only. Turunkan kedua alamat bahkan ketika mint tidak memiliki catatan dukungan yang diinisialisasi. Pembangun yang lebih lama yang masih menambahkan akun creator-lock atau menghilangkan indeks 8–9 harus diperbarui.
Berubah di 2026-09. Dua pembersihan, tidak satupun yang mengubah pembangun yang benar:
  • Jalur CPMM berizin sekarang adalah satu-satunya jalur. MigrateToCpswap dulu memilih antara InitializeCpSwap dan InitializeCpSwapWithPermission berdasarkan unix_timestamp >= get_upgrade_timestamp(). Pembantu timestamp dan CPI warisan keduanya hilang, jadi jalur berizin — dan oleh karena itu minimum sepuluh akun — berlaku tanpa syarat.
  • Tiga batasan alamat dipindahkan dari struct akun ke badan instruksi. platform_config, base_vault, dan quote_vault masih diperlukan untuk cocok dengan nilai yang disimpan pada PoolState, tetapi ketidakcocokan sekarang dimunculkan oleh require_keys_eq! daripada oleh batasan address = Anchor. Pemeriksaan setara; hanya permukaan kesalahan yang berbeda — Anda mendapatkan RequireKeysEqViolated (2502) Anchor yang generik daripada ConstraintAddress (2012), dan itu dilaporkan tanpa nama akun. Perbarui penanganan kesalahan apa pun yang cocok pada 2012 untuk ketiga akun ini.

Program token migrasi CPMM

MigrateToCpswap mengambil kedua program token tanpa syarat dan mengetahui program mana yang memiliki setiap mint. Dua akun program token-nya dinamai ulang sesuai: Mereka menggantikan base_token_program (program mana pun yang memiliki mint dasar) dan quote_token_program (selalu warisan) sebelumnya. Posisi tidak berubah, jadi ini adalah perubahan nilai daripada perubahan tata letak — tetapi dua nilai hampir terbalik, dan pembangun yang terus melewatkan pasangan lamanya akan memasok Token-2022 di mana program warisan diperlukan segera setelah salah satu mint adalah mint Token-2022. Program warisan diperlukan bahkan ketika tidak ada mint yang menggunakannya, karena mint LP CPMM dan Fee Key NFT likuiditas terkunci selalu hidup di atasnya.

Daftar putih GlobalConfig Platform

PlatformConfig.restrict_global_config mengontrol pemeriksaan:
  • 0: platform menerima GlobalConfig apa pun yang sebaliknya valid; tidak ada akun izin yang diperlukan.
  • 1: Initialize, InitializeV2, dan InitializeWithToken2022 harus menyertakan PlatformAllowConfig yang cocok di mana saja di remaining_accounts.
Admin platform membuat atau menutup PDA dengan CreatePlatformAllowConfig dan ClosePlatformAllowConfig. Seed-nya adalah [b"platform_allow_config", platform_config, global_config]. Instruksi PlatformGlobalAccess yang dikelola admin sebelumnya dan PDA pensiun.

Aturan parameter peluncuran platform

Empat instruksi mengelola satu akun PlatformCurveRule. Keempat ditandatangani oleh PlatformConfig.curve_rule_manager atau oleh admin platform — program menerima admin dengan menurunkan ulang PDA PlatformConfig dari penandatangan, jadi tidak ada akun terpisah yang membuktikannya. Penandatangan yang bukan keduanya mengembalikan InvalidCurveRuleAuthority. platform_curve_rule adalah PDA di [b"platform_curve_rule", platform_config, global_config].
  • Create mengalokasikan akun yang tidak menyimpan grup. Status itu tidak membatasi apa pun.
  • Update upsert grup dengan group_id itu, menggantinya sepenuhnya jika ada. Itu mengubah ukuran akun agar sesuai, jadi penandatangan menambah sewa yang tumbuh dan menerima kembali sewa yang menyusut. Grup baru di luar kesepuluh mengembalikan CurveRuleGroupsExceeded; lebih dari 25 batasan, bidang yang tidak dikenal atau operator, atau pasangan (field, op) yang sama dua kali dalam satu grup mengembalikan InvalidCurveRuleConstraint; empat bidang yang diturunkan TotalSellA pada konfigurasi non-constant-product mengembalikan CurveRuleFieldNotSupportedByCurve.
  • Remove menjatuhkan satu grup berdasarkan id, menyusutkan akun dan mengembalikan perbedaannya. Id yang tidak dikenal mengembalikan CurveRuleGroupNotExist.
  • Close mengembalikan seluruh sewa ke penandatangan. Konfigurasi kemudian tidak dibatasi lagi bahkan sementara restrict_curve_param tetap 1.
Tidak ada dari keempat yang mengubah apakah aturan ditegakkan. Itu adalah UpdatePlatformConfig::RestrictCurveParam(0 | 1), yang hanya dapat dipanggil admin platform. Di jalur peluncuran. Sementara restrict_curve_param adalah 1, InitializeV2 dan InitializeWithToken2022 memerlukan PDA aturan di remaining_accounts — termasuk ketika itu tidak ada, sehingga menghilangkannya tidak dapat melewati pemeriksaan. Akun yang hilang adalah NotEnoughRemainingAccounts; peluncuran yang tidak memenuhi grup apa pun adalah CurveParamNotMatchPlatformRule. Pemeriksaan berjalan sebelum batas GlobalConfig sendiri dan hanya dapat mempersempit mereka. Model dan playbook: products/launchlab/curve-rules. Kedua kesalahan dapat dihindari sisi klien — SDK mencerminkan pemeriksaan ini sebagai fungsi murni, lihat Periksa sebelum Anda mengirim.

CollectFee

Sapuan admin biaya perdagangan yang terkumpul protokol pada satu peluncuran. Argumen — tidak ada. Akun
quote_mint di sini berada sebelum recipient_token_account — kebalikan dari ClaimCreatorFee, ClaimPlatformFee dan ClaimPlatformFeeFromVault, yang semuanya menempatkan penerima lebih dulu. Kedua slot memiliki tipe Anchor yang berbeda (Mint vs TokenAccount), sehingga menukarnya menyebabkan kegagalan deserialisasi saat runtime dan terlihat seperti bug akun yang salah. CollectMigrateFee memiliki urutan yang sama dengan CollectFee.
Efek — transfer pool_state.quote_protocol_fee dari quote_vault ke recipient_token_account, kemudian nolkan penghitung. Dapat dipanggil kapan saja setelah pembelian pertama.

CollectMigrateFee

Sapuan admin biaya migrasi yang terkumpul pada kelulusan. Bentuk akun yang sama seperti CollectFee dengan migrate_fee_owner sebagai penandatangan (bukan protocol_fee_owner) dan pool_state.migrate_fee sebagai penghitung yang dikuras.

ClaimCreatorFee

Sapuan per-pembuat biaya pembuat yang terkumpul di setiap peluncuran yang dimiliki pembuat yang menggunakan mint kutipan yang sama. Menguras vault biaya per-pembuat, bukan per-pool. Argumen — tidak ada. Akun Efek — transfer seluruh saldo creator_fee_vault ke recipient_token_account. Kembali dengan pemeriksaan require-greater-than-zero jika vault kosong.

ClaimPlatformFee

Sapuan per-platform yang menguras vault kutipan peluncuran secara langsung. Gunakan ini ketika platform ingin mengklaim potongannya untuk satu peluncuran spesifik tanpa melalui vault platform yang diagregasi. Argumen — tidak ada. Akun Efek — transfer pool_state.platform_fee dari quote_vault ke recipient_token_account, nolkan penghitung.

ClaimPlatformFeeFromVault

Sapuan agregat per-platform. Menguras vault biaya per-quote-mint platform yang mengumpulkan biaya dari setiap peluncuran yang dirutekan melalui platform. Argumen — tidak ada. Akun Efek — transfer saldo penuh platform_fee_vault ke recipient_token_account. Kembali jika vault kosong.

CollectExcessLamports

Sapuan admin lamport yang duduk di atas minimum bebas sewa pada akun yang dikendalikan LaunchLab. Ditambahkan dalam upgrade 2026-09 sehingga protokol dapat mengklaim over-funding yang pengurangan sewa SIMD-0437 tinggalkan di akun yang dibuat sebelum setiap langkah. Hanya kelebihan yang bergerak. Saldo token, data akun, pemilik, status kurva dan vesting tidak tersentuh, dan instruksi adalah no-op terhadap akun yang sudah di minimum — jadi aman untuk dijalankan kembali setelah setiap peluncuran. Argumen — tidak ada. Akun Memilih authority Akun dilewatkan tanpa pemeriksaan dan diselesaikan oleh program, yang menurunkan ulang ketiga PDA otoritas LaunchLab dan cocok: Kunci yang tidak cocok dengan salah satu dari ketiga gagal seluruh instruksi dengan InvalidOwner (6001).
Kelompokkan akun sumber Anda berdasarkan otoritas. Satu panggilan membawa satu authority, dan program token memerlukan pemilik akun yang sebenarnya untuk menandatangani. Akun token yang dimiliki oleh salah satu dari tiga PDA yang berbeda dari authority yang Anda lewatkan membuat CPI gagal dan membawa seluruh transaksi dengannya. Sapukan vault pool, vault biaya platform dan vault biaya pembuat dalam transaksi terpisah.PDA milik program adalah pengecualian — mereka didebit langsung, jadi mereka dapat naik dengan otoritas apa pun.
Bagaimana setiap akun sumber ditangani Mint dasar tidak dapat disapu. InitializeV2 dan InitializeWithToken2022 mencabut MintTokens pada mint dasar dalam instruksi yang sama yang mencetak pasokan, jadi tidak ada kunci yang dapat menandatangani WithdrawExcessLamports untuk itu — sewa mint tetap di mana itu selamanya. Kesalahan umumInvalidOwner (6001, penandatangan salah atau authority yang bukan salah satu dari tiga PDA), LamportsCalculateError (6031, putaran wSOL tidak netto ke nol), dan InsufficientFunds dari jalur milik program ketika akun menyimpan kurang dari minimum sewa sendirinya. Tidak ada pembangun SDK. @raydium-io/raydium-sdk-v2 tidak mengirimkan pembangun untuk instruksi ini, dan juga tidak raydium-sdk-V2-demo repo — itu adalah jalur admin. Enkode dengan tangan, cara sapuan sisi dompet di solana-fundamentals/rent-and-reclaimable-rent lakukan untuk instruksi program token.

Instruksi vesting dan platform-config

Ini didokumentasikan di halaman khusus karena masing-masing memiliki model status sendiri:

Matriks perubahan status

Ke mana selanjutnya

Sumber: