bitcoindを立ち上げる

まずはbitcoindを立ち上げます
bitcoindのビルド方法は過去の記事を参考にしてください

bitcoindを起動

コマンドプロンプトを起動します。
今回は-regtestを引数に追加します。

> cd ~/bitcoin-bodule/bin
> bitcoind -regtest

bitcoin-cliを動かす

getblockchaininfo

-regtestでは、ブロック高が0となります。

> bitcoin-cli getblockchaininfo
{
  "chain": "regtest",
  "blocks": 0,
  "headers": 0,
  "bestblockhash": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206",
  "difficulty": 4.656542373906925e-010,
  "mediantime": 1296688602,
  "verificationprogress": 1,
  "initialblockdownload": true,
  "chainwork": "0000000000000000000000000000000000000000000000000000000000000002",
  "size_on_disk": 293,
  "pruned": false,
  "softforks": [
    {
      "id": "bip34",
      "version": 2,
      "reject": {
        "status": false
      }
    },
    {
      "id": "bip66",
      "version": 3,
      "reject": {
        "status": false
      }
    },
    {
      "id": "bip65",
      "version": 4,
      "reject": {
        "status": false
      }
    }
  ],
  "bip9_softforks": {
    "csv": {
      "status": "defined",
      "startTime": 0,
      "timeout": 9223372036854775807,
      "since": 0
    },
    "segwit": {
      "status": "active",
      "startTime": -1,
      "timeout": 9223372036854775807,
      "since": 0
    }
  },
  "warnings": "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"
}

getblockcount

この状態で試しても当然返り値は0です。

> bitcoin-cli getblockcount
0

新しいブロック生成を生成してみる

5ブロック生成してみます。
※処理はほぼ一瞬です

> bitcoin-cli generate 5
[
  "60943d938696f7b00966add8bc04f62a4ffaf184fc81c9a43a527280f09da72f",
  "5aa8d0d54e44aa2ff0843c68f27e760bb849543d0d277c00053877a1ccd6a2e8",
  "06f59e56950920c5f5f15f8092defa74204c992c6098bf6d551466a59ab60df1",
  "2672b2e0a6a34b19a004d1910f4f218116cd402cb579604f8b97713ee1f9ee11",
  "7938c4a495eac0fef1fbd0f45d38b2fa628d672c66fe4c6834fce17a3a67247a"
]
> bitcoin-cli getblockcount
5

残高を確認してみます。

> bitcoin-cli getbalance
0.00000000

残高は0でした。
これは、マイニング報酬は100ブロック承認後に利用可能になるからです。
Confirmation - bitcoin wikiより

Freshly-mined coins cannot be spent for 100 blocks. It is advisable to wait some additional time for a better chance that the transaction will be propagated by all nodes. Some older bitcoin clients won’t show generated coins as confirmed until they are 120 blocks deep.

では追加で100ブロック生成してみます。

> bitcoin-cli generate 100
[
  "5890239fc90086e5eb31e5953b33f72bde6a9f2297804e9b32201e0917e9f901",
  "284d6c1cd6ee8e6a4bdcd710d2c527371ceecdcd458cd360db4f8a6495b36c0f",

...中略...

  "25c9a907cdaa7b0c806193ce835c5f46415dc97d68c85df90e95e553736202ca",
  "1ab35aad779904b8577f656d0ed45830889ea43c2031c8662d1904f94e0cfe08"
]
> bitcoin-cli getblockcount
105
> bitcoin-cli getbalance
250.00000000

5ブロック分の報酬が反映されていることが確認できました。

アドレスを生成

-regnet用のアドレスを生成してみます。

> bitcoin-cli getaccountaddress address1
2Mx47cD9dak12nF3dkTFK21FzXvEvmZo2iF
> bitcoin-cli getaccountaddress address2
2NGEbE3QGLcaF8TY2kK1aTKfmLKBc6CJWzz

生成したアドレスを確認してみます。

> bitcoin-cli listaccounts
{
  "": 250.00000000,
  "address1": 0.00000000,
  "address2": 0.00000000
}

生成したアドレス宛に送金してみる

まずは生成したアドレスの公開鍵を取得してみます。

> bitcoin-cli getaccountaddress address1
2Mx47cD9dak12nF3dkTFK21FzXvEvmZo2iF

address1に100BTC送金してみます。

