セルフGOX覚悟していた資金の回収に成功
ノンカストディアルのライトニングウォレットでも、Phoenix walletは24単語だけで復元できるけれど、Blixt Walletは24単語に加えてSCBのバックアップが必要になっているらしい。
私はこれを理解していない状態でBlixt Walletを使っていて、端末を替えるタイミングで回収できなくなって半ば諦めていた資金があった。
無くした当時は法定通貨建では少額だったからまあどうせ頑張って調べてみても私には難しすぎて無理だろうなあってセルフGOXしたものとして諦めてたんだけど、ふと思い立ってGPT5に聞きながら四苦八苦したら回収に成功したので備忘録的に残しておきたい。
こういうのはライトニングウォレットを使う人ならみんな分かっているものなのかもしれないけれど、私は成功した今でも正直あまり理解してないから独力ではできない自信があるし、もしかしたら誰かの役に立つかもしれないと思った。
LND(aezeed 24語)→ 資金特定 → 回収(Sweep)までの最短手順
0) 使うツール
- chantools:派生・照合用
- Electrum(任意):広範囲をウォッチ(“どこにあるか”早く掴む)
- Sparrow:WIF 1本を Sweep(実回収)
1) “口座全体”を一括で監視用に出力(個別WIFを試す前に当たりを掴む)
目的:BIP84(P2WPKH)/ BIP86(Taproot)× 外部(0/)/内部(1/) を広くスキャン
Windows(PowerShell)
# chantools.exe のあるフォルダへ移動して実行.\chantools.exe genimportscript --format electrum --recoverywindow 5000 --lndpaths# → ./results/ に genimportscript-...-electrum.txt ができる
macOS / Linux(ターミナル)
./chantools genimportscript --format electrum --recoverywindow 5000 --lndpaths# → ./results/ に genimportscript-...-electrum.txt ができる
- 24語はプロンプトで貼り付け(パスフレーズ未使用なら空Enter)
- testnet/signet の場合は
--testnet/--signetを付ける
Electrum で確認:
- File → New/Restore → Standard wallet → Import に上記TXTの中身を丸ごと貼り付け
- Addresses / Coins で どの枝(BIP84 or BIP86/0 or 1/インデックス)にUTXOがあるかだけ把握(ここでは送金しない)
2) ピンポイント照合:特定アドレスが自分の鍵か一発判定 → WIF 抽出
目的:UTXOがある“そのアドレス”の WIF を正確に取り出す
例:BIP86(Taproot)外部 0/* → 内部 1/* を順に走査(Windows)
# 事前:chantools.exe のフルパスを $CT に(見つからない時は検索して代入)$CT = 'C:\Path\to\chantools.exe'# 対象の bc1p... アドレス$target = '<<ここに照合したいアドレス>>'$hit = $null# 外部: m/86'/0'/0'/0/ifor ($i=0; $i -le 2000; $i++) { $out = & $CT derivekey --path "m/86'/0'/0'/0/$i" if ($out -match [regex]::Escape($target)) { $hit = @{chain='external'; index=$i; output=$out}; break }}if (-not $hit) { # 内部: m/86'/0'/0'/1/i for ($i=0; $i -le 2000; $i++) { $out = & $CT derivekey --path "m/86'/0'/0'/1/$i" if ($out -match [regex]::Escape($target)) { $hit = @{chain='internal'; index=$i; output=$out}; break } }}# ヒットしたら WIF を抜く(K/Lで始まる51–52文字)$wif = if ($hit) { ($hit.output | Select-String '\b[KL][1-9A-HJ-NP-Za-km-z]{50,51}\b').Matches.Value }$wif# 必要なら bc1p... も抽出# ($hit.output | Select-String '\bbc1p[0-9a-z]{20,}\b').Matches.Value
BIP84(P2WPKH: bc1q…)なら、派生パスを 86 → 84 に替える:外部
m/84'/0'/0'/0/i、内部m/84'/0'/0'/1/i
3) 回収(Sweep)
Sparrow → Tools → Sweep Private Key →
- Script Policy を Taproot (P2TR)(bc1p…)または Native SegWPKH (P2WPKH)(bc1q…)に設定
- 抽出した WIF を 1つ貼り付け → 宛先(自分のHDウォレット)確認 → Sweep(※ これはオンチェーン送金。UTXOが残っている場合のみ送れる)
4) よくある詰まり & 解決
- 残高0のまま:
-
- アドレスが完全に支出済み → 出て行った先のアドレスで同じ照合→WIF抽出→Sweep
- スクリプト種別の誤り → bc1p は Taproot、bc1q は P2WPKH に必ず合わせる
- 内部チェンジ(1/*) を見落とし → 0/* だけでなく *1/ も同じように探索
- Lightningチャネル側の残高:WIFでは復元不可。**24語+SCB(channels.backup)**で復旧→強制クローズを待つ
- 探索が浅い:
--recoverywindowを 5000→10000 へ、または照合ループの上限2000を増やす - ネット違い:testnet/signet の資金は
--testnet/--signetを genimportscript/derivekey の両方に付与
5) 最小コマンドだけ(貼って使う用)
Electrum用の一括監視ファイルを作る
- Windows:
.\chantools.exe genimportscript --format electrum --recoverywindow 5000 --lndpaths
- macOS/Linux:
./chantools genimportscript --format electrum --recoverywindow 5000 --lndpaths
BIP86でアドレス照合 → WIF抽出(Windows)
$CT = 'C:\Path\to\chantools.exe'$target = '<<bc1p...>>'$hit=$null; for($i=0;$i -le 2000;$i++){ $o=& $CT derivekey --path "m/86'/0'/0'/0/$i"; if($o -match [regex]::Escape($target)){ $hit=@{c='ext';i=$i;o=$o}; break } }if(-not $hit){ for($i=0;$i -le 2000;$i++){ $o=& $CT derivekey --path "m/86'/0'/0'/1/$i"; if($o -match [regex]::Escape($target)){ $hit=@{c='int';i=$i;o=$o}; break } } }$wif = ($hit.o | Select-String '\b[KL][1-9A-HJ-NP-Za-km-z]{50,51}\b').Matches.Value; $wif
Sparrow で Sweep
- Tools → Sweep Private Key
- Script Policy:bc1p→Taproot (P2TR) / bc1q→P2WPKH
- WIF を1件貼付 → Sweep


