Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Diese Seite ist die maßgebliche Anweisungsreferenz. Für Code, der diese Anweisungen tatsächlich zusammensetzt, siehe products/cpmm/code-demos. Für Fehlercodes siehe reference/error-codes.

Zusammenfassung der Anweisungen

Status-Bitmaske: Der status jedes Pools ist ein u8, wobei Bit 0 = Deposit deaktiviert, Bit 1 = Withdraw deaktiviert, Bit 2 = Swap deaktiviert (PoolStatusBitIndex { Deposit, Withdraw, Swap } im Programm). Ein gelöschtes Bit bedeutet, dass die Operation erlaubt ist; ein gesetztes Bit bedeutet, dass sie pausiert ist. UpdatePoolStatus nimmt ein rohes u8 und überschreibt den vorhandenen Wert. Die nächsten Abschnitte gehen auf jede im Detail ein. Die Kontoordnung folgt der CPMM-IDL; das SDK und der Rust-Client in raydium-cp-swap/programs/cp-swap/src/instructions entsprechen dieser Ordnung.

Initialize

Erstellt einen neuen CPMM-Pool. Argumente
Konten (W = schreibbar, S = Unterzeichner) * pool_state signiert nur auf dem zufälligen-Keypair-Pfad; der kanonische-PDA-Pfad läuft ohne pool_state-Signatur. Vorbedingungen
  • Mints sind sortiert (token_0_mint < token_1_mint nach Byte-Ordnung).
  • Kein Mint verwendet eine Erweiterung außerhalb der CPMM-Zulassungsliste (TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount) — siehe products/cpmm/accounts. Eine kleine Pro-Mint-Zulassungsliste im Programm umgeht die Überprüfung für Fall-für-Fall-Onboarding.
  • creator hat mindestens init_amount_0 und init_amount_1 in den jeweiligen ATAs.
  • amm_config.disable_create_pool == false.
Nachbedingungen
  • pool_state existiert mit lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.
  • Der LP-Starter von LOCKED_LP (100 Lamports von LP-Token) wird dauerhaft im Pool gesperrt — pool_state.lp_supply zeichnet liquidity − 100 auf, während 100 LP-Einheiten außerhalb des Umlaufs bleiben, was verhindert, dass der Pool vollständig geleert wird und durch Null geteilt wird.
  • observation_state wird initialisiert; observation_index = 0 und pool_id = pool_state.key().
  • create_pool_fee Lamports werden vom Ersteller zum Empfänger übertragen und als natives SOL synchronisiert (es ist eine wSOL-ATA).
  • Die Status-Bitmaske des Pools ist 0 (Deposit / Withdraw / Swap alle aktiviert).
  • enable_creator_fee = false und creator_fee_on = BothToken. Initialize unterstützt nicht das Aktivieren der Creator-Gebühr — dieser Pfad ist InitializeWithPermission.
  • open_time wird auf block_timestamp + 1 erhöht, wenn der Aufrufer einen Wert <= block_timestamp übergeben hat. Swaps werden vor open_time abgelehnt; Deposits und Withdrawals funktionieren sofort.
Häufige Fehler (vollständige Liste in reference/error-codes)
  • InvalidInput — Mints unsortiert oder identisch.
  • NotSupportMint — blockierte Token-2022-Erweiterung.
  • ExceededSlippage — selten; wenn init_amount_0/1 aufgrund von Dezimalstellen-Nichtübereinstimmung zu null LP führen.

Deposit

Fügt Liquidität in beiden Token proportional zum Pool hinzu. Argumente
Konten Mathematik
Keine Änderung an der Proportionalität von k — sowohl Vaults als auch lp_supply skalieren um denselben Faktor. Nachbedingungen
  • lp_supply += lp_token_amount.
  • vault_0 += needed_token_0 (netto von Token-2022-Transfergebühr auf Eingabe).
  • vault_1 += needed_token_1 (netto von Token-2022-Transfergebühr auf Eingabe).
Häufige FehlerExceededSlippage, ZeroTradingTokens, InvalidStatus wenn Deposit pausiert ist.

Withdraw

