トランザクションの生成からビットコインの送信まで

今日は、いよいよビットコインを送信してみます! 送信するには、bitcoin-cliコマンドでは、ちょっと手間がかかります。 メインのマシンのノードからサブのマシンのノードへの送金が目標。

1.トランザクションの生成

ビットコインの送信をするために、まずは、トランザクションを作ります。

$ bitcoin-cli createrawtransaction '[{"txid":"c96716b9e6737df8cc6e6c98483bfffb05722923d87489f560cc0f774e9b13cc", "vout":1}]' '{"2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC":0.05, "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy":0.03}'
0200000001cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000000ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8700000000

見た目があれですけどJSON形式でトランザクションを記述します。

ここでは、受け取ったビットコイントランザクションtxid:c967...を使って、送り先アドレス"2NDgA..."に0.05bitcoinを送ります。 おつりにあたる0.03bitcoinを自分のアドレス"2MsfC..."に送るつまり自分に戻します。 そして、余った分は、手数料としてとられるようです。

念のために作ったトランザクションを確認してみます。

$ bitcoin-cli decoderawtransaction 0200000001cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000000ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8700000000
{
  "txid": "d56e33021bc4125eed6ea3826ea3b1cb0d710bc11a21c12de180a24aed72cec5",
  "hash": "d56e33021bc4125eed6ea3826ea3b1cb0d710bc11a21c12de180a24aed72cec5",
  "version": 2,
  "size": 115,
  "vsize": 115,
  "weight": 460,
  "locktime": 0,
  "vin": [
    {
      "txid": "c96716b9e6737df8cc6e6c98483bfffb05722923d87489f560cc0f774e9b13cc",
      "vout": 1,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.05000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_HASH160 e01a2276131210a6fe444ead747cbead075c4e4e OP_EQUAL",
        "hex": "a914e01a2276131210a6fe444ead747cbead075c4e4e87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC"
        ]
      }
    },
    {
      "value": 0.03000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_HASH160 04885a6a6d1dab5e30bd54d04fdb9f5927e3825f OP_EQUAL",
        "hex": "a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy"
        ]
      }
    }
  ]
}

2.トランザクションの署名

送信するためには、ウォレットの秘密鍵で署名する必要があります。

まずは、暗号化されているウォレットをパスワードで一時的に(360秒)復号化しておきます。

$ bitcoin-cli walletpassphrase xxxxxxxx 360

signrawtransactionメソッドで署名っと。

$ bitcoin-cli signrawtransaction 0200000001cc139b4e770fcc
60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000000ffffffff02404b4c0000
00000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a9140488
5a6a6d1dab5e30bd54d04fdb9f5927e3825f8700000000
error code: -32
error message:
signrawtransaction was removed in v0.18.
Clients should transition to using signrawtransactionwithkey and signrawtransactionwithwallet

あらら、エラーになってしまった。signrawtransactionは、もう、古いメソッドみたいです。 調べてみるとsignrawtransactionwithwalletメソッドがほぼ同じ動きみたいです。

$ bitcoin-cli signrawtransactionwithwallet 0200000001cc13
9b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000000ffffffff02
404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d0000000000
17a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8700000000
{
  "hex": "02000000000101cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000017160014271304445811dca1b9a7a4f9d30a83b370681695ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8702473044022041a0bba1f9c46adb476d999a1f1812d0a16c376077df98af559a99b33074ab6d022019649feb6958d9917421910b4129a26892a932bdaf9779b9b51c633acd9a252a01210384af4f71a846f8ea40bed4f861660ef126bc4442d834cf1a2f7a021e4c9cb21300000000",
  "complete": true
}

署名成功! 署名した中身をみてみると

