Ich habe versucht, ein privates Ethereum-Testnetz einzurichten. Ich konnte einen benutzerdefinierten Genesis-Block erstellen und ein Konto erstellen. Jetzt habe ich meine customGenesis.json geändert, um meinem Konto Ether vorab zuzuweisen, ich wurde getroffen von:
Fatal: Genesis-Block konnte nicht geschrieben werden: falscher Genesis-Block in der Datenbank (habe 6650a0ac6c5e8054, neu 423e5a9e61bce67e)
Schritte zum Reproduzieren:
Genesis-Zustand einrichten:
geth --identity "Prashant" --fast --cache=1024 --rpc --rpcport "8013" --rpccorsdomain "*" --datadir "myPrivateNetwork2" --port "30312" --rpcapi "db,eth, net,web3,admin,debug,miner,personal,web3" --networkid 1902 --nat "any" init customGenesis.json-Konsole
Starten Sie geth ohne init, um ein Konto zu erstellen:
geth --identity "Prashant" --fast --cache=1024 --rpc --rpcport "8013" --rpccorsdomain "*" --datadir "myPrivateNetwork2" --port "30312" --rpcapi "db,eth, net,web3,admin,debug,miner,personal,web3" --networkid 1902 --nat "any" -ipcpath "/home/prsingh/.ethereum/geth.ipc" Konsole
Erstellen Sie ein Konto in der Geth-Konsole
personal.newAccount("mein_passwort");
Ändern Sie customeGenesis.json, um Ether vorab zuzuweisen
"alloc":{ "0xe43ee2af5a41385ff951f0c3fe2f5156287757a6": {"balance": "20000000000000000000" } }
Führen Sie erneut geth mit init aus
geth --identity "Prashant" --fast --cache=1024 --rpc --rpcport "8013" --rpccorsdomain "*" --datadir "myPrivateNetwork2" --port "30312" --rpcapi "db,eth, net,web3,admin,debug,miner,personal,web3" --networkid 1902 --nat "any" init customGenesis.json-Konsole
Bei Schritt 5 erhalte ich die wrong genesis block in database error
. Ich bin mir ziemlich sicher, dass dies daran liegt, dass ich das geth
with init
param bereits ausgeführt habe. Wenn ich also versuche, es das zweite Mal auszuführen, geth
wird ein Fehler ausgegeben, da sich diese bereits in einem Genesis-Block befinden.
Aber dann ist die Frage: Wie werde ich meinem Konto Ether vorab zuweisen?
Hier ist meine customGenesis.json , nachdem ich meinem Konto Geld hinzugefügt habe.
{
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x8000000",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc":{
"0xe43ee2af5a41385ff951f0c3fe2f5156287757a6":
{"balance": "20000000000000000000" }
}
}
Sie können keine Init erneut durchführen, wenn Sie bereits eine Init auf Datadir durchgeführt haben. Um das zu erreichen, was Sie wollen, müssen Sie zuerst einfach ein Konto erstellen. Sobald das Konto erstellt ist, verwenden Sie es für die Vorfinanzierung, indem Sie es in die Genesis-Datei einfügen. Gehen Sie jetzt zur Initialisierung von Datadir.
Die Schritte sind also
1) Erstellen eines Kontos in Datadir
geth --datadir <path_of_data_directory> account new
(Ich habe die Befehlszeilenmethode für die Kontoerstellung verwendet, die keinen Aufruf der Geth-Konsole erfordert.)
2) Verwenden Sie das erstellte Konto als vorfinanziertes Konto, fügen Sie einen Eintrag in der Genesis-Datei hinzu.
3) Init des Datenverzeichnisses mit der Genesis-Datei.
geth --datadir <path_of_data_directory> init <path_of_genesis_file>
Ich habe nur minimale Parameter verwendet, es sollte auch mit den von Ihnen verwendeten Parametern gut funktionieren. Wichtiger Hinweis: Sie können Ihr Datenverzeichnis nicht neu initialisieren, sobald es initialisiert ist.
Löschen Sie den Ordner chaindata und führen Sie dann die Initialisierung durch.
Es scheint, dass Sie in der Befehlszeile eine andere networkId als die in Ihrer genesis.json-Datei angegeben haben.
In der neuen Version von geth für ein privates Testnetzwerk können Sie den Parameter --networkId entfernen, wenn er sich bereits im Genesis-Block befindet.
Wenn Sie das Ropsten-Testnetz nicht von Ihrem benutzerdefinierten Ethereum-Standort laden können, verwenden Sie Folgendes:
geth --ropsten --syncmode fast --datadir /mnt/foo/.ethereum
Versuchen Sie, das Datenverzeichnis so zu ändern, dass es tatsächlich auf die Ropsten-Daten zeigt, die sich einen Ordner tiefer in .ethereum befinden.
geth --ropsten --syncmode fast --datadir /mnt/foo/.ethereum/ropsten
Prashant Prabhakar Singh
Aniket
geth --datadir <path to data directory > init <genesis file path>
. Hoffe es wird die Dinge korrigieren.Chalpat
Chalpat
Chalpat
Richard Horrocks
Omkar Khair
Prashant Prabhakar Singh
init customGenesis.json
Wenn Sie also meinen Schritten folgen, ich habe zweimal angerufen . Aber in den von Ajay vorgeschlagenen Schritten rufen Sie dies nur einmal auf und versuchen daher nicht, einen bereits vorhandenen Genesis-Block zu überschreiben. Sie müssen bereits angerufen habeninit
und diesen Fehler erhalten haben. Geben Sie ihm einen Neuanfang.