本記事はhkalodner
氏が主に開発している BlockSci についての記事です。
まだまだ開発途中で情報が少ないので色々試行錯誤した記録を書き出してみたいと思います。
インストール
BlockSci公式ドキュメントにありますami-7cf38706を使ってEC2インスタンスにインストールします。
ami-7cf38706
からインストールするとすでに必要なライブラリはセットアップされていて、またmainnetのデータをBlockSciでパースしたデータがすでに入っています。
初めから入ってるパースデータは/home/ubuntu/bitcoin/
にあります。
このパースデータは2017/12/12 15:54:15
までのデータでブロック高は498919
です。
EC2が起動してから約3.5時間でデータが全て展開されデータ解析できるようになります。
bitcoind
は入っていないので必要であれば別途インストールしましょう。
その際は残容量にご注意ください。
推奨スペック
項目 | スペック |
---|---|
SSD | 200GiB以上 |
メモリ | 60GiB以上 |
インスタンス | r4.2xlarge |
testnetのデータを使う場合
AMIが作成された後にマージされたコードがあるためそちらを自身で修正する必要があるかもしれません。
ParserConfiguration<FileTag>::ParserConfiguration(const boost::filesystem::path &bitcoinDirectory_, const boost::filesystem::path &dataDirectory_) : ParserConfigurationBase(dataDirectory_), bitcoinDirectory(bitcoinDirectory_) {
auto bitcoinDirectoryString = bitcoinDirectory.native();
if (bitcoinDirectoryString.find("litecoin") != std::string::npos || bitcoinDirectoryString.find("Litecoin") != std::string::npos) {
blockMagic = 0xdbb6c0fb;
workHashFunction = doubleSha256;
} else if (bitcoinDirectoryString.find("regtest") != std::string::npos) {
blockMagic = 0xdab5bffa;
workHashFunction = doubleSha256;
} // diff ここから
else if (bitcoinDirectoryString.find("testnet") != std::string::npos) {
blockMagic = 0x0709110b;
workHashFunction = doubleSha256;
} // diff ここまで
else {
blockMagic = 0xd9b4bef9;
workHashFunction = doubleSha256;
}
}
cd release
make
sudo make install
データ解析
ローカルマシンのターミナルでsshトンネルを使用してEC2インスタンスのjupyter notebook
に接続できるようにします。
ssh -i your_private_key.pem -N -L 8888:localhost:8888 ubuntu@your_url.amazonaws.com
- ブラウザを開き
localhost:8888
でjupyter notebook
が開きます。 -
BlockSci Demo.ipynb
が用意してあるので全てのセルを実行します。 - 初めに入っているパースデータを元にスクリプト形式別のトランザクション数のグラフやセカンドレイヤーのトランザクション数のグラフなどが描画されます。
jupyter notebookを公開したい場合
-
ssh -i your_private_key.pem ubuntu@your_url.amazonaws.com
でインスタンスに繋ぎます。 -
jupyter notebook --generate-config
をしてjupyter_notebook_config.py
を生成します。 -
.jupyter/jupyter_notebook_config.py
をエディタで開きc.NotebookApp.ip = '*'
を追記します。(許可するIPは適宜編集してください) -
sudo shutdown -r now
で再起動します。
以上でsshトンネルを使わなくてもjupyter notebook
に接続可能になります。
公開設定する場合はセキュリティに配慮して、必ずAWS側でセキュリティグループを設定する等をしてください。
その他具体的なプログラムについては BlockSciデータ解析編 に書いております。
補足等ありましたら編集リクエストいただけると助かります。