Chuyển đến nội dung chính

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 →

Farm là gì

Farm là một chương trình độc lập trên chuỗi phân phối một hoặc nhiều reward mints cho các tài khoản staking một staking mint. Staking mint hầu hết là token LP được phát hành bởi CPMM, AMM v4, hoặc một legacy pair pool, nhưng farm single-asset (staking SOL, RAY, hoặc token dự án trực tiếp) được hỗ trợ và sử dụng cho một số chương trình lâu dài. Các tính chất chính:
  • Dựa trên phát hành, không dựa trên phí. Khác với các luồng reward tích hợp trong CLMM, phần thưởng farm không liên kết với khối lượng swap hoặc hoạt động pool. Ngân sách của farm được ký gửi trước bởi người tạo và phát hành với tốc độ không đổi mỗi giây cho đến khi hết.
  • Độc lập với pool. Pool không biết farm tồn tại. Di chuyển LP giữa các ví không thông báo cho farm; người dùng phải chủ động Withdraw từ farm trước. Tương tự, Withdraw từ pool không withdraw từ farm.
  • Sổ cái per-user, per-reward. Mỗi người staking có một tài khoản UserStake (hoặc “Ledger”) per farm theo dõi số lượng staked của họ và snapshot của bộ đếm reward-per-share cho mỗi luồng reward của farm.
  • Hỗ trợ nhiều reward. Farm v5 hỗ trợ tối đa 2 reward; v6 hỗ trợ tối đa 5. Mỗi reward có vault, tốc độ per-second, thời gian bắt đầu và thời gian kết thúc riêng.

Ba phiên bản đang hoạt động

Raydium đã phát hành ba phiên bản chương trình farm. Tất cả đều hoạt động, và mỗi phiên bản có sơ đồ PDA và tập lệnh riêng. Những người tích hợp nên coi chúng là ba chương trình riêng biệt chia sẻ một mô hình khái niệm.
Phiên bảnVị trí Program IDMax rewardsKhác biệt đáng chú ý
v3xem reference/program-addresses1Schema sớm nhất. Các farm cũ nhất (RAY-USDC, SOL-USDC) vẫn sử dụng phiên bản này.
v5xem reference/program-addresses2Thêm khe reward thứ hai và top-up kiểu AddReward.
v6xem reference/program-addresses5Phiên bản hiện tại. Khe mở rộng, admin sạch hơn, hỗ trợ farming vị trí CLMM qua adapter v6-specific (hiếm trong thực tế).
SDK hiển thị raydium.farm như một facade duy nhất — phiên bản được suy ra từ chủ sở hữu tài khoản farm. Khi xây dựng tích hợp on-chain bạn phải dispatch thủ công.

Accounting reward-per-share

Chương trình farm sử dụng mô hình “master-chef” tiêu chuẩn thường thấy trong các hợp đồng yield trên DeFi:
reward_per_share := total_rewards_distributed_by_stream / total_staked
pending(user)    := user.staked × (reward_per_share − user.reward_debt)
  • reward_per_share được lưu trữ trên tài khoản farm như một bộ đếm fixed-point (Q64.64 trong v5+, Q56.8 trong v3). Nó chỉ phát triển.
  • user.reward_debt là snapshot của reward_per_share tại lần tương tác cuối cùng của người dùng. Nó không phải là khoản nợ mà người dùng phải trả; nó là một offset dùng để tính toán các accrual trong tương lai.
  • Khi DepositWithdraw, farm trước tiên giải quyết pending rewards (ghi có user.pending_reward hoặc gửi trực tiếp đến ATA của người dùng, tùy phiên bản), sau đó cập nhật user.reward_debt lên bộ đếm hiện tại.
  • Khi Harvest, farm thanh toán pending_reward và snapshot reward_debt lại.
Tốc độ phát hành per-second vào accounting qua một lazy update:
elapsed        := min(now, reward.end_time) − reward.last_update_time
new_emissions  := reward.per_second × elapsed
if total_staked > 0:
    reward_per_share += new_emissions / total_staked
reward.last_update_time := now
Lazy: không có lệnh nào được phát hành “mỗi giây.” Bộ đếm được làm mới mỗi khi bất kỳ ai chạm đến farm (Deposit, Withdraw, Harvest, cập nhật admin). Các farm không hoạt động tích lũy một khoảng cách ngày càng tăng được đóng lại khi tương tác tiếp theo.

Staking mint vs reward mint

Staking mint được giữ chứng chỉ, không bị đốt. Khi người dùng stake 100 LP, farm di chuyển 100 LP từ ATA của người dùng vào vault staking của farm. Khi Withdraw, farm di chuyển 100 LP trở lại. Farm không bao giờ gọi pool. Reward mints được thanh toán từ các vault được tài trợ trước bởi người tạo. Khi người tạo khởi động một farm, họ gửi toàn bộ ngân sách reward (ví dụ: 1.000.000 RAY + 500.000 USDC) vào hai reward vault. Chương trình farm không mint token mới; nó chỉ phân phối những gì có trong vault trong thời gian luồng. Nếu vault bị cạn trước end_time, phát hành sẽ dừng.

Lịch phát hành

Mỗi luồng reward có ba tham số thời gian:
  • start_time — UNIX timestamp khi phát hành bắt đầu. Trước đó, không có accrual.
  • end_time — timestamp khi phát hành dừng. Sau đó, reward_per_share không còn phát triển từ luồng này.
  • per_second — tốc độ phát hành khi start_time ≤ now < end_time.
Một reward có thể được mở rộng (đẩy end_time về phía trước, top up vault) thông qua AddReward / SetRewards trên v5 / v6. Nó có thể bị khởi động lại sau end_time qua RestartRewards. Nó không thể bị rút ngắn mà không cần sự hợp tác của admin.

Farm không phải là gì

  • Không phải là bộ phân phối phí. CPMM và CLMM thu phí giao dịch trực tiếp vào pool state. Farm không chạm vào pool fees. Đường duy nhất từ pool fees đến token holder là LP-redemption hoặc CLMM’s CollectFee.
  • Không phải là tự động. LP phải được stake rõ ràng để kiếm farm rewards. Những người nắm giữ LP để token ở ví của họ không kiếm được gì từ farm.
  • Không có thể trao đổi được. Mỗi tài khoản UserStake được liên kết với một cặp (farm, user). Bạn không thể chuyển stake của mình sang ví khác mà không unstake trước.
  • Không tương thích trực tiếp với vị trí CLMM. Farm v6 giới thiệu một CLMM adapter, nhưng trong thực tế các pool CLMM sử dụng các luồng reward tích hợp của riêng chúng (xem products/clmm/fees) thay vì phát hành farm.

Khi nào farm là công cụ phù hợp

Sử dụng farm khi bạn muốn:
  • Khuyến khích LP cho một trong các pool CPMM hoặc AMM v4 của dự án của bạn bằng một token bên ngoài (token dự án của bạn, token của đối tác, v.v.).
  • Chạy một chương trình staking trên một mint single-asset (staking RAY kinh điển, kiếm RAY) mà không triển khai hợp đồng của riêng bạn.
  • Thêm các reward bổ sung lên trên một pool hiện có mà không cần quyền admin cho pool đó.
Sử dụng các luồng reward tích hợp của CLMM thay vào đó khi pool của bạn là CLMM. Chúng có kinh tế nhân giống nhưng tham gia vào fee-growth-inside accounting của vị trí (vị trí in-range kiếm pro rata, vị trí out-of-range không) và không yêu cầu người dùng di chuyển NFT vị trí của họ.

Nội dung chương

  • accounts — layout on-chain state đầy đủ per phiên bản.
  • instructions — mọi lệnh farm với danh sách tài khoản và điều kiện pre/postcondition.
  • code-demos — ví dụ TypeScript cho staking, harvesting, và tạo một farm mới.

Tiếp theo là gì

Nguồn: