はじめに
この記事は暗号通貨アドベントカレンダー二日目の記事です
一日目にelectrumのサーバー側を書いたのでクライアント側の仕組みを書きます
electrumの仕組み
electrumxから必要なアドレスの情報を持ってきているクライアントサーバーモデルであると前回の記事で書いたが
それを実現するのにいくつか問題がある
- 信用できるサーバーをちゃんと選べるのか(一応electrumがデフォルトでつなぐサーバーは信用できるホワイトリストを兼ねている)
- あとから信用できないサーバーにならないか(ハードフォークの更新し忘れていて違うチェーンになっていないか)
秘密鍵や送金情報はelectrumクライアントが持っているので野良サーバーが盗むことはできないが
残高情報などの嘘の情報を教えることはできる
electrumはそれをちゃんと検証する仕組みを持っていてブロックヘッダを取得し、トランザクションが本物であるか検証をしている。
それによって信用できるサーバーと信用できないサーバーを区別している
electrumの知られざる機能(とかあおってみる)
実はelectrumはサーバーとして運用が可能である
bitcoindのコマンドラインから操作するウォレットのように扱える
秘密鍵はBIP32で管理されているので一度ニーモニックをバックアップしておけばアドレスが増えた場合でも再度バックアップする必要はない
ブロックチェーンの同期がないので保守が楽になるカモ?(無責任)
electrumの秘密鍵
electrumの秘密鍵は暗号通貨業界でよく見かけるニーモニック(以下BIP39ニーモニックという)のように見えるが実はちょっと違う。
何が違うかというとなんとBIP39ニーモニックと仕様が違っていて互換性がないのだ。
だからelectrumでメモってもelectrumのニーモニックに対応していなければ復元できないのだ
XPRVやWIFと呼ばれる形式にすればほかでもインポートできるがそれを使うにはアドレスがどれか特定しなくてはならない
緊急時に他のウォレットでも使いたい場合には注意がいるだろう
commandラインから使ってみよう
コマンドラインから使うにはdaemon(常駐プログラム)として起動する必要がある
daemonとして起動する
起動
electrum daemon start
終了
electrum daemon stop
秘密鍵を扱う
秘密鍵の作成
electrum create
秘密鍵の復旧
electrum restore "xxxx xxxx xxxxx xxxxx"
ウォレットを操作する
一番最初にウォレットを常駐しているelectrumに秘密鍵をロードする必要がある、そのあとウォレットを操作するコマンドが使えるようになる
秘密鍵のロード
electrum daemon load_wallet
アドレス一覧
ウォレットの入金アドレスを表示
electrum listaddresses
バランス取得
ウォレット全体の残高を取得できる
electrum getbalance
支払い作成
- bitcoinaddressは支払先のアドレス
- amountは送金額(0.001とかbtc指定で)
- このコマンドを使うと数字で羅列された生トランザクションが出力される
- その生トランザクションをネットワークに伝搬させないかぎり実際に送金されない
- 確定処理をするコマンドを実行する必要がある
electrum payto bitcoinaddress amount
支払い確定
- transaction_stringにpaytoで作った生トランザクションを入れる
- このコマンドで実際の支払い処理が完了する
electrum broadcast transaction_string
他にも商売用に作られたコマンドとかもある
マーチャント用のドキュメントがあり、そこではユーザーごとに支払いを受け付ける仕組みはelectrumがやってくれるようだ
(実はあまり調べてない・・・)
オルトコインのelectrum達
コインによっては最新版に追従していなくて動かなかったり
秘密鍵を盗む目的で作られたelectrumもよくあるようだ
オルトコイン版のelectrumを使う場合は開発者が信用できるかどうかよく確認してから使うようにしよう
実際に開発者コミュニティに属している人が作成していたり、コイン開発者が作っているものはある程度信用してよいだろう
githubからであれば誰が作っているかすぐにわかるので参考にURLを張っておきます
coin | url |
---|---|
litecoin | https://github.com/pooler/electrum-ltc |
monacoin | https://github.com/wakiyamap/electrum-mona |
dash | https://github.com/dashpay/electrum-dash |
bitcoincash | https://github.com/fyookball/electrum |