このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
ファーム命令はバージョンに固有です。v6 の Deposit は v5 ファームでは呼び出せません。逆も同じです。SDK はファームのプログラム所有者を読むことでディスパッチします。オンチェーン CPI の場合は、事前に正しいプログラム ID を選択する必要があります。
命令一覧
| 用途 | v3 | v5 | v6 |
|---|
| ファームを作成 | CreateFarm | CreateFarm | CreateFarm |
| ユーザー台帳を追加(暗黙的な場合あり) | CreateUserLedger | CreateAssociatedLedger | Deposit 内で暗黙 |
| ステーキング | Deposit | Deposit | Deposit |
| ステーキング解除 | Withdraw | Withdraw | Withdraw |
| 報酬のみをクレーム | N/A (Deposit 0 を使用) | N/A (Deposit 0 を使用) | Harvest |
| 作成後に報酬ストリームを追加 | N/A | AddReward | AddReward |
| 既存報酬ストリームを編集 | N/A | SetRewards | SetRewards |
| end_time 後に報酬を再開 | N/A | RestartRewards | RestartRewards |
| クレームされていない報酬予算を引き出し(管理者) | N/A | WithdrawReward | WithdrawReward |
v3 と v5 では、ステークを変更せずに報酬をクレームする標準的な方法は、amount = 0 で Deposit を呼び出すことです。プログラムはこれを純粋なセットルメントとして扱います。v6 では明示的な Harvest が導入され、わかりやすくなりました。
SDK はこれらすべてを raydium.farm.deposit({ ... }) などの背後に抽象化しています。以下のセクションでは、手動で命令を構築する必要があるインテグレータ(アグリゲータ、監視ツール、SDK 拡張)向けの基礎となるアカウントリストを文書化しています。
CreateFarm (v6)
新しい v6 ファームをスピンアップします。
引数
reward_info_count: u8 // 作成時の報酬ストリーム数 (1..=5)
reward_infos: [
{
open_time: u64,
end_time: u64,
emission_per_second_x64: u128, // Q64.64
mint: Pubkey, // 報酬ミント
token_program: Pubkey, // SPL または Token-2022
}
]
アカウント(簡略版、reward_info_count = 1 の場合)
| # | 名前 | W | S | 備考 |
|---|
| 1 | creator | W | S | レント支払、ファーム所有。 |
| 2 | farm_state | W | | 新しい FarmState アカウント。 |
| 3 | farm_authority | | | PDA [farm_id]。 |
| 4 | staking_mint | | | |
| 5 | staking_vault | W | | オーソリティの ATA または PDA ボールトとして作成。 |
| 6 | staking_token_program | | | |
| 7 | reward_mint | | | |
| 8 | reward_vault | W | | 初期予算を受け取ります。 |
| 9 | reward_token_program | | | |
| 10 | reward_sender_ata | W | | クリエイターの報酬ミント ATA。この命令で排出。 |
| 11 | system_program | | | |
| 12 | token_program | | | |
| 13 | associated_token_program | | | |
| 14 | rent | | | |
前提条件
open_time > now、end_time > open_time。
creator ATA は少なくとも emission_per_second_x64 × (end_time − open_time) / 2^64 の報酬ミントを保有。
staking_mint はフリーズ権限がない、またはフリーズ権限が無効。
事後条件
FarmState が初期化され、total_staked = 0。
- 報酬ボールト(ボールト)は完全なストリーム予算で充当。
- クリエイターの報酬 ATA がその金額分排出。
Deposit (v6)
ステーキングミントの amount をステーキングします。
引数
アカウント
| # | 名前 | W | S |
|---|
| 1 | user | W | S |
| 2 | user_ledger | W | |
| 3 | farm_state | W | |
| 4 | farm_authority | | |
| 5 | staking_vault | W | |
| 6 | user_staking_ata | W | |
| 7..(7+n) | reward_vault_{i} | W | |
| … | user_reward_ata_{i} | W | |
| last−2 | system_program | | |
| last−1 | token_program | | |
| last | associated_token_program | | |
user_ledger が存在しない場合、SDK は CreateAccount スタイルの命令を前置します。v6 プログラムはシステムプログラムアカウントを指定されれば遅延作成も可能です。残りのアカウントパターン:各アクティブ報酬に対して (reward_vault, user_reward_ata) を追加して、セットルメントがペイアウトできるようにします。
効果
- 各アクティブ報酬ストリームの
reward_per_share_x64[i] を遅延更新フォーミュラを使って更新。
pending_i = user_ledger.deposited × reward_per_share_x64[i] / 2^64 − user_ledger.reward_debts[i] を計算。
reward_vault_{i} から user_reward_ata_{i} に pending_i を転送。
user_staking_ata から staking_vault にステーキングミント amount を転送。
user_ledger.deposited += amount を更新し、reward_debts[i] を再スナップショット。
farm_state.total_staked += amount を更新。
前提条件
- 真のステーキングについて
amount > 0(v6 は amount = 0 を禁止 — クレーム限定は Harvest を使用)。
user_staking_ata は少なくとも amount を保有。
- 各アクティブ報酬ボールトはこのユーザーに支払うべき保留分を少なくとも保有。
Withdraw (v6)
amount をアンステーキングします。
引数
アカウント — Deposit と同一。
効果 — Deposit と同じセットルメント後、ステーキングミントをユーザーに戻す:staking_vault → user_staking_ata。total_staked と user_ledger.deposited の両方が減少。
前提条件
amount ≤ user_ledger.deposited。
- ファームは一時停止されていない。
Harvest (v6)
ステークを変更せずに保留報酬をクレームします。
引数 — なし。
アカウント — Deposit と同一、ステーキング側の移動なし。
効果 — reward_per_share_x64[i] を更新、pending_i をペイアウト、reward_debts[i] を再スナップショット。total_staked または deposited に変更なし。
AddReward (v5/v6)
未使用スロットを持つ既存ファームに新しい報酬ストリームを追加します。
引数
reward_info: {
open_time: u64,
end_time: u64,
emission_per_second_x64: u128,
mint: Pubkey,
token_program: Pubkey,
}
前提条件
- 空きスロットが存在(v6 の場合
reward_info_count < 5、v5 の場合 < 2)。
open_time ≥ now(将来の場合あり)または open_time < now はプログラムバージョンが許可する場合のみ — v6 は許可、v5 は許可しません。
事後条件
- 新しいストリームがインデックス
reward_info_count で初期化され、reward_info_count++。
- 報酬ボールトは呼び出し元の ATA からの完全なストリーム予算でクレジット。
一般的なエラー — ミントが既存スロットと衝突する場合 RewardAlreadyExists。
SetRewards (v5/v6)
既存報酬ストリームを拡張またはトップアップします。ミントを変更することはできません。end_time を短縮することはできません。emission_per_second_x64 を実行中に削減することはできません。
引数
reward_index: u8
new_open_time: u64,
new_end_time: u64,
new_emission_per_second_x64: u128,
前提条件
- ストリームがまだ実行中(
reward_state == 1)。
new_end_time ≥ current end_time。
- 追加で必要な予算
(new_emission × new_duration − already_emissioned) が送信元の ATA に存在し、命令により報酬ボールトに転送。
v5 では、同等の呼び出しは SetRewards で、より小さい引数セット(ライブストリーム上での秒単位の変更なし)。
RestartRewards (v5/v6)
end_time が経過した後、ストリームを再開します。概念的には、既にスロットを持つミントの AddReward と同じです。
引数 — そのインデックスで AddReward と同一の形状。
前提条件
reward_state == 2(終了)。
- 呼び出し元はスロットの
reward_sender(v6)またはファーム owner(v5)。
WithdrawReward (v5/v6)
ストリーム終了後およびすべてのステーカーがハーベストするチャンスを持った後の、クレームされていない報酬ボールト残高のAdmin スイープ。
引数
前提条件
- ストリーム終了(
reward_state == 2)。
reward_total_emissioned == reward_claimed + vault_balance(現在何も支払うべきものなし)。
効果 — 残りを reward_sender_ata に移動。プログラムはステーカーがまだ保留クレームを持っているときの引き出しを防ぎません。管理者は最初に遅延ステーカーの代わりにハーベストするか、彼らにハーベストさせることが想定されます。早期に掃除すると、ユーザーはクレームされていない報酬へのアクセスを失います。これを早期に呼び出さないでください。
v5 の変更点
Deposit / Withdraw は v6 と同じ形状ですが、最大 2 つの報酬スロットを使用し、reward_per_share は u128(異なる基数の固定小数点)。
CreateAssociatedLedger は最初の Deposit 前に必須の個別呼び出し。v6 はこれをマージ。
AddReward は利用可能、Harvest は不可(Deposit 0 を使用)。
v3 の変更点
- 単一報酬ストリーム。
AddReward なし、2 番目のスロットなし。
Deposit 0 がクレームの唯一の方法。
CreateUserLedger は最初の Deposit の前に呼び出される必要があります。
状態変更マトリックス
| 命令 | total_staked | user.deposited | reward_per_share | 報酬ボールト |
|---|
CreateFarm | 0 | — | 0 | クリエイターにより充当 |
Deposit(n) | +n | +n | 更新済み | −保留(ペイアウト) |
Withdraw(n) | −n | −n | 更新済み | −保留 |
Harvest | — | — | 更新済み | −保留 |
AddReward | — | — | — | +新規予算 |
SetRewards | — | — | — | +差分予算 |
RestartRewards | — | — | — | +予算 |
WithdrawReward | — | — | — | −残額 |
次のステップ
ソース: