Bitcoin 網絡傳輸MSG(未完待續)

網絡傳輸MSG

 

BTC網絡中, 節點會遍歷存儲的所有連接節點(CConnman->vNodes), 依據網絡節點狀態(節點結構體CNode, 包含各種狀態變量flags)發送各種消息, 此爲btc的gossip協議

 

NetMsgType::VERSION: version檢查, 檢查通過後發送NetMsgType::VERACK

 

NetMsgType::VERACK: version應答, 應答成功後發送NetMsgType::SENDCMPCT, NetMsgType::SENDHEADERS

 

NetMsgType::GETBLOCKTXN: 網絡上的節點發送請求獲取指定blockhash的所有TX, 接收節點會根據blockhash獲取block並將TXN打包發送, 發送消息NetMsgType::BLOCKTXN

 

NetMsgType::GETHEADERS: 網絡上的節點發送請求獲取制定blockheader, 接收節點會根據blockhash打包blockheader以及該block到最新, 發送消息NetMsgType::HEADERS

 

NetMsgType::GETADDR: 網絡inbound節點請求地址, 本地節點將其自身的地址列表存儲在CNode::vAddrToSend中, 在PeerLogicValidation::SendMessages()函數統一發送.block的所有blockhead都會打包一起發送, 發送消息NetMsgType::ADDR

 

NetMsgType::SENDCMPCT: 網絡節點請求blockheader(依據fPreferHeaderAndIDs, fPreferHeaderAndIDs爲true說明網絡節點需求本地節點發送block),  txid or wit txid(依據fWantsCmpctWitness, fWantsCmpctWitness爲false發送txid, fWantsCmpctWitness爲true發送wit txid). 同樣最終的發送消息在PeerLogicValidation::SendMessages()統一處理

 

NetMsgType::SENDHEADERS: 網絡節點發送該請求, 說明網絡節點請求數據爲block廣播的block head而不是inventory

 

NetMsgType::TX: 網絡節點產生的交易tx進行廣播, 進入接收節點的mempool, 別更新接收節點的mempool

 

NetMsgType::ADDR: 網絡節點發送address給本地節點, 本地節點把發送得到的address放入CNode.addrKnown中

 

NetMsgType::INV: 網絡節點發送inventory到本地節點, inv只會發送tx or block

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章