11
Help us understand the problem. What are the problem?

posted at

updated at

ブロックチェーンを触って学ぶBitcoin Core入門ハンズオン

この資料について

OSC2021 Online/Fallの資料になります。

自己紹介

小渕 周(こぶち しゅう)

システムエンジニア、暗号資産事業者向けウォレットベンダーを経て、現在、暗号資産交換業者のブロックチェーンエンジニア。

Twitter:
https://twitter.com/shu_kob

Facebook:
https://www.facebook.com/shu.kobuchi

コミュニティの紹介

ビットコインをはじめとする暗号通貨(暗号資産・仮想通貨)、ブロックチェーンの技術勉強会

月1〜2回、平日の19:30〜オンライン勉強会を開催中!

お気軽にご参加ください

次回は10/29(金)19:30〜、Symbol(XYM)について扱います!(connpass公開準備中)

スクリーンショット 2021-10-23 10.36.50.png

11/13(土)KOF(Kansai Open Forum)<オンライン>でもセミナー発表予定!

ビットコインとは

過去のOSCで発表した資料をご覧ください

初心者のためのビットコイン送金体験

動画

資料

ビットコイン・ブロックチェーン入門

動画

資料

Signetとは

ビットコインとか勉強会第34回

動画

※アーカイブ動画はありません

 資料

ビットコインとか勉強会第52回

動画

資料

ハンズオン

Docker

Dockerをインストールしてください

ソースコードをgit clone

git clone https://github.com/crypto-users-jp/signet-platform
cd signet-platform/fullnode

Dockerコンテナをビルド

./build.sh

起動

ビルドしたら起動します

./run.sh

bitcoin-cliの操作準備

別のターミナルを開き、Dockerの中を操作するためコンテナのIDを取得

docker ps

CONTAINER IDを取得し、変数に設定

ID=XXX

XXXはCONTAINER ID

起動中のコンテナが一つだけの場合は以下で取得

ID=$(docker ps -q)

Dockerコンテナ内でコマンドを打ちやすくするためにエイリアスを設定

alias bcli="docker exec $ID bitcoin-cli"

bitcoindの状態を確認

bcli getblockchaininfo
{
  "chain": "signet",
  "blocks": 61016,
  "headers": 61016,
  "bestblockhash": "00000026773e38138fa574ee17d5d6a4c17506d8058b480eae2ce5f4a8ea7967",
  "difficulty": 0.002848325401108194,
  "mediantime": 1634949922,
  "verificationprogress": 0.9999994641678087,
  "initialblockdownload": false,
  "chainwork": "000000000000000000000000000000000000000000000000000000ac2a0fe5bb",
  "size_on_disk": 193311268,
  "pruned": false,
  "softforks": {
    "bip34": {
      "type": "buried",
      "active": true,
      "height": 1
    },
    "bip66": {
      "type": "buried",
      "active": true,
      "height": 1
    },
    "bip65": {
      "type": "buried",
      "active": true,
      "height": 1
    },
    "csv": {
      "type": "buried",
      "active": true,
      "height": 1
    },
    "segwit": {
      "type": "buried",
      "active": true,
      "height": 1
    },
    "taproot": {
      "type": "bip9",
      "bip9": {
        "status": "active",
        "start_time": -1,
        "timeout": 9223372036854775807,
        "since": 0,
        "min_activation_height": 0
      },
      "height": 0,
      "active": true
    }
  },
  "warnings": ""
}

参考 Dockerの中に入る場合は、別のターミナルを開き下記のコマンド

ID=$(docker ps -q)
docker exec -i -t $ID bash

Docker内で下記コマンドを打つ

bitcoin-cli getblockchaininfo

同期の確認

bcli getblockchaininfo

で、"blocks"と"headers"のブロック高が一致すれば最新のブロックに追いつけています

Blockchain Explorerはブロックチェーンの状態を確認できるWebサイトです。

Faucetでコインをもらう

ウォレットを作成

bcli createwallet "default"

アドレスを発行

bcli getnewaddress

tb1qe5mcekhlg3jgyultyprkz55t2x3870sg70np8f

得たアドレスと金額を0.001-0.1sBTCの範囲で入力し、キャプチャを入力したらSendを押して入手

