透過Geth搭建多節點私有鏈
中,介紹了一些區塊鏈前端開發必知必會的基本概念以及區塊鏈前端開發與傳統業務前端開發的區別。這篇開始,我們將進入實戰環節。跟做任何開發一樣,區塊鏈前端開發,首先也要搭建區塊鏈的開發環境。下面將以Windows系統為例進行講解。
下載go1.10.windows-amd64.msi,安裝到C:Go目錄下,並將C:Gobin新增到系統環境變數Path中。
如果你之前裝過go的話,現在再安裝則可能會看到詢問是否解除安裝舊版本的提示。只需要選擇“Yes, Uninstall”繼續安裝即可。
開啟系統控制檯,在其中輸入命令
go version
然後回車執行,如果返回如下資訊,說明Go已經安裝成功:
go version go1.10 windows/amd64
2、安裝Geth
Geth是官方提供的以太坊協議的Go語言實現,是一個以太坊的客戶端,一個命令列工具,透過它可以進行一系列以太坊的操作。
首先從下載Geth 1.8.2 for Windows版本。如果你下載過程中遇到反覆終端連線,無法下載成功的情況,可以嘗試把下載地址複製到迅雷中下載。
然後,將Geth安裝到C:Program FilesGeth目錄下,並將C:Program FilesGeth 新增到系統環境變數path中。
然後到控制檯中執行命令
geth version
看到如下提示,則表示geth安裝成功:
Geth Version: 1.8.2-stable Git Commit: b8b9f7f4476a30a0aaf6077daade6ae77f969960 Architecture: amd64 Protocol Versions: [63 62] Network Id: 1 Go Version: go1.9.2 Operating System: windows GOPATH= GOROOT=C:Go
以及 。
執行這個命令後,等待片刻,當你看到如下這樣的提示:
INFO [03-11|11:14:29] Block synchronisation started INFO [03-11|11:15:01] Imported new block headers count=0 elapsed=3.976ms number=240 hash=37f92c…39e00c ignored=192 INFO [03-11|11:15:01] Imported new block receipts count=0 elapsed=0s number=54 hash=8387c7…c0d90e size=0.00B ignored=6
則表明已經在進行同步了。
預設情況下,在筆者的Windows 10系統中,會同步到C:Users【我的使用者名稱】AppDataRoamingEthereumgethchaindata這個目錄下。如果你看不到AppData這個資料夾,請確認下你有沒有勾選中下圖中所示的“隱藏的專案核取方塊”。
怎麼退出Geth JavaScript Console呢?在控制檯中輸入exit並按回車即可。
因為同步的以太坊的資料比較佔空間,所以我們更改儲存以太坊網路同步資料的位置,改成存在d:ethereum目錄下:
geth --datadir d:ethereum console
其中,–datadir配置的地址指明瞭用來儲存區塊鏈資料庫與keystore的地址,即d:ethereum。
同步的過程中,會不斷出現下圖這樣的區塊同步提示:
表示剛剛將以太坊網路上的哪個區塊同步到了本地。其中,number是區塊號,而hash就是該區塊的hash值。我們拿著這個區塊號到以太坊區塊瀏覽器Etherscan上去瀏覽一下該區塊的資訊,比如,這裡的區塊號是30344,那麼在這個頁面中就可以看到該區塊的詳細資訊,如下圖。
當你同步到的區塊與中顯示的最新區塊的height一樣時,就說明本地節點已經同步到最新狀態了。
2、同步以太坊測試網路上的資料到本機
因為在以太坊主網路進行部署智慧合約、傳送交易等操作是需要花費真實的以太幣的,所以對於開發者來說,更多的除錯和測試工作,不能在主網路上進行(誰的真金白銀花得不心疼?),而應該在測試網路上。測試網路上用的是測試幣(play-Ether),而不是主網路上真正需要真金白銀換來的以太幣。所以,作為開發者,你通常需要同步測試網路上的全節點。透過如下命令來完成:
geth --testnet console
其它操作與同步以太坊主網路上的全節點一樣,不再贅述。
下載後安裝即可),因為windows自帶的控制檯是不支援bash檔案的執行的。裝好Git Bash,我們就可以透過bash starthttp.sh
和bash startws.sh
命令來分別啟動提供HTTP-RPC服務的私有鏈和提供WebSockets-RPC服務的私有鏈,達成簡化啟動命令的目的。3、新增節點,組成多節點網路
至此,一個單節點的私有鏈網路已經啟動起來。可以透過admin.nodeInfo檢視當前網路節點資訊如下:
{ enode: "enode://4eaf1ef8fd69bb3669741df19a0bfe58b827da56446b7513901631b95b395797277909be4dbbadc25c343fc4c1ca538319311bcae6d17bd7006bbe8c655fdcdf@[::]:30303", id: "4eaf1ef8fd69bb3669741df19a0bfe58b827da56446b7513901631b95b395797277909be4dbbadc25c343fc4c1ca538319311bcae6d17bd7006bbe8c655fdcdf", ip: "::", listenAddr: "[::]:30303", name: "Geth/v1.8.2-stable-b8b9f7f4/windows-amd64/go1.9.2", ports: { discovery: 30303, listener: 30303 }, protocols: { eth: { config: { chainId: 1337, eip150Hash: "0x0000000000000000000000000000000000000000000000000000000000000000", eip155Block: 0, eip158Block: 0, homesteadBlock: 0 }, difficulty: 131072, genesis: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0", head: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0", network: 23 } } }
但是,目前只是單節點的網路,如何新增節點,讓它不再是單節點網路呢?
透過如下命令,用上文中建立的同一份創世塊配置檔案初始化另一個目錄(d:/privatechain2)下的創世塊。
geth --datadir d:/privatechain2 init d:/privatechain/genesis.json
我們將d:/starthttp.sh檔案複製一份,命名為starthttp2.sh,同樣放在d:/下。將starthttp2.sh的內容修改為:
#!/bin/bashgeth --datadir "d:privatechain2" --port 30304 --ipcdisable --networkid 23 --rpc --rpcaddr "localhost" --rpcport "8546" --rpccorsdomain "*" --rpcapi "db,eth,net,web3" console
即修改了--datadir
和--rpcport
兩個選項的值,新增了--port 30304 --ipcdisable
,以免與現有節點相沖突。然後另開一個Git Bash控制檯視窗,我們透過bash starthttp2.sh
命令啟動了另一個節點。 再用admin.nodeInfo
命令檢視下新節點的資訊,發現與原有節點enode
是不一樣的,證明兩個節點確實不同(不過,需要確保兩個節點的protocols
資訊是一致的,因為它們必須是基於同一份創世區塊配置產生出來的,才能連線成功,具體需要滿足哪些條件才能連線成功,可以參考)。
{ enode: "enode://d5e8b09b13ddff0b88e13259e8d764e8ec982e76592f48fc1db11c4829f5d9cabdaaeecf13b5812e216506536b1f8a53068470975650beb86ab46c27718c7cdd@[::]:30304", id: "d5e8b09b13ddff0b88e13259e8d764e8ec982e76592f48fc1db11c4829f5d9cabdaaeecf13b5812e216506536b1f8a53068470975650beb86ab46c27718c7cdd", ip: "::", listenAddr: "[::]:30304", name: "Geth/v1.8.2-stable-b8b9f7f4/windows-amd64/go1.9.2", ports: { discovery: 30304, listener: 30304 }, protocols: { eth: { config: { chainId: 1337, eip150Hash: "0x0000000000000000000000000000000000000000000000000000000000000000", eip155Block: 0, eip158Block: 0, homesteadBlock: 0 }, difficulty: 131072, genesis: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0", head: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0", network: 23 } } }
接下來我們讓兩個節點連線起來。
在第二個控制檯中用admin.peers
檢視一下,發現返回是空陣列。 然後執行:
admin.addPeer("enode://4eaf1ef8fd69bb3669741df19a0bfe58b827da56446b7513901631b95b395797277909be4dbbadc25c343fc4c1ca538319311bcae6d17bd7006bbe8c655fdcdf@[::]:30303")
其中括號內的是第一個節點的節點資訊中的enode
的值。
然後再透過amin.peers
檢視,可以看到如下內容,表示新增成功:
[{ caps: ["eth/63"], id: "4eaf1ef8fd69bb3669741df19a0bfe58b827da56446b7513901631b95b395797277909be4dbbadc25c343fc4c1ca538319311bcae6d17bd7006bbe8c655fdcdf", name: "Geth/v1.8.2-stable-b8b9f7f4/windows-amd64/go1.9.2", network: { inbound: false, localAddress: "127.0.0.1:53792", remoteAddress: "127.0.0.1:30303", static: true, trusted: false }, protocols: { eth: { difficulty: 131072, head: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0", version: 63 } } }]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4822/viewspace-2800712/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Geth搭建多節點私有鏈條
- Geth搭建私有鏈
- 通過Geth搭建私有以太坊網路
- 以太坊學習記錄+geth配置+私有鏈搭建
- 如何透過 Geth、Node.js 和 UNIX/PHP 訪問以太坊節點Node.jsPHP
- Truffle 4.0、Geth 1.7.2、TestRPC在私有鏈上搭建智慧合約Trpc
- consul 多節點/單節點叢集搭建
- 透過RMAN備份搭建單節點ADG(oracle11g)Oracle
- 如何搭建以太坊私有鏈
- 如何通過Geth、Node.js和UNIX/PHP訪問以太坊節點Node.jsPHP
- 如何通過 Geth、Node.js 和 UNIX/PHP 訪問以太坊節點Node.jsPHP
- 區塊鏈資料管理平臺開發,多節點聯盟區塊鏈搭建區塊鏈
- Geth簡介及如何執行以太坊節點
- 深圳區塊鏈技術應用落地服務,多節點聯盟區塊鏈搭建區塊鏈
- 3.6 以太坊私有鏈與聯盟鏈搭建
- bitcoin: 透過 rpc 請求節點資料RPC
- Mac環境搭建以太坊私有鏈Mac
- 區塊鏈私有鏈搭建中遇到的那些坑區塊鏈
- 區塊鏈baas平臺企業私有鏈聯盟鏈搭建區塊鏈
- kafka系列二:多節點分散式叢集搭建Kafka分散式
- CentOS7 上搭建多節點 Elasticsearch叢集CentOSElasticsearch
- 區域網資料夾共享,透過搭建私有云盤替換FTP過程詳解FTP
- 區塊鏈技術應用智慧財產權上鍊存證,多節點聯盟區塊鏈搭建區塊鏈
- 使用 Go-Ethereum 1.7.2搭建以太坊私有鏈Go
- 搭建基於以太坊的私有鏈環境
- minio多節點
- MongoDB叢集搭建(包括隱藏節點,仲裁節點)MongoDB
- linux搭建kafka叢集,多master節點叢集說明LinuxKafkaAST
- 如何部署Qtum量子鏈節點QT
- ADAMoracle支援廣域節點報價的多鏈分佈OracleOracle
- 盤點使 macOS 應用流量透過代理的多種方式Mac
- 多節點ipfs安裝
- 4.2 叢集節點初步搭建
- ADAMoracle廣域節點喂價的多鏈去中心化預言機Oracle中心化
- 以太坊公鏈節點連線節點超時問題排查
- 降本超30%,智聆口語透過 TKE 註冊節點實現 IDC GPU 節點降本增效實踐GPU
- Verdaccio 搭建私有 NPMNPM
- 搭建私有云:OwnCloudCloud