Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
LaunchLab stellt einen kompakten Anweisungssatz bereit: sechs benutzergerichtete Aufrufe plus eine Handvoll Admin-Primitive. Das SDK umhüllt alle; diese Seite dokumentiert die rohe Oberfläche für Aggregatoren, Überwachungstools und Programme, die CPI benötigen.Das Programm-Upgrade 2026-09 hat LaunchLab auf Anchor 1.0.2 / Solana 3.1.10 neu aufgebaut und drei Übergangsmechanismen gelöscht: das veraltete Initialize schlägt jetzt immer fehl, MigrateToAmm verlor seine drei Argumente und jedes OpenBook-Konto, und das get_upgrade_timestamp-Gate, das mehrere Prüfungen vom Clock abhängig machte, ist weg. Es fügt auch eine Admin-Anweisung hinzu, CollectExcessLamports. Siehe den Changelog-Eintrag vom 2026-09-09.

Anweisungsbestand

Die „ExactIn/ExactOut”-Aufteilung spiegelt CPMMs SwapBaseInput / SwapBaseOutput — On-Chain sind sie separate Anweisungs-Diskriminatoren mit leicht unterschiedlichem Rounding. Graduierungs-Pfad-Auswahl. Jeder neue InitializeV2 und InitializeWithToken2022 Aufruf muss migrate_type = 1 (CPSWAP) setzen. Jeder Versuch, einen neuen AMM v4-gebundenen Pool zu initialisieren, gibt MigrateTypeNotMatch zurück. amm_creator_fee_on wählt nur, ob die resultierende CPMM-Ersteller-Gebühr auf den Quote-Token oder beide Token angewendet wird; es wählt nicht das Ziel-Programm. Das veraltete Initialize kann überhaupt keinen Launch mehr erstellen (siehe unten). MigrateToAmm bleibt für einen bestehenden PoolState aufrufbar, der mit migrate_type = 0 vor dieser Einschränkung initialisiert wurde. Das Release schreibt den bestehenden Pool-Status nicht um und entfernt die Legacy-Anweisung nicht. Quote-seitiges Token-Programm. Der Quote Mint kann dem SPL Token-Programm oder Token-2022 gehören. Jede Anweisung, die ihn berührt — CreateConfig, InitializeV2, InitializeWithToken2022, alle vier Handelsanweisungen, CollectFee, CollectMigrateFee, ClaimCreatorFee, ClaimPlatformFee und ClaimPlatformFeeFromVault — nimmt das besitzende Programm in seinen Quote-Programm-Kontoslot. Kontopositionen haben sich nicht geändert; nur der akzeptierte Wert hat sich geändert. Übergeben Sie das Programm, das tatsächlich GlobalConfig.quote_mint besitzt, das Sie aus PoolState.token_program_flag Bit1 für einen bestehenden Launch lesen können (siehe accounts) oder andernfalls aus dem Mint-Konto-Besitzer. Das veraltete Initialize ist hier irrelevant: Sein Quote-Programm-Konto ist immer noch auf SPL Token typisiert, und seit dem 2026-09-Upgrade schlägt die Anweisung fehl, bevor sie ein Konto liest. Starten Sie über InitializeV2 oder InitializeWithToken2022. MigrateToCpswap ist die andere Ausnahme, in die entgegengesetzte Richtung — es nimmt beide Programme bedingungslos statt eines pro Mint. Siehe die Migrations-Konten unten.

Initialize