$ bitcoin-cli decoderawtransaction 02000000000101cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000017160014271304445811dca1b9a7a4f9d30a83b370681695ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8702473044022041a0bba1f9c46adb476d999a1f1812d0a16c376077df98af559a99b33074ab6d022019649feb6958d9917421910b4129a26892a932bdaf9779b9b51c633acd9a252a01210384af4f71a846f8ea40bed4f861660ef126bc4442d834cf1a2f7a021e4c9cb21300000000
{
  "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
  "hash": "9b65f3209cce70801dc819335db7d4031fa7d7436a9819aaf99337fdf93652c0",
  "version": 2,
  "size": 247,
  "vsize": 166,
  "weight": 661,
  "locktime": 0,
  "vin": [
    {
      "txid": "c96716b9e6737df8cc6e6c98483bfffb05722923d87489f560cc0f774e9b13cc",
      "vout": 1,
      "scriptSig": {
        "asm": "0014271304445811dca1b9a7a4f9d30a83b370681695",
        "hex": "160014271304445811dca1b9a7a4f9d30a83b370681695"
      },
      "txinwitness": [
        "3044022041a0bba1f9c46adb476d999a1f1812d0a16c376077df98af559a99b33074ab6d022019649feb6958d9917421910b4129a26892a932bdaf9779b9b51c633acd9a252a01",
        "0384af4f71a846f8ea40bed4f861660ef126bc4442d834cf1a2f7a021e4c9cb213"
      ],
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.05000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_HASH160 e01a2276131210a6fe444ead747cbead075c4e4e OP_EQUAL",
        "hex": "a914e01a2276131210a6fe444ead747cbead075c4e4e87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC"
        ]
      }
    },
    {
      "value": 0.03000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_HASH160 04885a6a6d1dab5e30bd54d04fdb9f5927e3825f OP_EQUAL",
        "hex": "a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy"
        ]
      }
    }
  ]
}

scriptSigに署名が入ったみたいですね。

3.ビットコインの送信

いよいよビットコインを送信します!

$ bitcoin-cli sendrawtransaction 02000000000101cc139b4e770fcc60f58974d823297205fbff3b48986c6eccf87d73e6b91667c90100000017160014271304445811dca1b9a7a4f9d30a83b370681695ffffffff02404b4c000000000017a914e01a2276131210a6fe444ead747cbead075c4e4e87c0c62d000000000017a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f8702473044022041a0bba1f9c46adb476d999a1f1812d0a16c376077df98af559a99b33074ab6d022019649feb6958d9917421910b4129a26892a932bdaf9779b9b51c633acd9a252a01210384af4f71a846f8ea40bed4f861660ef126bc4442d834cf1a2f7a021e4c9cb21300000000
c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2
$ bitcoin-cli listtransactions
[
  {
    "address": "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy",
    "category": "receive",
    "amount": 0.08165374,
    "label": "",
    "vout": 1,
    "confirmations": 388,
    "blockhash": "000000000029ca80d9a86e6e6b3e63dea511329acf265af72c640020364109f6",
    "blockindex": 8,
    "blocktime": 1548888357,
    "txid": "c96716b9e6737df8cc6e6c98483bfffb05722923d87489f560cc0f774e9b13cc",
    "walletconflicts": [
    ],
    "time": 1548888088,
    "timereceived": 1548888088,
    "bip125-replaceable": "no"
  },
  {
    "address": "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy",
    "category": "receive",
    "amount": 0.03000000,
    "label": "",
    "vout": 1,
    "confirmations": 0,
    "trusted": true,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028938,
    "timereceived": 1549028938,
    "bip125-replaceable": "no"
  },
  {
    "address": "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy",
    "category": "send",
    "amount": -0.03000000,
    "label": "",
    "vout": 1,
    "fee": -0.00165374,
    "confirmations": 0,
    "trusted": true,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028938,
    "timereceived": 1549028938,
    "bip125-replaceable": "no",
    "abandoned": false
  },
  {
    "address": "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC",
    "category": "send",
    "amount": -0.05000000,
    "vout": 0,
    "fee": -0.00165374,
    "confirmations": 0,
    "trusted": true,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028938,
    "timereceived": 1549028938,
    "bip125-replaceable": "no",
    "abandoned": false
  }
]

categoryがsendでamountがマイナスのトランザクションが見えます。

受け取り側マシンは、

$ bitcoin-cli listtransactions
[
  {
    "address": "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC",
    "category": "receive",
    "amount": 0.05000000,
    "label": "test",
    "vout": 0,
    "confirmations": 0,
    "trusted": false,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028940,
    "timereceived": 1549028940,
    "bip125-replaceable": "no"
  }
]

まだ、承認されてないみたいだけど、トランザクションは通ってる! ちょっと待つと

