卒論から始まるBlockchain

卒論から始まるBlockchain

俺の屍を越えて行け

Bitcoinのテストネットで遊んでみよう

前置き

前回こちらの記事を書いたわけですが(新品Macにbitcoindを入れて、testnetに繋いでみよう - 卒論から始まるBlockchain)、今回はその続きです。ターミナルで簡単なコマンドを叩いたり、アドレスを作って送金してみます!

 

環境

PC:macOS Mojave 10.14.1

Bitcoin Core:v0.17.99.0-51e5ef397

 

接続確認

まずはBitcoin Coreを立ち上げます。前回はFinderから直接立ち上げましたが、今回はかっこよくターミナルから立ち上げてみます。

ターミナルに

$ bitcoin-qt

を打ち込みます。すると前回と同じ画面が自動で立ち上がります。

f:id:mochi-mochi-0397:20181103005340p:plain

GUIはいりません。という方は以下のコマンドで。

$ bitcoin-qt -daemon

立ち上がるとtestnetのブロックを猛烈なスピードでダウンロードし始めます。だいたい30分以上かかった気がします。

2019/04/24時点で約24GBほどです。$ bitcoin-cli getblockchaininfo で出てくるsize_on_diskの値で、キロバイト表記です。)

f:id:mochi-mochi-0397:20190424103551p:plain

ちゃんと立ち上がっているか確認してみます。

$ bitcoin-cli getconnectioncount

1

これは接続されているノードの数です。最初は1から始まり、安定すると8まで行きます。(多分何か手を加えない限り8以上には増えない)

また、以下のコマンドで接続相手の情報を得ることができます。

$ bitcoin-cli getpeerinfo

[

  {

    "id": 0,

    "addr": "58.64.158.246:18333",

    "addrlocal": "180.1.181.232:56614",

    "addrbind": "192.168.11.14:56614",

    "services": "000000000000040d",

    "relaytxes": true,

    "lastsend": 1541487157,

    "lastrecv": 1541487092,

    "bytessent": 12836,

    "bytesrecv": 438096,

    "conntime": 1541486491,

    "timeoffset": 0,

    "pingtime": 0.173859,

    "minping": 0.173092,

    "version": 70015,

    "subver": "/Satoshi:0.16.1/",

    "inbound": false,

    "addnode": false,

    "startingheight": 1414448,

    "banscore": 0,

    "synced_headers": 1414433,

    "synced_blocks": -1,

    "inflight": [

    ],

    "whitelisted": false,

    "minfeefilter": 0.00001000,

    "bytessent_per_msg": {

      "addr": 870,

      "feefilter": 32,

      "getaddr": 24,

      "getheaders": 3255,

      "headers": 1010,

      "inv": 2678,

      "ping": 192,

      "pong": 192,

      "sendcmpct": 66,

      "sendheaders": 24,

      "tx": 4342,

      "verack": 24,

      "version": 127

    },

    "bytesrecv_per_msg": {

      "addr": 30842,

      "feefilter": 32,

      "getdata": 851,

      "getheaders": 1085,

      "headers": 403542,

      "ping": 192,

      "pong": 192,

      "reject": 1120,

      "sendcmpct": 66,

      "sendheaders": 24,

      "verack": 24,

      "version": 126

    }

  } #以下長いので省略

以下のコマンドではブロックの簡単な情報を見ることができます。

※ 最近のバージョンだとgetinfoだけだど、そんなコマンド無いよとエラーが帰ってきました。各バージョンで確認してみましょう。(https://bitcoin.org/en/developer-reference#address-conversion

$ bitcoin-cli -getinfo

{

  "version": 179900,

  "protocolversion": 70015,

  "walletversion": 169900,

  "balance": 0.17838729,

  "blocks": 1442251,

  "timeoffset": 0,

  "connections": 8,

  "proxy": "",

  "difficulty": 11974980.94624031,

  "testnet": true,

  "keypoololdest": 1541155356,

  "keypoolsize": 1000,

  "paytxfee": 0.00000000,

  "relayfee": 0.00001000,

  "warnings": ""

}

 

アドレスを作ろう

テストネットコインをゲットするために、まずはアドレスを作りましょう。以下のコマンドを入力します。

$ bitcoin-cli getnewaddress

2NEfQRrL8JbsYPiGcxEcHJsdbs99PFov1nu

ちなみにアドレスには好きなタグ付けをつけることができます。またタグは後でつけることも可能ですし、変更することもできます。

$ bitcoin-cli getnewaddress mochi

2N1PpDxoLVsZ2EupmwiL7G5KETjpzM6oc19

ちなみにちなみに、Bitcoin Core0.16からsegwitアドレス。つまりP2SHのアドレスがデフォルトになったらしいです。なので、P2PKHのアドレスが欲しいです!という方はlegacyを追加するとできます。(参照:bitcoin core rpc/ getnewaddressでp2pkhアドレスを得るには - Qiita

※P2PSHとP2PKHがよくわかりません!という方はこちらを参照するといいかと:ビットコインおけるトランザクションスクリプトの仕組みとその種類

$ bitcoin-cli getnewaddress "" legacy

mq4fMveBxM5rdRZsarVnFmDs5MvgKvX4hp

 

テストネットコインをゲットしよう

いよいよテストネットコインをゲットしましょう。

色々入手方法はありますが、今回はBitcoin testnet3 faucetを利用します。もちろんテストネットコインなので無料でもらえます。

先ほど作ったアドレスを入力し、「I'm not a robot」にチェックを入れましょう。

f:id:mochi-mochi-0397:20181106201329p:plain

すると以下の画面が表示されます。今回は大体0.08345864BTCが送られました。ちなみに下の方に「使わないなら以下のアドレスに返してね」と書いてありますね。どうもテスト用とはいえ無限ではないようです。

f:id:mochi-mochi-0397:20181106201619p:plain

ちゃんと送られているか確認してみます。

f:id:mochi-mochi-0397:20181106202458p:plain

ちゃんと送られていますね。ただすぐに使えるというわけではなく、まずは検証待ち状態になります。しばらくすると利用可能に取り込まれて使えるようになります。

同期が終わるまでは受け取ることはできません。もし同期前に先ほどの画面で送信処理をした場合は同期後に反映される形になります。自分はそれを知らず「なんで送れないんだよ!!」とイライラしてました。)

ターミナルでも確認してみます。

$ bitcoin-cli listtransactions

[

{

    "address": "2N1PpDxoLVsZ2EupmwiL7G5KETjpzM6oc19",

    "category": "receive",

    "amount": 0.08345864,

    "label": "mochi",

    "vout": 1,

    "confirmations": 2,

    "blockhash": "0000000000096be5be01b856ff0d4768dc2ecafd37b7bfa80aa4ab674c1c9849",

    "blockindex": 25,

    "blocktime": 1541503652,

    "txid": "71ea648cd5754293174df7deec085e8fbf8accffd71da618e88da68e48aaec06",

    "walletconflicts": [

    ],

    "time": 1541502885,

    "timereceived": 1541502885,

    "bip125-replaceable": "no"

  }

]

 

送金してみよう

では先ほどのアドレスにいくらか返してあげましょう。

コマンドは「bitcoin-cli sendtoaddress 送信先アドレス 送信量」です。

$ bitcoin-cli sendtoaddress mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB 0.001

f6794e5c161d6ab423826a9514bfb4af02c83fdc6b7ced687d9d87e1efc723df

するとトランザクションハッシュ値が出てきます。どうなっているかBitcoin Testnet Block Explorer | BlockCypherで確認してみます。上部にある検索欄にトランザクションハッシュ値を入力します。

f:id:mochi-mochi-0397:20181106221032p:plain

するとこんな感じで送金したアカウントの所持金、手数料、何分前のものか、承認数などが出てきます。

f:id:mochi-mochi-0397:20181106221332p:plain
まとめ

アップデートの度にコマンドが変更するのか、自分のバージョンでは"Method not faund"と表示されることが多々ありました。超めんどくさいので何とかしていただきたいo(`ω´ )o

コマンド一覧はこちらから見れます→https://bitcoin.org/en/developer-reference#address-conversion

 

間違い、疑問点、不明点などあればお気軽にコメントくださいm(_ _)m

 

参考資料

アカウントとアドレス - ウォレット - Bitcoin ClockUpMemo

MacにBitcoindをインストールしてテスト送金をしてみる - Qiita

ビットコインおけるトランザクションスクリプトの仕組みとその種類

https://bitcoin.org/en/developer-reference#getinfo

bitcoin core rpc/ getnewaddressでp2pkhアドレスを得るには - Qiita

bitcoin-cliを使ったBitcoinAPI入門 - Qiita

https://bitcoin.org/en/developer-reference#address-conversion

Bitcoin(Mainnet, Testnet)への接続方法 - Qiita

ブロックチェーン・プログラミング 仮想通貨入門 (KS情報科学専門書)

ビットコインとブロックチェーン:暗号通貨を支える技術

 

 

//改めて検索すると結構同じ内容のブログがありますね。バージョンアップ早いので、ここら辺いっぱいあるの助かる。