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
* 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_mintnach Byte-Reihenfolge). - Kein Mint verwendet eine Erweiterung außerhalb der CPMM-Zulassungsliste (
TransferFeeConfig,MetadataPointer,TokenMetadata,InterestBearingConfig,ScaledUiAmount) — sieheproducts/cpmm/accounts. Eine kleine Pro-Mint-Zulassungsliste im Programm umgeht die Prüfung für Fall-für-Fall-Onboarding. creatorhat mindestensinit_amount_0undinit_amount_1in den jeweiligen ATAs.amm_config.disable_create_pool == false.
pool_stateexistiert mitlp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.- Der LP-Starter von
LOCKED_LP(100Lamports LP-Token) ist dauerhaft im Pool gesperrt —pool_state.lp_supplyerfasstliquidity − 100, während100LP-Einheiten außerhalb des Umlaufs verbleiben und verhindern, dass der Pool vollständig geleert wird und durch Null dividiert. observation_statewird initialisiert;observation_index = 0undpool_id = pool_state.key().create_pool_feeLamports 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 = falseundcreator_fee_on = BothToken.Initializeunterstützt nicht die Aktivierung der Ersteller-Gebühr — dieser Pfad istInitializeWithPermission.open_timewird aufblock_timestamp + 1erhöht, wenn der Aufrufer einen Wert<= block_timestampweitergegeben hat. Swaps werden voropen_timeabgelehnt; Einzahlungen und Abhebungen funktionieren sofort.
reference/error-codes)
InvalidInput— Mints unsortiert oder identisch.NotSupportMint— blockierte Token-2022-Erweiterung.ExceededSlippage— selten; wenninit_amount_0/1aufgrund von Dezimalstellen-Abweichung zu null LP führt.
Deposit
Fügt Liquidität in beiden Token anteilig zum Pool hinzu.
Argumente
Mathematik
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).
ExceededSlippage, ZeroTradingTokens, InvalidStatus, falls Einzahlung pausiert ist.
Withdraw
Brennt LP-Token und empfängt beide zugrunde liegenden Token anteilig.
Argumente
(Identisch mit
Deposit; lp_mint ist schreibbar, da die LP-Token gebrannt werden.)
Mathematik
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
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_statuserlaubt Swap.- Kein Mint pausiert oder eingefroren für diese Autorität.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— der Handel rundet auf Null.NotApproved— Pool ist pausiert für Swaps viaUpdatePoolStatus.InvalidInput— Mints stimmen mit keinem der Pool-Vault-Mints überein.
SwapBaseOutput
Swap mit exaktem Output.
Argumente
SwapBaseInput.
Mathematik — umgekehrte Kurve mit Obergrenze, siehe products/cpmm/math.
Häufige Fehler — ExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.
CollectProtocolFee
Sammelt aufgelaufene Protokollgebühren aus den Vaults zum Protokoll-Ziel.
Argumente — keine.
Konten
Effekt
NotApproved, 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
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
Vorbedingungen
- Keine existierende
AmmConfigmit demselbenindex. 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 = 0→trade_fee_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(übergeben SiePubkey-Bytes als Reinterpretation)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
AmmConfig gebunden ist, beim nächsten Swap. Keine Migration; Pools lesen einfach die neuen Werte.
Zustandsänderungs-Matrix
Weitere Ressourcen
products/cpmm/code-demos— ausführbare TypeScript-Beispiele für das Obige.reference/error-codes— die vollständige Anchor-Fehler-Tabelle.products/cpmm/fees— das Gebühren-Auflösungs-Modell, dasCollectProtocolFee/CollectFundFee/CollectCreatorFeeleert.