$ bitcoin-cli listtransactions
[
  {
    "address": "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC",
    "category": "receive",
    "amount": 0.05000000,
    "label": "test",
    "vout": 0,
    "confirmations": 1,
    "blockhash": "0000000000000058d91bd6f3c80056b6ec89e441aa5d42272cb0fb394502ccd9",
    "blockindex": 1,
    "blocktime": 1549029299,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028940,
    "timereceived": 1549028940,
    "bip125-replaceable": "no"
  }
]

承認されたみたい!一応残高を確認すると

$ bitcoin-cli getbalance
0.05000000

おお、ちゃんと受け取れてる!

もう一度送信側でトランザクションを確認すると

 {
    "address": "2NDgAf7qsfggo7aNU2BRXG6G7EQWLXh85FC",
    "category": "send",
    "amount": -0.05000000,
    "vout": 0,
    "fee": -0.00165374,
    "confirmations": 2,
    "blockhash": "0000000000000058d91bd6f3c80056b6ec89e441aa5d42272cb0fb394502ccd9",
    "blockindex": 1,
    "blocktime": 1549029299,
    "txid": "c6fa059b7439a869125b14d8a92eb55bb6364ca9c3ca2ff5bfde8925d93abff2",
    "walletconflicts": [
    ],
    "time": 1549028938,
    "timereceived": 1549028938,
    "bip125-replaceable": "no",
    "abandoned": false
  }

差額がfee手数料として取られた形だけど、手数料の額って任意なのかな???

ビットコインのブロックをみてみる

自分の取引したトランザクションを見てみたので、それが格納されているブロックをみてみる。

getblockメソッドにブロックの値をいれて

$ bitcoin-cli getblock 00000000000000082ab84277aadf237ce04f6d70b38caca05cec9da2ee3842e3
{
  "hash": "00000000000000082ab84277aadf237ce04f6d70b38caca05cec9da2ee3842e3",
  "confirmations": 12,
  "strippedsize": 15658,
  "size": 25192,
  "weight": 72166,
  "height": 1454879,
  "version": 1073676288,
  "versionHex": "3fff0000",
  "merkleroot": "bd2f3a9a2408056a71fc78a937f26bef75e316709510aa10afdc3c25f7f5a9e0",
  "tx": [
    "28c30ea86c4a1c1a941951041514afe465127baef19266f1f83f340868565eb7",
    "57322f7ba3ea23729f660046135c0810a415350f8b4ee25664ffb20400bbd3f0",
    "56c2bee45fc06fb1f69ebdfc185c5eb7ac1aa8f80b99c7629b57ab6867528274",
略
    "37b2e5a9d8e864d926cb018dce77e298d7e173e1aab804c4feb3e93c273906c2",
    "ce448b7dea4177fb4384c0a656d1a268425c2b8b0bda150712e7124dfa1549d1"
  ],
  "time": 1549016325,
  "mediantime": 1549014265,
  "nonce": 714864089,
  "bits": "1a013503",
  "difficulty": 13898831.336797,
  "chainwork": "0000000000000000000000000000000000000000000000ed2b208cd6e5fdf9de",
  "nTx": 72,
  "previousblockhash": "00000000000000134e639d157371a6b6a8ef25413e959d72ae923c2e4e5b86eb",
  "nextblockhash": "00000000000000449c1962aa6e7170908cea19ee7bb549d16f656b26c2a1ecf6"
}

"height": 1454879, っていうのは、ブロックチェーンの1454879番目ということだそう。 そしたら、"weight"ってなんだろう? ひとつ前のブロックハッシュや次のブロックハッシュも書かれていますね。

あと、初心者質問になりますが、difficultyの値が理解できてないです。 マイニングがnonceを入れてみてある値以下のハッシュを探す競争というのは知ってるのですが、 このdifficultyの値と具体的にどうかかわっているのか、まだ、分かってないっす。 1週間に1回マイニング競争が10分に1回行われるというのを見かけはしましたが。

少しづつ勉強しなきゃ

トランザクションを見てみる

昨日、ようやくビットコインをゲットできたので(テスト用だけど) その取引の内容をみてみる。

1.トランザクションのリストを見る

自分が取引したトランザクション全部?をリストでみるには、 listtransactionsメソッドを使って

$ bitcoin-cli listtransactions
[
  {
    "address": "2N3byN8F5qWyqD4g9youtAMpRtDHYQm9Bkw",
    "category": "receive",
    "amount": 0.08393641,
    "label": "test",
    "vout": 1,
    "confirmations": 2,
    "blockhash": "00000000000000ba456d8cf7121654d999a16ea54342d57ff9058a04fc3f4fe8",
    "blockindex": 20,
    "blocktime": 1548936730,
    "txid": "0dcc80c04f562bd9a1a227c818ca06f956a59dd52965d1cf27017b4046b1dcbb",
    "walletconflicts": [
    ],
    "time": 1548936664,
    "timereceived": 1548936664,
    "bip125-replaceable": "no"
  }
]

アドレスや取引量とかいろいろ書かれていますね。 blockhashは、このトランザクションが収められているブロックのハッシュ値なんですね。 blockindexは、ブロックの何番目に格納されたかを示すみたい。

他にもconfirmationsって承認ってよばれるものなんだろうけど、この数、承認数って具体的にどういうものなんだろう、まだまだ初心者、また、調べていこう。

上のトランザクションID txidを使って、ひとつのトランザクションを見ることができました。

$ bitcoin-cli gettransaction bc9a5c0f8f398af3d83d2f5ad92ba8511686a597aa03daf360df894760b22aa5
{
  "amount": 0.14907443,
  "confirmations": 11,
  "blockhash": "00000000000000082ab84277aadf237ce04f6d70b38caca05cec9da2ee3842e3",
  "blockindex": 18,
  "blocktime": 1549016325,
  "txid": "bc9a5c0f8f398af3d83d2f5ad92ba8511686a597aa03daf360df894760b22aa5",
  "walletconflicts": [
  ],
  "time": 1549015743,
  "timereceived": 1549015743,
  "bip125-replaceable": "no",
  "details": [
    {
      "address": "2N4eH8mSZbytkTJTq6MjYHq2tzk7zexYVSC",
      "category": "receive",
      "amount": 0.14907443,
      "label": "test",
      "vout": 1
    }
  ],
  "hex": "02000000000101bbdf83e305314faf2f6621040888e0dd7775c6e1acf4901fcbd4bfe26c2459200000000017160014cb1d898cf47c061c66cdf9e377f7c126b507002bfeffffff02c85b97d40400000017a914482f642ca5622e4fcff81215be1b0bb8031f549c873378e3000000000017a9147d0593bd5f6280d157e65e1718322ea2e1f5e66f8702483045022100892f2fdb98eddcbed53962d588af2feff9b3c49a20fd0e52cbe0ab4c83bb006a02204ac52229f3ff243725f0daebf50179b4a14cb141771ebc898eafb432d9e7bb84012103b13c298752e055941f61bc77eae72c7851d68dab3b2770b573593ad4036ecc221e331600"
}

2.未送信リストの表示、UTXO

アドレス毎に?未送信のビットコイン情報つまり残高の表示をlistunspentメソッドを使って表示してみました。

