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.
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
核心區分:程式與帳戶
程式
Solana 上的程式是可執行的代碼 — 一個從檔案編譯而來的二進制檔案,部署到某個Pubkey,並可通過交易呼叫。程式沒有關聯的狀態;它們只包含邏輯。
Raydium 的程式:
- CPMM:
CPMMoo8L3F4NbTegBCKVNunggL7H1Zpdmwpwh8KMoZ0F - CLMM:
CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK - AMM v4:
675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8
帳戶
帳戶是鏈上的一行數據。每個帳戶都有:pubkey— 其地址。owner— 擁有它的程式(控制寫入)。data— 原始位元組。lamports— SOL 餘額(1 SOL = 1,000,000,000 lamports)。rent_epoch— 舊版租賃徵收欄位(自租賃豁免變為強制後已忽略)。
所有權
每個帳戶由恰好一個程式擁有。只有該程式的代碼才能修改帳戶的data 欄位。用戶可以修改他們可以簽署的帳戶的 lamports(發送/接收 SOL),但修改 data 需要所有者程式代表他們進行。
例子:
- 你的用戶錢包:由系統程式擁有。Lamports 存在於此;你簽署以轉移。
- 你的 USDC 代幣帳戶:由 SPL Token 程式擁有。代幣程式的
transfer指令更新餘額。 - Raydium 流動性池狀態帳戶:由 CPMM 程式擁有。只有 CPMM 的指令才能修改儲備、費用等。
- Raydium 頭寸 NFT 的
PersonalPositionState:由 CLMM 程式擁有。
租賃和租賃豁免
創建帳戶會消耗存儲空間。Solana 對該空間收取租賃費用,但自 2020 年以來,所有新帳戶都必須是租賃豁免的 — 意味著它們持有足夠的 lamports 來預付 2 年的租賃費用。實際上:- 租賃豁免帳戶永久存在。
- 關閉帳戶會將 lamports 返回給關閉簽署者。
Raydium 租賃成本
| 帳戶 | 大小 | 租賃 |
|---|---|---|
| CPMM PoolState | ~1,440 B | ~0.011 SOL |
| CLMM PoolState | ~1,500 B | ~0.012 SOL |
| CLMM TickArray | ~9,000 B | ~0.063 SOL |
| CLMM PersonalPositionState | ~280 B | ~0.003 SOL |
| ATA | 165 B | ~0.002 SOL |
| 金庫(代幣帳戶) | 165 B | ~0.002 SOL |
數據帳戶與可執行帳戶
帳戶分為兩種:數據帳戶
儲存狀態(流動性池儲備、代幣餘額、用戶頭寸)。executable = false。這是絕大多數。
可執行帳戶
儲存程式位元組碼。executable = true。這些是程式(CPMM、CLMM 等)。程式除了位元組碼外沒有數據。
程式衍生帳戶(PDA)
PDA 是一個數據帳戶,其地址是從程式和某些種子確定性衍生的 — 此地址不存在私鑰。只有衍生程式可以通過invoke_signed 代表 PDA 簽署。
Raydium 廣泛使用 PDA:
- 流動性池狀態 PDA:衍生自
[poolTypeDiscriminator, mintA, mintB, ammConfig]。 - 金庫 PDA:衍生自
[pool, mint]。 - 觀察狀態 PDA:衍生自
[observationSeed, pool]。
solana-fundamentals/pdas-and-cpis。
交易和帳戶參考
每個 Solana 交易都帶有一個明確的帳戶列表,它將讀取/寫入該列表。運行時強制執行:- 列出的帳戶可以被讀取或寫入(根據其
is_writable標誌)。 - 未列出的帳戶無法被觸及。
帳戶大小和數據佈局
每個 Raydium 帳戶都有固定或有界的大小。佈局在代碼中定義(帶有#[repr(C)] 的 Rust 結構),並在 sdk-api/anchor-idl 中記錄。
Anchor 程式在創建的每個帳戶前加入 8 位元組的鑑別器,衍生自 hash("account:<StructName>")[0..8]。這讓客戶端只需讀取前 8 位元組就能識別帳戶的類型 — 對於列舉某類型所有帳戶的 getProgramAccounts 掃描至關重要。
讀取 Raydium 流動性池狀態
通過 SDK:src/raydium/cpmm/layout.ts。
實例:讀取代幣帳戶
讓我們讀取用戶的 USDC 餘額。為什麼這對 Raydium 很重要
帳戶模型塑造了 Raydium 的設計:- 流動性池狀態是單個帳戶 — 有關流動性池的一切(mint、儲備、費用、管理員)都存在於流動性池程式擁有的一個帳戶中。
- LP 代幣是標準 SPL 代幣帳戶 — Raydium 將代幣化委託給 SPL Token 程式。
- Tick 陣列是分塊的 — CLMM 不能有單個可增長的 tick 陣列,因為帳戶的分配大小是固定的;相反,它使用分塊的
TickArrayPDA。 - 頭寸 NFT 是 Metaplex NFT — CLMM 頭寸是根據 Metaplex 的標準 NFT;頭寸狀態是單獨的 PDA。
- 「流動性池儲備在哪裡?」→ 兩個金庫帳戶(代幣帳戶),由 SPL Token 程式擁有,權限委託給流動性池程式的 PDA。
- 「CLMM 的 tick 數據在哪裡?」→ 一系列 TickArray PDA,每個涵蓋 60 個連續的 tick。
- 「我的農場質押在哪裡?」→ 一個
UserLedgerPDA,衍生自[user, farmId],由農場程式擁有。
相關資源
solana-fundamentals/programs-and-anchor— 程式如何處理帳戶。solana-fundamentals/pdas-and-cpis— PDA 衍生和 CPI。solana-fundamentals/transactions-and-fees— 帳戶如何在交易中被參考。sdk-api/anchor-idl— Raydium 程式的帳戶佈局。
- Solana Account docs。
- SPL Token program — 代幣帳戶所在的地方。