Seit dem 2026-09-Upgrade faktisch entfernt — diese Anweisung schlägt immer fehl. Der Handler von initialize ist jetzt nichts als ein Log von Not supported. Please use initialize_v2 instruction und NotApproved (6000). Sie wird rein beibehalten, damit ihr Diskriminator besetzt bleibt und die IDL eine stabile Form behält. (Die Accounts-Struktur ist unverändert, daher läuft Anchors generierte Validierung immer noch zuerst; die Transaktion wird unabhängig davon rückgängig gemacht.)Zuvor war sie vom Clock abhängig: Sie funktionierte bis drei Tage nach dem get_upgrade_timestamp Cutover und schlug danach fehl. Dieser Timestamp-Helper ist weg, daher ist der Fehler jetzt bedingungslos. Bestehende Launches, die durch ihn erstellt wurden, sind unbeeinträchtigt — sie handeln und graduieren normal über MigrateToAmm oder MigrateToCpswap je nach ihrem gespeicherten migrate_type.Die Argumente und die Kontoliste unten sind die von InitializeV2. Das veraltete Initialize nimmt dieselben 18 Konten in derselben Reihenfolge und nur die ersten drei Argumente — es hat kein amm_fee_on — und sein quote_token_program-Slot ist auf SPL Token typisiert statt auf Interface<TokenInterface>.
Erstellen Sie einen neuen Launch. InitializeV2 fügt gegenüber dem veralteten Initialize nur das Argument amm_fee_on hinzu; Anzahl und Reihenfolge der Konten sind identisch, und der einzige Unterschied auf Kontoebene ist, dass quote_token_program als Interface<TokenInterface> typisiert ist, sodass eine Token-2022-Quote-Mint akzeptiert wird. Argumente Vier positionale Argumente, kein einzelnes Struct. (InitializeWithToken2022 hängt ein fünftes an, transfer_fee_extension_param: Option<TransferFeeExtensionParams>; dem veralteten Initialize fehlt amm_fee_on.)
Die Variante muss global_config.curve_type entsprechen, sonst revertiert die Anweisung mit InputNotMatchCurveConfig (6003). Es gibt kein open_time, kein quote_mint-Argument (es kommt aus global_config), kein fees-Struct und kein post_graduation_lp_policy — die LP-Verwertung wird auf der PlatformConfig gesetzt, nicht pro Launch. Konten — insgesamt 18 (16 deklarierte plus die beiden #[event_cpi]-Anhänge) Vorbedingungen
  • quote_mint ∈ launch_config.allowed_quote_mints.
  • base_supply_graduation ≤ base_supply_max.
  • Gebührenparameter bestehen launch_config.max_*_fee_rate Prüfungen.
  • open_time ≥ now − slop (SDK erzwingt ≥ now; Programm toleriert leichte Rückdatierung).
  • curve_type wird erkannt.
Nachbedingungen
  • base_mint hat supply = curve_param.supply, alles in base_vault.
  • Die Mint-Autorität wird in derselben Anweisung widerrufen (set_authority(MintTokens, None)), direkt nachdem das Angebot geprägt wurde — nicht bei der Graduation. Die Base-Mint hat daher dauerhaft ein festes Angebot, und keine spätere Anweisung kann mehr prägen.
  • PoolState wird initialisiert mit status = Fund (0), real_a = 0, real_b = 0.
  • total_fund_raising_b kommt direkt aus curve_param.total_quote_fund_raising.
  • Für InitializeWithToken2022 mit angehängtem TransferFeeConfig: transfer_fee_config_authority = launch_authority, und withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth, wenn dieses Feld gesetzt ist, andernfalls launch_authority. Die Abhebungsseite wird genau deshalb bei der Mint-Erstellung geschrieben, damit die Plattform einbehaltene Gebühren vor der Graduierung einziehen kann. Siehe platform-config.
Häufige FehlerNotApproved (6000, bedingungslos, für das veraltete Initialize), InvalidInput (6002, eine Angebots-/Raten-/Fundraising-Untergrenze aus GlobalConfig verletzt), InputNotMatchCurveConfig (6003, die curve_param-Variante passt nicht zu global_config.curve_type), MigrateTypeNotMatch (6007, migrate_type != 1), MathOverflow (6008), VestingRatioTooHigh (6010), NoSupportExtension (6017), NotEnoughRemainingAccounts (6018), InvalidPlatformAllowConfig (6022), CurveParamNotMatchPlatformRule (6025). Eine fehlgeschlagene Anchor-Prüfung address = / constraint = erscheint als 2xxx-Code, nicht als einer dieser — keiner von InvalidQuoteMint, FeeRateTooHigh oder InvalidCurveParams existiert im Fehler-Enum des Programms.

Buy (kanonische Variante: BuyExactIn)

Der Benutzer stellt einen festen Eingabebetrag bereit; die Kurve berechnet die Ausgabe. Argumente
Konten Verbleibende Konten — die Gebühren-Verdrahtung, in genau dieser Reihenfolge gelesen:
  1. share_fee_receivernur wenn share_fee_rate > 0.
  2. system_program — immer; geprüft == System::id(), sonst InvalidInput.
  3. platform_fee_vault — PDA [platform_config, quote_token_mint]; wird bei der ersten Verwendung erstellt.
  4. creator_fee_vault — PDA [creator, quote_token_mint]; wird bei der ersten Verwendung erstellt.
Zu wenige Konten ergeben NotEnoughRemainingAccounts (6018). Es gibt keinen associated_token_program- Slot, und system_program ist ein verbleibendes Konto und kein deklariertes. Vorbedingungen
  • launch_state.status == Active.
  • now ≥ open_time.
  • user_quote_ata.balance ≥ quote_in.
  • quote_in > 0.
Effekt
  1. Teilen Sie quote_in in quote_in_after_fee und die Gebührenteile auf.
  2. Newton-Lösen der Kurve für base_out gegeben das Post-Fee-Quote.
  3. require(base_out ≥ minimum_base_out) andernfalls Rückgängigmachen ExceededSlippage.
  4. Verschieben Sie quote_in Benutzer → Vault. Verschieben Sie base_out Vault → Benutzer.
  5. Aktualisieren Sie base_sold += base_out, quote_reserve_real += quote_in_after_fee × (lp_share / total_share).
  6. Aktualisieren Sie Gebührenzähler (protocol_fees_quote, creator_fees_quote).
  7. state_data.num_buys += 1.
  8. Wenn quote_reserve_real ≥ quote_reserve_target nach der Aktualisierung, verkettete das SDK typischerweise eine Graduate ix in derselben Transaktion. Das Programm graduiert nicht automatisch innerhalb von Buy — eine nachfolgende Graduate ist erforderlich.

BuyExactOut

Der Benutzer gibt das genaue base_out an; das Programm berechnet quote_in. Argumente
Gleiche Konten und derselbe Vertrag für verbleibende Konten wie bei BuyExactIn. Verwendet das geschlossene quadratische Integral (oder CPMM-Inverse für curve_type 1) statt Newton-Iteration.

Sell / SellExactIn / SellExactOut

Spiegelbild von Buy. Benutzer gibt base_in an die Kurve zurück und erhält quote_out. Die Gebühr wird von quote_out abgezogen, daher erhält der Benutzer weniger als die rohen integrierten Einnahmen. Vorbedingungen
  • user_base_ata.balance ≥ base_in.
  • Der Verkauf kann base_sold nicht unter 0 drücken (redundant mit dem obigen, wenn die Buchhaltung konsistent ist).
  • Launch ist Active.
Effekt — symmetrisch zu Buy. base_sold sinkt, quote_reserve_real sinkt. Gebühren fallen weiterhin an.

Quote-seitige Transfergebühren

Wenn der Quote Mint ein TransferFeeConfig trägt, unterscheiden sich der Betrag, den der Vault bewegt, und der Betrag, um den der Zahler belastet oder gutgeschrieben wird, und die Slippage-Grenze wird gegen die Zahlerseite geprüft. Bei einem Quote Mint ohne die Erweiterung ist jeder Fall unten identisch mit einem einfachen Legacy Mint. Zwei Konsequenzen für Angebote:
  • Eine Grenze, die berechnet wird, als wäre der Mint gebührenfrei, wird abgelehnt. Die gebührenfreien Kosten als maximum_amount_in oder die gebührenfreien Einnahmen als minimum_amount_out zu übergeben, führt zu ExceededSlippage.
  • real_quote rückt nur um das vor, was den Vault erreichte. Ein BuyExactIn von amount_in auf einem 5%-Quote-Mint bewegt real_quote um amount_in × 0.95.
Ein 100%-Gebühren-Quote-Mint (10000 Basispunkte) kann nicht invertiert werden und führt zu CalculateOverflow auf den Exact-Out-Pfaden. Beide Handelsseiten-Mints sind auch auf das Programm beschränkt, das in ihrem passenden Slot übergeben wird, daher schlägt ein nicht übereinstimmendes base_token_program jetzt fehl, statt ignoriert zu werden. Siehe algorithms/token-2022-transfer-fees für die zugrunde liegende Gebührenmathe.

Handels-Restkonten

Alle vier Handelsanweisungen nehmen ihre Gebühren-Rohrleitungen durch remaining_accounts in dieser Reihenfolge:
Geändert in 2026-09: Die letzten drei sind jetzt bedingungslos, und system_program wird validiert. Vor diesem Release las das Programm sie nur, wenn unix_timestamp >= get_upgrade_timestamp(), und übersprung die Plattform-/Ersteller-Gebühren-Aufteilung ganz davor. Der Timestamp ist lange vorbei, daher ist das Verhalten auf Mainnet praktisch unverändert — aber der Branch ist aus dem Code weg, und ein Builder, der die drei Konten immer noch auslässt, schlägt jetzt immer mit NotEnoughRemainingAccounts (6018) fehl, statt nur nach dem Cutover. Der system_program-Slot wird zusätzlich gegen System::id() geprüft und gibt InvalidInput (6002) zurück, wenn er etwas anderes hält, wo zuvor jedes Konto in dieser Position akzeptiert wurde.

MigrateToAmm / MigrateToCpswap

Graduieren Sie einen Launch in einen handelbaren Pool, sobald die Kurve total_quote_fund_raising erreicht hat. Neue Launches sind nur CPMM. MigrateToAmm wird für bestehende Pools beibehalten, deren gespeicherter migrate_type 0 ist. Wer unterzeichnet
  • MigrateToAmm — das migrate_to_amm_wallet auf der Bindungs-GlobalConfig aufgezeichnet.
  • MigrateToCpswap — das migrate_to_cpswap_wallet auf der Bindungs-GlobalConfig aufgezeichnet.
Diese Wallets werden typischerweise vom Raydium-betriebenen Graduierungs-Crank gehalten; in der Praxis landet die Graduierung Sekunden, nachdem der Schwellenwert überschritten wird, unabhängig davon, wer den letzten Kauf auslöste. Argumente Keiner nimmt welche.
Breaking Change (nur Migrations-Wallet, 2026-09). MigrateToAmm ließ alle drei Argumente fallen — base_lot_size, quote_lot_size, market_vault_signer_nonceund neun Konten. Seine Anweisungsdaten sind jetzt der bloße Diskriminator, daher sendet ein alter Builder sowohl 17 unerwartete Argument-Bytes als auch eine Kontoliste, die nicht mehr ausgerichtet ist.Dies folgt AMM v4s eigenem OpenBook-Entfernung: AMM v4s Initialize2 nimmt nicht mehr market_program oder amm_open_orders, daher hatte LaunchLab nichts mehr zum Weiterleiten. Das Programm hörte auch auf, initialize_openbook_market zu CPI-en, das die drei Argumente konfiguriert.Entfernte Konten: openbook_program, request_queue, event_queue, bids, asks, market_vault_signer, market_base_vault, market_quote_vault und amm_open_orders. Das market-Konto bleibt in seiner Position — AMM v4 zeichnet es immer noch als Referenzfeld auf — aber es ist jetzt als bloßes #[account(mut)] deklariert: kein Besitzer, Adresse oder Seeds-Constraint. Es ist völlig unvalidiert, es wird direkt in AMM v4s Initialize2 CPI weitergeleitet, und das Programm initialisiert es nicht mehr. Ein Aufrufer, der das Market-Konto als echten initialisierten Market haben möchte, muss es sich selbst vorher erstellen.Die verbleibende 23-Kontoliste ist in Reihenfolge: 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 ist unbeeinträchtigt — es hatte nie Argumente.
Effekt (gemeinsam für beide)
  1. Verifizieren Sie pool_state.status == Migrate (d.h. quote_reserve_target wurde erreicht). Andernfalls Rückgängigmachen mit PoolMigrated (Status war bereits Migrated) oder PoolFunding (noch in Finanzierung).
  2. Verifizieren Sie pool_state.migrate_type stimmt mit der Anweisung überein (0 für AMM, 1 für CPMM). Andernfalls Rückgängigmachen mit MigrateTypeNotMatch.
  3. Berechnen Sie die Post-Graduierungs-Reserven:
    • 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 in das Ziel-Programm (AMM v4 Initialize2 oder CPMM InitializeWithPermission) mit diesen Reserven, um den Post-Graduierungs-Pool zu erstellen.
  5. Für CPMM-Migrationen, die nach dem 2026-08-17-Upgrade ausgeführt wurden, kombinieren Sie platform_scale + creator_scale in einen Plattform-eigenen gesperrten LP-Anteil und prägen Sie höchstens einen Fee Key NFT zu platform_nft_wallet. Verbrennen Sie den burn_scale-Rest. Vor dem Upgrade war creator_scale separat gesperrt und sein Fee Key ging an den Token-Ersteller. Abgeschlossene historische Migrationen werden nicht geändert. Für Legacy AMM v4 Graduierung folgt die LP-Disposition dem bestehenden Flow dieser Anweisung.
  6. (Kein Mint-Authority-Schritt. base_mint.mint_authority war bereits bei der Launch-Erstellung auf None gesetzt — siehe die Notiz unten.)
  7. Kippen Sie pool_state.status = Migrated, setzen Sie vesting_schedule.start_time = block_time + cliff_period.
Token-2022 Transfer-Fee Authority Übergabe — wenn der Base Mint ein Token-2022 Mint ist, der TransferFeeConfig trägt und PlatformConfig.transfer_fee_extension_auth nicht-Standard ist, weist die Migration auch diese Erweiterungs-Autoritäten dem Plattform-Schlüssel zu:
  • transfer_fee_config_authority wird immer neu zugewiesen. Die Launch authority PDA hält sie für die ganze Pre-Graduierungs-Phase, daher gibt es immer etwas zu verschieben.
  • WithheldWithdraw wird neu zugewiesen nur wenn die authority PDA sie immer noch hält. Launches, die ab 2026-08-27 erstellt wurden, tragen bereits transfer_fee_extension_auth auf dieser Authority von der Mint-Erstellung, daher wird der Schritt übersprungen. Der Guard ist das, was Migration davon abhält, auf diesen Mints rückgängig zu machen — die PDA kann eine Authority, die sie nicht mehr hält, nicht abgeben.
Wenn transfer_fee_extension_auth zur Migrationszeit Pubkey::default() ist, bewegen sich weder Authority und beide bleiben permanent bei der authority PDA. Siehe platform-config.
Die Supply des Base Mint ist von der Erstellung an festgelegt, nicht von der Graduierung. InitializeV2 und InitializeWithToken2022 prägen die gesamte Supply in den Base Vault und widerrufen dann sofort MintTokens in derselben Anweisung, daher ist base_mint.mint_authority None für das ganze Leben des Launch. Migration berührt es nicht. (Frühere Überarbeitungen dieser Seite legten den Widerruf bei der Graduierung; das war falsch.) Die einzigen Autoritäten, die Migration verschieben kann, sind die Token-2022 Transfer-Fee-Autoritäten, die unten beschrieben sind.
NachbedingungenBuyExactIn, BuyExactOut, SellExactIn, SellExactOut werden von diesem Punkt an mit PoolMigrated ablehnen. Der resultierende AMM Pool ist kanonisch und handelt wie jeder andere AMM v4 / CPMM Pool. Häufige FehlerPoolFunding, PoolMigrated, MigrateTypeNotMatch, InvalidCpSwapConfig, MathOverflow.

CPMM-Migrations-Restkonten

Clients, die MigrateToCpswap bauen, müssen diese festen remaining_accounts Indizes verwenden: Die Anweisung erfordert mindestens zehn Restkonten. Die Support-Mint-Konten sind Read-Only CPI-Eingaben. Leiten Sie beide Adressen ab, auch wenn der Mint keinen initialisierten Support-Datensatz hat. Ältere Builder, die immer noch Creator-Lock-Konten anhängen oder Indizes 8–9 auslassen, müssen aktualisiert werden.
Geändert in 2026-09. Zwei Bereinigungen, von denen keine einen korrekten Builder ändert:
  • Der berechtigte CPMM-Pfad ist jetzt der einzige Pfad. MigrateToCpswap wählte früher zwischen InitializeCpSwap und InitializeCpSwapWithPermission basierend auf unix_timestamp >= get_upgrade_timestamp(). Der Timestamp-Helper und das Legacy CPI sind beide weg, daher gilt der berechtigte Pfad — und daher das Zehn-Konto-Minimum — bedingungslos.
  • Drei Adress-Constraints wurden vom Account-Struct in den Anweisungs-Body verschoben. platform_config, base_vault und quote_vault sind immer noch erforderlich, um die auf PoolState gespeicherten Werte zu entsprechen, aber die Nichtübereinstimmung wird jetzt durch require_keys_eq! statt durch Anchors address = Constraint erhöht. Die Prüfung ist äquivalent; nur die Fehleroberfläche unterscheidet sich — Sie erhalten Anchors generisches RequireKeysEqViolated (2502) statt ConstraintAddress (2012), und es wird ohne einen Kontonamen gemeldet. Aktualisieren Sie jede Fehlerbehandlung, die auf 2012 für diese drei Konten passte.

CPMM-Migrations-Token-Programme

MigrateToCpswap nimmt beide Token-Programme bedingungslos und arbeitet aus, welches jeden Mint besitzt. Seine zwei Token-Programm-Konten wurden entsprechend umbenannt: Sie ersetzen das frühere base_token_program (welches Programm auch den Base Mint besaß) und quote_token_program (immer Legacy). Positionen sind unverändert, daher ist dies eine Wertänderung statt einer Layout-Änderung — aber die zwei Werte sind nahe beieinander invertiert, und ein Builder, der sein altes Paar weitergibt, liefert Token-2022, wo das Legacy-Programm erforderlich ist, sobald einer der Mints ein Token-2022 Mint ist. Das Legacy-Programm ist erforderlich, auch wenn keiner der Mints es verwendet, da der CPMM LP Mint und der gesperrte Liquiditäts-Fee Key NFT immer darauf leben.

Plattform GlobalConfig Allowlist

PlatformConfig.restrict_global_config steuert die Prüfung:
  • 0: Die Plattform akzeptiert jeden ansonsten gültigen GlobalConfig; kein Allow-Konto ist erforderlich.
  • 1: Initialize, InitializeV2 und InitializeWithToken2022 müssen das passende PlatformAllowConfig irgendwo in remaining_accounts enthalten.
Der Plattform-Admin erstellt oder schließt die PDA mit CreatePlatformAllowConfig und ClosePlatformAllowConfig. Seine Seeds sind [b"platform_allow_config", platform_config, global_config]. Die früheren Admin-verwalteten PlatformGlobalAccess-Anweisungen und PDA sind pensioniert.

Plattform-Launch-Parameter-Regeln

Vier Anweisungen verwalten ein PlatformCurveRule-Konto. Alle vier werden von PlatformConfig.curve_rule_manager oder vom Plattform-Admin unterzeichnet — das Programm akzeptiert den Admin, indem es die PlatformConfig PDA vom Unterzeichner neu ableitet, daher beweist kein separates Konto es. Ein Unterzeichner, der keiner ist, gibt InvalidCurveRuleAuthority zurück. platform_curve_rule ist die PDA bei [b"platform_curve_rule", platform_config, global_config].
  • Create ordnet das Konto zu, das keine Gruppe hält. Dieser Status schränkt nichts ein.
  • Update upsert die Gruppe mit dieser group_id, ersetzt sie ganz, wenn sie existiert. Es ändert die Größe des Kontos, um zu passen, daher zahlt der Unterzeichner die Miete, die es wächst, und erhält die Miete zurück, die es schrumpft. Eine neue Gruppe über der zehnten gibt CurveRuleGroupsExceeded zurück; mehr als 25 Constraints, ein unbekanntes Feld oder Operator, oder das gleiche (field, op) Paar zweimal in einer Gruppe gibt InvalidCurveRuleConstraint zurück; die vier TotalSellA-abgeleiteten Felder auf einer nicht-konstanten-Produkt-Config geben CurveRuleFieldNotSupportedByCurve zurück.
  • Remove löscht eine Gruppe nach ID, schrumpft das Konto und erstattet die Differenz. Eine unbekannte ID gibt CurveRuleGroupNotExist zurück.
  • Close gibt die ganze Miete an den Unterzeichner zurück. Die Config ist dann wieder uneingeschränkt, auch wenn restrict_curve_param 1 bleibt.
Keine der vier ändert, ob Regeln durchgesetzt werden. Das ist UpdatePlatformConfig::RestrictCurveParam(0 | 1), das nur der Plattform-Admin aufrufen kann. Auf dem Launch-Pfad. Während restrict_curve_param 1 ist, erfordern InitializeV2 und InitializeWithToken2022 die Regel PDA in remaining_accounts — auch wenn sie nicht existiert, damit das Auslassen sie nicht überspringen kann. Ein fehlendes Konto ist NotEnoughRemainingAccounts; ein Launch, der keine Gruppe erfüllt, ist CurveParamNotMatchPlatformRule. Die Prüfung läuft vor GlobalConfigs eigenen Limits und kann sie nur einengen. Modell und Playbooks: products/launchlab/curve-rules. Beide Fehler sind Client-seitig vermeidbar — das SDK spiegelt diese Prüfung als reine Funktion, siehe Check before you send.

CollectFee

Admin-Einzug der angesammelten Handelsgebühren des Protokolls auf einem einzelnen Launch. Argumente — keine. Konten
quote_mint kommt hier vor recipient_token_account — umgekehrt zu ClaimCreatorFee, ClaimPlatformFee und ClaimPlatformFeeFromVault, die alle den Empfänger zuerst stellen. Die beiden Slots haben unterschiedliche Anchor-Typen (Mint vs. TokenAccount), sodass ein Vertauschen zur Laufzeit an der Deserialisierung scheitert und wie ein Falsches-Konto-Bug aussieht. CollectMigrateFee hat dieselbe Reihenfolge wie CollectFee.
Effekt — Übertragen Sie pool_state.quote_protocol_fee von quote_vault zu recipient_token_account, dann nullen Sie den Zähler. Aufrufbar jederzeit nach dem ersten Kauf.

CollectMigrateFee

Admin-Einzug der bei der Graduierung angesammelten Migrationsgebühr. Gleiche Kontoform wie CollectFee mit migrate_fee_owner als Unterzeichner (statt protocol_fee_owner) und pool_state.migrate_fee als geleerten Zähler.

ClaimCreatorFee

Pro-Ersteller-Einzug angesammelter Ersteller-Gebühren über jeden Launch, den der Ersteller besitzt, der den gleichen Quote Mint verwendet. Leert den Pro-Ersteller-Gebühren-Vault, nicht den Pro-Pool. Argumente — keine. Konten Effekt — Übertragen Sie den gesamten Saldo von creator_fee_vault zu recipient_token_account. Rückgängigmachen mit einer Require-Größer-als-Null-Prüfung, wenn der Vault leer ist.

ClaimPlatformFee

Pro-Plattform-Einzug, der einen Launch-Quote-Vault direkt leert. Verwenden Sie dies, wenn eine Plattform ihren Anteil für einen bestimmten Launch einziehen möchte, ohne durch den aggregierten Plattform-Vault zu gehen. Argumente — keine. Konten Effekt — Übertragen Sie pool_state.platform_fee von quote_vault zu recipient_token_account, nullen Sie den Zähler.

ClaimPlatformFeeFromVault

Pro-Plattform-aggregierter Einzug. Leert den Pro-Quote-Mint-Gebühren-Vault der Plattform, der Gebühren von jedem Launch sammelt, der durch die Plattform geleitet wird. Argumente — keine. Konten Effekt — Übertragen Sie den vollen Saldo von platform_fee_vault zu recipient_token_account. Rückgängigmachen, wenn der Vault leer ist.

CollectExcessLamports

Admin-Einzug von Lamports, die über dem Rent-Exempt-Minimum auf Konten sitzen, die LaunchLab kontrolliert. Hinzugefügt im 2026-09-Upgrade, damit das Protokoll die Über-Finanzierung zurückfordern kann, die die SIMD-0437 Rent-Reduktion auf Konten hinterlässt, die vor jedem Schritt erstellt wurden. Nur der Überschuss bewegt sich. Token-Salden, Kontodaten, Besitzer, Kurven-Status und Vesting bleiben unberührt, und die Anweisung ist ein No-Op gegen ein Konto, das bereits bei seinem Minimum ist — daher ist es sicher, nach jedem Rollout-Schritt erneut auszuführen. Argumente — keine. Konten authority auswählen Das Konto wird ungeprüft übergeben und vom Programm aufgelöst, das alle drei LaunchLab-Authority PDAs neu ableitet und passt: Ein Schlüssel, der keinem der drei passt, schlägt die ganze Anweisung mit InvalidOwner (6001) fehl.
Gruppieren Sie Ihre Quellkonten nach Authority. Ein Aufruf trägt eine authority, und das Token-Programm erfordert, dass der tatsächliche Besitzer des Kontos unterzeichnet. Ein Token-Account, der von einer anderen der drei PDAs als der authority, die Sie übergeben, besessen wird, lässt die CPI fehlschlagen und nimmt die ganze Transaktion mit. Ziehen Sie Pool-Vaults, Plattform-Gebühren-Vaults und Ersteller-Gebühren-Vaults in separaten Transaktionen ein.Programm-eigene PDAs sind die Ausnahme — sie werden direkt belastet, daher können sie mit jeder Authority mitfahren.
Wie jedes Quellkonto behandelt wird Base Mints können nicht eingezogen werden. InitializeV2 und InitializeWithToken2022 widerrufen MintTokens auf dem Base Mint in der gleichen Anweisung, die die Supply prägt, daher kann kein Schlüssel WithdrawExcessLamports dafür unterzeichnen — die Miete des Mint bleibt permanent dort. Häufige FehlerInvalidOwner (6001, falscher Unterzeichner oder eine authority, die keine der drei PDAs ist), LamportsCalculateError (6031, die wSOL-Rundreise nettete nicht zu Null), und InsufficientFunds vom Programm-eigenen Pfad, wenn ein Konto weniger als seine eigene Rent-Minimum hält. Kein SDK-Builder. @raydium-io/raydium-sdk-v2 liefert keinen Builder für diese Anweisung, und auch das raydium-sdk-V2-demo Repo nicht — es ist ein Admin-Pfad. Kodieren Sie es von Hand, wie die Wallet-seitige Einzug in solana-fundamentals/rent-and-reclaimable-rent für die Token-Programm-Anweisung.

Vesting und Plattformkonfiguration Anweisungen

Diese sind auf dedizierten Seiten dokumentiert, da jede ihr eigenes State-Modell hat:

State-Änderungs-Matrix

Wo es weitergeht

Quellen: