Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →

Zusammenfassung der Anweisungen

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

Initialize

Erstellt einen neuen CPMM-Pool. Argumente
Konten (W = schreibbar, S = Unterzeichner) * pool_state unterzeichnet nur auf dem zufälligen-Keypair-Pfad; der kanonische-PDA-Pfad läuft ohne pool_state-Unterzeichnung. Vorbedingungen
  • Mints sind sortiert (token_0_mint < token_1_mint nach Byte-Reihenfolge).
  • 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 Prü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 LP-Token) ist dauerhaft im Pool gesperrt — pool_state.lp_supply erfasst liquidity − 100, während 100 LP-Einheiten außerhalb des Umlaufs verbleiben und verhindern, dass der Pool vollständig geleert wird und durch Null dividiert.
  • 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 (Einzahlung / Abhebung / Swap alle aktiviert).
  • enable_creator_fee = false und creator_fee_on = BothToken. Initialize unterstützt nicht die Aktivierung der Ersteller-Gebühr — dieser Pfad ist InitializeWithPermission.
  • open_time wird auf block_timestamp + 1 erhöht, wenn der Aufrufer einen Wert <= block_timestamp weitergegeben hat. Swaps werden vor open_time abgelehnt; Einzahlungen und Abhebungen 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-Abweichung zu null LP führt.

Deposit

Fügt Liquidität in beiden Token anteilig 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 der Token-2022-Transfergebühr für Input, falls vorhanden).
  • vault_1 += needed_token_1 (netto der Token-2022-Transfergebühr für Input, falls vorhanden).
Häufige FehlerExceededSlippage, ZeroTradingTokens, InvalidStatus, falls Einzahlung pausiert ist.

Withdraw

Brennt LP-Token und empfängt beide zugrunde liegenden Token anteilig. Argumente
Konten (Identisch mit Deposit; lp_mint ist schreibbar, da die LP-Token gebrannt werden.) Mathematik
Nachbedingungen
  • lp_supply -= lp_token_amount.
  • Vaults senden out_token_0 / out_token_1 (brutto; der Benutzer erhält netto der Token-2022-Transfergebühr, falls vorhanden).

SwapBaseInput

Swap mit exaktem Input. Argumente
Konten Die Reihenfolge Input → Output folgt der Richtung des Benutzers, nicht der kanonischen token_0 / token_1 des Pools. Das Programm bestimmt, welcher Vault welcher ist, durch Abgleich der Mints. 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 pausiert für Swaps via UpdatePoolStatus.
  • InvalidInput — Mints stimmen mit keinem der Pool-Vault-Mints überein.

SwapBaseOutput

Swap mit exaktem Output. Argumente
Konten — gleich wie SwapBaseInput. Mathematik — umgekehrte 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, falls Unterzeichner nicht protocol_owner ist.

CollectFundFee

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

CollectCreatorFee

Gleiche Form nochmals, unterzeichnet von pool_state.pool_creator. Emittiert Transfers nur, wenn der Pool mit einem Ersteller-Gebührensatz ungleich Null initialisiert wurde.

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 im CPMM-Programm — in der Praxis das Raydium-Multisig. Siehe security/admin-and-multisig.

CreateAmmConfig

Erstellt eine neue Gebührenklasse. 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 das zu aktualisierende Feld) und einen value: u64. Die Wert-Semantik pro Param 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 unterzeichnet 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

Weitere Ressourcen

Quellen: