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

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

Electrumサーバーを建ててみた

以前作成したビットコインのフルノード機にElectrumサーバーをインストールしてみたので、万人向けではありませんが、その記事を書きたいと思います。

Electrumサーバーについて

Electrumはビットコインの代表的なデスクトップウォレットの一つで、現在はAndroid版なども公開されています。サーバー・クライアント型のウォレットで、クライアント側はbitcoinノードも兼ねるElectrumのサーバーに接続して残高情報を取得したり、送金作業を行ったりすることになります。

以前は公式のサーバーソフトしかなく、そのソフトの必要リソースが非常に大きかったのでサーバーを建てるのが難しかったのですが、最近になってElectrumXという軽量版のソフトが公開されたので、今では動かすためのハードルがかなり低くなりました。ということで、せっかく寄付をもらって立ち上げたフルノードなので、ウォレットのサーバーとしても稼働させることにしました。

今回は公開のサーバーにしていますが、プライベート設定にして自分専用にすることもできますし、サーバーを建てることでフルノードと同様のプライバシーを兼ね備えつつElectrumを利用することができます(万が一のハードフォーク時には、自分でフルノードを運用することで他人のノードを信用しなくてもよくなるので、セキュリティにも寄与します。)。

必要リソース

ElectrumXの具体的な動作環境は記載されていませんが、bitcoindの設定を絞ってメモリ1MBのRaspberry Pi 3で動かしている人もいるので、かなり貧弱なコンピュータでも動かすことができるようです。ちなみに、bitcoindとElectrumXを別々のコンピュータ上で動かすことも可能です。

ただし、低スペックのコンピュータの場合、データベースの保存にHDDではなくSSDを利用することが重要です。今回も、最初はHDDで動かしていたのですがあまりに遅くて試しにSSDに換えたところ処理速度が10倍以上に向上しました。ElectrumXのデータベースをSSDに置くだけで、接続はUSB2.0だろうが全然パフォーマンスが違うので、最新のPCでもない限り、VPSで運用する場合もRaspberry Piなどで運用する場合もとにかくSSDということをおすすめしたいです。

インストール手順

Linuxの操作に全く慣れていなかったり経験がないような人にはわざわざサーバーを建てることはおすすめしないので、さらっと簡潔に書いてしまいます。

インストール手順はgithubのページを見てもらうのが一番良いかと思います。必要環境はpython3.5.3以上(3.6をおすすめ)に加え、Pythonのライブラリとしてaiohttp、pylru、plyvel(LevelDB)またはpython-rocksdb(RocksDB)が最低限です。

Raspberry Piの場合はコマンドを列記したスクリプトも用意されているので、参考にしてみてください。

注意点

Electrumは基本的にSSLを利用して通信するので、サーバー側もSSL証明書を用意することになります。自己署名証明書でも問題ありませんが、サーバー設置後なんらかの原因で紛失した場合は、同一の証明書でない限りクライアント側から無効と判断されるので、バックアップをとっておくことが重要になります。Electrumでは、クライアント側は各サーバーのアドレスに対応する最初に取得した証明書をもとに、その証明書が有効かどうか判断するようになっているので、前の証明書が用意できなかった場合、サーバーのドメイン名を変更しなければなりません。

起動

セットアップが終わったらサーバーを起動することになります。最初はElectrumXのデータベースを最新のブロックまで同期することになります。コンピュータのスペックにもよりますが、bitcoindの同期と同じぐらいかかるようです。最初の同期を省略するために、定期的にデータベースをウェブ上にアップロードしてくれている人もいるので、必要な方は拝借すると楽でしょう。

実際に運用中

ということで実は一か月前くらいからElectrumサーバーを運用し続けています。ElectrumXのアップデートに対応するため定期的にソフトの再起動をかけているので時々急落していますが、平均すると常時300クライアントぐらいの接続があるようです。
f:id:jpbitcoin:20170429153544p:plain

現在のサーバー数は大体100前後を推移していますが、同じサーバーでもTor用サーバー(.onionで終わるアドレス)が別にカウントされたり、一部ネットワーク上に表示されないサーバーもあるので、下のグラフは必ずしも正確なデータではありません。
f:id:jpbitcoin:20170429153549p:plain

サーバーによってセッション数(接続クライアント数)はかなり変わってくるのではっきりとは言えませんが、単純計算だと300*100=30000人程が常時Electrumを起動していることになります。ただし、Electrumはサーバー・クライアント型であると同時にSPV的な認証もしており、1サーバーに対してアドレスの残高情報を問い合わせたりトランザクションデータを通信したりするだけでなく、1クライアントにつき7,8台のサーバーに同時接続して各サーバーのデータ間に相違がないか検証するので、実際は30000の1/7か1/8程で約4000人前後という感じ、多く見積もったとしても1万人はいかない程度になると予想されます。

このノード機は液晶画面もつけているのでElectrumX用のデータも表示するようにしました。※画面のディスク占有量はElectrumXのデータベースを保管するSSDのみを表示。現在は20GBくらいです。
f:id:jpbitcoin:20170429154305j:plain

まとめ

Electrumのサーバー数はElectrumXの公開後大幅に増加したので、ネットワークの貢献という点では現在はあまり意味がなくなっています。ただし、低スペックのコンピュータでも運用できるようになったという点は非常に大きいので、フルクライアントのウォレットを利用したいという方にとっては大きな選択肢の一つとなりました。

同じように自分のフルノードに軽量型ウォレットから接続したいという場合、Android用のBitcoin Wallet(schildbach)を除くとBitcore&Copayの利用が最も有名で情報も多い上にCopayのマルチプラットフォーム対応のおかげで汎用性が高いのですが、単純な手軽さでいうとElectrumに軍配が上がる気がします。Android用のElectrumはサーバーのIP直打ちができませんしiOS版はリリースすらされていないので、まだまだ不便ですが興味のある人は試してみてはいかがでしょうか。