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 自動翻譯,所有內容以英文版本為準。查看英文版 →
Raydium 的較新程式(CPMM、CLMM、Farm v6、LaunchLab)採用 Anchor 編寫——一個建立在 Solana 原生程式模型之上的 Rust 框架,提供帳戶驗證、錯誤處理和 IDL(介面描述)。AMM v4 和較舊的農場出現在 Anchor 之前。了解兩種範例都將幫助您閱讀程式碼、從 IDL 生成客戶端,以及調試非預期的錯誤。
程式部署模型
每個 Solana 程式都在一個Pubkey 上。程式的位元組碼存儲在由 BPF 可升級加載器(BPFLoaderUpgradeab1e11111111111111111111111)擁有的可執行帳戶中。
程式部署包含三個帳戶:
- 程式帳戶:程式 ID 處的小型中繼資料帳戶。擁有者:BPF 可升級加載器。
- 程式資料帳戶:保存實際的位元組碼。衍生為
[program_id, "programdata"]。 - 緩衝區帳戶(暫時的):在升級期間保存新位元組碼。升級後將被丟棄。
security/admin-and-multisig。
驗證已部署的程式
確認鏈上的內容與經審計批准的源代碼相符:Anchor:構建在 Solana 之上的框架
原始 Solana 程式是具有此簽名的 Rust 函數:- 為每個指令和每個帳戶類型自動生成確定性的 8 位元組識別符。
- 在您的程式碼運行前驗證帳戶約束(擁有者、種子、可寫性、簽名者、mint 匹配、token 程式匹配)。
- 生成 IDL——客戶端用來調用程式的介面描述檔案。
- 隨附 Rust、TypeScript 和 Python 客戶端函式庫。
8 位元組識別符
每個 Anchor 帳戶和每個 Anchor 指令都以 8 位元組識別符開始——固定字符串的 SHA-256 的前 8 位元組:getProgramAccounts 這樣列舉某種類型所有帳戶的工具至關重要。
錯誤
Anchor 程式通過#[error_code] 定義錯誤:
reference/error-codes。
IDL
Anchor IDL(介面描述語言)檔案是程式的 JSON 描述:其指令、帳戶、類型、錯誤和事件。它相當於以太坊的 ABI。 Raydium 為所有 Anchor 程式發佈 IDL。從鏈上即時獲取:src/raydium/*/idl/*.json。
IDL 結構
從 IDL 生成客戶端
Anchor 的anchor CLI 生成 TypeScript 和 Rust 類型:
何時 IDL 是您的好幫手
如果您想構建不通過 Raydium SDK 的自訂整合:- 獲取 IDL(從鏈上即時或從 SDK 源)。
- 查找您想要的指令(例如
swap_base_input)。 - 構造指令資料:8 位元組識別符 + 編碼的參數。
- 按 IDL 指定的順序傳遞帳戶。
sdk-api/anchor-idl 以獲得實際操作的例子。
Anchor 前的程式:AMM v4 和 Farm v3/v5
這些程式出現在 Anchor 之前。它們使用:- 手動指令分派:
instruction_data中帶有match語句的u8標籤。 - 手動帳戶驗證:
if accounts[0].owner != &expected_program { ... }。 - Borsh 序列化的指令參數:無識別符,只有
instruction_data[1..]。 - 通過
#[repr(C, packed)]的佈局:C 結構體二進位佈局。
程式升級機制
只有程式資料的upgrade_authority 可以升級。步驟:
- 編譯新位元組碼。
- 將其寫入緩衝區帳戶(
solana program write-buffer)。 - 提交升級指令:
BpfLoaderUpgradeable::Upgrade { buffer, program, authority }。 - 運行時原子性地用緩衝區的內容替換程式的位元組碼。
security/admin-and-multisig。
使程式不可變
升級授權可以設置為None,此時程式變為永久不可變。Raydium 尚未對任何產品執行此操作——團隊保留了推送安全修復的能力。折衷:用戶必須信任多簽 + 時間鎖進程。
程式和租金
部署程式會消耗免租 lamports:- 50 KB 程式:約 0.35 SOL 租金。
- 200 KB 程式:約 1.4 SOL 租金。
solana program close)會返回 lamports。Raydium 程式保持活躍,未計畫關閉。
調試 Anchor 程式
日誌輸出
Anchor 的msg! 宏寫入交易的日誌。模擬交易以查看日誌:
- 程式調用(
Program CPMMoo8... invoke [1])。 - 程式碼中的
msg!調用。 - 計算單位消耗(
consumed 137842 of 400000 compute units)。 - 程式成功或錯誤。
錯誤代碼
如果 Anchor 程式拋出,日誌顯示:SlippageExceeded)。與 IDL 的 errors 陣列交叉參考。
見 reference/error-codes 以了解 Raydium 的完整錯誤表。
帳戶佈局不匹配
如果您在錯誤的位置傳遞了錯誤的帳戶,Anchor 的帳戶驗證宏返回錯誤,如:ErrorCode 列舉);≥6000 的錯誤是程式的自訂代碼。
指針
solana-fundamentals/account-model——程式如何擁有帳戶。solana-fundamentals/pdas-and-cpis——Anchor 聲明的 PDA。sdk-api/anchor-idl——獲取和使用 Raydium 的 IDL。reference/program-addresses——程式 ID。reference/error-codes——錯誤代碼參考。security/admin-and-multisig——升級授權控制。
- Anchor 手冊。
- Solana 程式部署。
- Raydium IDL(發佈在 SDK
src/raydium/*/idl/*.json中)。


