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 日にメインネットで有効化されました。ステップ 2 は同日にテストネットに到達し、2026 年 9 月中旬にメインネットに到達する予定です。ステップ 3~5 は Agave 4.4 用に保留されており、2026 年 11 月頃に予定されています。スケジュールは変更される可能性があります。Foundation は状態成長が問題を起こした場合、ロールアウトを一時停止すると述べています。ハードコードするのではなく、クラスターからライブ値を読み取ってください。
SIMD-0437 は SIMD-0194 に依存しており、これはレント免除閾値を廃止して「フィーチャー有効化時にレント パラメーターを設定する際の不要な浮動小数点演算を回避する」ためです。実際には、Rent sysvar は lamports_per_byte_year = 6,333 と exemption_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 で拒否します。両方のプログラムは代わりにそのケース用に UnwrapLamports(判別式 45)を公開しています。これは spl-token-interface の WithdrawExcessLamports と並んでいるため、レガシー プログラムも Token-2022 だけでなくそれを持っています。@solana/spl-token は 0.4.15 以降、それ用に createUnwrapLamportsInstruction を提供しています。プレーン レント スイープでネイティブ アカウントをスキップし、意図的に処理してください。これを安全に行うためのパターンは、Raydium 自身のプログラムが使用するもので、下記にあります。

WithdrawExcessLamports 命令

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

命令の構築

@solana/spl-token はそれ用のビルダーをエクスポートしていません。0.4.15 の時点で列挙型エントリはまだコメント アウトされています — また、アップストリームでは識別子が WithdrawalExcessLamports と、余分な「al」付きで綴られていることに注意してください。grep する際はこちらを使ってください:
直接エンコードしてください。ペイロードは単一の判別式バイトです:
各アカウント自身の 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 バイトのトランザクション制限に対して、コンピュート予算命令とブロックハッシュを考慮すると、約 25 個の命令が収まります。トランザクションあたり 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.64-alpha をターゲットとしており、2026 年 9 月に検証されています。raydium-sdk-V2-demo リポジトリ自体は現在 0.2.62-alpha をインストールしており、2 つはここで相互交換可能です。WithdrawExcessLamports は手動でエンコードされており、SDK バージョンに依存しません。SDK はトランザクション構築とバッチ処理にのみ使用されます。
raydium-sdk-V2-demo/src/rent の 2 つのスクリプト:
reclaimRent.ts はトランザクションあたり 20 個のアカウントでバッチ処理し、すべてのバッチに 1 回で署名します:
送信する前にシミュレートしてください。accounts.addresses を使用した simulateTransaction は実行後のラムポート残高を返します。これは、算術がクラスターが実際に行うことと一致することを確認する最も安い方法です。

Raydium プログラムが自身の側で掃引するもの

あなたのウォレットは、削減がラムポートを解放する唯一の場所ではありません。すべてのプールもレントを保有しています。ボルト、LP ミント、および古いレートで資金提供されたプログラム所有の状態アカウント。そのレントはプロトコルに属し、LP には属しません。それはアカウントを作成した人によって支払われ、プールの準備金の一部ではなく、曲線に入ったことはありません。 3 つのプログラムは 2026 年 9 月 9 日に、それを返却するための管理者命令を取得しました: アドレスは reference/program-addresses にあります。CLMM と Stable AMM はそのリリースの一部ではありませんでした。 ここでは LP またはトレーダーに影響を与えるものはありません。 これらの命令はラムポートのみを移動します。トークン残高、アカウント データ、所有者、プール ステータス、LP 供給、手数料カウンター、曲線はすべて変更されず、それらのいずれもアカウントを閉じることはできません。スイープの前後でスワップのプールの見積もりは同じです。ユーザー側のアクション、オプト イン、期限はありません。

各プログラムが処理する 3 つのアカウント形状

すべて 3 つは、ソース アカウントの所有者に対して同じディスパッチに従います:
  • プログラム権限 PDA が所有するトークン アカウントまたはミント — プログラムは、その PDA として署名して、トークン プログラムの WithdrawExcessLamports(判別式 38)を CPI します。
  • ラップ SOL ボルト — WithdrawExcessLamports はネイティブ アカウントを拒否するため、プログラムは最初に SyncNative を実行します(これは寄付された超過分をラップされた amount に折り込みます)、ラップされた金額がどれだけ増加したかを正確に測定し、その差分に対して UnwrapLamports を実行し、その後、ラップされた残高が事前同期値に戻っていることをアサートします。そのチェックが失敗すると、命令全体が LamportsCalculateError で戻ります。これが、SOL 側プール ボルトがスイープを通じて完全な流動性を保つ理由です。
  • プログラム所有の状態アカウント — AmmInfo、PoolState、AmmConfig、ObservationState、PlatformConfig など。プログラムは独自のアカウントを直接デビットできるため、CPI なしで残高を rent.minimum_balance(data_len) に移動します。
他のものが所有するアカウントは静かにスキップされるため、関連のないアカウントを渡すことは致命的ではなく無害です。 ラップ SOL シーケンスは、独自のネイティブ アカウントを保有する場合にコピーする価値があります。これは、アカウントがトークン残高として報告するものを変更することなく、wSOL アカウントから超過分を取り除く唯一の方法です。
これらのパスは、クレート バージョンではなく、デプロイされたトークン プログラムに依存します。 3 つのプログラムすべてがトークン命令を手動でエンコードします。WithdrawExcessLamports の場合は単一の 38 バイト、UnwrapLamports の場合は 45 と COption<u64> です。そして、ソース アカウントを所有するトークン プログラムに送信します。両方の命令は、現在のメインネット SPL Token と Token-2022 プログラムに存在します。古いバンドルされた SPL Token ビルドを実行しているローカル バリデーターまたはテスト ハーネスはそれらを実装していません。そして、それに対するスイープは、Raydium プログラムの何かではなく、不明な判別式で失敗します。これらのパスをメインネット クローン トークン プログラムに対してテストしてください。

所定の場所で回収できないもの

CLMM ポジションのレントはこのすべてによって変更されません。上記の表が言うように、ポジションが閉じられるときに戻ります。LaunchLab ベース ミントも同じです。初期化命令は、供給をミントする同じ呼び出しで MintTokens を取り消すため、キーはそのミントに対して WithdrawExcessLamports に署名することはできず、そのレントは設計上取り残されます。

今すぐ回収するか、待つべきか?

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

さらに詳しく

SIMD-0437

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

削減されたレント

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

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

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

アカウント モデル

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