Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
レントは手数料ではなく返金可能なデポジットです。SIMD-0437 は、すべてのアカウントが保有する必要があるデポジットを 5 つの独立したゲートを通じて段階的に削減します。段階前に作成されたアカウントは資金提供時の残高を保持するため、各段階でそれらは過剰資金状態になります。SPL Token と Token-2022 プログラムは、WithdrawExcessLamports を通じてその差分を返却でき、アカウントを閉じたりトークン残高に触れたりすることなく実行できます。何も期限切れにはなりません。超過分はあなた自身のアカウントに留まり、移動を選択するまでそこにあります。
Solana アカウントがどのように資金提供されるかについて初めての場合は、まずアカウントモデルをお読みください。

レントの実際の仕組み

Solana 上のすべてのアカウントは、占有するスペースのサイズに応じた SOL デポジットを保有しています。これは消費されません。アカウントが閉じられるときに全額返金されます。計算式は以下の通りです:
ACCOUNT_STORAGE_OVERHEAD は、ペイロードに関係なくすべてのアカウントが支払う固定 128 バイトです。lamports_per_byte は SIMD-0437 が変更するネットワーク全体の定数です。 標準的な 165 バイトの SPL トークンアカウントは、したがって常に (128 + 165) × 6,960 = 2,039,280 ラムポート(ウォレットが関連トークンアカウントを開くたびに差し引かれる約 0.00203928 SOL)のコストがかかります。

SIMD-0437 が変更する内容

SIMD-0437 は lamports_per_byte を 6,960 から 696 に削減します。これは 90% の削減であり、5 つの個別のフィーチャーゲートを通じてロールアウトされるため、バリデータは状態成長の影響を一度に 1 段階ずつ吸収できます。 ステップ 1 は 2026 年 9 月 3 日にメインネットで有効化されました。残りのステップはフィーチャーゲートが有効化されるにつれてロールアウトされます。スケジュールは変更される可能性があるため、ハードコードするのではなくクラスタから実際の値を読み取ってください。
SIMD-0437 は SIMD-0194 に依存しており、これはレント免除閾値を廃止して「フィーチャー有効化時にレントパラメータを設定する際の不要な浮動小数点演算を回避する」ためです。実際には、Rent sysvar は lamports_per_byte_year = 6,333exemption_threshold = 1.0 を持つようになり、6,960 を生成した古い 3,480 × 2 の分割ではなくなります。これら 2 つのフィールドを自分で乗算しないでください。getMinimumBalanceForRentExemption を呼び出して、クラスタに答えさせてください。

既存のアカウントが過剰な金額を保有する理由

定数を低下させることは、アカウントが必要とするものを変更します。アカウントが持っているものは変更しません。6,960 ラムポート/バイトで資金提供されたアカウントは、ステップ 1 が有効化された後もその残高を保持するため、以下の量だけ過剰資金状態になります:
ステップ 1 後の 165 バイトの SPL トークンアカウントの場合、これは 293 × (6,960 − 6,333) = 183,711 ラムポート、つまりアカウントあたり約 0.000184 SOL です。拡張機能を持つ Token-2022 アカウントはより大きいため、比例してより多く保有します。182 バイトのアカウントは 310 × 627 = 194,370 ラムポートだけ過剰資金状態になります。 個別には微々たるものです。数年間にわたって数百のトークンと相互作用してきたウォレットは、その意味のある倍数を保有しており、ステップ 5 までに各 165 バイトのアカウントは最小値を上回る 1,835,352 ラムポート(約 0.00184 SOL)を保有しています。

どのアカウントが返却できるか

プログラム所有のアカウント内の超過ラムポートは、そのプログラムによってのみ移動できます。アカウントを閉じずにレントを回収できるかどうかは、完全にそれを所有するプログラムに依存します。

SPL Token と Token-2022

どちらも WithdrawExcessLamports を公開しています。アカウントは開いたままで、トークン残高を保持し、単に現在の最小値に低下します。

その他すべて

同等の命令はありません。レントは、アカウントが閉じられるときにのみ解放されます。これは独自の前提条件を持つ破壊的な操作であり、レントスイープではありません。
具体的には、Raydium ユーザーが保有するアカウントタイプの場合: ラップされた SOL アカウントは 1 つのトークンプログラム例外です。それらのラムポート残高トークン残高であるため、両方のプログラムは TokenError::NativeNotSupported で拒否します。Token-2022 はそのケースのために UnwrapLamports(判別式 45)を追加しました。@solana/spl-token は 0.4.15 以降、それのための createUnwrapLamportsInstruction を提供しています。レントスイープでネイティブアカウントをスキップし、意図的に処理してください。

WithdrawExcessLamports 命令

両方のトークンプログラムの命令列挙型で判別式 38spl-token-interface から:
3 つの特性により、ウォレット内のすべてのアカウントに対して安全に実行できます:
  • 金額を取りません。 プログラムは source.lamports − rent.minimum_balance(source.data_len()) を自分で計算するため、アカウントを現在の最小値以下に取ることはできず、後のステップが有効化されても正しいままです。
  • 何も閉じません。 アカウントはそのデータ、所有者、トークン残高を保持します。
  • べき等です。 既に最小値にあるアカウントに対して実行すると、ゼロラムポートが移動され、成功します。
