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 →
Banner phiên bản. Tất cả các demo hướng tới @raydium-io/raydium-sdk-v2@0.2.42-alpha trên Solana mainnet-beta, được xác minh vào tháng 4 năm 2026. SDK điều phối v3 / v5 / v6 nội bộ dựa trên chủ sở hữu chương trình của farm; các ví dụ dưới đây giả định farm v6. Xem reference/program-addresses để tìm ba ID chương trình.

Cài đặt

Các demo ở đây phản ánh các tập tin trong raydium-sdk-V2-demo/src/farm. Bootstrap theo config.ts.template của kho demo:

Tìm nạp farm theo ID

getFarmById tải FarmState ngoài chuỗi, giải mã theo phiên bản chương trình và chuẩn hóa tỷ lệ phát hành điểm cố định thành Decimal đơn giản trên mỗi giây.

Staking token LP

Nguồn: src/farm/stake.ts
SDK xử lý việc giải quyết trước bất kỳ phần thưởng nào đang chờ xử lý, vì vậy nếu ví này đã có cổ phần trong farm này, hướng dẫn sẽ trả các phần thưởng tích lũy cho ATA của người dùng trong cùng một giao dịch.

Chỉ yêu cầu (thu hoạch)

Nguồn: src/farm/harvest.ts
harvestAllRewards chấp nhận một danh sách — đối với UI hiển thị dạng xem danh mục đầu tư, hãy ghép lại cuộc gọi. Mỗi farm được yêu cầu trong một hướng dẫn riêng biệt trong một giao dịch (tùy thuộc vào giới hạn kích thước 1232 byte; đối với >~6 farm, hãy chia thành nhiều giao dịch). Đối với một farm duy nhất trên v6, bạn cũng có thể sử dụng đường dẫn Harvest rõ ràng:
Trên v3 và v5 thành ngữ amount: 0 là bắt buộc; SDK điều phối nó một cách chính xác.

Rút cọc

Nguồn: src/farm/unstake.ts

Tạo farm v6

Nguồn: src/farm/createAmmFarm.tseditAmmFarm.ts
Những điểm chính:
  • perSecond là tỷ lệ phát hành nguyên số mỗi giây. SDK đóng gói nó thành Q64.64 trước khi gửi. Đối với tỷ lệ phân số, hãy chia tỷ lệ và điều chỉnh khoảng thời gian.
  • Ngân sách đầy đủ (perSecond × duration) phải có trong ATA phần thưởng của bạn — create di chuyển nó vào kho phần thưởng một cách nguyên tử.
  • Bạn có thể tạo hạt giống tối đa 5 phần thưởng trong một cuộc gọi create. Danh sách tài khoản tăng thêm (reward_mint, reward_vault, sender_ata, token_program) cho mỗi luồng bổ sung; hãy nhận thức được giới hạn kích thước giao dịch 1232 byte. Đối với 4 hoặc nhiều phần thưởng, hãy tạo với 1–2 và sử dụng AddReward trong các giao dịch tiếp theo.

Nạp thêm luồng phần thưởng hiện có

setRewards mở rộng end_time và chuyển ngân sách delta. Hướng dẫn không thể rút ngắn luồng, không thể hạ thấp per_second trên luồng hoạt động và không thể thay đổi mint phần thưởng. Để hoán đổi mint, hãy đợi end_time và sử dụng AddReward trên một slot được giải phóng (nếu có), hoặc tạo farm mới.

Khởi động lại luồng hoàn thành

Chỉ có giá trị khi reward_state == 2 của slot mục tiêu (kết thúc). Người gọi phải là reward_sender (v6) hoặc chủ sở hữu farm (v5) của slot.

CPI Rust

Không giống như AMM v4, chương trình farm v6 được cung cấp với crate Anchor (raydium_farm_v6) được xuất bản cùng với nguồn SDK và frontend. Một bản phác họa Deposit tối thiểu:
Lát remaining_accounts phải khớp các slot phần thưởng hoạt động của farm 1-cho-1 (cặp reward_vault_i, user_reward_ata_i theo thứ tự chỉ số). Bỏ qua hoặc sắp xếp sai các thành phần này sẽ tạo ra kỹ toán sai lệch im lặng — chương trình sẽ chuyển số tiền sai.

Những cạm bẫy

  • Quên yêu cầu trước khi rút cọc. Vô hại — Withdraw giải quyết phần thưởng chờ xử lý trước. Nhưng nếu UI của bạn hiển thị “yêu cầu” riêng biệt với “rút cọc”, người dùng có thể nghĩ rằng vẫn còn gì đó để yêu cầu sau Withdraw. Không có; mọi thứ tích lũy cho đến thời điểm đó đã được thanh toán.
  • total_staked = 0 trong quá trình phát hành. Phát hành tích lũy khi không có gì được staking bị mất (công thức cập nhật reward_per_share chia cho 0 và chương trình bỏ qua cập nhật). Đối với các chương trình có open_time theo lịch trình, chạy “seed stake” tại open_time để tránh điều này.
  • Phí chuyển Token-2022. Trên farm v6 với mint phần thưởng Token-2022, phí chuyển được áp dụng khi phát hành (vault → người dùng). Tính toán điều này vào báo giá APR.
  • Nhỏ per_second trên v5. u64 rate của v5 có nghĩa là bất kỳ per_second < 1 đơn vị token trên mỗi giây (trên mint có ≥9 decimals đây thường là tỷ lệ mong muốn) không thể được biểu thị — tỷ lệ luồng làm tròn thành 0 và farm không phát hành gì. Sử dụng v6.

Bước tiếp theo

Nguồn: