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, Monitoring-Tools und Programme, die CPI benötigen.

Anweisungsbestand

Die „ExactIn/ExactOut”-Aufteilung spiegelt CPMMs SwapBaseInput / SwapBaseOutput — on-chain sind sie separate Anweisungs-Diskriminatoren mit leicht unterschiedlichem Rounding. Graduierungspfad-Auswahl. Jeder neue Initialize, 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. MigrateToAmm bleibt für einen bestehenden PoolState aufrufbar, der mit migrate_type = 0 vor dieser Einschränkung initialisiert wurde. Die Veröffentlichung schreibt keinen bestehenden Pool-Status 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 seinem 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 die Ausnahme: sein Quote-Programm-Konto ist immer noch auf SPL Token typisiert, daher muss eine Konfiguration, deren Quote Mint Token-2022 ist, durch InitializeV2 oder InitializeWithToken2022 gestartet werden. MigrateToCpswap ist die andere Ausnahme, in die entgegengesetzte Richtung — es nimmt beide Programme bedingungslos statt eines pro Mint. Siehe die Migrations-Konten unten.

Initialize

Erstellen Sie einen neuen Launch. Argumente
Konten (gekürzt) Vorbedingungen
  • quote_mint ∈ launch_config.allowed_quote_mints.
  • base_supply_graduation ≤ base_supply_max.
  • Gebührenparameter bestehen launch_config.max_*_fee_rate Überprüfungen.
  • open_time ≥ now − slop (SDK erzwingt ≥ now; Programm toleriert leichte Rückdatierung).
  • curve_type wird erkannt.
Nachbedingungen
  • base_mint hat supply = base_supply_max, alles in base_vault.
  • base_mint.mint_authority = launch_authority, freeze_authority = None.
  • LaunchState initialisiert mit status = Active, base_sold = 0, quote_reserve_real = 0.
  • quote_reserve_target berechnet aus Kurvenparametern + base_supply_graduation + buy_numerator (ungefähr).
  • 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 bei der Mint-Erstellung geschrieben, damit die Plattform Einbehaltungsgebühren vor der Graduierung einziehen kann. Siehe platform-config.
Häufige FehlerInvalidQuoteMint, FeeRateTooHigh, InvalidCurveParams, MathOverflow.

Buy (kanonische Variante: BuyExactIn)

Benutzer stellt einen festen quote_in bereit; die Kurve berechnet base_out. Argumente
Konten 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 die Post-Gebühren Quote.
  3. require(base_out ≥ minimum_base_out) andernfalls ExceededSlippage zurückweisen.
  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

Benutzer gibt das genaue base_out an; Programm berechnet quote_in. Argumente
Gleiche Konten wie 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 überprüft. Bei einem Quote Mint ohne die Erweiterung ist jeder Fall unten identisch mit einem einfachen Legacy Mint. Zwei Konsequenzen für Quoting:
  • Eine Grenze, die berechnet wird, als ob der Mint gebührenfrei wäre, 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 gibt CalculateOverflow auf den Exact-Out-Pfaden zurück. Beide Handelsseiten-Mints sind auch auf das Programm beschränkt, das in ihrem entsprechenden 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.

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 von der Raydium-betriebenen Graduierungs-Crank gehalten; in der Praxis landet die Graduierung Sekunden, nachdem der Schwellenwert überschritten wird, unabhängig davon, wer den endgültigen Kauf ausgelöst hat. Argumente MigrateToAmm nimmt drei (hauptsächlich OpenBook Marktparameter, die das Programm an AMM v4 weiterleitet):
MigrateToCpswap nimmt keine. Effekt (gemeinsam für beide)
  1. Überprüfen Sie pool_state.status == Migrate (d.h. quote_reserve_target wurde erreicht). Andernfalls PoolMigrated (Status war bereits Migrated) oder PoolFunding (noch in Finanzierung) zurückweisen.
  2. Überprüfen Sie, dass pool_state.migrate_type der Anweisung entspricht (0 für AMM, 1 für CPMM). Andernfalls MigrateTypeNotMatch zurückweisen.
  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 werden, kombinieren Sie platform_scale + creator_scale in einen plattformgesammelten 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 Fluss dieser Anweisung.
  6. Widerrufen Sie base_mint.mint_authority (setzen Sie auf None).
  7. Kippen Sie pool_state.status = Migrated, setzen Sie vesting_schedule.start_time = block_time + cliff_period.
Token-2022 Transfer-Fee-Autorität Übergabe — wenn der Base Mint ein Token-2022 Mint mit TransferFeeConfig ist und PlatformConfig.transfer_fee_extension_auth nicht Standard ist, weist die Migration auch diese Erweiterungsautoritä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 nur neu zugewiesen, wenn die authority PDA sie noch hält. Launches, die ab 2026-08-27 erstellt wurden, tragen bereits transfer_fee_extension_auth auf dieser Autorität von der Mint-Erstellung, daher wird der Schritt übersprungen. Die Schutzvorrichtung ist das, was verhindert, dass die Migration auf diesen Mints zurückweist — die PDA kann eine Autorität, die sie nicht mehr hält, nicht abtreten.
Wenn transfer_fee_extension_auth zur Migrationszeit Pubkey::default() ist, bewegen sich weder Autorität und beide bleiben permanent bei der authority PDA. Siehe platform-config. 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 verbleibende Konten

Clients, die MigrateToCpswap erstellen, müssen diese festen remaining_accounts Indizes verwenden: Die Anweisung erfordert mindestens zehn verbleibende Konten auf dem aktualisierten Pfad. Die Support-Mint-Konten sind schreibgeschützte 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 weglassen, müssen aktualisiert werden.

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 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 Überprüfung:
  • 0: die Plattform akzeptiert jeden ansonsten gültigen GlobalConfig; kein Allow-Konto ist erforderlich.
  • 1: Initialize, InitializeV2 und InitializeWithToken2022 müssen das entsprechende 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 veraltet.

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 vollständig, wenn sie existiert. Es ändert die Größe des Kontos, um zu passen, daher zahlt der Unterzeichner die Miete, um die es wächst, und erhält die Miete zurück, um die es schrumpft. Eine neue Gruppe über die zehnte hinaus gibt CurveRuleGroupsExceeded zurück; mehr als 25 Einschränkungen, 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-Konfiguration 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 Konfiguration 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 Weglassen sie nicht überspringen kann. Ein fehlendes Konto ist NotEnoughRemainingAccounts; ein Launch, der keine Gruppe erfüllt, ist CurveParamNotMatchPlatformRule. Die Überprüfung läuft vor GlobalConfig’s eigenen Grenzen und kann sie nur einengen. Modell und Playbooks: products/launchlab/curve-rules. Beide Fehler sind Client-seitig vermeidbar — das SDK spiegelt diese Überprüfung als reine Funktion, siehe Check before you send.

CollectFee

Admin-Einzug der aufgelaufenen Handelsgebühren des Protokolls auf einem einzelnen Launch. Argumente — keine. Konten 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 aufgelaufenen 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 aufgelaufener 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. Weist mit einer Require-Größer-als-Null-Überprüfung zurück, 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 einfordern 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. Weist zurück, wenn der Vault leer ist.

Vesting und Plattformkonfiguration Anweisungen

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

State-Änderungs-Matrix

Wo es weitergeht

Quellen: