0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

5分で理解する「BTCネットワークへの接続」

Posted at

1.ネットワーク

1.ネットワーク接続概要
1.Bitcoin Coreを起動
2.他のノードのIPを求め、DNSシードに接続する DNSシードはBitcoinノードのIPアドレスリストを提供するDNSサーバです。mainnet/testnet用に複数のシードが存在する
3.DNSシードは新しい接続を受け入れられるフルノードのIPアドレスを返信する
4.ノードはそのアドレスを使ってネットワーク上の他のノードと接続する。
5.この時、Bitcoin Coreはそのノード情報をディスクのDBに保存する
image.png

図1:ネットワーク接続概要
・以降はDB上のノード情報を用いて接続する
・11秒以内にコネクションが確立できなければ再びDNSシードに問合せる
・障害などによってDNSシードにすらアクセスできない場合を考慮しIPアドレスと ポート番号のリストもハードコードされており、DNSシードに60秒以内に応答がない場合はこのIPアドレスへの接続を試みる。

2.ハンドシェイク

ローカルノードとリモートノードがお互いのversionメッセージを取得。
その後のメッセージの送信は両者のバージョンのうち小さい方のバージョンに合わせて行われる。
image.png
図2:ハンドシェイク
ハンドシェイクが終了すると他のメッセージを送信できるようになる。
(ex:edderメッセージでネットワーク上のノード情報を取得)

3.Initaial Block Downroad(IBD)

ネットワークに接続後に最新のブロックまでブロックチェーンのデータのダウンロードを開始する。
image.png
図3:初期ブロックダウンロード

getheaderメッセージではそのペイロードにどの時点から(Header Hashes)どの時点までのブロックを要求するか(Stopping Hash)セットしますがIBDではHeader Hashesにローカルノードが保持する最新ブロック(この場合はジェネシスブロック)のハッシュをStopping Hashに0x00...00をセットして送信する。

getheaderによるブロックヘッダの取得とgetaddによるブロックデータの取得は並行して行われる。

4.ブロックのブロードキャスト

マイナーによるブロードキャストは二種類の方法に分けられる。
image.png

図4:ブロックのブロードキャスト
フルノードに対するブロックリレーとSPVノードに対するブロックリレーは方法が異なる。
新しいブロックを受信したフルノードはブロックの検証を行い問題がなければ上記の方法でブロックをリレーする。

参照

[ブロックチェーンプログラミング]
(https://www.amazon.co.jp/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%83%BB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E4%BB%AE%E6%83%B3%E9%80%9A%E8%B2%A8%E5%85%A5%E9%96%80-%EF%BC%AB%EF%BC%B3%E6%83%85%E5%A0%B1%E7%A7%91%E5%AD%A6%E5%B0%82%E9%96%80%E6%9B%B8-%E5%B1%B1%E5%B4%8E%E9%87%8D%E4%B8%80%E9%83%8E-ebook/dp/B078G94JNT/ref=dp_kinw_strp_1)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?