「Satoshi Client Block Exchange」を編集中
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
9行目: | 9行目: | ||
getblocksメッセージは、遠隔ノートがノード間の最新の共通ブロックを見つけるのを助けるために、要求側ノードが既に所有している複数のブロックハッシュを含む。ハッシュのリストは、最新のブロックから始まり、10に戻り、起点ブロックに達するまで指数関数的に2倍になります。[3]両方のノードは起源ブロックでハードコードされているので、そこでの開始が最も少ないことが保証されています。そのブロックが何らかの理由で一致しない場合、ブロックは交換されません。 | getblocksメッセージは、遠隔ノートがノード間の最新の共通ブロックを見つけるのを助けるために、要求側ノードが既に所有している複数のブロックハッシュを含む。ハッシュのリストは、最新のブロックから始まり、10に戻り、起点ブロックに達するまで指数関数的に2倍になります。[3]両方のノードは起源ブロックでハードコードされているので、そこでの開始が最も少ないことが保証されています。そのブロックが何らかの理由で一致しない場合、ブロックは交換されません。 | ||
− | + | ==在庫メッセージ== | |
+ | |||
+ | getblocks要求を受信したノードは実際には送信しないことに注意してください | ||
+ | 応答のフルブロック。ノードは、「inv」メッセージを送信します。 | ||
+ | リクエストに合った一連のブロックのハッシュが検証されます | ||
+ | ノードが実際にリモートノードが送信するブロックを送信していることを確認します | ||
+ | 持っていない(しかし、遠隔ノードがフルブロックをまだ望んでいないと推測する)。 | ||
+ | |||
+ | ローカルノードが「inv」メッセージを受信すると、ローカルノードは、 | ||
+ | ブロックには "getdata"というメッセージがあります。下記参照。 | ||
+ | |||
+ | しかし、まず、遠隔ノードがどのようにして "inv"メッセージを送信するかの詳細がここにあります | ||
+ | ローカルノードによって送信された「getblocks」要求に応答して、リモート | ||
+ | ノードは、pFrom-> PushInventoryを呼び出します。これは、 | ||
+ | ブロックを要求したノードを表します(この中のローカルノード | ||
+ | ウォークスルー)、PushInventoryはvInventoryToSendにブロックハッシュを追加します | ||
+ | CNodeの変数。 [https://github.com/bitcoin/bitcoin/blob/master/src/main.cpp main.cpp]のSendMessages関数は、 | ||
+ | vInventoryToSendからアイテムを取り出し、それをvInv変数に追加します。 | ||
+ | 彼らが本当に送る準備ができていることを意味します。[4] | ||
+ | 別個の変数の理由は、一部の在庫アイテム | ||
+ | (今のトランザクションのみ)は、リモートノードに「流される」可能性があり、 | ||
+ | それは彼らがすぐに送られないようにすることを意味します。 | ||
+ | vInv変数が1000個のエントリでいっぱいになると、メッセージがキューに入れられます | ||
+ | それらの1000のエントリで、ループが続行されます。最後に、 | ||
+ | 残りのエントリは最後の「inv」メッセージで送信されます。 | ||
+ | |||
+ | ローカルノードが「inv」メッセージを受信すると、ローカルノードは、 | ||
+ | "getdata"メッセージでブロックします。正確には、ノードはpfrom-> AskFor | ||
+ | そのブロックを要求すると、そのメソッドはブロックの要求をキューに入れます | ||
+ | mapAskFor、そして汎用目的のSendMessage()は "getdata"リクエストを送信します | ||
+ | 地図からの1000のエントリのバッチで。[5] | ||
+ | |||
+ | コードでは、2分ごとに冗長な要求を制限しようとします。 | ||
+ | メッセージを遅らせるmapAlreadyAskedForというマップを使用して同じブロック | ||
+ | 必要に応じて[6] | ||
Hello! | Hello! |