LoginSignup
9
5

More than 5 years have passed since last update.

Bitcoin (Bitcoin Core)をローカルで動かしてみる

Last updated at Posted at 2018-04-13

前提

  • ホスト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 のソースを持ってくる

(私はソースの中身をいじりたいので 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"

参考

ほか

9
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5