本記事は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データ解析編 に書いております。
補足等ありましたら編集リクエストいただけると助かります。