Schwerwiegend: Fehler beim Schreiben des Genesis-Blocks: Falscher Genesis-Block in der Datenbank

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:

  1. 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

  2. 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

  3. Erstellen Sie ein Konto in der Geth-Konsole

    personal.newAccount("mein_passwort");

  4. Ändern Sie customeGenesis.json, um Ether vorab zuzuweisen

    "alloc":{
         "0xe43ee2af5a41385ff951f0c3fe2f5156287757a6":
         {"balance": "20000000000000000000" }
     }
    
  5. 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 gethwith initparam bereits ausgeführt habe. Wenn ich also versuche, es das zweite Mal auszuführen, gethwird 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" }
    }
}
Ich kann. Aber ich glaube nicht, dass es ein Problem in der Genesis-Datei gibt. Da ich beim ersten Mal Genesis-Block erfolgreich schreiben kann. Die Neuinitialisierung von Genesis mit einigen vorab zugewiesenen Mitteln führt jedoch zu Fehlern.
Führen Sie nur diesen Befehl einmal aus und dann den vollständigen Befehl: geth --datadir <path to data directory > init <genesis file path>. Hoffe es wird die Dinge korrigieren.
Ist der networkId-Parameter im geth-Befehl und die chainId in genesis.json gleich?
Sie sind beide unterschiedlich ethereum.stackexchange.com/questions/15682/…
Ich versuche, mein Konto mit einigen Ethern zu finanzieren und stand vor dem gleichen Problem. Ich habe versucht, die von Ajay vorgeschlagenen Schritte auszuführen, aber ich erhalte Fatal: Fehler beim Schreiben des Genesis-Blocks: Die Datenbank enthält bereits einen inkompatiblen Genesis-Block (habe 346a147f2301febc, neu acdccee41fea8224).
Hi. Wenn Sie eine neue Frage haben, stellen Sie diese bitte, indem Sie auf die Schaltfläche „Frage stellen“ klicken , anstatt sie als Antwort zu einer vorhandenen Frage hinzuzufügen.
Dies ist eine Frage und sollte als neue Frage gepostet werden. Nicht im Antwortfeld.
@Chalpat Der Fehler bedeutet im Grunde, dass Sie bereits einen Genesis-Block haben. init customGenesis.jsonWenn 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 haben initund diesen Fehler erhalten haben. Geben Sie ihm einen Neuanfang.

Antworten (4)

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.

dadurch geht das erstellte Konto verloren
Ajay, es wird das Konto nicht löschen, wenn es nur der Chaindata-Ordner ist

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