bitcoinのseed recoveryについて

Bitcoinのfundsのrecoveryについて、色々いじってみたのでメモ

まとめ

  • walletごとで仕様が異なるので、実質的には普通のユーザは同じwallet上でしか使えない
  • off chainのリカバリーの仕組みも準備されてきている
  • ちゃんと分かるにはBIP39とDerivation Pathsを理解する必要がある

recovery

LND

きっかけはLND。
自分で立てているbitcoin full node(BTCD)でneutrinoを動かしていたけど、BTCDの調子が悪くて、同期がいつまでも終わらなくなっていた。
少しだけ残高もあったので、実験がてら、lightning appで接続先もdefaultのlightning labsのmainnet(mainnet.lightning.computer)でrecoveryをしてみたら、なぜか残高が0になる・・・。これの原因は結局良くわかっていないんだけど、多分bug。
で、LNDを自分で立ち上げ直して、Recovering Funds From lnd (funds are safu!)をやってなんとかたどり着いた。
recoveryには、on chainをrescanする必要があるんだけど、多分これがうまく動いていなかった。

electrum

ということで色々実験してみようと思って、electrumでrecovery from seedを上記ので試してみても、残高は0。理由は良うわからん。 electrumで作ったwalletに残高を入れて、再作成したらうまく行った。

copay

copayで試しても、今度はinvalid seed formatと出る。
Electrum Seed Version Systemを見ると、どうも特殊なようで、ElectrumのMnemonicからBIP39のシード鍵は生成できないようだが・・・、LNDの方はなぜだめなのかわからない。

Off-Chain Recovery

Static Channel Backups (SCBs)という仕組みができつつあるよう。大規模なノード運営者なら助かるのかもしれない・・・けど、難しい。

BIP39

ワードリストからMnemonicを生成する仕組みで、Mnimonicによく使われる言葉の数は12ワード、24ワード。LNDなら24、electrumなら12だった。

Derivation Paths

階層的決定性ウォレットのことで、一つの鍵から複数のアドレスを無数に作っていく仕組み。 だれのアドレスかばれないように、都度作成されていくものもある。LNDはこれで、だからchainをscanして試算し直す必要がある(多分)

有名なのには、下記がある。

  • BIP 44: m/44'/0'/0' (for 1addresses)
  • BIP 49: m/49'/0'/0' (for 3addresses)
  • BIP 84: m/84'/0'/0' (for bc1addresses)

https://learnmeabitcoin.com/technical/derivation-paths が参考になった。

所感

組み合わせが色々あり、難しい。これを理解できる人はかなり限られるし、結局一つのwalletしか使えないことがほとんどになりそう。
しかも、取引所運営者のほうがwallet運営者より信頼しやすいことを考えると、取引所に預けるっていう選択にもなるよなあ。
bitcoin coreがspvを出してくれれば違うんだけど。

ちょうど同じタイミングで、aantonopがいい動画を出していた。

ブロックチェーンとはなにか、と思ったときはこのひとの動画をすべて見るのが一番はやい。というか、余計な情報に触れず、これだけを見たほうがいいくらい。英語も丁寧なので、自動翻訳が適切に機能する。