Skip to main content
Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →
LaunchLab cung cấp một bộ lệnh chặt chẽ: sáu lệnh dành cho người dùng cộng với một số lệnh quản trị. SDK bao bọc tất cả chúng; trang này ghi lại bề mặt thô cho các công cụ tổng hợp, công cụ giám sát và các chương trình cần CPI.Nâng cấp chương trình 2026-09 đã xây dựng lại LaunchLab trên Anchor 1.0.2 / Solana 3.1.10 và xóa ba cơ chế chuyển tiếp: Initialize không dùng nữa hiện luôn thất bại, MigrateToAmm mất ba đối số và mọi tài khoản OpenBook, và cổng get_upgrade_timestamp khiến một số kiểm tra có điều kiện dựa trên đồng hồ đã bị xóa. Nó cũng thêm một lệnh quản trị, CollectExcessLamports. Xem mục nhập nhật ký thay đổi 2026-09-09.

Danh sách lệnh

Phân chia “ExactIn/ExactOut” phản ánh SwapBaseInput / SwapBaseOutput của CPMM — trên chuỗi chúng là các bộ phân biệt lệnh riêng biệt với làm tròn hơi khác nhau. Lựa chọn đường dẫn tốt độ. Mọi lệnh InitializeV2 và InitializeWithToken2022 mới phải đặt migrate_type = 1 (CPSWAP). Bất kỳ nỗ lực nào để khởi tạo một pool mới được liên kết với AMM v4 sẽ trả về MigrateTypeNotMatch. amm_creator_fee_on chỉ chọn xem phí người tạo CPMM kết quả có áp dụng cho token trích dẫn hay cả hai token; nó không chọn chương trình đích. Initialize kế thừa không thể tạo khởi chạy nữa (xem bên dưới). MigrateToAmm vẫn có thể gọi được cho một PoolState hiện có được khởi tạo với migrate_type = 0 trước khi hạn chế này. Bản phát hành không viết lại trạng thái pool hiện có hoặc xóa lệnh kế thừa. Chương trình token phía trích dẫn. Mint trích dẫn có thể được sở hữu bởi chương trình SPL Token hoặc Token-2022. Mọi lệnh chạm vào nó — CreateConfig, InitializeV2, InitializeWithToken2022, cả bốn lệnh giao dịch, CollectFee, CollectMigrateFee, ClaimCreatorFee, ClaimPlatformFee và ClaimPlatformFeeFromVault — lấy chương trình sở hữu trong vị trí tài khoản chương trình trích dẫn của nó. Vị trí tài khoản không thay đổi; chỉ giá trị được chấp nhận mới thay đổi. Chuyển chương trình thực sự sở hữu GlobalConfig.quote_mint, mà bạn có thể đọc từ bit1 PoolState.token_program_flag cho một khởi chạy hiện có (xem accounts) hoặc từ chủ sở hữu tài khoản mint nếu không. Initialize không dùng nữa là vô ích ở đây: tài khoản chương trình trích dẫn của nó vẫn được nhập vào SPL Token, và kể từ nâng cấp 2026-09 lệnh thất bại trước khi nó đọc bất kỳ tài khoản nào. Khởi chạy thông qua InitializeV2 hoặc InitializeWithToken2022. MigrateToCpswap là ngoại lệ khác, theo hướng ngược lại — nó lấy cả hai chương trình vô điều kiện thay vì một cho mỗi mint. Xem các tài khoản di chuyển bên dưới.

Initialize