スクリーンショット 2021-10-23 11.38.54.png

入手できたら、薄緑背景のところにトランザクション(TX)リンクが出てくるので押下

ExplorerでTXの情報を見ることができます

※入手してからTXのページが出るまでしばらく時間がかかる場合があります

bitcoin.confの設定

configの設定は、bitcoin coreが停止しているときに行ってください

bcli stop
cd ~/docker-signet/
vi bitcoin.conf
wallet=default

を一番下の行に追記

再び起動

cd signet-platform/fullnode
./run.sh

コンテナを再起動するとコンテナIDが変わるのでIDの再設定が必要です

ID=$(docker ps -q)

あるいは(XXXはCONTAINER ID)

docker ps
ID=XXX
alias bcli="docker exec $ID bitcoin-cli"
bcli getblockchaininfo

トランザクション情報の取得

bcli getrawtransaction 598edd5425c6be72fa5d77baf6af8cbb22d5144bec263ce30ecb61156d57ab1f
02000000000101a974c186ca6f11fe92c6f72ee0511a8c8f877aa4979f166b56ea839540de2c490000000000feffffff028096980000000000160014cd378cdaff44648273eb204761528b51a27f3e081f7e23fa5a060000160014cca38883afe536ddfca2540dcdd23f743e413fcd0247304402200f6f388e2016d7422c72a1be5181be505748173dba4b095b09d057f97719883c0220463ff178983bcb48334dca4dd918aefb3ef25ea96e741d1a135b697fcbc130a5012103357ca314f0abf320fde1d1a9a291c557611a3cfec9a81ac9dd87710943389f2a5bee0000
bcli decoderawtransaction 02000000000101a974c186ca6f11fe92c6f72ee0511a8c8f877aa4979f166b56ea839540de2c490000000000feffffff028096980000000000160014cd378cdaff44648273eb204761528b51a27f3e081f7e23fa5a060000160014cca38883afe536ddfca2540dcdd23f743e413fcd0247304402200f6f388e2016d7422c72a1be5181be505748173dba4b095b09d057f97719883c0220463ff178983bcb48334dca4dd918aefb3ef25ea96e741d1a135b697fcbc130a5012103357ca314f0abf320fde1d1a9a291c557611a3cfec9a81ac9dd87710943389f2a5bee0000
{
  "txid": "598edd5425c6be72fa5d77baf6af8cbb22d5144bec263ce30ecb61156d57ab1f",
  "hash": "2a4441e290a2489496567a8d7848a8ddfa3b1d2666723eb22b51b5a7fe98046b",
  "version": 2,
  "size": 222,
  "vsize": 141,
  "weight": 561,
  "locktime": 61019,
  "vin": [
    {
      "txid": "492cde409583ea566b169f97a47a878f8c1a51e02ef7c692fe116fca86c174a9",
      "vout": 0,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "txinwitness": [
        "304402200f6f388e2016d7422c72a1be5181be505748173dba4b095b09d057f97719883c0220463ff178983bcb48334dca4dd918aefb3ef25ea96e741d1a135b697fcbc130a501",
        "03357ca314f0abf320fde1d1a9a291c557611a3cfec9a81ac9dd87710943389f2a"
      ],
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 0.10000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "0 cd378cdaff44648273eb204761528b51a27f3e08",
        "hex": "0014cd378cdaff44648273eb204761528b51a27f3e08",
        "reqSigs": 1,
        "type": "witness_v0_keyhash",
        "addresses": [
          "tb1qe5mcekhlg3jgyultyprkz55t2x3870sg70np8f"
        ]
      }
    },
    {
      "value": 69878.13453343,
      "n": 1,
      "scriptPubKey": {
        "asm": "0 cca38883afe536ddfca2540dcdd23f743e413fcd",
        "hex": "0014cca38883afe536ddfca2540dcdd23f743e413fcd",
        "reqSigs": 1,
        "type": "witness_v0_keyhash",
        "addresses": [
          "tb1qej3c3qa0u5mdml9z2sxum53lwslyz07dc8evtr"
        ]
      }
    }
  ]
}

Bitcoin Coreで送金

bcli getnewaddress
tb1ql7a0647gu0af0dwgmdawrgqk5znkemcnafphtg
bcli getbalance
0.10000000

発行したアドレスに残高範囲内で送金

bcli sendtoaddress tb1ql7a0647gu0af0dwgmdawrgqk5znkemcnafphtg 0.01
e342f6c6c6530f2e08488b77392efe80fbd31d97ae2792da6993b9c7f1a93204
bcli getrawtrnsaction e342f6c6c6530f2e08488b77392efe80fbd31d97ae2792da6993b9c7f1a93204
020000000001011fab576d1561cb0ee33c26ec4b14d522bb8caff6ba775dfa72bec62554dd8e590000000000feffffff028953890000000000160014f0a4f3bb5e488459461e49eb5645574b7286dc0f40420f0000000000160014ffbafd57c8e3fa97b5c8db7ae1a016a0a76cef1302473044022043519f07c7956e14aee503b7e1a5ab0d93a0fe35d8fa2446adc54498aff633ed022056a9d5abf7c35c17261b97f324a5bf8bfbf6b2c8769360e01809eaef0b37b66e0121035bfc648d1794eb548e45016449d801ce5c0121c58ef654b3f10725a11d839ffd5eee0000
bcli decoderawtransaction 020000000001011fab576d1561cb0ee33c26ec4b14d522bb8caff6ba775dfa72bec62554dd8e590000000000feffffff028953890000000000160014f0a4f3bb5e488459461e49eb5645574b7286dc0f40420f0000000000160014ffbafd57c8e3fa97b5c8db7ae1a016a0a76cef1302473044022043519f07c7956e14aee503b7e1a5ab0d93a0fe35d8fa2446adc54498aff633ed022056a9d5abf7c35c17261b97f324a5bf8bfbf6b2c8769360e01809eaef0b37b66e0121035bfc648d1794eb548e45016449d801ce5c0121c58ef654b3f10725a11d839ffd5eee0000
{
  "txid": "e342f6c6c6530f2e08488b77392efe80fbd31d97ae2792da6993b9c7f1a93204",
  "hash": "e7a9cc630fbb0edf208bfaa54c4f3989d4b452dd3af0adbd6128b77b2f9f052c",
  "version": 2,
  "size": 222,
  "vsize": 141,
  "weight": 561,
  "locktime": 61022,
  "vin": [
    {
      "txid": "598edd5425c6be72fa5d77baf6af8cbb22d5144bec263ce30ecb61156d57ab1f",
      "vout": 0,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "txinwitness": [
        "3044022043519f07c7956e14aee503b7e1a5ab0d93a0fe35d8fa2446adc54498aff633ed022056a9d5abf7c35c17261b97f324a5bf8bfbf6b2c8769360e01809eaef0b37b66e01",
        "035bfc648d1794eb548e45016449d801ce5c0121c58ef654b3f10725a11d839ffd"
      ],
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 0.08999817,
      "n": 0,
      "scriptPubKey": {
        "asm": "0 f0a4f3bb5e488459461e49eb5645574b7286dc0f",
        "hex": "0014f0a4f3bb5e488459461e49eb5645574b7286dc0f",
        "reqSigs": 1,
        "type": "witness_v0_keyhash",
        "addresses": [
          "tb1q7zj08w67fzz9j3s7f844v32hfdegdhq03wj6ey"
        ]
      }
    },
    {
      "value": 0.01000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "0 ffbafd57c8e3fa97b5c8db7ae1a016a0a76cef13",
        "hex": "0014ffbafd57c8e3fa97b5c8db7ae1a016a0a76cef13",
        "reqSigs": 1,
        "type": "witness_v0_keyhash",
        "addresses": [
          "tb1ql7a0647gu0af0dwgmdawrgqk5znkemcnafphtg"
        ]
      }
    }
  ]
}

help

コマンドの一覧を見ます

bcli help
== Blockchain ==
getbestblockhash
getblock "blockhash" ( verbosity )
getblockchaininfo
getblockcount

helpコマンドの引数にコマンド名を取ることで詳細な説明が見られます

bcli help getblock
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
11
Help us understand the problem. What are the problem?