Stuck TokenのSOL回収に0.5 SOLは不要、無料で閉じる方法

0.5 SOLを支払う必要はない。stuck token(滞留トークン)のアカウントを閉じてSOLを回収する操作は、Solana CLIや一部のウォレットがあれば実質無料で実行できる。表示された高額な手数料は、そのサービス独自の課金に過ぎない。

なぜ「stuck tokenの焼却に0.5 SOL」と案内されるのか

なぜ「stuck tokenの焼却に0.5 SOL」と案内されるのか

まず、ブロックチェーン上のトークン焼却とアカウント削除は別の概念だ。専用のバーンアドレスにトークンを送る行為そのものは通常の送金であり、トランザクション手数料(Solanaなら0.000005 SOL程度)以外のコストは発生しない。ところが、トークンを空にしただけでは、そのトークンを保持していたアカウント(トークンアカウント)はチェーン上に残る。Solanaではアカウントがデータを保持するために最低限のSOL(rent-exempt、家賃免除のための預託金)を預けており、このSOLを回収するにはアカウントを正しく閉じる操作が必要になる。

一部のサードパーティツールは、この「アカウントを閉じてSOLを回収する」操作に対して法外な手数料を上乗せしている。sol-incineratorが要求する0.5 SOLは、まさにこのケースにあたる。技術的に必要なコストはごくわずかなので、自分で操作すれば払う必要は一切ない。

Solana CLIでstuck tokenのアカウントを自分で閉じる手順

Solana CLIでstuck tokenのアカウントを自分で閉じる手順

最も確実で低コストな方法は、Solana公式のCLIツールを使うことだ。普段コマンドラインに触れない人でも、手順通りに実行すれば数分で完了する。

Solana CLIのインストールとウォレットの準備

  1. 公式ドキュメントに従い、solana-cliとspl-token-cliをインストールする
  2. インストール後、solana-keygen recoverでシードフレーズからウォレットのキーペアを復元する
  3. solana config set --keypair /path/to/keypair.jsonで使用するウォレットを指定する

閉じるべきトークンアカウントを特定する

まず、自分のウォレットに紐づく全トークンアカウントを一覧表示する。

spl-token accounts --owner $YOUR_WALLET_ADDRESS

出力の中から、残高が0で、不要なトークン(または間違ってバーンアドレスに送ったトークン)のアカウントアドレスを探す。このアドレスが「閉じてSOLを回収するべき対象」になる。

アカウントを閉じてSOLを回収する

対象のトークンアカウントアドレスが見つかったら、以下のコマンドを実行する。

spl-token close --address $TOKEN_ACCOUNT_ADDRESS

このコマンドだけで、トークンアカウントが閉じられ、預けられていたrent-exemptのSOLが自分のメインウォレットに返還される。かかる手数料は通常のトランザクション手数料、すなわち0.000005 SOL前後に過ぎない。

複数のstuck tokenをまとめて閉じたい場合

spl-token gc(ガベージコレクション)というコマンドを使うと、残高が0の全トークンアカウントを一括で閉じてSOLを回収できる。確認なしで実行されるため、本当に不要なものだけが対象になるよう事前に一覧で確認しておく必要がある。

Phantomなど主要ウォレットにビルトインされた「閉じる」機能を使う

Phantomなど主要ウォレットにビルトインされた「閉じる」機能を使う

コマンドラインに抵抗があるなら、一部のウォレットに備わっているトークンアカウント管理機能を利用する手もある。Phantomの場合、トークン一覧画面で残高が0のトークンを選択すると、アカウントを閉じてSOLを回収するオプションが表示されることがある。この機能はウォレットのバージョンやトークンの種類によって利用可否が変わるため、まずは自分のウォレットを最新版にアップデートした上で確認するのがよい。

ほかのウォレットも同様に、残高0のトークンに対して「アカウントを閉じる」「SOLを回収」といったメニューを持っている場合がある。いずれも余分な手数料は取られず、ネットワーク手数料のみで完了する。

バーンアドレスに送るだけではなぜ不十分なのか

バーンアドレスに送るだけではなぜ不十分なのか

Solanaのトークン送金では、受け取り側にもトークンアカウントが存在する必要がある。有名なバーンアドレス(1nc1nerator11111111111111111111111111111111)にもトークンアカウントが作られており、そこに送金すること自体は成立する。しかし、送金が完了してもバーンアドレス側のアカウントにトークンが留まる形になり、送った側のアカウントが空になるだけだ。本当の意味で「チェーン上からトークン供給量を減らす」効果はあっても、自分の資産管理上のクリーンアップにはならない。預けたSOLを戻したい、あるいはトークン一覧から完全に消し去りたいのであれば、アカウントを閉じる操作が不可欠だ。

よくある質問

stuck tokenを放置しても問題はないのか

セキュリティ上の直接的なリスクはない。ただし、アカウントが残っている限りrent-exemptとして預けたSOLは寝たままになる。また、ウォレットのトークン一覧にゼロ残高のトークンが溜まると管理が煩雑になるため、定期的に閉じてSOLを回収しておくほうが賢明だ。

「spl-token close」がエラーになるときの対処法は

代表的な原因は、指定したトークンアカウントの残高が厳密に0でないことだ。1未満の微量なトークンが残っているケースもある。その場合は、まず全量を別アドレスに送るか、0になるよう調整してから再度closeを試みる。また、該当アカウントがすでに閉じられている場合や、キーペアの権限が合っていない場合もエラーになる。

Web上の無料ツールでアカウントを閉じても安全か

無料や低コストを謳うWebツールの中には、秘密鍵を直接入力させるものもあり危険だ。信頼できるウォレットのビルトイン機能か、自分でCLIを実行する方法が最も安全かつ安上がりだ。どうしてもWebツールを使う場合は、接続のみで済むものか、オープンソースでコードが検証できるものに限るべきだ。

Ledgerなどのハードウェアウォレットを使っている場合もCLIで閉じられるのか

可能だ。ハードウェアウォレットを接続した状態でsolana config set --keypair usb://ledgerのように指定すれば、トランザクションへの署名はデバイス上で行える。デバイス側でBlind Signingを有効にするなどの事前設定が必要になることもあるため、Ledger LiveとSolanaアプリのバージョンを最新にしておく。

この記事のポイント

  • 0.5 SOLという手数料はサービス独自の設定であり、技術的な必須コストではない
  • Solana CLIのspl-token closeでトークンアカウントを閉じれば、ほぼ無料でSOLを回収できる
  • Phantomなど一部のウォレットにもトークンアカウントを閉じる機能が備わっている
  • バーンアドレスへの送金だけでは自分のアカウントは閉じられず、預けたSOLは寝たままになる
  • コマンド操作に不安があっても、公式ツールであれば数行の手順で安全に完了する
共有:

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)