Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
Zusammenfassung der Anweisungen
| Discriminator-Name | Unterzeichner | Funktion |
|---|
Initialize | Pool-Ersteller | Erstellt einen neuen CPMM-Pool aus zwei Mints und einer AmmConfig. Keine Genehmigung erforderlich; jeder kann aufrufen. Setzt enable_creator_fee = false hardcodiert auf dem neuen Pool. Das pool_state-Konto kann entweder die kanonische PDA oder ein frischer zufälliger Keypair sein (siehe Initialize-Konten). |
InitializeWithPermission | Zahler + Inhaber einer Permission-PDA | Berechtigte Variante von Initialize. Der Aufrufer (payer) muss eine Permission-PDA besitzen, die von seinem eigenen Public Key abgeleitet ist. Wird von Plattformen verwendet, die kontrollierte Pool-Erstellung benötigen (z. B. LaunchLab-Absolventinnen). Ermöglicht dem Aufrufer, creator_fee_on (BothToken / OnlyToken0 / OnlyToken1) zu setzen und erzwingt enable_creator_fee = true auf dem neuen Pool. Das creator-Feld auf pool_state wird auf ein separat übergebenes creator-Konto gesetzt, nicht auf den Zahler. Gleiche kanonische-PDA-oder-zufälliger-Keypair-Flexibilität für pool_state wie Initialize. |
Deposit | LP | Fügt Liquidität in beiden Token hinzu; erhält LP-Token. |
Withdraw | LP | Brennt LP-Token; erhält beide zugrunde liegenden Token anteilig. |
SwapBaseInput | Swapper | Swap mit exaktem Input (amount_in rein, ≥ minimum_amount_out raus). |
SwapBaseOutput | Swapper | Swap mit exaktem Output (≤ maximum_amount_in rein, amount_out raus). |
CollectProtocolFee | protocol_owner (aus AmmConfig) | Sammelt aufgelaufene Protokollgebühren aus Vaults. |
CollectFundFee | fund_owner (aus AmmConfig) | Sammelt aufgelaufene Fondsgebühren aus Vaults. |
CollectCreatorFee | pool_creator | Sammelt aufgelaufene Ersteller-Gebühren (falls aktiviert). |
UpdatePoolStatus | admin | Pausiert / setzt bestimmte Pool-Operationen über eine Bitmaske fort. |
UpdateAmmConfig | admin | Ändert Gebührensätze oder Protokoll-/Fondsbesitzer auf einer AmmConfig. |
CreateAmmConfig | admin | Erstellt eine neue Gebührenklasse (neues AmmConfig-Konto). |
CreatePermissionPda | admin | Prägt eine Permission-PDA, die einer bestimmten Autorität ermöglicht, InitializeWithPermission aufzurufen. |
ClosePermissionPda | admin | Widerruft eine zuvor ausgestellte Permission-PDA. |
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
init_amount_0: u64
init_amount_1: u64
open_time: u64 // Unix-Zeitstempel; Swaps vor diesem abgelehnt
Konten (W = schreibbar, S = Unterzeichner)
| # | Name | W | S | Hinweise |
|---|
| 1 | creator | W | S | Zahlt Miete; erfasst als pool_state.pool_creator. |
| 2 | amm_config | | | Die gewählte Gebührenklasse. |
| 3 | authority | | | Globale CPMM-Autoritäts-PDA. |
| 4 | pool_state | W | S* | Wird hier initialisiert. Entweder die kanonische PDA ["pool", amm_config, token_0_mint, token_1_mint] oder ein frischer zufälliger Keypair — wenn nicht die kanonische PDA, verlangt das Programm, dass pool_state unterzeichnet (require_eq!(pool_account_info.is_signer, true)). Der zufällige-Keypair-Pfad ermöglicht einem Ersteller, Front-Running-Versuchen auf der kanonischen PDA auszuweichen. Die nachgelagerten PDAs (lp_mint, vaults, observation_state) werden in jedem Fall von pool_state.key() abgeleitet. |
| 5 | token_0_mint | | | Sortiert: token_0_mint < token_1_mint. |
| 6 | token_1_mint | | | |
| 7 | lp_mint | W | | Wird hier initialisiert. Autorität auf authority gesetzt. |
| 8 | creator_token_0 | W | | Quell-ATA für init_amount_0. |
| 9 | creator_token_1 | W | | Quell-ATA für init_amount_1. |
| 10 | creator_lp_token | W | | Ziel für LP (wird erstellt, falls fehlend). |
| 11 | token_0_vault | W | | Wird hier initialisiert. Im Besitz von authority. |
| 12 | token_1_vault | W | | |
| 13 | create_pool_fee | W | | Ziel-ATA für die create_pool_fee, die vom Ersteller gezahlt wird. |
| 14 | observation_state | W | | Wird hier initialisiert. |
| 15 | token_program | | | SPL Token (für LP-Mint). |
| 16 | token_0_program | | | SPL Token oder Token-2022. |
| 17 | token_1_program | | | SPL Token oder Token-2022. |
| 18 | associated_token_program | | | |
| 19 | system_program | | | |
| 20 | rent | | | |
* 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
lp_token_amount: u64 // wie viele LP-Token für die LP geprägt werden sollen
maximum_token_0: u64
maximum_token_1: u64
Konten
| # | Name | W | S |
|---|
| 1 | owner | | S |
| 2 | authority | | |
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | | |
| 10 | token_program_2022 | | |
| 11 | vault_0_mint | | |
| 12 | vault_1_mint | | |
| 13 | lp_mint | W | |
Mathematik
needed_token_0 = ceil(lp_token_amount * vault_0 / lp_supply)
needed_token_1 = ceil(lp_token_amount * vault_1 / lp_supply)
require(needed_token_0 <= maximum_token_0, "ExceededSlippage")
require(needed_token_1 <= maximum_token_1, "ExceededSlippage")
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 Fehler — ExceededSlippage, ZeroTradingTokens, InvalidStatus, falls Einzahlung pausiert ist.
Withdraw
Brennt LP-Token und empfängt beide zugrunde liegenden Token anteilig.
Argumente
lp_token_amount: u64
minimum_token_0: u64
minimum_token_1: u64
Konten
| # | Name | W | S |
|---|
| 1 | owner | | S |
| 2 | authority | | |
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | | |
| 10 | token_program_2022 | | |
| 11 | vault_0_mint | | |
| 12 | vault_1_mint | | |
| 13 | lp_mint | W | |
(Identisch mit Deposit; lp_mint ist schreibbar, da die LP-Token gebrannt werden.)
Mathematik
out_token_0 = floor(lp_token_amount * vault_0 / lp_supply)
out_token_1 = floor(lp_token_amount * vault_1 / lp_supply)
require(out_token_0 >= minimum_token_0, "ExceededSlippage")
require(out_token_1 >= minimum_token_1, "ExceededSlippage")
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).
Swap mit exaktem Input.
Argumente
amount_in: u64
minimum_amount_out: u64
Konten
| # | Name | W | S |
|---|
| 1 | payer | | S |
| 2 | authority | | |
| 3 | amm_config | | |
| 4 | pool_state | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_token_program | | |
| 10 | output_token_program | | |
| 11 | input_token_mint | | |
| 12 | output_token_mint | | |
| 13 | observation_state | W | |
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
ExceededSlippage — amount_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
max_amount_in: u64
amount_out: u64
Konten — gleich wie 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
| # | Name | W | S | |
|---|
| 1 | owner | | S | Muss amm_config.protocol_owner entsprechen. |
| 2 | authority | | | |
| 3 | pool_state | W | | |
| 4 | amm_config | | | |
| 5 | token_0_vault | W | | |
| 6 | token_1_vault | W | | |
| 7 | vault_0_mint | | | |
| 8 | vault_1_mint | | | |
| 9 | recipient_token_0_account | W | | |
| 10 | recipient_token_1_account | W | | |
| 11 | token_program | | | |
| 12 | token_program_2022 | | | |
Effekt
transfer pool_state.protocol_fees_token0 from vault_0 to recipient_0
transfer pool_state.protocol_fees_token1 from vault_1 to recipient_1
pool_state.protocol_fees_token0 = 0
pool_state.protocol_fees_token1 = 0
Keine Änderung an den effektiven Bilanzen der Kurve (aufgelaufene Gebühren waren bereits ausgeschlossen).
Häufiger Fehler — 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:
| Bit | Flag | Effekt, wenn gesetzt |
|---|
| 0 | DEPOSIT_DISABLED | Deposit lehnt mit NotApproved ab. |
| 1 | WITHDRAW_DISABLED | Withdraw lehnt ab. |
| 2 | SWAP_DISABLED | SwapBaseInput / SwapBaseOutput lehnen ab. |
Argumente
status: u8 // neue Bitmaske
Konten
| # | Name | W | S | |
|---|
| 1 | authority | | S | Muss dem Admin-Schlüssel im CPMM-Programm entsprechen. |
| 2 | pool_state | W | | |
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
index: u16
trade_fee_rate: u64
protocol_fee_rate: u64
fund_fee_rate: u64
create_pool_fee: u64
Konten
| # | Name | W | S | |
|---|
| 1 | owner | W | S | Admin. |
| 2 | amm_config | W | | Wird hier initialisiert. |
| 3 | system_program | | | |
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 = 0 → trade_fee_rate
param = 1 → protocol_fee_rate
param = 2 → fund_fee_rate
param = 3 → new_protocol_owner (übergeben Sie Pubkey-Bytes als Reinterpretation)
param = 4 → new_fund_owner
param = 5 → create_pool_fee
param = 6 → disable_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
| Anweisung | lp_supply | Vault-Bilanzen | Aufgelaufene-Gebühren-Felder | observation |
|---|
Initialize | + init LP | + init_amount_{0,1} | 0 | init |
InitializeWithPermission | + init LP | + init_amount_{0,1} | 0 | init |
Deposit | + | + beide | — | — |
Withdraw | − | − beide | — | — |
SwapBaseInput | — | + in, − out | + trade_fee aufgeteilt in Protokoll/Fonds; + creator_fee, falls aktiviert | + (falls Intervall verstrichen) |
SwapBaseOutput | — | + in, − out | + trade_fee aufgeteilt in Protokoll/Fonds; + creator_fee, falls aktiviert | + (falls Intervall verstrichen) |
CollectProtocolFee | — | − (nach Protokoll-Buckets) | protocol_* → 0 | — |
CollectFundFee | — | − (nach Fonds-Buckets) | fund_* → 0 | — |
CollectCreatorFee | — | − (nach Ersteller-Buckets) | creator_* → 0 | — |
UpdatePoolStatus | — | — | — | — |
Weitere Ressourcen
Quellen: