Bitcoin公式WikiにあるNetworkのページをざっくり訳したり、まとめてみる。
ほぼ下記のWikiの訳です。まだ翻訳途中。
必要な知識
- インターネットのネットワークの知識
- Bitcoin の仕組みやプロトコルの知識
ネットワーク
- Bitcoinは、トランザクションとブロックをネットワークにブロードキャストする
- 全てのコミュニケーションは、TCP上で行われる
- 8333 以外のポートも -port パラメータで利用できる
- IPv6は、Bitcoind/Bitcoin-Qt v0.7 でサポートされている
メッセージ
- version – プログラムのバージョンとブロックカウントの情報。初めて接続する時に交換される
- verack – レスポンスで送信される接続しようとしていると知らせるためのバージョンメッセージ。(多分 version ack)
- addr – 1つかそれ以上のIPアドレスとポートのリスト
- inv – “私は、これらのブロック/トランザクションを持っています: …” 通常新しいブロックか、トランザクションがリレーされた時にだけ送信される。これは、リストだけで、実際のデータではない。
- getdata – ハッシュによって、一つのブロックか、トランザクションをリクエストする
- getblocks – レンジ内にある全てのブロックのinvをリクエストする
- getheaders – レンジ内の全てのブロック・ヘッダーを含むヘッダーメッセージをリクエストする
tx – トランザクションを送信する。getdataリクエストへの応答としてのみ送信される
block – ブロックを送信する。getdataリクエストへの応答としてのみ送信される。
headers – 最大2,000のブロックヘッダーまで送信する。どのジェネレータも全ブロックの代わりにブロックのヘッダーのみダウンロードすることはできない。
getaddr – 既に知っている多数のアクティブなピアを含むaddr メッセージをリクエストする(ブートストラップ用) - submitorder, checkorder, and reply – IPトランザクションを実行する時に利用される
- alert – ネットワークアラートを送信する
- ping – 何も実行しない。コネクションがまだオンラインか?をチェックするために利用される。もしコネクションが死んでいると、TCPエラーが起きる
より詳しい技術情報は、プロトコル仕様へ。
Protocol specification – Bitcoin
コネクション
- ピアに接続するために、自分のversion番号、ブロックカウント、現在の時間を含むversion メッセージを送信する。
- リモートのピアは、自分側のバージョンからコネクションを受付けた場合、verack メッセージとピアの持つ version メッセージをを送り返す。
- もし自分が、相手のバージョンからコネクションを受付けた場合、自分の持つ verack と共に応答する
// TODO わかりにくいので、再度訳す
- 自分の全てのピアから時刻のデータが集まったら、時刻を利用する全てのネットワークタスクのためにBitcoinによって中央値が利用される。
-
次に getaddr と addr メッセージを交換し、自分のしらない全てのアドレスを保存する
- addr メッセージは、たまに一つのアドレスしか含んでいない
標準的なリレー
(未翻訳)
初期ブロックのダウンロード
(未翻訳)
Thin SPV クライアント
(未翻訳)
ブートストラップ
(未翻訳)
ハートビート
(未翻訳)