フリーズされたトークンアカウントも対象です。フリーズはトークン移動を制限しますが、ラムポートは制限しません。

命令の構築

@solana/spl-token はそのためのビルダーをエクスポートしていません。0.4.15 の時点で、列挙型エントリはまだコメントアウトされています:
直接エンコードしてください。ペイロードは単一の判別式バイトです:
各アカウント自身の programId を渡してください。SPL Token と Token-2022 の命令は 1 つのトランザクションで共有できますが、それぞれはソースアカウントを所有するプログラムにアドレス指定される必要があります。 メインネットで測定すると、命令は SPL Token プログラムで 270 コンピュートユニット、Token-2022 で 1,414 コンピュートユニットのコストがかかります。どちらの方法でも無視できます。実際の制約はコンピュートではなく、トランザクションサイズです。

回収可能なアカウントの検出

ハードコードされたレートから超過分を導出しないでください。クラスタに各アカウントが今必要とするものを尋ねて、同じコードがすべての 5 つのステップを通じて機能し続けるようにしてください:
getMinimumBalanceForRentExemption(0) は便利なサイドチャネルです。これは正確に 128 × lamports_per_byte を返すため、128 で割ると Rent sysvar を解析することなく、クラスタがどのロールアウトステップにあるかを知ることができます。

バッチ処理:1 つのトランザクションに何個収まるか

WithdrawExcessLamports 命令は、1 つの一意の書き込み可能なアカウントキー(コンパイルされたメッセージで 32 バイト)と約 7 バイトの命令エンコーディングを提供します。宛先、権限、手数料支払者はすべて同じウォレットであるため、それらの間で 1 つのキーのコストがかかります。 1,232 バイトのトランザクション制限に対して、コンピュート予算命令とブロックハッシュが計算されると、約 26 個の命令が収まります。トランザクションあたり 20 個が安全な作業数であり、これは Raydium 自身の実装が使用するものです。したがって、116 個の回収可能なアカウントを持つウォレットは 6 つのトランザクションで掃引され、それぞれ 1 つの 5,000 ラムポート基本手数料がかかります。 経済学に注意してください。手数料はアカウントごとではなく、トランザクションごとに請求されます。より少ないアカウントを回収してもコストは低くなりません。これが部分的なスイープが余分なラウンドトリップの価値がある理由です。

Raydium を通じた回収

raydium.io/reclaim-rent ページは接続されたウォレットの SPL Token と Token-2022 アカウントをスキャンし、プログラムごとに分割された合計を表示し、バッチ処理されたトランザクションですべてを掃引します。スキャンは読み取り専用です。すべてのレントを回収を押すまで署名はありません。 ページは意図的にトークンアカウントのみをカバーしています。レントを解放できるのはアカウントを閉じることだけであるアカウントタイプは、利用不可として一覧表示されるのではなく、除外されます。これはアカウントを閉じることが異なる破壊的なアクションであるためです。

SDK デモから回収

バージョンバナー。 デモは Solana mainnet-beta に対して @raydium-io/raydium-sdk-v2@0.2.42-alpha をターゲットとし、2026 年 9 月に検証されました。WithdrawExcessLamports は手動でエンコードされ、SDK バージョンに依存しません。SDK はトランザクション構築とバッチ処理にのみ使用されます。
raydium-sdk-V2-demo/src/rent の 2 つのスクリプト:
reclaimRent.ts はトランザクションあたり 20 個のアカウントでバッチ処理し、すべてのバッチを 1 回のパスで署名します:
送信する前にシミュレートしてください。accounts.addresses を使用した simulateTransaction は実行後のラムポート残高を返すため、これはクラスタが実際に実行する内容と算術が一致することを確認する最も安い方法です。

今回収すべきか、それとも待つべきか?

どちらでも問題なく、どちらの方法でも差は小さいです:
  • 超過分はどこにも行きません。 それはあなた自身のアカウントに留まります。何も期限切れにはなりません、何も掃引されません、期限は適用されません。
  • 待つことは複利になります。 各ステップは同じアカウントからより多くを解放し、ステップ 5 後の 1 回のスイープは今日の 1 回のスイープと同じ手数料がかかります。
  • 今回収することは後のステップを放棄しません。 今日掃引するアカウントは単に現在の最小値にあります。次のステップはそれを再び過剰資金状態にし、再度掃引できます。
早期に回収する唯一の実際のコストは基本手数料であり、待つ唯一の実際のコストはラムポートがもう少し長く不動のままであることです。

さらに詳しく

SIMD-0437

提案自体 — 5 つのフィーチャーゲートと削減をステップする理由。

削減されたレント

Solana のロールアウトページ:現在のステップ、スケジュール、新しいアカウントの変更内容。

レント削減:データに基づく分析

経済学、およびステップ付きロールアウトが管理するように設計された状態成長リスク。

アカウントモデル

Solana アカウントがどのように資金提供、所有、閉じられるか — 上記のすべての背景。