ビットコインの情報サイトの運営者ブログ

サイトには掲載していない仮想通貨に関する時事的な情報や個人的な感想など。中級者以上向け。

Electrum3.0系でP2SHのSegwitウォレットを管理する方法

時事ニュース的な内容は他のところにまかせてマイペースに更新。今月頭にElectrumの3.0がリリースされ、Trezor、Ledger、GreenAddressに次ぐSegwit対応ウォレットとなりました。

Electrum3.0のSegwitウォレットは先月の記事でも軽く触れたとおり、bech32というbc1からはじまる新しい形式のアドレスであり、未対応のウォレットからは送金できません。現時点ではまだ多くのウォレットや取引所などが、bech32のアドレスへの送金には対応していないと思われ、ElectrumのSegwitアドレスをメインに使っていこうとするのは、あまりおすすめできません。

そこでElectrumで3からはじまるP2SHのSegwitアドレスを管理してみようというのが今回の記事です。

Trezor・LedgerとBIP49

まずは前提知識的な内容をかなり大雑把に解説。ハードウェアウォレットのTrezorやLedgerではすでにSegwitが導入されていますが、それにより従来の「Legacyアカウント」と新しい「Segwitアカウント」の二種類のアカウント・アドレスが生まれることになりました。既に持っている方は分かるかと思いますが、新しいアカウントが生まれたといってもアドレス群の作成元となるseed、つまり24単語の復元フレーズは全く変わっていません。

このSegwitアドレスの作成方法を規定しているのがBIP49です。これは、去年解説記事を書いたBIP32やBIP44の派生的なBIPであり、詳細は去年の記事を参照してもらえればと思います。BIP44は一般的には「m/44'/0'/0'」という方法・ルートでビットコインウォレットが作成されるのに対し、BIP49は「m/49'/0'/0'」というルートで作成されます。

つまり、Trezor・Ledgerの場合、同じ24単語の復元フレーズからBIP44のルートで作成したアドレス群が「Legacyアカウント」、BIP49のルートで作成したアドレス群が「Segwitアカウント」になっています。

ElectrumとBIP39

BIP44やBIP49というのは、基本的に12~24単語の英単語等、特定の単語群・seedをもとにアドレスを作成するものですが、その単語リストや単語の組み合わせ等を規定したのがBIP39です。

BIP39は非常に多くのウォレットで採用されていますが、ElectrumはBIP39にバージョン番号が規定されていないこと等欠陥があるとして批判しており、BIP39を採用しておらず独自のシステムを利用している珍しいウォレットとなっています。このため、Electrumのseedを他のウォレットで使うことはできません。

ちなみにBIP39については、Bitcoin Coreの開発者にも批判している人が多くおり、Bitcoin CoreのHDウォレット化自体はされたものの、BIP39は採用されていません。ほとんどのウォレットで採用されながらも欠陥があるとして批判されているBIP39の議論もなかなか面白いので、機会があればいつか記事にしてみたいと思います。

Electrumで3からはじまるP2SHのsegwitアドレスを管理

ここからが本題。ElectrumはBIP39を採用していない・・・とはいっても実は他のウォレットで作成されたBIP 39 seedのインポートには対応しています。この外部ウォレットからElectrumへのインポート機能を利用してP2SHのSegwitウォレットをElectrumで管理しようというわけです。

①BIP39 seedを作成

まずは大元となる12単語or24単語の単語群を作成します。Segwit対応ウォレットがあればそれでもいいんですが、現状では実質的にTrezorかLedgerぐらいしかないので、ツールを利用するのがいいと思います。

最も有名なのが以下のツールです。

GitHub - iancoleman/bip39: A web tool for converting BIP39 mnemonic codes

BIP39 - Mnemonic Code

「bip39-standalone.html」をダウンロードすれば、オフライン状態でも実行できます。そもそも失って困るような大金の保管はハードウェアウォレットやマルチシグネチャウォレット等を利用すべきで、このような方法は止めといたほうがいいと思いますが、セキュリティを気にするならなるべくマルウェア等が介入しにくい状況で行いましょう。

上のツールでは、word数を指定して「Generate」を選択すれば単語群が作成されます。

②Segwitアドレスを確認

意外と忘れがちで重要なのがこのステップ。ElectrumにはBIP39 seedのインポート機能はありますが、チェック機能がありません3.0からチェック機能が追加されたようですが、小さい文字で表示されるだけで見落とす可能性もあるので、②の手順は忘れないことを推奨。つまり、Electrum上にインポートするときに単語の綴りを一文字でもミスしてしまうと、そのミスに気付かず本来とは違うアドレスがそのまま生成されてしまいます。

このミスを防ぐために、①のseedを作成したツール上でSegwitアドレスを確認する必要があります。上のツールの場合は、下の方に「Derivation Path」という欄があり、「BIP49」にタブを切り替えるとSegwitアドレスが生成されます。さらに下の方にアドレスの一覧が表示されるので、先頭の一つ二つをメモしておけば良いです。

③Electrumに①のseedをインポート

いよいよ最後にインポートして終了です。一応インポート方法には二通りあるので簡単に手順だけ。

1.BIP49のDerivation Pathを指定してインポート

Electrum上でウォレットを新規作成

→「Standard Wallet」

→「I already have a seed」

→①のseedを入力、「オプション」の「BIP 39 seed」にチェック

→「m/44'/0'/0'」を「m/49'/0'/0'」に変更

これであとはウォレットの暗号化パスワードを設定すれば完了です。②でチェックしたアドレスと一致することを確かめてから使いましょう。

2.Master Private Keyからインポート

単語フレーズを入力するのではなく、英数字の不規則な文字列から構成されるマスタープライベートキーをインポートする方法です。ElectrumにはPC版だけではなくAndroid版もリリースされていますが、Android版は1の方法が使えないので、2の方法でインポートしなければなりません。

まずは、マスタープライベートキーを確認する必要があります。ウォレットによっては確認できない場合もあるのでご注意ください。先のツールの場合は、「Account Extended Private Key」の欄に表示されている「yprv・・・」がそれです。

手順は、

Electrum上でウォレットを新規作成

→「Standard Wallet」

→「Use public or private keys」

→先ほど確認した「yprv・・・」を入力

これで同様にパスワードを設定、生成されたアドレスに間違いがないことを確認すれば完了です。

 

補足しておくと、Electrumの開発者はBIP39を批判しているということもあり、今後のElectrumのバージョンでもBIP39のサポートを行うことは保証していません。Electrum公式で推奨している方法では全くないので自己責任で行ってください。

まとめ

ということで、Electrum上で3からはじまるSegwitアドレスを使う方法を書いてみました。9月ごろからビットコインネットワークはかなり空いている状態で、昔のような数円の手数料でも普通にすぐ送れる状態が続いていましたが、最近また混雑気味で必要手数料が高騰しはじめているので、まだ使っていない人はこれを機会にSegwitウォレットを利用してみてもいいかもしれませんね。