$ bitcoin-cli listunspent
[
  {
    "txid": "bc9a5c0f8f398af3d83d2f5ad92ba8511686a597aa03daf360df894760b22aa5",
    "vout": 1,
    "address": "2N4eH8mSZbytkTJTq6MjYHq2tzk7zexYVSC",
    "label": "test",
    "redeemScript": "00140c25296cf79bba3db218d1bdc518adca7fb02a09",
    "scriptPubKey": "a9147d0593bd5f6280d157e65e1718322ea2e1f5e66f87",
    "amount": 0.14907443,
    "confirmations": 13,
    "spendable": true,
    "solvable": true,
    "desc": "sh(wpkh([67b1ebd1/0'/0'/3']0258de5a7ee1aacf3a62a74a9c021c4dab541fd17694b1e365254a73c7b2ad66bc))",
    "safe": true
  },

これがちょくちょく出てくるUTXO(Unspent Transaction Output)なんですね。

3.アウトプットの詳細

$ bitcoin-cli gettxout c96716b9e6737df8cc6e6c98483bfffb05722923d87489f560cc0f774e9b13cc 1
{
  "bestblock": "0000000000000090a85fbca3bbfc7aacbb72bd9710daab5a8945849d970c89b9",
  "confirmations": 359,
  "value": 0.08165374,
  "scriptPubKey": {
    "asm": "OP_HASH160 04885a6a6d1dab5e30bd54d04fdb9f5927e3825f OP_EQUAL",
    "hex": "a91404885a6a6d1dab5e30bd54d04fdb9f5927e3825f87",
    "reqSigs": 1,
    "type": "scripthash",
    "addresses": [
      "2MsfC335uWwM7yyFcv61B3w5PjwVx1VtgCy"
    ]
  },
  "coinbase": false
}

bestblockってどういうものなんだろう?

ビットコインアドレスとテスト用ビットコインをゲット

電子メールにメアドがあるように、ビットコインを受け取るためのアドレスがあります。 作り方は簡単

$ bitcoin-cli getnewaddress test
2N3byN8F5qWyqD4g9youtAMpRtDHYQm9Bkw

以上、これだけ ひとりでいくつでも作ることができます。

このアドレスってウォレットの公開鍵みたいです。 libsodium

話は、少しそれましたが、このアドレスで受け取ったビットコインを確認してみると

$ bitcoin-cli getreceivedbyaddress 2N3byN8F5qWyqD4g9youtAMpRtDHYQm9Bkw
0.00000000

当たり前ですけど 0ビットコイン。。 ちょっと寂しい。。

でも、テストネットワークtestnetなら、Bitcoin testnet3 faucetからビットコインを分けてもらうことができます! このサイトに作ったアドレスを入力すると

f:id:deconsawady:20190201191258p:plain

0.08393641ビットコインもらえたらしい。 受け取ったビットコインをもういちど確認すると、、

$ bitcoin-cli getreceivedbyaddress 2N3byN8F5qWyqD4g9youtAMpRtDHYQm9Bkw
0.08393641

おお、ちゃんともらえている!! テスト用と分かっていてもうれしい! 感動!

残高を見てみると、別アドレスで受け取った分と合わせて

$ bitcoin-cli getbalance
0.16559015

増えてる増えてる!

ビットコインウォレット(お財布)の作成

bitcoindは、フルノード(って言うんだっけ)なので、世界の全部のブロックをためるからか、めちゃくちゃディスク食いますね。。 最初40Gにしてましたが、ディスクを200Gまで拡張させました。

さてさて、今日はビットコインのお財布となるウォレットの作成です。

お財布といっても、ビットコインが格納されるんじゃなくて、秘密鍵と公開鍵が格納されているんですね。

1.ウォレットの作成と暗号化

ビットコインのまさにお財布となるウォレットを作成して、パスワードで暗号化します。

$ bitcoin-cli encryptwallet xxxxxxxx
wallet encrypted; The keypool has been flushed and a new HD seed was generated (if you are using HD). You need to make a new backup.

xxxxxxxxの部分は、暗号化するためのパスワードを指定します。

getwalletinfoオプションを使ってウォレットの情報を見てみます。

$ bitcoin-cli getwalletinfo
{
  "walletname": "",

  "unlocked_until": 0,

unlocked_until": 0 の部分が暗号化されていることを意味します。

2.ウォレットのバックアップ

念のため、ウォレットのバックアップをとっておきます。

$ bitcoin-cli backupwallet wallet.backup

3.持っているアドレスの確認

アドレス関連でもう一つを紹介 自分がもってるアドレスのリストを表示するには、 0.17.0から?は、getaddressesbylabelメソッドを使って

$ bitcoin-cli getaddressesbylabel test
{
  "2MuJNEA9j3TuunGDfX7mJvPngTPb4iiQef1": {
    "purpose": "receive"
  },
  "2N3byN8F5qWyqD4g9youtAMpRtDHYQm9Bkw": {
    "purpose": "receive"
  },
  "2N4eH8mSZbytkTJTq6MjYHq2tzk7zexYVSC": {
    "purpose": "receive"
  }
}

purpse(目的)がreceiveってなってるけど、他に何があって、どう効いてくるんだろう?

今日は、ここまで

bitcoindの起動とクライアントからの接続確認

1. bitcoin.confの作成

ホームディレクトリの下の.bitcoinbitcoin.confファイルを作成します。

rpcuser=sawady  # 認証時に使用する任意のユーザ名
rpcpassword=xxxx   #認証時に使用するパスワード
testnet=3                 # (本番ネットワークじゃなくて)テストネットワークを使う
txindex=1                # (自分のトランザクションだけじゃなくて)全部のトランザクションを見れるらしい

2.bitcoindの起動

デーモンでbitcoindを起動してみます。

$ bitcoind -daemon
Bitcoin server starting

おっ、無事起動できた。

3.クライアントからの接続確認

サーバへの指示、通信は、bitcoin-cliを使います。 ネットワーク情報を取得するgetnetworkinfoを指定するとJSON形式でいろいろと情報が表示されます。

$ bitcoin-cli getnetworkinfo
{
  "version": 179900,
  "subversion": "/Satoshi:0.17.99/",
  "protocolversion": 70015,

とりあえず接続確認は完了!

bitcoindは、起動に時間がかかるので接続に失敗したら、時間をおいて再接続してみてください。

まずは、Bitcoin Coreをインストール

前回の初書き込みは、哲学がどうのこうのとか書いてましたが、今日から一気に技術よりに。

ブロックチェーンビットコインの技術は、マスタリングビットコインから手に取るのが王道みたいで、早速amazonから買ってしまいました。 けど、今日になって気づいたんですが、原文とその日本語訳がGitHubなどなどに無料で公開されているんですね。。 こちらのページからPDFでダウンロードできます。

内容に関しては、オープンなライセンスとのことなので、しばらくは、このオープン版の内容の流れですすめていきます。 無料版、有料版とも、今の最新のコマンド、内容等をここのブログで補っていければ。

さてさて、概要は飛ばして、、まずはBitcoin Coreのインストールから。

環境

VirtualBox6.0 上の Ubuntu18.10(インストール直後)

0.ライブラリ、ツールのインストール

$ sudo apt-get install build-essential libtool autotools-dev autoconf pkg-config libssl-dev
$ sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
$ sudo apt-get install libqrencode-dev autoconf openssl libssl-dev libevent-dev
$ sudo apt-get install libmini
$ sudo apt-get install libminiupnpc-dev
$ sudo apt-get install git

1.bitcoinソースの取得

$ mkdir git
$ cd git
$ git clone https://github.com/bitcoin/bitcoin.git

2.Berkley DB 4.8.0の取得、コンパイル

$ cd ~
$ mkdir bitcoin
$ mkdir bitcoin/db4/
$ cd bitcoin/db4/
$ wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz
$ tar xvzf db-4.8.30.NC.tar.gz
$ cd db-4.8.30.NC/build_unix/
$ ../dist/configure -enable-cxx -disable-shared -with-pic -prefix=/home/theusername/bitcoin/db4/
$ sudo make install
libtool: compile:  g++ -c -I. -I../dist/.. -D_GNU_SOURCE -D_REENTRANT -O ../dist/../cxx/cxx_db.cpp  -fPIC -DPIC -o cxx_db.o
In file included from ../dist/../dbinc/mutex_int.h:12,
                 from ../dist/../dbinc/mutex.h:15,
                 from ./db_int.h:884,
                 from ../dist/../cxx/cxx_db.cpp:11:
../dist/../dbinc/atomic.h:179:19: error: definition of ‘int __atomic_compare_exchange(db_atomic_t*, atomic_value_t, atomic_value_t)’ ambiguates built-in declaration ‘bool __atomic_compare_exchange(long unsigned int, volatile void*, void*, void*, int, int)’
 static inline int __atomic_compare_exchange(
make: *** [Makefile:2018: cxx_db.o] エラー 1

コンパイルエラーになる。。

3.Berkley DB 4.8.0の取得、コンパイル、インストール(再チャレンジ)

$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt-get install libdb4.8-dev libdb4.8++-dev
$ sudo apt-get  install libdvel
$ cd ~/git
$ git clone https://github.com/tinybike/get-bdb-4.8.git
$ cd get-bdb-4.8/
$ ./install.sh ../bitcoin/

今度は、インストール成功

4.Bitcoin Coinのコンパイル、インストール

$ cd ../bitcoin/
$ ./autogen.sh
$ mkdir ~/bc
$ ./configure --prefix=$HOME/bc
$ make install

Bitcoin Coinもインストールできたぜ!

上に手順は書いてませんが、仮想マシン2台Ubuntuを用意し、BitCoin Coreのバージョンは、 v0.16.0 と v0.17.99 を入れています。