Bị xóa kể từ bản nâng cấp 2026-09 — lệnh này luôn thất bại. Handler của initialize hiện chỉ là một log Not supported. Please use initialize_v2 instruction và NotApproved (6000). Nó được giữ lại để discriminator của nó vẫn chiếm chỗ và IDL giữ hình dạng ổn định. (Struct Accounts không thay đổi, vì vậy xác thực do Anchor tạo ra vẫn chạy trước; giao dịch sẽ hoàn nguyên dù sao.)Trước đây nó được kiểm soát bằng đồng hồ: nó hoạt động cho đến ba ngày sau khi cắt get_upgrade_timestamp và thất bại sau đó. Helper timestamp đó đã biến mất, vì vậy bây giờ lỗi là vô điều kiện. Các lần phát hành hiện có được tạo thông qua nó không bị ảnh hưởng — chúng giao dịch và tốt nghiệp bình thường thông qua MigrateToAmm hoặc MigrateToCpswap tùy thuộc vào migrate_type được lưu trữ của chúng.Danh sách đối số và tài khoản dưới đây là của InitializeV2. Initialize không dùng nữa nhận 18 tài khoản giống nhau theo thứ tự giống nhau và chỉ ba đối số đầu tiên — nó không có amm_fee_on — và slot quote_token_program của nó được gõ thành SPL Token thay vì Interface<TokenInterface>.
Tạo một lần phát hành mới. InitializeV2 chỉ thêm đối số amm_fee_on so với Initialize không dùng nữa; số lượng tài khoản và thứ tự giống hệt nhau, và sự khác biệt duy nhất ở cấp độ tài khoản là quote_token_program được gõ Interface<TokenInterface> để chấp nhận mint quote Token-2022. Đối số Bốn đối số vị trí, không phải một struct. (InitializeWithToken2022 thêm một thứ năm, transfer_fee_extension_param: Option<TransferFeeExtensionParams>; Initialize không dùng nữa bỏ amm_fee_on.)
Biến thể phải khớp với global_config.curve_type hoặc lệnh sẽ hoàn nguyên với InputNotMatchCurveConfig (6003). Không có open_time, không có đối số quote_mint (nó đến từ global_config), không có struct fees và không có post_graduation_lp_policy — xử lý LP được đặt trên PlatformConfig, không phải cho mỗi lần phát hành. Tài khoản — 18 tài khoản tổng cộng (16 được khai báo cộng với hai phần phụ #[event_cpi]) Điều kiện tiên quyết
  • quote_mint ∈ launch_config.allowed_quote_mints.
  • base_supply_graduation ≤ base_supply_max.
  • Các tham số phí vượt qua kiểm tra launch_config.max_*_fee_rate.
  • open_time ≥ now − slop (SDK thực thi ≥ now; chương trình chấp nhận backdating nhẹ).
  • curve_type được công nhận.
Điều kiện hậu
  • base_mint có supply = curve_param.supply, tất cả trong base_vault.
  • Quyền mint được thu hồi trong cùng lệnh này (set_authority(MintTokens, None)) ngay sau khi cung cấp được mint — không phải tại tốt nghiệp. Do đó, base mint có cung cấp cố định vĩnh viễn, và không có lệnh nào sau này có thể mint thêm.
  • PoolState được khởi tạo với status = Fund (0), real_a = 0, real_b = 0.
  • total_fund_raising_b đến trực tiếp từ curve_param.total_quote_fund_raising.
  • Đối với InitializeWithToken2022 với TransferFeeConfig được đính kèm: transfer_fee_config_authority = launch_authority, và withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth khi trường đó được đặt, nếu không thì launch_authority. Phía rút được viết tại tạo mint chính xác để nền tảng có thể quét các khoản phí bị giữ lại trước khi tốt nghiệp. Xem platform-config.
Lỗi phổ biến — NotApproved (6000, vô điều kiện, cho Initialize không dùng nữa), InvalidInput (6002, cung cấp / tỷ lệ / sàn gây quỹ từ GlobalConfig bị vi phạm), InputNotMatchCurveConfig (6003, biến thể curve_param không khớp với global_config.curve_type), MigrateTypeNotMatch (6007, migrate_type != 1), MathOverflow (6008), VestingRatioTooHigh (6010), NoSupportExtension (6017), NotEnoughRemainingAccounts (6018), InvalidPlatformAllowConfig (6022), CurveParamNotMatchPlatformRule (6025). Kiểm tra address = / constraint = của Anchor thất bại xuất hiện dưới dạng mã 2xxx, không phải một trong những mã này — không có InvalidQuoteMint, FeeRateTooHigh hoặc InvalidCurveParams tồn tại trong enum lỗi của chương trình.

Buy (biến thể chính tắc: BuyExactIn)

Người dùng cung cấp một lượng đầu vào cố định; đường cong tính toán đầu ra. Đối số
Tất cả bốn lệnh giao dịch nhận ba đối số, không phải hai. Một lệnh được xây dựng chỉ với hai lượng là 8 byte ngắn và không thể giải mã.
Tài khoản Tài khoản còn lại — đường ống phí, được đọc theo thứ tự chính xác này:
  1. share_fee_receiver — chỉ khi share_fee_rate > 0.
  2. system_program — luôn luôn; kiểm tra == System::id(), nếu không thì InvalidInput.
  3. platform_fee_vault — PDA [platform_config, quote_token_mint]; được tạo khi sử dụng lần đầu.
  4. creator_fee_vault — PDA [creator, quote_token_mint]; được tạo khi sử dụng lần đầu.
Chạy ngắn trả về NotEnoughRemainingAccounts (6018). Không có slot associated_token_program, và system_program là tài khoản còn lại thay vì tài khoản được khai báo. Điều kiện tiên quyết
  • launch_state.status == Active.
  • now ≥ open_time.
  • user_quote_ata.balance ≥ quote_in.
  • quote_in > 0.
Hiệu ứng
  1. Chia quote_in thành quote_in_after_fee và các phần phí.
  2. Newton-giải đường cong cho base_out được cung cấp quote sau phí.
  3. require(base_out ≥ minimum_base_out) nếu không hoàn nguyên ExceededSlippage.
  4. Di chuyển quote_in người dùng → vault. Di chuyển base_out vault → người dùng.
  5. Cập nhật base_sold += base_out, quote_reserve_real += quote_in_after_fee × (lp_share / total_share).
  6. Cập nhật bộ đếm phí (protocol_fees_quote, creator_fees_quote).
  7. state_data.num_buys += 1.
  8. Nếu quote_reserve_real ≥ quote_reserve_target sau khi cập nhật, SDK thường xuyên chuỗi một ix Graduate trong cùng một giao dịch. Chương trình không tự động tốt nghiệp bên trong Buy — một Graduate tiếp theo là bắt buộc.

BuyExactOut

Người dùng chỉ định base_out chính xác; chương trình tính toán quote_in. Đối số
Cùng tài khoản và cùng hợp đồng tài khoản còn lại như BuyExactIn. Sử dụng tích phân bậc hai dạng đóng (hoặc CPMM nghịch đảo, cho curve_type 1) thay vì lặp lại Newton.

Sell / SellExactIn / SellExactOut

Đối xứng với Buy. Người dùng trả lại base_in cho đường cong và nhận quote_out. Phí được trừ từ quote_out, vì vậy người dùng nhận được ít hơn lợi suất tích phân thô. Điều kiện tiên quyết —
  • user_base_ata.balance ≥ base_in.
  • Bán không thể đẩy base_sold xuống dưới 0 (dư thừa với điều trên nếu kế toán nhất quán).
  • Launch ở trạng thái Active.
Hiệu ứng — đối xứng với Buy. base_sold giảm, quote_reserve_real giảm. Phí vẫn tích lũy.

Phí chuyển phía quote

Khi quote mint có TransferFeeConfig, số tiền vault di chuyển và số tiền người trả được ghi nợ hoặc ghi có khác nhau, và giới hạn slippage được kiểm tra so với phía người trả. Trên quote mint không có extension, mọi trường hợp dưới đây giống hệt với mint legacy thông thường. Hai hệ quả cho quoting:
  • Một giới hạn được tính toán như thể mint không có phí bị từ chối. Truyền chi phí không có phí làm maximum_amount_in, hoặc lợi suất không có phí làm minimum_amount_out, sẽ hoàn nguyên với ExceededSlippage.
  • real_quote chỉ tiến lên bởi những gì đã đến vault. Một BuyExactIn của amount_in trên quote mint 5% di chuyển real_quote bởi amount_in × 0.95.
Quote mint có phí 100% (10000 basis points) không thể được đảo ngược và hoàn nguyên với CalculateOverflow trên các đường dẫn exact-out. Cả hai mint phía trade cũng bị ràng buộc với chương trình được truyền vào slot phù hợp của chúng, vì vậy base_token_program không khớp giờ đây sẽ thất bại thay vì bị bỏ qua. Xem algorithms/token-2022-transfer-fees để tìm hiểu toán học phí cơ bản.

Tài khoản còn lại của trade

Cả bốn instruction trade đều lấy hệ thống phí của chúng thông qua remaining_accounts, theo thứ tự này:
Thay đổi trong 2026-09: ba cái cuối cùng giờ đây là bắt buộc, và system_program được xác thực. Trước bản phát hành này, chương trình chỉ đọc chúng khi unix_timestamp >= get_upgrade_timestamp(), và bỏ qua toàn bộ phân chia phí platform/creator trước thời điểm đó. Dấu thời gian đã qua lâu, vì vậy hành vi trên mainnet thực tế không thay đổi — nhưng nhánh đã bị xóa khỏi mã, và một builder vẫn còn bỏ qua ba tài khoản giờ đây luôn thất bại với NotEnoughRemainingAccounts (6018) thay vì chỉ sau khi cắt. Slot system_program được kiểm tra thêm so với System::id() và trả về InvalidInput (6002) nếu nó chứa bất cứ thứ gì khác, trong khi trước đây bất kỳ tài khoản nào cũng được chấp nhận ở vị trí đó.

MigrateToAmm / MigrateToCpswap

Nâng cấp một launch thành một pool có thể giao dịch sau khi đường cong đạt total_quote_fund_raising. Các launch mới chỉ hỗ trợ CPMM. MigrateToAmm được giữ lại cho các pool hiện có có migrate_type lưu trữ là 0. Ai ký
  • MigrateToAmm — ví migrate_to_amm_wallet được ghi lại trên GlobalConfig liên kết.
  • MigrateToCpswap — ví migrate_to_cpswap_wallet được ghi lại trên GlobalConfig liên kết.
Những ví này thường được giữ bởi crank nâng cấp do Raydium vận hành; trong thực tế, nâng cấp diễn ra vài giây sau khi ngưỡng bị vượt qua, bất kể ai kích hoạt lần mua cuối cùng. Đối số Cả hai đều không nhận bất kỳ đối số nào.
Thay đổi phá vỡ (chỉ ví di chuyển, 2026-09). MigrateToAmm đã loại bỏ cả ba đối số — base_lot_size, quote_lot_size, market_vault_signer_nonce — và chín tài khoản. Dữ liệu hướng dẫn của nó hiện chỉ là discriminator trần, vì vậy một builder cũ vừa gửi 17 byte đối số không mong muốn vừa cung cấp danh sách tài khoản không còn phù hợp.Điều này theo sau loại bỏ OpenBook của AMM v4: Initialize2 của AMM v4 không còn nhận market_program hoặc amm_open_orders, vì vậy LaunchLab không còn gì để chuyển tiếp. Chương trình cũng dừng CPI-ing initialize_openbook_market, đó là những gì ba đối số đó cấu hình.Tài khoản bị loại bỏ: openbook_program, request_queue, event_queue, bids, asks, market_vault_signer, market_base_vault, market_quote_vault, và amm_open_orders. Tài khoản market vẫn ở vị trí của nó — AMM v4 vẫn ghi lại nó như một trường tham chiếu — nhưng hiện nó được khai báo là #[account(mut)] trần: không có ràng buộc chủ sở hữu, địa chỉ hoặc seed. Nó hoàn toàn không được xác thực, nó được chuyển tiếp trực tiếp vào CPI Initialize2 của AMM v4, và chương trình không còn khởi tạo nó. Một người gọi muốn tài khoản market là một market đã khởi tạo thực sự phải tự tạo nó trước đó.Danh sách 23 tài khoản còn lại, theo thứ tự: 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 không bị ảnh hưởng — nó không bao giờ có đối số.
Hiệu ứng (chung cho cả hai)
  1. Xác minh pool_state.status == Migrate (tức là quote_reserve_target đã được đạt). Nếu không, hoàn nguyên với PoolMigrated (trạng thái đã là Migrated) hoặc PoolFunding (vẫn đang tài trợ).
  2. Xác minh pool_state.migrate_type khớp với hướng dẫn (0 cho AMM, 1 cho CPMM). Nếu không, hoàn nguyên với MigrateTypeNotMatch.
  3. Tính toán dự trữ sau nâng cấp:
    • 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 vào chương trình đích (AMM v4 Initialize2 hoặc CPMM InitializeWithPermission) với những dự trữ đó để tạo pool sau nâng cấp.
  5. Đối với các di chuyển CPMM được thực hiện sau nâng cấp 2026-08-17, kết hợp platform_scale + creator_scale thành một cổ phần LP bị khóa do nền tảng sở hữu và mint tối đa một NFT Fee Key cho platform_nft_wallet. Đốt phần còn lại burn_scale. Trước nâng cấp, creator_scale bị khóa riêng biệt và Fee Key của nó đi đến người tạo token. Các di chuyển lịch sử đã hoàn thành không được sửa đổi. Đối với nâng cấp AMM v4 kế thừa, việc xử lý LP tuân theo luồng hiện có của hướng dẫn đó.
  6. (Không có bước mint-authority. base_mint.mint_authority đã được đặt thành None khi tạo launch — xem ghi chú dưới đây.)
  7. Lật pool_state.status = Migrated, đặt vesting_schedule.start_time = block_time + cliff_period.
Bàn giao quyền hạn transfer-fee Token-2022 — khi base mint là mint Token-2022 mang TransferFeeConfig và PlatformConfig.transfer_fee_extension_auth không phải mặc định, di chuyển cũng tái chỉ định các quyền hạn của phần mở rộng đó cho khóa nền tảng:
  • transfer_fee_config_authority luôn được tái chỉ định. PDA authority của launch giữ nó cho toàn bộ giai đoạn trước nâng cấp, vì vậy luôn có thứ gì đó để di chuyển.
  • WithheldWithdraw được tái chỉ định chỉ khi PDA authority vẫn giữ nó. Các launch được tạo từ 2026-08-27 trở đi đã mang transfer_fee_extension_auth trên quyền hạn đó từ lúc tạo mint, vì vậy bước này bị bỏ qua. Bảo vệ là những gì ngăn di chuyển không hoàn nguyên trên những mint đó — PDA không thể ký bỏ quyền hạn mà nó không còn giữ.
Nếu transfer_fee_extension_auth là Pubkey::default() tại thời điểm di chuyển, không có quyền hạn nào di chuyển và cả hai đều ở lại với PDA authority vĩnh viễn. Xem platform-config.
Cung cấp của base mint được cố định từ lúc tạo, không phải từ lúc nâng cấp. InitializeV2 và InitializeWithToken2022 mint toàn bộ cung cấp vào base vault và sau đó ngay lập tức thu hồi MintTokens trong cùng một hướng dẫn, vì vậy base_mint.mint_authority là None cho toàn bộ vòng đời của launch. Di chuyển không chạm vào nó. (Các bản sửa đổi trước đây của trang này đặt việc thu hồi tại nâng cấp; điều đó là sai.) Các quyền hạn duy nhất mà di chuyển có thể di chuyển là những quyền hạn transfer-fee Token-2022 được mô tả dưới đây.
Điều kiện sau — BuyExactIn, BuyExactOut, SellExactIn, SellExactOut sẽ từ chối từ điểm này trở đi với PoolMigrated. Pool AMM kết quả là chính tắc và giao dịch như bất kỳ pool AMM v4 / CPMM nào khác. Lỗi phổ biến — PoolFunding, PoolMigrated, MigrateTypeNotMatch, InvalidCpSwapConfig, MathOverflow.

Tài khoản còn lại di chuyển CPMM

Các client xây dựng MigrateToCpswap phải sử dụng các chỉ số remaining_accounts cố định này: Hướng dẫn yêu cầu ít nhất mười tài khoản còn lại. Các tài khoản support-mint là đầu vào CPI chỉ đọc. Lấy cả hai địa chỉ ngay cả khi mint không có bản ghi support đã khởi tạo. Các builder cũ hơn vẫn nối các tài khoản creator-lock hoặc bỏ qua chỉ số 8–9 phải được cập nhật.
Thay đổi trong 2026-09. Hai dọn dẹp, không cái nào thay đổi một builder chính xác:
  • Đường dẫn CPMM được phép giờ đây là đường dẫn duy nhất. MigrateToCpswap từng chọn giữa InitializeCpSwap và InitializeCpSwapWithPermission dựa trên unix_timestamp >= get_upgrade_timestamp(). Trợ giúp timestamp và CPI kế thừa đều biến mất, vì vậy đường dẫn được phép — và do đó mức tối thiểu mười tài khoản — áp dụng vô điều kiện.
  • Ba ràng buộc địa chỉ được di chuyển từ struct tài khoản vào phần thân hướng dẫn. platform_config, base_vault, và quote_vault vẫn được yêu cầu khớp với các giá trị được lưu trữ trên PoolState, nhưng sự không khớp hiện được nâng cao bởi require_keys_eq! thay vì ràng buộc address = của Anchor. Kiểm tra tương đương; chỉ bề mặt lỗi khác — bạn nhận được RequireKeysEqViolated (2502) chung chung của Anchor thay vì ConstraintAddress (2012), và nó được báo cáo mà không có tên tài khoản. Cập nhật bất kỳ xử lý lỗi nào khớp với 2012 cho ba tài khoản này.

Chương trình token di chuyển CPMM

MigrateToCpswap nhận cả hai chương trình token vô điều kiện và tự xác định chương trình nào sở hữu mỗi mint. Hai tài khoản chương trình token của nó được đổi tên tương ứng: Chúng thay thế base_token_program trước đây (chương trình nào sở hữu base mint) và quote_token_program (luôn là kế thừa). Các vị trí không thay đổi, vì vậy đây là thay đổi giá trị chứ không phải thay đổi bố cục — nhưng hai giá trị gần như bị đảo ngược, và một builder giữ cặp cũ của nó sẽ cung cấp Token-2022 nơi chương trình kế thừa được yêu cầu ngay khi một trong hai mint là mint Token-2022. Chương trình kế thừa được yêu cầu ngay cả khi không mint nào sử dụng nó, vì mint LP CPMM và NFT Fee Key khóa-liquidity luôn sống trên nó.

Danh sách cho phép GlobalConfig nền tảng

PlatformConfig.restrict_global_config kiểm soát kiểm tra:
  • 0: nền tảng chấp nhận bất kỳ GlobalConfig nào hợp lệ; không cần tài khoản cho phép.
  • 1: Initialize, InitializeV2, và InitializeWithToken2022 phải bao gồm PlatformAllowConfig phù hợp ở bất kỳ đâu trong remaining_accounts.
Admin nền tảng tạo hoặc đóng PDA bằng CreatePlatformAllowConfig và ClosePlatformAllowConfig. Các seed của nó là [b"platform_allow_config", platform_config, global_config]. Các hướng dẫn PDA và PlatformGlobalAccess do admin quản lý trước đây đã được loại bỏ.

Quy tắc tham số khởi chạy nền tảng

Bốn hướng dẫn quản lý một tài khoản PlatformCurveRule. Cả bốn đều được ký bởi PlatformConfig.curve_rule_manager hoặc bởi admin nền tảng — chương trình chấp nhận admin bằng cách lấy lại PDA PlatformConfig từ người ký, vì vậy không có tài khoản riêng biệt chứng minh nó. Một người ký không phải là cả hai trả về InvalidCurveRuleAuthority. platform_curve_rule là PDA tại [b"platform_curve_rule", platform_config, global_config].
  • Create cấp phát tài khoản không giữ nhóm nào. Trạng thái đó không hạn chế bất cứ điều gì.
  • Update upserts nhóm với group_id đó, thay thế nó hoàn toàn nếu nó tồn tại. Nó thay đổi kích thước tài khoản để phù hợp, vì vậy người ký bổ sung tiền thuê nó tăng lên và nhận lại tiền thuê nó giảm xuống. Một nhóm mới vượt quá nhóm thứ mười trả về CurveRuleGroupsExceeded; hơn 25 ràng buộc, trường không xác định hoặc toán tử, hoặc cặp (field, op) giống nhau hai lần trong một nhóm trả về InvalidCurveRuleConstraint; bốn trường dẫn xuất TotalSellA trên config không phải constant-product trả về CurveRuleFieldNotSupportedByCurve.
  • Remove loại bỏ một nhóm theo id, thu nhỏ tài khoản và hoàn lại sự khác biệt. Một id không xác định trả về CurveRuleGroupNotExist.
  • Close trả lại toàn bộ tiền thuê cho người ký. Config sau đó không bị hạn chế lại ngay cả khi restrict_curve_param vẫn là 1.
Không có cái nào trong bốn cái thay đổi liệu quy tắc có được thực thi hay không. Đó là UpdatePlatformConfig::RestrictCurveParam(0 | 1), chỉ admin nền tảng mới có thể gọi. Trên đường dẫn khởi chạy. Trong khi restrict_curve_param là 1, InitializeV2 và InitializeWithToken2022 yêu cầu PDA quy tắc trong remaining_accounts — bao gồm khi nó không tồn tại, vì vậy bỏ qua nó không thể bỏ qua kiểm tra. Một tài khoản bị thiếu là NotEnoughRemainingAccounts; một launch không thỏa mãn nhóm nào là CurveParamNotMatchPlatformRule. Kiểm tra chạy trước các giới hạn của GlobalConfig riêng của nó và chỉ có thể thu hẹp chúng. Mô hình và playbooks: products/launchlab/curve-rules. Cả hai lỗi đều có thể tránh được phía client — SDK phản chiếu kiểm tra này như một hàm thuần túy, xem Kiểm tra trước khi bạn gửi.

CollectFee

Quét phí giao dịch tích lũy của giao thức trên một lần phát hành duy nhất. Tham số — không có. Tài khoản
quote_mint xuất hiện trước recipient_token_account ở đây — ngược lại với ClaimCreatorFee, ClaimPlatformFee và ClaimPlatformFeeFromVault, những cái này đặt người nhận trước. Hai vị trí có các kiểu Anchor khác nhau (Mint vs TokenAccount), vì vậy hoán đổi chúng sẽ thất bại khi giải tuần tự hóa tại thời chạy và trông giống như lỗi tài khoản sai. CollectMigrateFee có cùng thứ tự với CollectFee.
Hiệu ứng — chuyển pool_state.quote_protocol_fee từ quote_vault đến recipient_token_account, sau đó đặt bộ đếm về không. Có thể gọi bất kỳ lúc nào sau lần mua đầu tiên.

CollectMigrateFee

Quét phí di chuyển tích lũy tại thời điểm hoàn tất. Cùng hình dạng tài khoản với CollectFee nhưng với migrate_fee_owner là người ký (thay vì protocol_fee_owner) và pool_state.migrate_fee là bộ đếm được rút.

ClaimCreatorFee

Quét phí người tạo tích lũy cho mỗi người tạo trên mọi lần phát hành mà người tạo sở hữu sử dụng cùng quote mint. Rút từ vault phí theo người tạo, không phải vault theo pool. Tham số — không có. Tài khoản Hiệu ứng — chuyển toàn bộ số dư của creator_fee_vault đến recipient_token_account. Hoàn tác với kiểm tra yêu cầu lớn hơn không nếu vault trống.

ClaimPlatformFee

Quét theo nền tảng rút trực tiếp từ vault quote của một lần phát hành. Sử dụng cái này khi một nền tảng muốn yêu cầu phần của nó cho một lần phát hành cụ thể mà không cần đi qua vault nền tảng tổng hợp. Tham số — không có. Tài khoản Hiệu ứng — chuyển pool_state.platform_fee từ quote_vault đến recipient_token_account, đặt bộ đếm về không.

ClaimPlatformFeeFromVault

Quét tổng hợp theo nền tảng. Rút vault phí theo quote mint của nền tảng tích lũy phí từ mọi lần phát hành được định tuyến qua nền tảng. Tham số — không có. Tài khoản Hiệu ứng — chuyển toàn bộ số dư của platform_fee_vault đến recipient_token_account. Hoàn tác nếu vault trống.

CollectExcessLamports

Quét lamport của quản trị viên nằm trên mức tối thiểu miễn phí thuê trên các tài khoản mà LaunchLab kiểm soát. Được thêm vào trong bản nâng cấp 2026-09 để giao thức có thể lấy lại quỹ dư thừa mà SIMD-0437 rent reduction để lại trên các tài khoản được tạo trước mỗi bước. Chỉ phần dư thừa được di chuyển. Số dư token, dữ liệu tài khoản, chủ sở hữu, trạng thái đường cong và vesting không bị ảnh hưởng, và lệnh là không hoạt động đối với tài khoản đã ở mức tối thiểu của nó — vì vậy nó an toàn để chạy lại sau mỗi bước triển khai. Tham số — không có. Tài khoản Chọn authority Tài khoản được chuyển mà không kiểm tra và được giải quyết bởi chương trình, chương trình này sẽ lấy lại tất cả ba PDA quyền của LaunchLab và khớp: Một khóa không khớp với bất kỳ ba cái nào sẽ làm cho toàn bộ lệnh thất bại với InvalidOwner (6001).
Nhóm các tài khoản nguồn của bạn theo quyền. Một lệnh gọi mang một authority, và chương trình token yêu cầu chủ sở hữu thực tế của tài khoản phải ký. Một tài khoản token được sở hữu bởi một trong ba PDA khác so với authority mà bạn chuyển sẽ làm cho CPI thất bại và đưa toàn bộ giao dịch cùng với nó. Quét vault pool, vault phí nền tảng và vault phí người tạo trong các giao dịch riêng biệt.PDA được sở hữu bởi chương trình là ngoại lệ — chúng được ghi nợ trực tiếp, vì vậy chúng có thể đi cùng với bất kỳ quyền nào.
Cách xử lý mỗi tài khoản nguồn Không thể quét base mint. InitializeV2 và InitializeWithToken2022 thu hồi MintTokens trên base mint trong cùng lệnh mà nó mint cung cấp, vì vậy không có khóa nào có thể ký WithdrawExcessLamports cho nó — rent của mint ở lại vĩnh viễn. Lỗi phổ biến — InvalidOwner (6001, người ký sai hoặc authority không phải là một trong ba PDA), LamportsCalculateError (6031, vòng wSOL không kết thúc bằng không), và InsufficientFunds từ đường dẫn được sở hữu bởi chương trình khi tài khoản giữ ít hơn mức tối thiểu rent của chính nó. Không có SDK builder. @raydium-io/raydium-sdk-v2 không cung cấp builder cho lệnh này, và raydium-sdk-V2-demo repo cũng không — đó là một đường dẫn quản trị viên. Mã hóa nó bằng tay, theo cách mà quét phía ví trong solana-fundamentals/rent-and-reclaimable-rent làm cho lệnh chương trình token.

Lệnh vesting và platform-config

Những cái này được ghi lại trên các trang chuyên dụng vì mỗi cái có mô hình trạng thái riêng:

Ma trận thay đổi trạng thái

Tiếp theo đi đâu

Nguồn: