Wie richte ich ein privates Netzwerk ein und verbinde Peers in Geth?

Ich versuche, ein privates Netzwerk einzurichten und versuche, Peers zu verbinden. Derzeit versuche ich es auf meinem Laptop und Desktop (beide sind mit unterschiedlichen Internet verbunden).

Ich führe den folgenden Befehl im ersten Terminal aus (in beiden Systemen ( data dirist in beiden Systemen unterschiedlich)):

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"

dann laufe ich:

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

Jetzt im zweiten Terminal:

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

dann auf dem 1. PC,

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

auf 2. PC,

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

beide kehren zurück true.
Aber admin.peerCountkehrt zurück 0.

Kann mir bitte jemand helfen, ein privates Geth-Netzwerk einzurichten?

1. Ich sehe das 192.168.1.2]:30301. Vielleicht entfernen wir diese Endklammer. 2. Es ist mir oft passiert, dass der Knoten den Port durch eine Firewall geschützt hat, überprüfen Sie das. und 3. Stellen Sie sicher, dass Sie gethmit der --portOption Ihren Abhörport angeben.
admin.addPeer("enode://e0c4960659b6ce4eda71c67b337055636f67660a711d157a81572b5eff1ed1b77931bef4bd079e2660baa661ac16d696b831e9394cb619378071a2593ecdf17a@[192.168.1.2]:30301"); Sie sollten die eckigen Klammern nach dem @-Symbol entfernen. Danach erhalten Sie die Anzahl der Peers.

Antworten (3)

Genesis-Block einrichten: Der erste Block (Block Null) der Blockchain wird als Genesis-Block bezeichnet. Dies ist der einzige Block im Netzwerk, der nicht auf den Vorgängerblock zeigt. Standardmäßig ist der Genesis-Block in Ethereum-Clients fest codiert. Da wir jedoch unser eigenes Testnetzwerk aufbauen, ist dieser Schritt unerlässlich. Alle nachfolgenden Blöcke beziehen sich auf diesen Genesis-Block. Auf dem Geth-Client wird dies erreicht, indem eine JSON-Datei (z. B. mygenesis.json) mit den folgenden Werten eingerichtet wird. Stellen Sie sicher, dass diese Datei zu beiden Instanzen hinzugefügt wird, auf denen Geth ausgeführt wird (da der Konsensalgorithmus von Ethereum sicherstellt, dass kein anderer Knoten Ihrer Blockchain-Version zustimmt, es sei denn, sie haben denselben Genesis-Block). Um zu verstehen, was jeder dieser Parameter bedeutet, lesen Sie bitte diese Antwort zum Stack-Austausch.

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

Ausführen von geth init: Initialisieren Sie das Geth-Terminal mit unserer Genesis-Blockchain-Datei. mygenesis.json: Die JSON-Datei, die zum Konfigurieren des Ethereum-Knotens verwendet werden soll.

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

Starten Sie eine Geth-Konsole: Führen Sie Geth im Konsolenmodus aus und erstellen Sie ein neues Konto, um etwas Ether hineinzufüllen. Bitte stellen Sie sicher, dass die Geth-Konsole unter einer neuen --networkid ausgeführt wird, stellen Sie sicher, dass die Netzwerk-ID eine ausreichend große Zufallszahl ist (um Konflikte mit anderen zu vermeiden). Führen Sie den neuen Knoten auch mit der Option --nodiscover aus, wodurch ein unerwünschter Handshake von anderen Ethereum-Knoten verhindert wird. ethdata ist ein Verzeichnis im aktuellen Ordner, von dem aus ich den Befehl geth ausführe. Dies ist der Ort, an dem die Blockchain-Daten gespeichert werden.
Neues Konto erstellen: Ein neues Konto kann über die Konsole mit dem Befehl erstellt werdenpersonal.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

Beginnen Sie mit dem Mining von Ether auf dieses Konto: Jede Operation auf Ethereum ist nur möglich, wenn Sie Ether haben (die Währung, die in der Ethereum-Blockchain verwendet wird). Wenn Sie ein Testnetzwerk einrichten, müssen Sie etwas Geld auf die Konten schürfen, da Sie sonst keine Operationen ausführen können. Das Mining erfolgt durch den Befehl miner.start(). Dieser Befehl wird einige Zeit in Anspruch nehmen, um Ether auszuführen und auf dem zuvor erstellten Konto anzusammeln.

> miner.start(1)
true

Bestimmen Sie den Enode-Wert des aktuellen Ethereum-Knotens: Enode ist eine URL, die von jedem Knoten innerhalb eines Ethereum-Netzwerks verwendet wird, um einen Peer-Peer-Handshake durchzuführen. Die Enode eines Ethereum-Knotens kann mit dem Befehl admin.nodeInfo.enode ermittelt werden. Das [::] aus der zurückgegebenen Zeichenfolge muss durch Ihre externe IP-Adresse ersetzt werden (wenn Sie innerhalb eines LANs arbeiten, ersetzen Sie diese bitte durch Ihre interne IP).

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

Starten Sie die zweite AWS-Instanz und richten Sie den Genesis-Block mithilfe von geth init erneut auf der Instanz ein. Starten Sie die Geth-Konsole auf der zweiten AWS-Instanz. Stellen Sie sicher, dass Sie dieselbe Netzwerk-ID angeben, die Sie im ersten Terminal angegeben haben. Sobald die Geth-Konsole gestartet ist, müssen Sie den Befehl addPeer ausführen, um einen Handshake zwischen den beiden Knoten herzustellen.

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

Sie werden nun feststellen, dass zwischen den beiden Knoten ein Handshake eingerichtet wurde. Dies kann mit dem Befehl admin.peers überprüft werden, der alle Knoten innerhalb des Netzwerks auflisten würde. Befehle wie net.peerCount listen die Gesamtzahl der Peers innerhalb des Ethereum-Netzwerks auf.

Dokumentierter vollständiger Prozess hier: http://iotbl.blogspot.in/2017/03/setting-up-private-ethereum-testnet.html

Ich habe die absoluten Mindestparameter von geth verwendet, die Sie zum Einrichten Ihrer privaten Blockchain benötigen. Den Rest kannst du natürlich später hinzufügen.
Nein, es funktioniert nicht. wenn ich admin.peers ausführe.. zeigt es [ ].
Bitte überprüfen Sie die in beiden Knoten verwendete Netzwerk-ID. Stellen Sie sicher, dass sie gleich sind. Überprüfen Sie auch die IP-Adresse jedes Knotens und prüfen Sie, ob Sie zwischen ihnen pingen können.
Wenn Sie beim Starten von Geth --verbosity 6 aktiviert hatten, werden Sie eine Nachricht in beiden Knoten bemerken, sobald ein Handshake hergestellt wurde (während der admin.addPeer ausgeführt wird).
Ja, die Netzwerk-ID ist dieselbe, ich verwende die öffentliche IP beider Knoten, aber admin.peers gibt immer noch 0 zurück
@DiwakerSingh Sie müssen admin.addPeer() von beiden Konsolen aufrufen
Fürs Protokoll, ich lief nuradmin.addPeer(<enode_from_node1>) von meiner zweiten Instanz (Knoten2) und meine beiden Knoten sind jetzt Peering. "Funktioniert bei mir!" ;)

Was Zincoshine angewiesen hat, ist absolut richtig. Drei Dinge, die ich anhänge, sorgen dafür, dass die Verbindung in einer privaten Blockchain funktioniert:

  1. Starten Sie den ersten Knoten geth, mit --bootnodesdem er selbst ist

    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. Starten Sie die zweite AWS-Instanz mit derselben--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. Führen Sie den Bootnode von aus admin.nodeInfo.enode, achten Sie auf den Endcode, der sich von den Dokumenten unterscheidet

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

?discpot=0ist neue Portion

Die bereits gegebenen Antworten sind ziemlich umfassend. In Ihrem Fall müssen Sie zunächst die eckigen Klammern aus der IP-Adresse in der von Ihnen verwendeten Enode-Zeichenfolge entfernen.

Wenn Sie immer noch Probleme haben, zwei Knoten miteinander zu verbinden, stellen Sie sicher, dass sie denselben Genesis-Block verwenden.