> bitcoin-cli sendtoaddress 2Mx47cD9dak12nF3dkTFK21FzXvEvmZo2iF 100
168c68122a1562019ba12fc6425d605d9ea7ff7ed5a43657bc4d0c9fa42227c7

成功するとトランザクションが発生します。
アドレスの残高を確認してみます。

> bitcoin-cli listaccounts
{
  "": 149.99991680,
  "address1": 0.00000000,
  "address2": 0.00000000
}

listaccountsの引数を省略すると、承認数1以上のトランザクションのみが反映された情報が表示されます。この時点では承認数が0のためaddress1の残高は0です。

> bitcoin-cli listaccounts 0
{
  "": 149.99991680,
  "address1": 100.00000000,
  "address2": 0.00000000
}

引数に0を追加してあげることによって、address1へ100BTC移っているのが確認できました。

トランザクションの確認

先ほど送金した際に発生したトラン座を調べてみます。

> bitcoin-cli gettransaction 168c68122a1562019ba12fc6425d605d9ea7ff7ed5a43657bc4d0c9fa42227c7
{
  "amount": 0.00000000,
  "fee": -0.00008320,    #手数料 
  "confirmations": 0,    #承認数
  "trusted": true,
  "txid": "168c68122a1562019ba12fc6425d605d9ea7ff7ed5a43657bc4d0c9fa42227c7",    #トランザクション
  "walletconflicts": [
  ],
  "time": 1521038477,    #トランザクション生成日時(UNIX時間)
  "timereceived": 1521038477,
  "bip125-replaceable": "no",
  "details": [
    {
      "account": "",    #送金元アカウント
      "address": "2Mx47cD9dak12nF3dkTFK21FzXvEvmZo2iF",    #送金先アドレス
      "category": "send",    #送金
      "amount": -100.00000000,    #送金量
      "label": "address1",    #送金先アカウント
      "vout": 1,
      "fee": -0.00008320,    #手数料
      "abandoned": false
    },
    {
      "account": "address1",    #受信アカウント
      "address": "2Mx47cD9dak12nF3dkTFK21FzXvEvmZo2iF",
      "category": "receive",    #受信
      "amount": 100.00000000,    #受信量
      "label": "address1",    #受信アカウント
      "vout": 1
    }
  ],
  "hex": "0200000003321daed87ba234ef565230df2bf82fc4bc3a5ff3dc36b52b94b86a9b5d47b4b70000000049483045022100f0e38f365431c51aba67f81f3b474d7bb340dcfcea8c55930a4e773bad9f426502200255bfca97a942e687c7069e2865f659f337cd409dd690603d8d462c6a3b4e1b01feffffff59b2d88b3d71a20cb7dfb12f5cbf3b45733707911fbd92aabe6185060cdbaa8b000000004847304402201308bc7848225e8f275527b25851d5135afbe7b26b33230205ef1462c10c7fd10220619db1f67d5c071af37bad88e80a7cf0ee99638114137deeaea09d1309172ad301feffffff8e1275ba76c956c0bd88ddcae9730e5e240573bcf46ed380fe30471d106464fe0000000048473044022055e23063848736c3566e6674c2e9316a06561dd2dca5c5ae4ab0bf607e7c2c900220361333abd3dc37202f4f74817204812d0489a6ad6458b2f24d23637107f8b61f01feffffff0280d1052a0100000017a914abdc4e515bbcd5a037b9e90796d13c5676001c618700e40b540200000017a91434beba232514f5522f8f55c1b856ee88907bfa9b8769000000"
}

まだこのトランザクションはブロックに取り込まれていません。

> bitcoin-cli generate 1
[
  "148f0b1b6ee388b84cdb8df4ad841806b5df7ba045018c006b72611725a434e5"
]
> bitcoin-cli gettransaction 168c68122a1562019ba12fc6425d605d9ea7ff7ed5a43657bc4d0c9fa42227c7
{
  "amount": 0.00000000,
  "fee": -0.00008320,
  "confirmations": 1,
  "blockhash": "148f0b1b6ee388b84cdb8df4ad841806b5df7ba045018c006b72611725a434e5",
...中略...
}

1ブロック新たに生成し、トランザクションを確認してみると"confirmations": 1,となっているのが確認できました。

> bitcoin-cli listaccounts
{
  "": 199.99991680,
  "address1": 100.00000000,
  "address2": 0.00000000
}

listaccountsを試してみると、承認数が1のためaddress1の残高が表示されています。
generate 1で1ブロック生成したため""の残高も50BTC増えています。