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
* 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_mintnach Byte-Ordnung). - 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 Überprü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 von LP-Token) wird dauerhaft im Pool gesperrt —pool_state.lp_supplyzeichnetliquidity − 100auf, während100LP-Einheiten außerhalb des Umlaufs bleiben, was verhindert, dass der Pool vollständig geleert wird und durch Null geteilt wird. 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(Deposit / Withdraw / Swap alle aktiviert). enable_creator_fee = falseundcreator_fee_on = BothToken.Initializeunterstützt nicht das Aktivieren der Creator-Gebühr — dieser Pfad istInitializeWithPermission.open_timewird aufblock_timestamp + 1erhöht, wenn der Aufrufer einen Wert<= block_timestampübergeben hat. Swaps werden voropen_timeabgelehnt; Deposits und Withdrawals funktionieren sofort.
reference/error-codes)
InvalidInput— Mints unsortiert oder identisch.NotSupportMint— blockierte Token-2022-Erweiterung.ExceededSlippage— selten; wenninit_amount_0/1aufgrund von Dezimalstellen-Nichtübereinstimmung zu null LP führen.
Deposit
Fügt Liquidität in beiden Token proportional 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 von Token-2022-Transfergebühr auf Eingabe).vault_1 += needed_token_1(netto von Token-2022-Transfergebühr auf Eingabe).
ExceededSlippage, ZeroTradingTokens, InvalidStatus wenn Deposit pausiert ist.
Withdraw
Verbrennt LP-Token und erhält beide zugrunde liegenden Token anteilsmäßig.
Argumente
(Identisch mit
Deposit; lp_mint ist schreibbar, weil die LP-Token verbrannt werden.)
Mathematik
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
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_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 für Swaps überUpdatePoolStatuspausiert.InvalidInput— Mints stimmen nicht mit einem der Pool-Vault-Mints überein.
SwapBaseOutput
Exakte-Ausgabe-Swap.
Argumente
SwapBaseInput.
Mathematik — inverse 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 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_0undcreator_fees_token_1aus den Pool-Vaults zu den Creator-ATAs. - Setzt beide Creator-Gebühren-Zähler auf Null und aktualisiert
pool_state.recent_epoch. - Gibt
NoFeeCollectzurück, wenn beide Zähler Null sind.
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 des CPMM-Programms — in der Praxis das Raydium-Multisig. Siehe
security/admin-and-multisig.
CreateAmmConfig
Erstellt eine neue Gebührenstufe.
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 welches Feld aktualisiert werden soll) und einen value: u64. Die Wert-Semantik pro Parameter 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
Nächste Schritte
products/cpmm/code-demos— ausführbare TypeScript-Beispiele für die obigen.reference/error-codes— die vollständige Anchor-Fehlertabelle.products/cpmm/fees— das Gebühren-Aufzinsungs-Modell, das dieCollect*Fee-Anweisungen leeren.

