Electrumでコールドウォレットを試してみた

まだBitcoin Coreが比較的軽かった頃、いくつかウォレットを作っていましたが、もう最近ではリソースを食いすぎて、全く使わなくなってしまいました。

しかし、ちゃんと取り出せるようにしておきたいので、紙に書き出しておいたプライベートキーからElectrumのコールドウォレットに取り込んで、送信トランザクションの作成と署名ができるかどうか試してみました。

ただ、完全にネットから切り離されたPCを準備するのは大変なので、Dockerでネットアクセスできないコンテナを作成して実験することにしました。

gist.github.com

まずはDockerでElectrumをビルドして、イメージを作成。次に実行するのですが、このときに --net=none を付けてネットワークが使えないようにしたいところですが、どうもElectrumはネットワークへの接続を前提にしているようですのでこのオプションは付けないで実行します。

(追記: restoreのときに-o(オフライン)オプションを付けるとよいみたいです。ただし、この場合はその後のpaytoでエラーとなるため、公式ドキュメントに書かれているようにウォッチオンリーなホットウォレットから署名なしのtxを作成し、それをオフラインウォレット側で署名するという手順が必要となるようです。)

$ docker build -t electrum .
$ docker run -it --rm electrum

Electrumの最新をビルドするようになっていますが、本当はちゃんとタグの付いたやつをビルドすべきです。 今はテストなのでこのまま進みます。

最初はネットワークにつないでヘッダを取っておきます。

root@xxx:~/electrum# electrum daemon start

同期するまで少し時間がかかります。 ~/blockchain_headers のサイズでも監視しながら待ちましょう。

root@xxx:~/electrum# ls -l ~/.electrum/
total 2284
-rw-r--r-- 1 root root 2326528 Jun  4 13:37 blockchain_headers

2016/06/04の時点で32MBぐらいでした。結構でかいです。 同期が完了したら、daemonを停止しておきます。

(追記: 停止してもrestore時に開始してしまうので意味がないようです。)

root@xxx:~/electrum# electrum daemon status
{
    "auto_connect": true, 
    "blockchain_height": 400043, 
    "connected": true, 
...
    "server_height": 414752, 

ここで5で始まるプライベートキーを取り込みます。

root@xxx:~/electrum# ./electrum restore -w coldwallet :
Enter argument (will not echo):
Password (hit return if you do not wish to encrypt your wallet):
Recovering wallet...
Recovery successful
Wallet saved in '/root/electrum/coldwallet'

プライベートキーはタイピングかコピペになると思いますが、キーロガークリップボードを盗むようなソフトが入っているとまずいので多少フェイクを入れながら入力するとよいかもしれません。まあ、そもそもそういうコンピュータを使っている時点でやばそうですが。

マルウェアじゃなくてもクリップボードをいろいろと監視するソフトなどが入っているとそこからセキュリティホールができちゃうかもしれませんので、切っておいた方がよいです。Ubuntuの場合はfcitxのデフォルトでそういうのが入っているので注意しましょう。

f:id:ohac:20160604224540p:plain

完了したら、パブリックアドレスと残高を確認してみましょう。

root@xxx:~/electrum# electrum listaddresses -w coldwallet -b
[
    "1xxxx, 1.2345..."
]

送信リクエストの発行と署名を行います。

root@xxx:~/electrum# electrum payto -w coldwallet -f 0.00002 1xxxx... 0.0001
{
    "complete": true, 
    "final": false, 
    "hex": "010...

最後にhexの右のクォートの中をオンラインウォレットでbroadcastすればよいようです。

送信は過去にLitecoinで試したので、これでいけるはずですが、まだ試していません。

ohac.hatenablog.com

まあ、なんにせよプライベートキーからパブリックキーと残高がちゃんと確認できたら一安心ですね。

にほんブログ村 その他生活ブログ 仮想通貨へ
にほんブログ村