Go-Ethereum
與 Mainnet/Ropsten 區塊鏈同步
如果使用
geth
命令,則節點預設開始與乙太坊主網同步。如果使用geth --testnet --networkid 3 --datadir <testnetdatapath>
,則節點將連接到 Ropsten。這種聯繫是如何建立的?當時執行的步驟是什麼?連接到區塊鏈,下載創世紀,下載其他區塊?這個功能是如何實現的?
出於同步目的,無論是主網還是像 Ropsten 這樣的測試網都沒有關係。這就是該過程將如何進行的方式:
- 您的 Geth 客戶端將在網路中尋找對等點。它使用 ÐΞV 的 p2p 網路協議來發現和連接對等點。在這裡閱讀更多,它是一個文件倉庫,所以你可能想閱讀相關的降價文件。在初始化期間,bootnodes 的概念就派上用場了。在乙太坊維基中閱讀更多關於如何發現對等點的資訊。
- 根據您的同步模式,您的節點將從網路中的其他對等方獲取(並驗證)塊。此時,您的
eth.syncing
參數將返回 true。同步完成後,這意味著您的節點與網路中的其他節點是最新的,並且您在技術上了解乙太坊虛擬機的最新狀態,您甚至可以探勘新交易,或者只是驗證他們。- 從啟動開始,Geth 節點還執行著JSON-RPC 伺服器。
- 同步完成後,您的節點還將能夠廣播和/或收聽網路中新交易的廣播。
更新:
我忘了提到@Ishmael 在他的回答中提到的第 0 點,即創世塊在原始碼本身中是“硬編碼”的。
Geth 在其原始碼中包含創世區塊和它們支持的網路的引導節點:主網、rinkeby、ropsten 等。
一開始,geth 將連接到引導節點並請求新的對等點。一旦連接到新的對等點,它將開始下載塊並驗證它們是原始碼中創世塊的後代。