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.

Inventaris instruksi

Pemisahan “ExactIn/ExactOut” mencerminkan SwapBaseInput / SwapBaseOutput CPMM — di rantai mereka adalah diskriminator instruksi terpisah dengan pembulatan yang sedikit berbeda. Pemilihan jalur kelulusan. Setiap panggilan Initialize, InitializeV2, dan InitializeWithToken2022 yang baru harus menetapkan migrate_type = 1 (CPSWAP). Setiap upaya untuk menginisialisasi pool yang terikat AMM v4 baru 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. 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 adalah pengecualian: akun quote-program-nya masih diketik ke SPL Token, jadi konfigurasi yang mint kutipannya adalah Token-2022 harus diluncurkan melalui InitializeV2 atau InitializeWithToken2022. MigrateToCpswap adalah pengecualian lainnya, dalam arah yang berlawanan — ia mengambil kedua program tanpa syarat daripada satu per mint. Lihat akun migrasi di bawah.

Initialize

Buat peluncuran baru. Argumen
Akun (ringkas) 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 = base_supply_max, semuanya di base_vault.
  • base_mint.mint_authority = launch_authority, freeze_authority = None.
  • LaunchState diinisialisasi dengan status = Active, base_sold = 0, quote_reserve_real = 0.
  • quote_reserve_target dihitung dari parameter kurva + base_supply_graduation + buy_numerator (kira-kira).
  • Untuk InitializeWithToken2022 dengan TransferFeeConfig terlampir: transfer_fee_config_authority = launch_authority, dan withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth ketika bidang itu diatur, jika tidak launch_authority. Sisi penarikan ditulis pada pembuatan mint tepatnya sehingga platform dapat menyapu biaya yang ditahan sebelum kelulusan. Lihat platform-config.
Kesalahan umumInvalidQuoteMint, FeeRateTooHigh, InvalidCurveParams, MathOverflow.

Buy (varian kanonik: BuyExactIn)

Pengguna menyediakan quote_in tetap; kurva menghitung base_out. Argumen
Akun 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 post-fee quote.
  3. require(base_out ≥ minimum_base_out) jika tidak kembalikan 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 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 dibayar 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 kutipan:
  • Batas yang dihitung seolah-olah mint bebas biaya ditolak. Melewatkan biaya-bebas cost 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 dengan biaya 100% (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.

MigrateToAmm / MigrateToCpswap

Lulus peluncuran ke pool yang dapat diperdagangkan setelah kurva mencapai total_quote_fund_raising. Peluncuran baru hanya CPMM. MigrateToAmm dipertahankan untuk pool yang ada yang disimpan migrate_type 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 MigrateToAmm mengambil tiga (terutama parameter pasar OpenBook yang program teruskan ke AMM v4):
MigrateToCpswap tidak mengambil apa pun. Efek (umum untuk keduanya)
  1. Verifikasi pool_state.status == Migrate (yaitu, quote_reserve_target telah tercapai). Jika tidak kembalikan 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). Jika tidak kembalikan 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. Cabut base_mint.mint_authority (atur ke None).
  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 ulang otoritas ekstensi itu ke kunci platform:
  • transfer_fee_config_authority selalu ditetapkan ulang. PDA authority peluncuran memegangnya untuk seluruh fase pra-kelulusan, jadi selalu ada sesuatu untuk dipindahkan.
  • WithheldWithdraw ditetapkan ulang 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 itu 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 secara permanen. Lihat platform-config. 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 sisa pada jalur yang ditingkatkan. 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.

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 apa 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 mint apa pun 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 valid; tidak ada akun allow 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. Bijinya 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 memegang grup. Status itu tidak membatasi apa pun.
  • Update upsert grup dengan group_id itu, menggantinya sepenuhnya jika ada. Ini 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 diterapkan. Itu adalah UpdatePlatformConfig::RestrictCurveParam(0 | 1), yang hanya dapat dipanggil admin platform. Pada 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

Penyapuan admin biaya perdagangan yang terkumpul protokol pada satu peluncuran. Argumen — tidak ada. Akun 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

Penyapuan 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

Penyapuan 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

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

ClaimPlatformFeeFromVault

Penyapuan agregat per-platform. Menguras vault biaya per-mint-kutipan 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.

Instruksi vesting dan platform-config

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

Matriks perubahan status

Ke mana selanjutnya

Sumber: