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 →
Thông tin phiên bản. Tất cả các ví dụ nhắm tới
@raydium-io/raydium-sdk-v2@0.2.64-alpha trên Solana mainnet-beta, được xác minh vào 2026-09-09 — mọi tên builder, tên tham số và kiểu tham số dưới đây đã được kiểm tra so với thư mục src/raydium/farm/ của bản phát hành đó và so với raydium-sdk-V2-demo/src/farm. SDK gử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 một farm v6. Xem reference/program-addresses để biết ba ID chương trình.Tên phương thức của mô-đun farm không phải là những gì bạn có thể đoán: không có getFarmById và không có setRewards. Việc lấy dữ liệu diễn ra thông qua raydium.api.fetchFarmInfoById, và các builder chỉnh sửa phần thưởng là addNewRewardToken / addNewRewardsToken và restartReward / restartRewards.Thiết lập
Các ví dụ ở đây phản ánh các tệp trongraydium-sdk-V2-demo/src/farm. Bootstrap tuân theo config.ts.template của kho lưu trữ demo:
Lấy farm theo id
Không córaydium.farm.getFarmById. Mọi ví dụ farm đều bắt đầu từ mô-đun API, mô-đun này trả về hình dạng FormatFarmInfoOut được chuẩn hóa mà deposit / withdraw / harvestAllRewards đều sử dụng:
fetchFarmInfoById nhận một chuỗi các id được phân tách bằng dấu phẩy và trả về một mảng, vì vậy một lệnh gọi có thể cấp nước cho toàn bộ danh mục đầu tư. Nếu bạn cần các khóa tài khoản thô hơn là thông tin hiển thị, raydium.api.fetchFarmKeysById({ ids }) trả về các vault và PDA có thẩm quyền; SDK gọi nó nội bộ cho bạn bên trong mọi builder dưới đây.
Stake LP tokens
Nguồn:src/farm/stake.ts
Chỉ yêu cầu (harvest)
Nguồn:src/farm/harvest.ts
farmInfoList là một Record được khóa bằng farm id, không phải một mảng, và builder trả về nhiều giao dịch — vì vậy execute phải được cung cấp sequentially: true:
txIds thay vì một txId duy nhất.
Đối với một farm duy nhất, harvest bằng cách sử dụng amount: 0 — đây là những gì src/farm/harvest.ts làm, trên mọi phiên bản bao gồm v6:
Unstake
Nguồn:src/farm/unstake.ts
Tạo một farm v6
Nguồn:src/farm/createAmmFarm.ts và editAmmFarm.ts
create nhận đối tượng thông tin pool cho pool có mint LP đang được stake (không phải một mint trần), và mỗi mục nhập của rewardInfos là một FarmRewardInfo: { mint: PublicKey, perSecond: string, openTime: number, endTime: number, rewardType: "Standard SPL" | "Option tokens" }. Thời gian là giây đơn giản, và perSecond là một chuỗi, không phải một BN. programId mặc định là chương trình v6, vì vậy bạn hiếm khi truyền nó.
perSecondlà tốc độ phát hành trên giây ở các đơn vị thô của mint phần thưởng, được truyền dưới dạng chuỗi thập phân. SDK đóng gói nó vào biểu diễn điểm cố định trên chuỗi trước khi gửi.- Toàn bộ ngân sách (
perSecond × (endTime − openTime)) phải có trong ATA phần thưởng của bạn —createdi chuyển nó vào vault phần thưởng một cách nguyên tử. - Các mint phần thưởng Token-2022 không được hỗ trợ bởi các builder farm của SDK ở phiên bản SDK này; sử dụng mint SPL đơn giản cho phần thưởng.
- Bạn có thể seed tối đa 5 phần thưởng trong một lệnh gọi
create. Danh sách tài khoản tăng lên(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+ phần thưởng, tạo với 1–2 và sử dụngaddNewRewardsTokentrong các giao dịch tiếp theo.
Thêm một luồng phần thưởng mới
Không córaydium.farm.setRewards. Hai builder thay đổi phần thưởng của farm là addNewRewardToken / addNewRewardsToken (chiếm một slot trống với một mint mới) và restartReward / restartRewards (tái vũ trang một slot có luồng đã kết thúc). Cả hai đều nhận các đối tượng FarmRewardInfo ở chính xác hình dạng mà create sử dụng.
perSecond × duration) được rút từ ATA của người trả tiền như một phần của giao dịch. Hướng dẫn cơ bản không thể rút ngắn một luồng, không thể hạ thấp per_second trên một luồng trực tiếp, và không thể thay đổi mint phần thưởng của một slot — để hoán đổi mint, hãy chờ end_time và sử dụng addNewRewardsToken trên một slot được giải phóng, hoặc tạo một farm mới.
Khởi động lại một luồng đã hoàn thành
Nguồn:src/farm/editAmmFarm.ts
restartRewards nhận newRewardInfos (số nhiều, một mảng); restartReward là dạng mục đơn và nhận newRewardInfo. Trường mint là mint, không phải rewardMint, và nó phải khớp với một slot đã tồn tại trên farm — builder tìm kiếm slot theo mint và báo lỗi nếu nó không có.
restartRewards là chỉ v6 — builder đọc ID chương trình của farm và ném cho các farm v3 / v5. Chỉ hợp lệ khi reward_state == 2 của slot mục tiêu (đã kết thúc); người gọi phải là reward_sender của slot. Lưu ý openTime >= endTime bị từ chối phía máy khách trước khi bất kỳ RPC nào được thực hiện.
Rust CPI
Farm v6 được triển khai lần cuối vào 2024-05-13 và không phải là chương trình Anchor từ quan điểm của người tích hợp. Nếu bạn cần soạn với nó từ chương trình trên chuỗi của riêng bạn, hãy xây dựngInstruction bằng tay — suy ra danh sách tài khoản và bộ phân biệt hướng dẫn độc lập (từ các bố cục TypeScript của SDK dưới raydium-sdk-V2/src/raydium/farm/, hoặc bằng cách giải mã các giao dịch thực), và invoke_signed nó. Xem sdk-api/rust-cpi để biết quy trình đó.
Bất kể bạn chọn con đường nào, đuôi remaining_accounts phải khớp với các slot phần thưởng hoạt động của farm 1-for-1 (các cặp reward_vault_i, user_reward_ata_i theo thứ tự chỉ mục). Bỏ qua hoặc sắp xếp sai những cái này sẽ tạo ra một sai lệch âm thầm — 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. Vô hại —
Withdrawgiải quyết phần thưởng đang 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”, người dùng có thể nghĩ rằng vẫn còn điều gì đó để yêu cầu sau mộtWithdraw. Không có; mọi thứ tích lũy cho đến thời điểm đó đã được trả. total_staked = 0trong quá trình phát hành. Phát hành tích lũy trong khi không có gì được stake bị mất (công thức cập nhậtreward_per_sharechia 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được lên lịch, chạy một “seed stake” tại open_time để tránh điều này.- Phí chuyển Token-2022. Trên các farm v6 có mint phần thưởng Token-2022, phí chuyển áp dụng khi phát hành (vault → người dùng). Tính toán điều này vào các báo giá APR.
per_secondnhỏ trên v5.u64của v5 có nghĩa là bất kỳper_second < 1đơn vị token trên giây (trên mint có ≥9 chữ số thập phân đây thường là tốc độ mong muốn) không thể được biểu thị — tốc độ luồng làm tròn thành 0 và farm không phát hành gì. Sử dụng v6.
Tiếp theo
products/farm-staking/instructions— tham chiếu hướng dẫn cơ bản.products/clmm/fees— so sánh với các luồng phần thưởng gốc của CLMM.user-flows/migrate-amm-v4-to-cpmm— thường được ghép nối với việc quay lên một farm CPMM mới.
- Raydium SDK v2
- Farm v6 IDL được gói trong
raydium-io/raydium-sdk-V2dướisrc/raydium/farm/.

