Privates Testnet kann mit geth nicht erstellt werden. nodeInfo.genesis gehört zum Hauptnetzwerk

Ich versuche, mein privates Testnetz mit Geth zu erstellen. Aber selbst wenn ich einen CustomGenesis-Block aus einer JSON-Datei verwende, wenn ich geth starte und admin.nodeInfo ausführe, stammen die Genesis- und Head-Hashes aus dem Hauptnetzwerk.

Hier ist die CustomGenesis.json:-

{
"nonce": "0x0ae067964324234907200d849",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0",
"gasLimit": "0x8000000",
"difficulty": "0x4000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x16d38897146fb767e709386f416bbc88aed53171",
"alloc": {
    "0x16d38897146fb767e709386f416bbc88aed53171": {
            "balance": "10000000000000000000"
    }
}
}

Hier ist der Befehl, den ich verwende, um mein privates Testnet zu starten:-

geth --identity "Dev1" --datadir "/home/dev1admin/ethereum/private_test1/chain" --port "30304" --nodiscover --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --autodag --networkid 1729 --nat "none" --verbosity 5 console init "/home/dev1/ethereum/private_test1/CustomGenesis.json"

Die Ausgabe des Befehls admin.nodeInfo:-

{
enode:"enode://0e576e1aa07d4ee4ea7fc34fe7a0e46ef16f9b835ce58b76dd7b675eea67d7546c3daf3b3115badabc24235d1056c508b108ba7d0f88bbf3687edae5db9165f7@[::]:30304?discport=0",
id: "0e576e1aa07d4ee4ea7fc34fe7a0e46ef16f9b835ce58b76dd7b675eea67d7546c3daf3b3115badabc24235d1056c508b108ba7d0f88bbf3687edae5db9165f7",
ip: "::",
listenAddr: "[::]:30304",
name: "Geth/Dev1/v1.5.5-stable-ff07d548/linux/go1.7.3",
ports: {
discovery: 0,
listener: 30304
},
protocols: {
eth: {
  difficulty: 17179869184,
  genesis: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
  head: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
  network: 1729
}
}
}

Ich möchte die Option --dev nicht mit Geth verwenden, weil ich etwas Ether vorab zuweisen möchte. Außerdem erscheint es mir falsch, nur eine Netzwerk-ID zur Unterscheidung zwischen Netzwerken zu verwenden (ich möchte auch in der Lage sein, eine benutzerdefinierte Nonce festzulegen, um sicherzustellen, dass sich niemand sonst mit meinem Netzwerk verbindet, es sei denn, sie kennen meine Nonce).

Antworten (2)

Dein initBefehl ist super lang. Dadurch konnten Sie nicht bemerken, dass Sie Geth 2 Befehle gegeben haben: consoleund init. Mit dem ersten ging es.

Wie wäre es also, wenn Sie das unbedingt Notwendige behalten und entfernen consoleund das ":

geth --datadir /home/dev1admin/ethereum/private_test1/chain --verbosity 5 init /home/dev1/ethereum/private_test1/CustomGenesis.json

Das Konto, dem Sie Ether zuweisen, muss bereits existieren, damit es über die Genesis-Datei geseedet werden kann. Konten befinden sich außerhalb der Blockchain (Geth speichert sie im Ordner datadir/keystore), sodass Sie sie in einer Blockchain erstellen und in eine andere kopieren können

Hier ein möglicher Arbeitsablauf:

  1. Starten Sie geth mit Ihrer benutzerdefinierten Genesis-Datei und Ihrem Datenverzeichnis
  2. Erstellen Sie die Konten über personal.newAccount()
  3. Aktualisieren Sie die Genesis-Datei mit den Konten, die Sie in #2 erstellt haben
  4. Löschen Sie das Verzeichnis datadir/geth
  5. Starten Sie geth erneut mit Ihrer benutzerdefinierten Genesis-Datei und Ihrem Datenverzeichnis

Möglicherweise finden Sie mein Github-Repo zum Einrichten eines privaten Ethereum-Netzwerks hilfreich:

https://github.com/chafey/ethereum-private-network

Die Schritte, die Sie geschrieben haben, haben nicht funktioniert. Ich glaube nicht, dass der Fehler in den Schritten, die ich befolgt habe, darauf zurückzuführen war, dass ein Konto hinzugefügt wurde, das nicht zu den Feldern Etherbase und Pre-Allocation existiert (ich ändere das später, nachdem ich ein neues Konto erstellt und dann den Client neu gestartet habe). Wenn der Fehler darauf zurückzuführen ist, sollte geth (idealerweise) nicht gestartet oder einen Fehler ausgegeben haben.
Geth weist den Ether nur dann den Konten zu, wenn der Befehl init ausgeführt wird. Die Konten müssen daher erstellt werden, bevor Sie init ausführen. Ich glaube nicht, dass Sie init und die Konsole gleichzeitig ausführen können. Führen Sie zuerst init aus und starten Sie es dann erneut mit der Konsole, wenn Sie möchten.
Vielen Dank. Das hat funktioniert. Hätte die zusätzliche Konsole bemerken sollen.