以太坊如何同步區塊
㈠ 以太坊多節點私有鏈部署
假設兩台電腦A和B
要求:
1、兩台電腦要在一個網路中,能ping通
2、兩個節點使用相同的創世區塊文件
3、禁用ipc;同時使用參數--nodiscover
4、networkid要相同,埠號可以不同
1.4 搭建私有鏈
1.4.1 創建目錄和genesis.json文件
創建私有鏈根目錄./testnet
創建數據存儲目錄./testnet/data0
創建創世區塊配置文件./testnet/genesis.json
1.4.2 初始化操作
cd ./eth_test
geth --datadir data0 init genesis.json
1.4.3 啟動私有節點
1.4.4 創建賬號
personal.newAccount()
1.4.5 查看賬號
eth.accounts
1.4.6 查看賬號余額
eth.getBalance(eth.accounts[0])
1.4.7 啟動&停止挖礦
啟動挖礦:
miner.start(1)
其中 start 的參數表示挖礦使用的線程數。第一次啟動挖礦會先生成挖礦所需的 DAG 文件,這個過程有點慢,等進度達到 100% 後,就會開始挖礦,此時屏幕會被挖礦信息刷屏。
停止挖礦,在 console 中輸入:
miner.stop()
挖到一個區塊會獎勵5個以太幣,挖礦所得的獎勵會進入礦工的賬戶,這個賬戶叫做 coinbase,默認情況下 coinbase 是本地賬戶中的第一個賬戶,可以通過 miner.setEtherbase() 將其他賬戶設置成 coinbase。
1.4.8 轉賬
目前,賬戶 0 已經挖到了 3 個塊的獎勵,賬戶 1 的余額還是0:
我們要從賬戶 0 向賬戶 1 轉賬,所以要先解鎖賬戶 0,才能發起交易:
發送交易,賬戶 0 -> 賬戶 1:
需要輸入密碼 123456
此時如果沒有挖礦,用 txpool.status 命令可以看到本地交易池中有一個待確認的交易,可以使用 eth.getBlock("pending", true).transactions 查看當前待確認交易。
使用 miner.start() 命令開始挖礦:
miner.start(1);admin.sleepBlocks(1);miner.stop();
新區塊挖出後,挖礦結束,查看賬戶 1 的余額,已經收到了賬戶 0 的以太幣:
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
用同樣的genesis.json初始化操作
cd ./eth_test
geth --datadir data1 init genesis.json
啟動私有節點一,修改 rpcport 和port
可以通過 admin.addPeer() 方法連接到其他節點,兩個節點要要指定相同的 chainID。
假設有兩個節點:節點一和節點二,chainID 都是 1024,通過下面的步驟就可以從節點二連接到節點一。
首先要知道節點一的 enode 信息,在節點一的 JavaScript console 中執行下面的命令查看 enode 信息:
admin.nodeInfo.enode
" enode://@[::]:30303 "
然後在節點二的 JavaScript console 中執行 admin.addPeer(),就可以連接到節點一:
addPeer() 的參數就是節點一的 enode 信息,注意要把 enode 中的 [::] 替換成節點一的 IP 地址。連接成功後,節點一就會開始同步節點二的區塊,同步完成後,任意一個節點開始挖礦,另一個節點會自動同步區塊,向任意一個節點發送交易,另一個節點也會收到該筆交易。
通過 admin.peers 可以查看連接到的其他節點信息,通過 net.peerCount 可以查看已連接到的節點數量。
除了上面的方法,也可以在啟動節點的時候指定 --bootnodes 選項連接到其他節點。 bootnode 是一個輕量級的引導節點,方便聯盟鏈的搭建 下一節講 通過 bootnode 自動找到節點
參考: https://cloud.tencent.com/developer/article/1332424
㈡ 浠ュお鍧婂備綍澶勭悊緗戠粶涓鑺傜偣鐨勫紓甯告儏鍐
浠ュお鍧婂備綍澶勭悊緗戠粶涓鑺傜偣鐨勫紓甯告儏鍐碉紵
浠ュお鍧婃槸鐩鍓嶆渶嫻佽岀殑鍩轟簬鍖哄潡閾炬妧鏈鐨勬櫤鑳藉悎綰﹀鉤鍙頒箣涓銆傚湪浠ュお鍧婄綉緇滀腑錛岃妭鐐圭殑鍋ュ悍鐘舵佸規暣涓緗戠粶鐨勮繍琛岄潪甯擱噸瑕併傚洜姝わ紝浠ュお鍧婂紑鍙戜漢鍛樺紑鍙戜簡涓浜涙満鍒舵潵澶勭悊緗戠粶涓鑺傜偣鐨勫紓甯告儏鍐點
涓縐嶅父瑙佺殑鑺傜偣鏁呴殰鏄鑺傜偣涓㈠け鍚屾ャ傝繖縐嶆儏鍐靛彂鐢熷湪鑺傜偣涓庡叾浠栬妭鐐逛箣闂寸殑鏁版嵁鍚屾ュ嚭鐜伴棶棰樻椂銆備互澶鍧婇氳繃浣跨敤鈥淕HOST鈥濆崗璁鏉ュ勭悊榪欑嶆儏鍐點侴HOST鍗忚灝嗗湪緗戠粶涓琚鏀懼純鐨勫尯鍧椾篃鑰冭檻鍦ㄥ唴錛屼粠鑰屽湪緗戠粶涓鍒涢犱竴涓鏇村姞瀹屾暣鐨勫尯鍧楅摼銆傝繖鏈夊姪浜庢彁楂樼綉緇滀腑鑺傜偣鐨勫悓姝ョ巼鍜屽彲闈犳э紝浠庤屽噺灝戜涪澶卞悓姝ョ殑鎯呭喌銆
鍙︿竴縐嶅彲鑳藉彂鐢熺殑鑺傜偣鏁呴殰鏄鈥滈摼鍒嗚傗(chainsplitting)銆傝繖縐嶆儏鍐靛彂鐢熷湪緗戠粶涓鏈夊お澶氱殑鍒嗗弶錛屽艱嚧涓嶅悓鐨勮妭鐐圭湅鍒頒笉鍚岀殑鍖哄潡閾俱備互澶鍧婁嬌鐢ㄤ竴縐嶇О涓衡滄渶闀塊摼瑙勫垯鈥濈殑鍗忚鏉ュ勭悊榪欑嶆儏鍐點傝ヨ勫垯綆鍗曞湴鎸囩ず浠ユ渶闀塊摼涓哄噯錛屽嵆澶у氭暟鑺傜偣鐪嬪埌鐨勯摼鏄姝e父鐨勯摼銆
榪樻湁涓縐嶈妭鐐規晠闅滄槸鑺傜偣宕╂簝銆傝繖縐嶆儏鍐靛彂鐢熷湪鑺傜偣鐢變簬紜浠舵垨杞浠舵晠闅滆屽艱嚧鏃犳硶姝e父榪愯屻備互澶鍧婂勭悊榪欑嶆晠闅滅殑鏂瑰紡鏄浣跨敤鈥滃垎鏁e紡瀛樺偍鈥濄傚垎鏁e紡瀛樺偍鐨勬傚康鏄灝嗚妭鐐圭殑淇℃伅瀛樺偍鍦ㄧ綉緇滅殑澶氫釜鑺傜偣鍜屾湇鍔″櫒涓錛岃屼笉鏄鍗曚竴鐨勮妭鐐廣傝繖鏍峰嵆浣誇竴涓鑺傜偣宕╂簝錛屾暟鎹浠嶇劧鍙浠ヤ粠鍏朵粬鑺傜偣鎮㈠嶏紝浣挎暣涓緋葷粺淇濇寔榪愯岀姸鎬併
鎬葷殑鏉ヨ達紝浠ュお鍧婂凡緇忓仛鍑轟簡鐩稿綋澶氱殑鍔鍔涙潵澶勭悊緗戠粶涓鑺傜偣鐨勫紓甯告儏鍐點傝繖縐嶆帾鏂芥湁鍔╀簬淇濇寔緗戠粶鐨勫仴搴瘋繍琛岋紝騫跺炲己浜嗘暣涓浠ュお鍧婂鉤鍙扮殑寮哄ぇ鎬ц兘銆
㈢ 區塊鏈怎麼樣同步數據
區塊鏈怎麼同步數據
區塊鏈是一種去中心化的分布式賬本,其中包含了許多節點,每個節點都擁有自己的拷貝。因為它是分布式的,每個節點的數據可能不同,因此需要同步數據,以保持整個區塊鏈的一致性。
具體來說,區塊鏈同步數據的過程可以分為以下幾個步驟:
1.節點發現:每個節點都需要知道其他節點的存在,以便進行通信。因此,當一個新的節點加入網路時,它會向已知的節點發送請求,獲取它們的IP地址和埠號,以便建立連接。
2.數據傳輸:節點之間通過網路進行數據傳輸。當一個節點發現自己的數據不完整或者過時時,它會向其他節點發送請求,獲取最新的數據塊。數據塊是區塊鏈中最基本的單元,每個數據塊包含了一定的交易信息,以及指向前一個數據塊的指針。
3.數據驗證:當一個節點收到其他節點發送過來的數據塊時,它會對數據塊進行驗證。驗證的過程包括檢查數據塊的哈希值、交易記錄和指向前一個數據塊的指針等信息,以確保數據的完整性和正確性。
4.數據更新:當一個節點驗證過一批數據塊後,它會將這些數據塊添加到自己的區塊鏈中,更新自己的拷貝。同時,這個節點也會向其他節點廣播自己的最新數據塊,以便其他節點也可以更新自己的拷貝。
5.共識機制:區塊鏈的共識機制是保證整個區塊鏈數據一致的關鍵。每個節點都有權參與共識過程,以決定哪個數據塊應該被添加到區塊鏈中。不同的區塊鏈採用不同的共識機制,例如比特幣採用的是工作量證明(PoW)機制,以太坊採用的是權益證明(PoS)機制等。
綜上所述,區塊鏈同步數據的過程涉及節點發現、數據傳輸、數據驗證、數據更新和共識機制等多個步驟,以確保整個區塊鏈的數據一致性和完整性。