Transactions
乙太坊首先廣播交易的節點是什麼?它是如何確定的?
當我作為使用者進行交易時,它首先被發送到哪里或哪個節點?**就實現細節而言,**乙太坊節點如何確定?它是否向 1 個隨機節點或多個隨機節點發送新交易?還是針對滿足特定標準的某個人?
還是到世界上所有的節點?
此外,乙太坊節點是否會在 RAM 中動態保存世界上所有節點的列表並定期刷新?還是它在啟動時執行它,然後簡單地使用它,從不刷新列表?
當我作為使用者進行交易時,它首先被發送到哪里或哪個節點?
您的節點知道的節點 - 其連接的對等節點。這將是整個網路的一個子集。(稍後會更詳細地解釋。)
就實現細節而言,乙太坊節點如何確定這一點?
乙太坊使用自己的一套網路和對等發現協議(在devp2p保護傘下)。
當您的客戶端節點加入網路時,它有一組硬編碼的引導節點,它知道並與之對話。(Geth 客戶端引導節點可以在 中找到
bootnodes.go
)從這些引導節點完成初始引導後,它使用對等發現協議(devp2p 的一部分)來開發更大的網路圖。(對等發現基於 DHT/Kademlia,並在此處詳細介紹。)
它是否向 1 個隨機節點或多個隨機節點發送新交易?
它將交易發送給所有已知的對等點。
此外,乙太坊節點是否會在 RAM 中動態保存世界上所有節點的列表並定期刷新?
如上所述,乙太坊使用類似 Kademlia 的基於 DHT 的協議。(Kademlia廣泛用於網路,它不是乙太坊特有的。)
節點在記憶體中保留自己的分佈式雜湊表 (DHT) 版本,詳細說明其相鄰節點集。如果它從它的對等點之一接收到更新版本的雜湊表,它會更新自己的。
“相鄰節點”以這樣一種方式定義,即節點不會知道整個網路,只是一個子集。(如何計算相鄰節點,以及有多少個節點的實現細節在這裡。)