Chuyển đến nội dung chính
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 →
Raydium không xuất bản SDK Python chính thức. Các mẫu ở đây kết hợp ba thư viện cộng đồng được bảo trì tốt: solders (các nguyên thủy Solana liên kết Rust), solana-py (RPC client), và anchorpy (các trình xây dựng hướng dẫn Anchor từ IDL). Tổ hợp này bao gồm mọi thứ mà SDK TS làm được; nó chỉ là kém hoàn thiện hơn.

Môi trường

Các phiên bản hoạt động cùng nhau lúc này:
anchorpy định kỳ chậm hơn phiên bản anchor-lang; với một chương trình Raydium được triển khai gần đây, hãy xác minh IDL biên dịch dưới anchorpy đã khóa của bạn trước khi ghi lại.

Kết nối và keypair

AsyncClient là biến thể async; Client đồng bộ có sẵn cho các script nhanh nhưng async được ưa thích cho bất kỳ thứ gì gửi nhiều yêu cầu.

Đọc trạng thái pool

Hầu hết mục đích sử dụng sản xuất đọc trạng thái pool được giải mã từ REST API của Raydium (xem sdk-api/rest-api) thay vì giải mã dữ liệu trên chuỗi thủ công — nó đơn giản hơn và độ trễ chấp nhận được cho hầu hết các trường hợp sử dụng.
Đối với bot cần độ trễ thấp nhất có thể, giải mã byte trên chuỗi trực tiếp:
Bố cục đầy đủ nằm trong src/raydium/cpmm/layout.ts (nguồn TS); chuyển đổi sang construct khi cần. anchorpy có thể làm điều này tự động với IDL — xem bên dưới.

Xây dựng và gửi swap

Để đơn giản, sử dụng điểm cuối server-built-transaction của Raydium. Server trả về giao dịch sẵn sàng ký; bạn chỉ cần thêm chữ ký của mình:
Đây là con đường nhanh nhất để có một bot hoạt động. Báo giá từ server hết hạn nhanh chóng (≈30s); không lưu vào bộ nhớ đệm.

Xây dựng swap phía client (qua anchorpy)

Để độ trễ thấp hơn hoặc khi bạn không thể tiếp cận API của Raydium (các vùng bị cấm, thiết lập không có kết nối mạng):
Các derivation PDA (trạng thái quan sát, quyền kiểm soát pool) tuân theo các công thức giống như trong chương CPMM. anchorpy không tự động derivation chúng.

Kiến trúc bot điển hình

Một cấu trúc bot Raydium Python thường gặp:
Các quyết định chính cho sản xuất:
  • RPC provider. RPC mainnet công cộng giới hạn tỷ lệ tích cực. Sử dụng nhà cung cấp chuyên dụng (Helius, QuickNode, Triton) cho lưu lượng truy cập liên tục.
  • WebSocket cho trạng thái pool. client.account_subscribe(pool_id) đẩy cập nhật trên mỗi thay đổi trạng thái. Chặt hơn nhiều so với bỏ phiếu.
  • Nhà cung cấp phí ưu tiên. Helius có điểm cuối getPriorityFeeEstimate; Triton có của riêng họ. Định kích thước phí của bạn dựa trên phân vị thứ 75 của các phí gần đây trên chương trình mục tiêu.
  • Gói cho các giao dịch nhạy cảm với MEV. Định tuyến qua công cụ khối của Jito nếu bạn không thể chịu được rủi ro sandwich. Thư viện Python: jito-sdk-python (của bên thứ ba, chất lượng thay đổi).

Đọc trạng thái farm

.account["X"].decode(bytes) của anchorpy cung cấp một đối tượng Python gốc phù hợp với struct IDL.

Những cạm bẫy

1. Xử lý decimal

float gốc của Python là IEEE-754 double; các số tiền ở mint 9-decimal (1 SOL = 1e9 unit) giữ nguyên chính xác nhưng tỷ lệ và sản phẩm mất độ chính xác. Sử dụng int (solders trả về int cho tất cả các trường số tiền) và định tuyến qua decimal.Decimal cho bất kỳ số học giá nào.

2. Lý luận dựa trên slot so với dựa trên timestamp

Một số phiên bản farm sử dụng bộ đếm slot; LaunchLab sử dụng timestamp. solana-py trả về slot trong các phản hồi RPC, nhưng chuyển đổi slot → timestamp mất mát (thay đổi theo lịch trình leader). Nếu bạn cần thời gian tường thực, gọi get_block_time(slot) một cách rõ ràng.

3. Cạn kiệt connection pool

AsyncClient mở một kết nối HTTP trên mỗi yêu cầu theo mặc định. Dưới tải cao, tái sử dụng các phiên httpx.AsyncClient và đặt limits=httpx.Limits(max_connections=100) thích hợp.

4. Giới hạn kích thước giao dịch

Các giao dịch được xây dựng bằng Python không nhỏ hơn những cái được xây dựng bằng TS — giới hạn 1232 byte áp dụng như nhau. Sử dụng giao dịch V0 (bảng tra cứu địa chỉ) cho bất kỳ thứ gì định tuyến qua hơn ~2 pool.

Con trỏ

Nguồn: