ノードとネットワーク

ビットコインのプロトコルに対応するノードはフルノードと呼ばれる全取引データを保持するノードとSPV(Simplified Payment Vertification)と呼ばれるブロックヘッダと自分に関連するデータのみを保持する軽量ノードがある
Bitcoin Coreはフルノード
ブロックのヘッダのみをダウンロードし、必要に応じてフルノードにトランザクションを要求するクライアントでSPVノードと呼ぶ

■ネットワークの発見
最初はDNSシードに問い合わせにいく
– seed.bitcoin.sipa.be
– denseed.bitcoin.dashjr.org
– eed.bitcoinstats.com
– seed.bitcoin.jonasschnelli.ch

DNSシードに問い合わせると、新しい接続を受け入れられるフルノードのIPアドレスが1つ以上返ってくる

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ dig seed.bitcoin.sipa.be

; <<>> DiG 9.9.5-3ubuntu0.19-Ubuntu <<>> seed.bitcoin.sipa.be
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34073 ;; flags: qr rd ra; QUERY: 1, ANSWER: 25, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;seed.bitcoin.sipa.be. IN A ;; ANSWER SECTION: seed.bitcoin.sipa.be. 3599 IN A 104.248.20.174 seed.bitcoin.sipa.be. 3599 IN A 79.124.17.204 seed.bitcoin.sipa.be. 3599 IN A 5.135.186.15 seed.bitcoin.sipa.be. 3599 IN A 104.171.172.17 seed.bitcoin.sipa.be. 3599 IN A 94.130.207.23 seed.bitcoin.sipa.be. 3599 IN A 138.201.56.109 seed.bitcoin.sipa.be. 3599 IN A 73.255.112.134 seed.bitcoin.sipa.be. 3599 IN A 93.115.89.76 seed.bitcoin.sipa.be. 3599 IN A 108.11.187.129 seed.bitcoin.sipa.be. 3599 IN A 116.203.136.157 seed.bitcoin.sipa.be. 3599 IN A 15.164.169.200 seed.bitcoin.sipa.be. 3599 IN A 47.74.245.182 seed.bitcoin.sipa.be. 3599 IN A 74.98.242.97 seed.bitcoin.sipa.be. 3599 IN A 212.170.100.71 seed.bitcoin.sipa.be. 3599 IN A 59.110.18.37 seed.bitcoin.sipa.be. 3599 IN A 193.30.123.209 seed.bitcoin.sipa.be. 3599 IN A 217.125.246.37 seed.bitcoin.sipa.be. 3599 IN A 185.2.101.192 seed.bitcoin.sipa.be. 3599 IN A 94.26.190.7 seed.bitcoin.sipa.be. 3599 IN A 123.134.246.100 seed.bitcoin.sipa.be. 3599 IN A 78.47.168.239 seed.bitcoin.sipa.be. 3599 IN A 23.175.0.212 seed.bitcoin.sipa.be. 3599 IN A 5.2.194.97 seed.bitcoin.sipa.be. 3599 IN A 91.178.131.108 seed.bitcoin.sipa.be. 3599 IN A 173.212.207.249 ;; Query time: 271 msec ;; SERVER: 10.0.2.3#53(10.0.2.3) ;; WHEN: Thu Oct 31 15:16:59 UTC 2019 ;; MSG SIZE rcvd: 449 他のノードとの接続はディスク上のDBに保存する プロトコルバージョンのサポート vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ bitcoin-cli getnetworkinfo { "version": 170100, "subversion": "/Satoshi:0.17.1/", "protocolversion": 70015, "localservices": "000000000000040d", "localrelay": true, "timeoffset": 0, "networkactive": true, "connections": 3, "networks": [ { "name": "ipv4", "limited": false, "reachable": true, "proxy": "", "proxy_randomize_credentials": false }, { "name": "ipv6", "limited": false, "reachable": true, "proxy": "", "proxy_randomize_credentials": false }, { "name": "onion", "limited": true, "reachable": false, "proxy": "", "proxy_randomize_credentials": false } ], "relayfee": 0.00001000, "incrementalfee": 0.00001000, "localaddresses": [ ], "warnings": "" } コマンドがversionとverackのメッセージを使ってハンドシェイクを行う 相手のノードのバージョンとuser agentが表示され、ハンドシェイクが完了 ブロックチェーンの同期が終わったあとは、ブロードキャストされたブロックを受診してブロックチェーンを更新