うさがにっき

読書感想文とプログラムのこと書いてきます

OS X上にbitcoin環境を作って見る

概要

githubにだいたい書いてある、ので試してみる

開発環境

事前準備

環境構築

  • Homebrewで必要な物ずばっといれる
    $ brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config protobuf qt libevent
    • ディスクイメージ作る場合は以下も追加(option)
      $ brew install librsvg
  • ソース落としてくる
    $ git clone https://github.com/bitcoin/bitcoin $ cd bitcoin
  • Build
    ここはマシンによるけど2時間くらいかかるかも
$ ./autogen.sh # 10min
$ ./configure # 10min
$ make # about 2 hour?
$ make check

動かす

blockの生成

  • blockの生成
$ bitcoin-cli -regtest generate 101
 [ 
  "207ec46d7c326feb0d403cd4426c257cbb18bf55e1bfd4aad9d59547ddbb08e9", 
  "5c05079822234bc424eb482105e293e771e58866a64586e57f6cd99f339a83fb", 
  ...
]

それぞれのラインがブロックを表している、ブロックを識別するために32バイトで表現される

  • block数の確認
$ bitcoin-cli -regtest getblockcount
101

アカウントの作成

  • アカウントの生成
$ bitcoin-cli -regtest getnewaddress testuser1
mypR5rfJ3t3q7Yuch5M8eF4cMZzYUrHZ4U

bitcoinにおけるアカウントは25 ~ 35文字の英数字で表現される

残高の確認

  • 残高の確認
    blockを作成した報酬として50BTCが口座にある
$ bitcoin-cli -regtest getbalance
50.00000000
  • 特定アカウントの残高確認
bitcoin-cli -regtest getbalance testuser1
0.00000000

当然0

送金

作成したアカウントに送金

$ bitcoin-cli -regtest sendtoaddress mypR5rfJ3t3q7Yuch5M8eF4cMZzYUrHZ4U 10
7f7ca45aab4af6811b5ec17eb30f4de1e7e393b5158a44243478500b30d2f701

トランザクションの識別番号が表示される - トランザクションの確認

$ bitcoin-cli -regtest listunspent
[
]

listunspentは確定したトランザクションを確認するコマンド、引数に0をいれると未確定のトランザクションも表示できる

$ bitcoin-cli -regtest listunspent 0
[
  {
    "txid": "7f7ca45aab4af6811b5ec17eb30f4de1e7e393b5158a44243478500b30d2f701",
    "vout": 0,
    "address": "mqv5TcqaAzYCUJmdycjnAisiuFVSXLh9BM",
    "scriptPubKey": "76a9147210ce50fb8e27cb068fa22440eb03960c24009b88ac",
    "amount": 39.99996160,
    "confirmations": 0,
    "spendable": true,
    "solvable": true,
    "safe": true
  }, 
  {
    "txid": "7f7ca45aab4af6811b5ec17eb30f4de1e7e393b5158a44243478500b30d2f701",
    "vout": 1,
    "address": "mypR5rfJ3t3q7Yuch5M8eF4cMZzYUrHZ4U",
    "account": "testuser1",
    "scriptPubKey": "76a914c8bfb2c9020ed03d745041b0fb55299b320230ee88ac",
    "amount": 10.00000000,
    "confirmations": 0,
    "spendable": true,
    "solvable": true,
    "safe": true
  }
]

手数料引かれてるけど、10BTCひかれて10BTCわたしている

  • 残高の確認
$ bitcoin-cli -regtest getbalance
49.99996160

手数料だけ取られた、この後のマイニングによって取引が発生する

マイニング

$ bitcoin-cli -regtest generate 1
[
  "12ea7deebb26e0d2b8ea23717bc04589f8bb11dfa5d76acc1715e688ebfa9d0e"
]

マイニングによってトランザクションがブロックに書き込まれる

再度トランザクションの確認

$ bitcoin-cli -regtest listunspent
[
  {
    "txid": "7f7ca45aab4af6811b5ec17eb30f4de1e7e393b5158a44243478500b30d2f701",
    "vout": 0,
    "address": "mqv5TcqaAzYCUJmdycjnAisiuFVSXLh9BM",
    "scriptPubKey": "76a9147210ce50fb8e27cb068fa22440eb03960c24009b88ac",
    "amount": 39.99996160,
    "confirmations": 1,
    "spendable": true,
    "solvable": true,
    "safe": true
  }, 
  {
    "txid": "7f7ca45aab4af6811b5ec17eb30f4de1e7e393b5158a44243478500b30d2f701",
    "vout": 1,
    "address": "mypR5rfJ3t3q7Yuch5M8eF4cMZzYUrHZ4U",
    "account": "testuser1",
    "scriptPubKey": "76a914c8bfb2c9020ed03d745041b0fb55299b320230ee88ac",
    "amount": 10.00000000,
    "confirmations": 1,
    "spendable": true,
    "solvable": true,
    "safe": true
  }, 
  {
    "txid": "ec4d8efc0d80a715b914a269a6b48dbab5fe109903c9e679fec9634378ec7337",
    "vout": 0,
    "address": "n3GCbPoXovJhJwWVhgwv9vmLSre3iGVbZc",
    "scriptPubKey": "21033d5876d9531d767e872136bf49fc37dff226c8f92096c05a04b534225db75762ac",
    "amount": 50.00000000,
    "confirmations": 101,
    "spendable": true,
    "solvable": true,
    "safe": true
  }
]
$ bitcoin-cli -regtest getbalance testuser1
10.00000000

無事振り込まれた

ブロックチェーン 仕組みと理論  サンプルで学ぶFinTechのコア技術

ブロックチェーン 仕組みと理論 サンプルで学ぶFinTechのコア技術