Verbrennt LP-Token und erhält beide zugrunde liegenden Token anteilsmäßig. Argumente
Konten (Identisch mit Deposit; lp_mint ist schreibbar, weil die LP-Token verbrannt werden.) Mathematik
Nachbedingungen
  • lp_supply -= lp_token_amount.
  • Vaults senden out_token_0 / out_token_1 (brutto; der Benutzer erhält netto von Token-2022-Transfergebühr).

SwapBaseInput

Exakte-Eingabe-Swap. Argumente
Konten Die Ordnung Eingabe → Ausgabe folgt der Richtung des Benutzers, nicht der kanonischen token_0 / token_1 des Pools. Das Programm ermittelt, welcher Vault welcher ist, indem es Mints abgleicht. Mathematik — siehe products/cpmm/math. Vorbedingungen
  • open_time <= now.
  • pool_status erlaubt Swap.
  • Kein Mint pausiert oder eingefroren für diese Autorität.
  • amount_in > 0.
Häufige Fehler
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — der Handel rundet auf Null.
  • NotApproved — Pool ist für Swaps über UpdatePoolStatus pausiert.
  • InvalidInput — Mints stimmen nicht mit einem der Pool-Vault-Mints überein.

SwapBaseOutput

Exakte-Ausgabe-Swap. Argumente
Konten — gleich wie SwapBaseInput. Mathematik — inverse Kurve mit Obergrenze, siehe products/cpmm/math. Häufige FehlerExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.

CollectProtocolFee

Sammelt aufgelaufene Protokollgebühren aus den Vaults zum Protokoll-Ziel. Argumente — keine. Konten Effekt
Keine Änderung an den effektiven Bilanzen der Kurve (aufgelaufene Gebühren waren bereits ausgeschlossen). Häufiger FehlerNotApproved wenn Unterzeichner nicht protocol_owner ist.

CollectFundFee

Gleiche Form wie CollectProtocolFee, aber signiert von fund_owner und setzt die fund_fees_*-Zähler auf Null.

CollectCreatorFee

Signiert von pool_state.pool_creator. Es überträgt die vollständigen creator_fees_token_0- und creator_fees_token_1-Bilanzen auf die Token-Konten des Erstellers und setzt dann beide Zähler auf Null. Es gibt NoFeeCollect zurück, wenn beide Zähler Null sind.

CollectCreatorFeePermissionless

Jeder kann die Creator-Gebührensammlung auslösen. Die Anweisung sendet immer die vollständigen aufgelaufenen Bilanzen an die kanonischen zugeordneten Token-Konten, die pool_state.pool_creator gehören; der Aufrufer kann keinen anderen Ersteller oder Ziel wählen. Wenn eine ATA fehlt, finanziert der Zahler ihre Erstellung. Das ursprüngliche CollectCreatorFee bleibt aufrufbar, sodass bestehende Clients kompatibel bleiben. Argumente — keine. Konten Effekt
  • Überträgt alle creator_fees_token_0 und creator_fees_token_1 aus den Pool-Vaults zu den Creator-ATAs.
  • Setzt beide Creator-Gebühren-Zähler auf Null und aktualisiert pool_state.recent_epoch.
  • Gibt NoFeeCollect zurück, wenn beide Zähler Null sind.

UpdatePoolStatus

Pausiert oder setzt einzelne Operationen auf einem Pool fort. Das status-Feld ist eine Bitmaske: Argumente
Konten Der Admin-Schlüssel ist die Upgrade-Autorität des CPMM-Programms — in der Praxis das Raydium-Multisig. Siehe security/admin-and-multisig.

CreateAmmConfig

Erstellt eine neue Gebührenstufe. Argumente
Konten Vorbedingungen
  • Keine existierende AmmConfig mit demselben index.
  • protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.

UpdateAmmConfig

Ändert Gebührensätze oder Eigentümerschaft auf einer existierenden AmmConfig. Nimmt einen param: u8 (Diskriminator für welches Feld aktualisiert werden soll) und einen value: u64. Die Wert-Semantik pro Parameter sind in der Quelle; häufig:
  • param = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (übergeben Sie Pubkey-Bytes als Reinterpretation)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_create_pool
Änderungen werden vom Admin signiert und beeinflussen jeden Pool, der an diese AmmConfig gebunden ist beim nächsten Swap. Keine Migration; Pools lesen einfach die neuen Werte.

Zustandsänderungs-Matrix

Nächste Schritte

Quellen: