前提
- ホストOS: Windows 10、ゲストOS: Ubuntu 16.04
- ローカルPC に Virtualbox、Vagrant がインストール済
インストール
Ubuntu 16.04 のイメージを取得
- Vagrant 用のディレクトリを作成(ディレクトリは任意、例: D:\vagrant\ubuntu_16_04)
- OSイメージのお弁当を持ってくる。コマンドプロンプトで、
> vagrant init bento/ubuntu-16.04
> vagrant up
ゲストOS (ubuntu)にログイン
- ターミナルソフト(TeraTermとか)から、以下の情報でログイン
Host: 127.0.0.1
Port: 2222
ID: vagrant
PASS: vagrant
Bitcoin Core のソースを持ってくる
- 本家リポジトリ: https://github.com/bitcoin/bitcoin
(私はソースの中身をいじりたいので folk しました)
-
適当フォルダを用意(~/bitcoin とか)を用意して、git clone
$ cd ~/bitcoin
$ git clone (リポジトリのURL)
ビルドの前に依存する package をインストール
$ sudo apt-get install autoconf build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils
$ sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev
$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt-get update
$ sudo apt-get install libdb4.8-dev libdb4.8++-dev
$ sudo apt-get install libminiupnpc-dev
$ sudo apt-get install libzmq3-dev
ビルドしてインストール
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
make にはそれなりに時間がかかります。
インストールされるもの
- /usr/local/bin/bitcoind : Bitcoin サーバ
- /usr/local/bin/bitcoin-cli : クライアントツール
- /usr/local/bin/bitcoin-tx : トランザクションを扱うツール(?)
- /usr/local/bin/test_bitcoin : テストツール
- /usr/local/bin/bench_bitcoin : ベンチマークツール
動かしてみる
RegTest というローカルでのみ動く Bitcoin のテスト環境を使います
Bitcoin サーバの起動
$ bitcoind -regtest -printtoconsole
フォアグランドで、logを流しながら実行できます。
終了する時は、Ctrl-C
残高を確認してみる
(全アカウント)
$ bitcoin-cli -regtest listaccounts
(アカウントごと)
$ bitcoin-cli -regtest getbalance (アカウント)
(全アドレス)
$ bitcoin-cli -regtest listreceivedbyaddress
当然、なにもしてないので 0 BTC
マイニングしてみる
サーバが起動している状態で、別のターミナルから、
(101ブロックをマイニング)
$ bitcoin-cli -regtest generate 101
デフォルトのアカウント "" に 50 BTC が与えられる。
(=1ブロック目のマイニング報酬)
アカウント、アドレスを作成してみる
(アカウント hogehoge のアドレスを生成、アカウントはなければ自動的に作られる)
$ bitcoin-cli -regtest getnewaddress hogehoge
2NDmc... ← アドレス
この時点で、
- アカウント "" : 50 BTC
- アカウント hogehoge : 0 BTC
- アドレス 2NDmc... : 0 BTC
送金してみる
(アカウント "" から、アカウント hogehoge のアドレス 2NDmc... に 10BTC送金)
$ bitcoin-cli -regtest sendtoaddress 2NDmc... 10
81d76a0... ← トランザクションID
- アカウント "" : 39.99996240 BTC
- アカウント hogehoge : 0 BTC
- アドレス 2NDmc... : 0 BTC
…???
計算が合わない分は、どこへ行った?
- 10 BTC = "コンセンサスが得られていない" (この取引の合意形成がされていない)
- 40 - 39.99996240 BTC = 手数料
詳しくは、こちらなど:
「ブロックチェーンのコンセンサスアルゴリズム(合意形成)とは?ビットコインのProof of Workを解説!」
https://moblock.jp/articles/17182
取引(トランザクション)の状態を確認する
(トランザクションID 81d76a0... の内容を確認)
$ bitcoin-cli -regtest gettransaction 81d76a0...
取引の合意形成=マイニングしてみる
$ bitcoin-cli -regtest generate 1
- アカウント "" : 89.99996240 BTC
- 39.99996240 BTC
- (最初の101ブロックのうち)2ブロック目のマイニング報酬 50 BTC
- アカウント hogehoge : 10 BTC
- アドレス 2NDmc... : 10 BTC
これがすなわち、"Proof of Work"
参考
-
参考にした記事
- 「Bitcoindの起動と停止」 https://qiita.com/tnakagawa/items/a8aefab40a97aa1159f7
- 「bitcoin-cliを使ったBitcoinAPI入門」 https://qiita.com/osada/items/39c63a146c203f4dc751
- 「bitcoinの起動と初期採掘」 http://garapon.hatenablog.com/entry/2015/12/13/142602
- 「Bitcoin環境」 https://qiita.com/takaheraw@github/items/7cc6dff0054cc3e4d55d
- 「Bitcoin(Mainnet, Testnet)への接続方法」 https://qiita.com/mukoya/items/80993ed2521167f5542a
-
リファレンス
- 「Bitcoin ClockUpMemo」 http://bitcoin.clock-up.jp/
- Bitcoin Developer Reference https://bitcoin.org/en/developer-reference
- Original Bitcoin client/API calls list https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list
ほか