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.
Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →
Các chương trình mới của Raydium (CPMM, CLMM, Farm v6, LaunchLab) được viết bằng Anchor — một framework Rust được xây dựng dựa trên mô hình chương trình gốc của Solana để cung cấp xác thực tài khoản, xử lý lỗi và IDL (interface description). AMM v4 và các farm cũ hơn ra đời trước khi có Anchor. Hiểu cả hai mô hình sẽ giúp bạn đọc mã, tạo client từ IDL và gỡ lỗi các sai sót không mong muốn.
Mô hình triển khai chương trình
Mỗi chương trình Solana nằm tại mộtPubkey. Bytecode của chương trình được lưu trữ trong một tài khoản executable được sở hữu bởi BPF Upgradable Loader (BPFLoaderUpgradeab1e11111111111111111111111).
Một lần triển khai chương trình bao gồm ba tài khoản:
- Program account: tài khoản metadata nhỏ tại ID của chương trình. Chủ sở hữu: BPF Upgradable Loader.
- ProgramData account: chứa bytecode thực tế. Được tạo từ
[program_id, "programdata"]. - Buffer account (tạm thời): chứa bytecode mới trong quá trình nâng cấp. Bị loại bỏ sau khi nâng cấp.
security/admin-and-multisig.
Xác minh một chương trình được triển khai
Để xác nhận điều gì đang on-chain phù hợp với những gì trong mã nguồn được kiểm toán:Anchor: một framework trên nền tảng Solana
Các chương trình Solana thô là các hàm Rust với chữ ký này:- Tự động tạo ra một discriminator 8 byte xác định cho mỗi lệnh và mỗi loại tài khoản.
- Xác thực các ràng buộc tài khoản (owner, seeds, writable, signer, mint-matches, token-program-matches) trước khi mã của bạn chạy.
- Tạo ra một IDL — một tệp mô tả giao diện mà các client sử dụng để gọi chương trình.
- Đi kèm với một thư viện client-side Rust, TypeScript và Python.
Discriminator 8 byte
Mỗi tài khoản Anchor và mỗi lệnh Anchor bắt đầu bằng một discriminator 8 byte — 8 byte đầu tiên của SHA-256 của một chuỗi cố định:getProgramAccounts liệt kê tất cả các tài khoản của một loại.
Lỗi
Các chương trình Anchor định nghĩa lỗi thông qua#[error_code]:
reference/error-codes.
IDL
Một tệp IDL (Interface Description Language) của Anchor là mô tả JSON của một chương trình: các lệnh, tài khoản, loại, lỗi và sự kiện của nó. Nó tương đương với ABI của Ethereum. Raydium xuất bản IDL cho tất cả các chương trình Anchor. Lấy trực tiếp từ on-chain:src/raydium/*/idl/*.json.
Cấu trúc IDL
Tạo client từ IDL
CLIanchor của Anchor tạo các loại TypeScript và Rust:
Khi IDL là bạn của bạn
Nếu bạn muốn xây dựng một tích hợp tùy chỉnh không thông qua Raydium SDK:- Lấy IDL (trực tiếp từ on-chain hoặc từ nguồn SDK).
- Tìm kiếm lệnh bạn muốn (ví dụ:
swap_base_input). - Xây dựng dữ liệu lệnh: discriminator 8 byte + các args được mã hóa.
- Chuyển các tài khoản theo thứ tự mà IDL chỉ định.
sdk-api/anchor-idl để có các ví dụ thực tế.
Các chương trình trước Anchor: AMM v4 và Farm v3/v5
Các chương trình này ra đời trước khi có Anchor. Chúng sử dụng:- Manual instruction dispatch: một tag
u8tronginstruction_datavới một câu lệnhmatch. - Manual account validation:
if accounts[0].owner != &expected_program { ... }. - Borsh-serialized instruction args: không có discriminator, chỉ
instruction_data[1..]. - Layout via
#[repr(C, packed)]: bố cục nhị phân struct C.
Cơ chế nâng cấp chương trình
Chỉupgrade_authority của ProgramData mới có thể nâng cấp. Các bước:
- Biên dịch bytecode mới.
- Viết nó vào tài khoản buffer (
solana program write-buffer). - Gửi một lệnh nâng cấp:
BpfLoaderUpgradeable::Upgrade { buffer, program, authority }. - Runtime ngay lập tức thay thế bytecode của chương trình bằng nội dung của buffer.
security/admin-and-multisig.
Làm cho một chương trình bất biến
Một upgrade authority có thể được đặt thànhNone, khi đó chương trình trở thành vĩnh viễn bất biến. Raydium chưa làm điều này cho bất kỳ sản phẩm nào — nhóm vẫn giữ khả năng đẩy các bản vá bảo mật. Sự đánh đổi: người dùng phải tin tưởng quá trình multisig + timelock.
Các chương trình và tiền thuê
Triển khai một chương trình tiêu tốn lamports miễn là thuê:- Một chương trình 50 KB: ~0.35 SOL tiền thuê.
- Một chương trình 200 KB: ~1.4 SOL tiền thuê.
solana program close) trả lại các lamport. Các chương trình Raydium vẫn hoạt động và không được lên lịch để đóng lại.
Gỡ lỗi các chương trình Anchor
Đầu ra nhật ký
Macromsg! của Anchor ghi vào nhật ký giao dịch. Mô phỏng một giao dịch để xem nhật ký:
- Gọi chương trình (
Program CPMMoo8... invoke [1]). - Các lệnh gọi
msg!từ mã chương trình. - Tiêu thụ compute unit (
consumed 137842 of 400000 compute units). - Thành công hoặc lỗi của chương trình.
Mã lỗi
Nếu một chương trình Anchor đưa ra lỗi, nhật ký hiển thị:SlippageExceeded). Tham chiếu chéo với mảng errors trong IDL.
Xem reference/error-codes để có bảng lỗi đầy đủ của Raydium.
Không phù hợp với bố cục tài khoản
Nếu bạn chuyển tài khoản sai ở vị trí sai, các macro xác thực tài khoản của Anchor sẽ trả về lỗi như:ErrorCode của Anchor); các lỗi ≥6000 là các mã tùy chỉnh của chương trình.
Con trỏ
solana-fundamentals/account-model— cách các chương trình sở hữu tài khoản.solana-fundamentals/pdas-and-cpis— PDA như Anchor khai báo chúng.sdk-api/anchor-idl— lấy và sử dụng IDL của Raydium.reference/program-addresses— ID chương trình.reference/error-codes— tham chiếu mã lỗi.security/admin-and-multisig— kiểm soát upgrade-authority.
- Anchor book.
- Solana program deployment.
- IDL của Raydium (xuất bản trong SDK
src/raydium/*/idl/*.json).


