Blockchain
基本區塊鏈實現:給定節點上的區塊鏈如何與另一個節點上的區塊鏈“同步”?
以下是我對區塊鏈執行流程的理解:
考慮兩個節點,
node1
和node2
。假設有 10 個使用者在node1
. 他們正在製造transactions
,但由於沒有block
開採,這些都沒有真正進行。當一個
block
IS 最終被探勘出來時,這些unconfirmed transactions
被放入block
並執行 - 並且該塊被添加到區塊node1's
鏈中。然後,通過consensus protocol
,node1's
blockchain
in “同步” withnode2's blockchain
以便它們都攜帶相同的副本。我的問題是:這種“同步”是如何發生的?你只是提供
node2's blockchain
它目前沒有的塊嗎?或者你是否像這樣通過引用傳遞 node1 的區塊鏈:node_2_blockchain = node_1_blockchain
?
每個節點使用點對點機制將鏈數據**的副本與其對等點同步。**該協議由ÐΞVp2p Wire Protocol定義,指示節點之間如何共享數據。區塊頭、區塊主體、待處理的交易是分開傳輸的(例如,請參閱Go 乙太坊客戶端 Geth 中的同步是如何完成的)。有些以RLP 格式編碼。
最後,整個區塊數據以序列化的形式傳輸到對等節點。這不是參考,否則我們將不會在網路中擁有冗餘數據,並且如果原始節點發生故障,則沒有人可以訪問數據。
每個節點都有自己的本地鍵/值數據庫,其類型取決於每個客戶端軟體的選擇來儲存整個數據。一些非確定性或易失性數據僅儲存在記憶體數據庫或結構中,並且僅在完全穩定後才寫入磁碟。