post Image
Bitcoin開発環境を構築する

最近、話題のBitcoinを勉強しようと思い、自分のローカルPCにビットコインを動かせる環境を構築することにしました。
私もまだまだBitcoinや他の仮想通貨について勉強中ですが、ソースコードを読む上で参考になれば幸いです。

実行環境

OSX 10.13 High Sierra
Github Desktop
Xcode 9.2
 →コマンドラインツールのインストールが必要です。
Homebrew 1.4.1


1. ソースコードのClone

まずはBitcoinのソースコードをCloneします。

GithubのBitcoinページにアクセスします。
https://github.com/bitcoin/bitcoin

「Clone or download」>「Open in Desktop」をクリックします。

bitcoin_bitcoin__Bitcoin_Core_integration_staging_tree.png

Github Desktopが立ち上がり、自分のローカルでソースを保存したいディレクトリを選択します。

スクリーンショット_2017_12_23_10_31.png

ソースコードのCloneが開始されます。

bitcoin_bitcoin.png

Cloneされたことを確認します。

bitcoin_bitcoin1.png

/bitcoin/doc/build-osx.mdに公式の環境構築手順が記載されているので、
その内容にしたがって環境を構築していきます。

2. ソースビルド準備

前提となるパッケージをインストールします。

brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config protobuf python3 qt libevent

1__zsh_と_build-osx_md_—___Git_bitcoin_doc.png

ディスクイメージ(.dmg)の作成用に「librsvg」パッケージをインストールします。
このパッケージについては任意のため、インストールしなくても、この後の手順を実行できます。

brew install librsvg

1__zsh.png

3. ソースビルド

ビットコインのソースコードを配置したディレクトリに移動します。

cd bitcoin

1__zsh1.png

シェルスクリプト「autogen」を実行して、ソースのビルドします。

./autogen.sh

01sx_md_—___Git_bitcoin_doc.png

シェルスクリプト「configure」を実行して、ソースコードのコンパイル前に、インストール対象のチェックします。

./configure

02.png

チェックが終わるとこんな表示になります。
03.png

makeコマンドを実行して、コンパイルをします。

make

1__clang.png

4. make時のエラー

すると下記のようなエラーが発生。

Making all in src
  CXX      rpc/libbitcoin_server_a-blockchain.o
g++: warning: couldn't understand kern.osversion '17.3.0
rpc/blockchain.cpp:1622:1: error: converting to 'std::vector<std::basic_string<char> >' from initializer list would use explicit constructor 'std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = std::basic_string<char>; _Alloc = std::allocator<std::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::basic_string<char> >]'
 };
 ^

Googleで調べてみるとMacの場合、Xcode以外のgccが入っているとどうやらエラーになるらしい。
下記のコマンドでHomebrewのインストールパッケージを調べる

brew list

07.png

gcc49が入っていたので、アンインストール

brew uninstall gcc49

5. make再実行

再度、makeコマンドを実行

make

08.png

09.png

ビルド完了です! ちなみにmakeコマンドが終わるまで40分ほどかかりました。

単体テストを実行して問題ないことを確認します。

make check

10.png

ビットコインのデーモンを起動して動作を確認…で問題が。

`./src/bitcoind`

↑のコマンドが終わらない。公式サイトを見てみると「我慢が必要です」とのこと。
我慢をしたくないのと、65GBのデータをローカルに落としてくるのは、嫌なので
現在、なんとかする方法を模索中です…

0202.png

(2018/01/20追記:テストネットに接続することでこの問題を解決しました↓)

========2018/01/20追記========

6. テストネットへの接続設定

ビットコインの本番ネットワークではなく、開発用のテストネットに接続するように
設定ファイルを作成します。
このテストネットでのビットコインは現実では価値を持たないテスト用のものとなります。

下記の場所にテストネットに接続するようための「bitcoin.conf」を作成し、配置します。

cd /$HOME/Library/Application\ Support/Bitcoin/

記載する内容は下記の通りです。
「rpcuser」、「rpcpassword」については、任意のものを設定できます。

bitcoin.conf
rpcuser=user
rpcpassword=pass
server=1
txindex=1

# Allow connections outsite localhost?
# rpcallowip=192.168.1.*

rpcport=18332
testnet=1

7. ブロックチェーンの同期

bitcoind -reindexを実行して、テストネットのブロックチェーンの同期を開始します。

cd /$HOME/Git/bitcoin
./src/bitcoind -reindex

実行した結果、テストネット用のブロックチェーンとはいえ、同期に
118時間(途中ネットが切れたりした分もありますが…)ほど時間がかかりました。

何かが間違えているのではないかという思いが常に頭にあったので
下記の通りtailで、ログを監視しながらコマンドを実行しましたが、きちんと同期がされていました。

tail -f /$HOME/Library/Application\ Support/Bitcoin/testnet3/debug.log

1__zsh.png

下記のイメージは、「debug.log」のブロックチェーン同期中のログの抜粋です。

04.png

8. bitcoindの起動と停止

bitcoindを起動します。

./src/bitcoind -daemon

正常に起動できました。
05.png

bitcoindが正常に起動できたことを確認するため、ブロックチェーンの情報を表示するコマンドを実行します。

./src/bitcoin-cli getblockchaininfo

テストネット用のブロックチェーンの情報が取得できています。
取得できる情報については下記のリンク参照。
例えばテストネットのブロックチェーンサイズは、「12.7GB」ほどだと分かります。
(2018年1月現在)
http://bitcoin.clock-up.jp/contents/block/blockinfo

07.png

bitcoindを停止します。

./src/bitcoin-cli stop

bitcoindを停止させました。

08.png

bitcoin開発環境は一旦、これで構築完了です。
あとはブロックチェーンの仕組みや実際の決済について、引き続き勉強していく予定です。


『 Bitcoin 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。