【エンジニアブログ】モナコインのElectrumXを建ててみた

  • このエントリーをはてなブックマークに追加

こんにちわ、ゆあです☆
趣味は糖質制限と筋トレで、ビットバンクではウォレットまわりの開発を中心にやってます(๑˃̵ᴗ˂̵)و

技術ブログ第一弾なので緊張してます!!!

技術ブログをはじめます

ビットバンクで取り扱っている仮想通貨であるモナコインの公開ノード(Monacoind & ElectrumX)を設置しました

electrum-mona.bitbank.cc 
tcp 50001
tcp/ssl 50002

今回設置にあたり手順を作ったのでそれをまとめました

※ ElectrumのモナコインクライアントはElectrum-Mona公式ページから取得できます
※ Electrumは有志が作成したオープンソースのウォレットでビットバンクが動作保証するものではありません

そもそもElectrum(エレクトラム)とは?

  • 一言で言えばブロックチェーンをダウンロードせずに自分で秘密鍵を管理するタイプのオープンソースなお財布アプリ
  • クライアント・サーバーモデル
  • クライアントは秘密鍵を保有して残高管理するウォレットと呼ばれる機能を持つ
  • クライアントはPC版(Windows/MacOSX/Linux)とモバイル版(android)があります
  • サーバーはブロックチェーンを分析してデータベースを構築し残高取得に特化した機能を持つ(秘密情報をサーバーとやり取りしませんがブロックチェーンを持っているので信用は必要)
  • サーバーには2つ実装があり、bitcoin用に作られた純正のElectrum-serverとアルトコイン向けに作られたElectrumXがあります
  • 信用できるサーバーが安定して稼働していることでElectrumユーザーはウォレット機能に手軽にアクセスできます

ElectrumXの構成要素

モジュール 説明
linux サーバーOS
python3 electrumx実行言語
rocksdb facebookが開発したleveldbを改良したデータベース
monacoind モナコイン本体

実際のインストール手順

概要

  • linuxはcentos7を採用します
  • python3はiusのリポジトリを使います
  • rocksdbはgithubからソースを取得、コンパイル
  • monacoinはgithubからソースを取得し、コンパイル

インストール手順

開発に必要なパッケージをインストールします

sudo yum install -y epel-release
sudo yum install -y Development Tools
sudo yum install -y snappy snappy-devel zlib zlib-devel bzip2-libs bzip2-devel cmake make leveldb leveldb-devel gflags-devel
sudo yum install -y boost boost-devel openssl-devel libevent-devel libdb-cxx libdb-cxx-devel

python3をインストールします

  • iusリポジトリの登録
  • python一式のダウンロード
sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
sudo yum install -y python36u python36u-libs python36u-devel python36u-pip

rocksdbのインストール

  • githubからソースコードのダウンロード
  • pythonモジュールのpython-rocksdbがテストをしたバージョンは5.3と書いてあるので5.3.6をダウンロード
  • ソースコードのコンパイルとインストール
git clone -b v5.3.6 https://github.com/facebook/rocksdb.git
cd rocksdb
make shared_lib
sudo make install-shared INSTALL_PATH=/usr
sudo pip3.6 install python-rocksdb
sudo ldconfig

ElectrumXのインストール

  • githubからソースコードをダウンロードとインストール
curl https://codeload.github.com/kyuupichan/electrumx/tar.gz/1.1.1 > electrumx-1.1.1.tar.gz
tar zxvf electrumx-1.1.1.tar.gz
cd electrumx-1.1.1
sudo python3.6 ./setup.py install 

Monacoindのインストール

  • githubからソースコードをダウンロード
  • ソースコードのコンパイル(ウォレット機能は使用しないので無効にしています)とインストール
curl https://codeload.github.com/monacoinproject/monacoin/tar.gz/monacoin-0.14.2 > monacoin-monacoin-0.14.2.tar.gz
tar zxvf monacoin-monacoin-0.14.2.tar.gz
cd monacoin-monacoin-0.14.2
./autogen.sh
./configure --disable-wallet
make
sudo make install

設定手順

  • 運用はcentos標準のsystemdを利用します
  • 外部に公開するTCPのポートは9401,50001,50002です

monacoindの設定

以下の設定ファイルを/etc/systemd/system/monacoin.serviceに設置します

[Unit]
Description=monacoin daemon
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/monacoind -server -txindex=1 -rpcuser=monacoin -rpcpassword=monacoin23130916 -rpcport=9402
WorkingDirectory=/home/centos
KillMode=process
Restart=always
User=centos
Group=centos

[Install]
WantedBy=multi-user.target

electrumxの設定

以下の設定ファイルを/etc/systemd/system/electrumx.serviceに設置します

[Unit]
Description=Electrumx
After=network.target

[Service]
EnvironmentFile=/etc/electrumx.conf
ExecStart=/usr/bin/electrumx_server.py
User=centos
Group=centos
LimitNOFILE=8192
TimeoutStopSec=30min

[Install]
WantedBy=multi-user.target

以下のファイルを/etc/electrumx.confに設置します

COIN = Monacoin
NET = mainnet
DB_DIRECTORY = /home/centos/DB
DAEMON_URL = http://monacoin:monacoin23130916@localhost:9402/
DB_ENGINE = rocksdb
TCP_PORT = 50001
SSL_PORT = 50002
HOST = 0.0.0.0
MAX_SEND = 1024000
SSL_CERTFILE=/etc/electrumx/server.crt
SSL_KEYFILE=/etc/electrumx/server.key

SSL接続用の証明書を作成します
発行元の検証機構がないので自己署名の証明書で大丈夫です

以下のスクリプトで作成します

#!/bin/bash
openssl genrsa 2048 > /tmp/cert.key
openssl req -new -key /tmp/cert.key <<EOF > /tmp/req.csr
JP
Tokyo
Town
Company
Section
EOF
openssl x509 -days 3650 -req -signkey /tmp/cert.key < /tmp/req.csr > /tmp/cert.pem
sudo cp /tmp/cert.pem /etc/electrumx/server.crt
sudo cp /tmp/cert.key /etc/electrumx/server.key

うごかしてみる

systemctlで実行できます

sudo systemctl start monacoin
sudo systemctl start electrumx

実行ログはjournalctl -fで表示できます

journalctl -f -u electrumx

最後に

Electrumの通信プロトコルは以下のURLで公開されているのでウォレットの実装をする場合などには参考になるかと思います

ーーーーーーーーーー

事業拡大の為、bitbankでは全職種の採用を積極的に行っております!気軽にお問い合わせください!