Zum Hauptinhalt springen

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.

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

Zusammenfassung der Anweisungen

Discriminator-NameUnterzeichnerFunktion
InitializePool-ErstellerErstellt 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).
InitializeWithPermissionZahler + Inhaber einer Permission-PDABerechtigte 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.
DepositLPFügt Liquidität in beiden Token hinzu; erhält LP-Token.
WithdrawLPBrennt LP-Token; erhält beide zugrunde liegenden Token anteilig.
SwapBaseInputSwapperSwap mit exaktem Input (amount_in rein, ≥ minimum_amount_out raus).
SwapBaseOutputSwapperSwap mit exaktem Output (≤ maximum_amount_in rein, amount_out raus).
CollectProtocolFeeprotocol_owner (aus AmmConfig)Sammelt aufgelaufene Protokollgebühren aus Vaults.
CollectFundFeefund_owner (aus AmmConfig)Sammelt aufgelaufene Fondsgebühren aus Vaults.
CollectCreatorFeepool_creatorSammelt aufgelaufene Ersteller-Gebühren (falls aktiviert).
UpdatePoolStatusadminPausiert / setzt bestimmte Pool-Operationen über eine Bitmaske fort.
UpdateAmmConfigadminÄndert Gebührensätze oder Protokoll-/Fondsbesitzer auf einer AmmConfig.
CreateAmmConfigadminErstellt eine neue Gebührenklasse (neues AmmConfig-Konto).
CreatePermissionPdaadminPrägt eine Permission-PDA, die einer bestimmten Autorität ermöglicht, InitializeWithPermission aufzurufen.
ClosePermissionPdaadminWiderruft 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)
#NameWSHinweise
1creatorWSZahlt Miete; erfasst als pool_state.pool_creator.
2amm_configDie gewählte Gebührenklasse.
3authorityGlobale CPMM-Autoritäts-PDA.
4pool_stateWS*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.
5token_0_mintSortiert: token_0_mint < token_1_mint.
6token_1_mint
7lp_mintWWird hier initialisiert. Autorität auf authority gesetzt.
8creator_token_0WQuell-ATA für init_amount_0.
9creator_token_1WQuell-ATA für init_amount_1.
10creator_lp_tokenWZiel für LP (wird erstellt, falls fehlend).
11token_0_vaultWWird hier initialisiert. Im Besitz von authority.
12token_1_vaultW
13create_pool_feeWZiel-ATA für die create_pool_fee, die vom Ersteller gezahlt wird.
14observation_stateWWird hier initialisiert.
15token_programSPL Token (für LP-Mint).
16token_0_programSPL Token oder Token-2022.
17token_1_programSPL Token oder Token-2022.
18associated_token_program
19system_program
20rent
* 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
#NameWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
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 FehlerExceededSlippage, 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
#NameWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
(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).

SwapBaseInput

Swap mit exaktem Input. Argumente
amount_in:            u64
minimum_amount_out:   u64
Konten
#NameWS
1payerS
2authority
3amm_config
4pool_stateW
5input_token_accountW
6output_token_accountW
7input_vaultW
8output_vaultW
9input_token_program
10output_token_program
11input_token_mint
12output_token_mint
13observation_stateW
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
max_amount_in:  u64
amount_out:     u64
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
#NameWS
1ownerSMuss amm_config.protocol_owner entsprechen.
2authority
3pool_stateW
4amm_config
5token_0_vaultW
6token_1_vaultW
7vault_0_mint
8vault_1_mint
9recipient_token_0_accountW
10recipient_token_1_accountW
11token_program
12token_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 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:
BitFlagEffekt, wenn gesetzt
0DEPOSIT_DISABLEDDeposit lehnt mit NotApproved ab.
1WITHDRAW_DISABLEDWithdraw lehnt ab.
2SWAP_DISABLEDSwapBaseInput / SwapBaseOutput lehnen ab.
Argumente
status: u8      // neue Bitmaske
Konten
#NameWS
1authoritySMuss dem Admin-Schlüssel im CPMM-Programm entsprechen.
2pool_stateW
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
#NameWS
1ownerWSAdmin.
2amm_configWWird hier initialisiert.
3system_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 = 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

Anweisunglp_supplyVault-BilanzenAufgelaufene-Gebühren-Felderobservation
Initialize+ init LP+ init_amount_{0,1}0init
InitializeWithPermission+ init LP+ init_amount_{0,1}0init
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: