Go-Ethereum

如何在 geth 中建立專用網路並連接對等點?

  • January 22, 2019

我正在嘗試設置專用網路並嘗試連接對等點。目前我正在我的筆記型電腦和台式機上嘗試它(它們都連接到不同的網際網路)。

我在第一個終端中執行以下命令(在兩個系統中(在兩個系統data dir中都不同)):

geth --rpc --rpcaddr "0.0.0.0" --rpcport "8545" --rpccorsdomain "http://localhost:5000, http://localhost:6000" --port "2403" --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --networkid 1001201 --datadir "E:\User\priv\data" init "E:\User\priv\genesis.json"

然後我執行:

geth --datadir "E:\User\priv\data"

現在,在第二個終端:

geth attach ipc:\\.\pipe\geth.ipc

然後在第一台電腦上,

admin.addPeer("enode://e0c4960659b6ce4eda71c67b337055636f67660a711d157a81572b5eff1ed1b77931bef4bd079e2660baa661ac16d696b831e9394cb619378071a2593ecdf17a@[192.168.1.2]:30301");

在第二台電腦上,

admin.addPeer("enode://5512657323add8ceafddb4fc64426b99b58473bfdfab795fe3847fdd6a09c25667d57c5c187d2d48de4ae63d02ce1e221a068dfe5e0476fe21d8aaa8a57d3356@[13.75.117.156]:30302");

他們倆都回來了true

admin.peerCount回報0

有人可以幫我建立一個私人geth網路嗎?

**設置創世區塊:**區塊鏈的第一個區塊(零區塊)稱為創世區塊。這是網路上唯一不指向前一個塊的塊。預設情況下,創世塊被硬編碼到乙太坊客戶端中。然而,當我們建立自己的測試網路時,這一步是必不可少的。所有後續塊都將引用這個創世塊。在 Geth 客戶端上,這是通過設置具有以下值的 json 文件(例如 mygenesis.json)來實現的。確保將此文件添加到將執行 Geth 的兩個實例中(因為乙太坊共識算法確保沒有其他節點會同意您的區塊鏈版本,除非它們具有相同的創世塊)。要了解每個參數的含義,請參閱堆棧交換上的這個答案。

{
 "alloc": {},
 "coinbase"   : "0x0000000000000000000000000000000000000000",
 "difficulty" : "0x20000",
 "extraData"  : "",
 "gasLimit"   : "0x2fefd8",
 "nonce"      : "0x0000000000000042",
 "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
 "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
 "timestamp"  : "0x00"
}

**執行 geth init:**使用我們的創世區塊鏈文件初始化 geth 終端。mygenesis.json:用於配置乙太坊節點的 json 文件。

$ geth --datadir="ethdata" init mygenesis.json

**啟動 geth 控制台:**在控制台模式下執行 geth 並創建一個新帳戶以向其中填充一些乙太幣。請確保在新的 –networkid 下執行 geth 控制台,確保 networkid 是一個足夠大的隨機數(以避免與其他人發生衝突)。還可以使用選項 –nodiscover 執行新節點,這將防止來自其他乙太坊節點的任何不良握手。ethdata 是我正在執行 geth 命令的目前文件夾中的一個目錄。這是儲存區塊鏈數據的位置。

**創建一個新帳戶:**可以使用命令從控制台創建一個新帳戶personal.newAccount("password")

$ geth --datadir="ethdata" --networkid 65535 --nodiscover console
I0326 11:36:47.028672 node/config.go:445] Failed to start Ledger hub, disabling: libusb: unknown error [code -99]
I0326 11:36:47.028882 cmd/utils/flags.go:613] WARNING: No etherbase set and no accounts found as default
I0326 11:36:47.028970 ethdb/database.go:83] Allotted 128MB cache and 1024 file handles to /home/ubuntu/ethdata/geth/chaindata
I0326 11:36:47.047079 ethdb/database.go:176] closed db:/home/ubuntu/ethdata/geth/chaindata
I0326 11:36:47.047475 node/node.go:176] instance: Geth/v1.5.9-stable/linux/go1.8
I0326 11:36:47.047573 ethdb/database.go:83] Allotted 128MB cache and 1024 file handles to /home/ubuntu/ethdata/geth/chaindata
I0326 11:36:47.078045 eth/backend.go:187] Protocol Versions: [63 62], Network Id: 65535
I0326 11:36:47.078398 eth/backend.go:215] Chain config: {ChainID: 0 Homestead: <nil> DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: <nil> EIP158: <nil>}
I0326 11:36:47.079106 core/blockchain.go:219] Last header: #0 [62e3c23e…] TD=131072
I0326 11:36:47.079187 core/blockchain.go:220] Last block: #0 [62e3c23e…] TD=131072
I0326 11:36:47.079279 core/blockchain.go:221] Fast block: #0 [62e3c23e…] TD=131072
I0326 11:36:47.081285 p2p/server.go:340] Starting Server
I0326 11:36:47.106873 p2p/server.go:608] Listening on [::]:30303
I0326 11:36:47.107290 node/node.go:341] IPC endpoint opened: /home/ubuntu/ethdata/geth.ipc
Welcome to the Geth JavaScript console!

instance: Geth/v1.5.9-stable/linux/go1.8
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

> personal.newAccount("testing")
"0xe94c3a6c176af3f091d3cc40ba35efa96a8df444"
> I0326 11:37:21.218308 cmd/geth/main.go:286] New wallet appeared: keystore:///home/ubuntu/ethdata/keystore/UTC--2017-03-26T11-37-20.112555465Z--e94c3a6c176af3f091d3cc40ba35efa96a8df444, Locked

開始向該帳戶探勘乙太幣:只有當您擁有乙太幣(乙太坊區塊鏈中使用的貨幣)時,才能在乙太坊上進行任何操作。搭建測試網時,需要往賬戶中挖一些錢,否則無法進行任何操作。挖礦由命令 miner.start() 完成。該命令將需要一些時間來執行並將乙太幣累積到先前創建的帳戶中。

> miner.start(1)
true

確定目前乙太坊節點的 enode 值: enode 是一個 url,乙太坊網路中的每個節點都使用它來執行點對點握手。乙太坊節點的 enode 可以通過命令 admin.nodeInfo.enode 確定。這

$$ :: $$從返回的字元串必須替換為您的外部 IP 地址(如果您在 LAN 中執行,請將此替換為您的內部 IP)。

> admin.nodeInfo.enode
"enode://dce52ff84d904d3a304c0977fbc01efd59c2f62ceb3ebcae16044768d15282a5b411f5774e7410da26648c55a1e9d5326ecc635fb2ad73ad5569cf9df41f1e1a@[::]:30303?discport=0"
> 

啟動第二個 AWS 實例並使用 geth init 在實例上再次設置創世塊。在第二個 AWS 實例上啟動 geth 控制台。確保提供與您在第一個終端中提供的相同的網路 ID。一旦 geth 控制台啟動,您將需要執行 addPeer 命令以在兩個節點之間建立握手。

>admin.addPeer("enode://90b7cbbaee94ab6e5bc7c5e8080bf8e2dfed5047b7c19ac61ee82511bef40faf9be2066258228ce7a71ab97b508dbef3c8f50fcf31dedfd43f2f0abd7f618db9@172.129.23.46:30303?discport=0")
true
> 

您現在會注意到兩個節點之間已經建立了握手。這可以使用命令 admin.peers 進行交叉驗證,該命令將列出網路中的所有節點。net.peerCount 等命令將列出乙太坊網路中的對等點總數。

在此處記錄完整過程:http: //iotbl.blogspot.in/2017/03/setting-up-private-ethereum-testnet.html

Zincoshine 的指示是絕對正確的。我附加的三件事使私有區塊鏈中的連接起作用:

  1. 啟動第一個節點 geth--bootnodes本身

geth --datadir ~/ethereum_pri/firstnode --verbosity 4 --nodiscover --bootnodes enode://fb7551da65969d9aea58f1e69f6b49919acdc270d5805455b1cdaf5463430adbb0aacc3a9c59e6733f86726c2b207d4841bfc22cd36a04d05e6f459fd7a96971@127.0.0.1:30303?discport=0 --cache 512 --ipcpath ~/Library/Ethereum/geth.ipc --networkid 1984 console 2. 使用相同的啟動第二個 AWS 實例--bootnodes

geth --datadir ~/ethereum_pri/node2 --fast --cache 512 --port 0 --verbosity 4 --nodiscover --bootnodes enode://fb7551da65969d9aea58f1e69f6b49919acdc270d5805455b1cdaf5463430adbb0aacc3a9c59e6733f86726c2b207d4841bfc22cd36a04d05e6f459fd7a96971@127.0.0.1:30303?discport=0 --ipcpath ~/Library/Ethereum/geth.ipc --networkid 1984 --identity "node2" console 3. 執行bootnode admin.nodeInfo.enode,注意尾部程式碼與文件不同

"enode://746d6e7ac121e1448a6ce5151e80540c3395dfe3ac215a728e2191f1d4a6874d7bbf1c4120692634cdf95028688b670332e930d081848bf344ad7433c57984d5@[::]:52769?discport=0"

?discpot=0是新的部分

引用自:https://ethereum.stackexchange.com/questions/13547