So erstellen Sie einen neuen Genesis-Block mit der Funktion CreateGenesisBlock()

Ich versuche, einen neuen Genesis-Block zu erstellen, wissen Sie, für die Wissenschaft. Ich habe viele Artikel online gesehen, aber die meisten scheinen irgendwie veraltet zu sein. Ich habe die Funktion CreateGenesisBlock()im Quellcode gefunden.

    genesis = CreateGenesisBlock(1317972665, 1337, 0x1e0ffff0, 1, 100 * COIN);

    std::cout<< genesis.GetHash().ToString().c_str() << std::endl;
    std::cout<< genesis.hashMerkleRoot.ToString().c_str() << std::endl;

    consensus.hashGenesisBlock = genesis.GetHash();

Das ist mein aktueller Code. Beim Ausführen von my coindschlägt es mit fehlERROR: ReadBlockFromDisk: Errors in block header at CBlockDiskPos(nFile=0, nPos=8)

Aus meiner aktuellen Forschung geht hervor, dass der Genesis-Block die PoW-Kriterien irgendwie nicht erfüllt hat.

Ich habe darüber nachgedacht, das CreateGenesisBlockin eine Schleife zu setzen, um Blöcke zu generieren, bis ich einen gültigen gefunden habe, aber ich bin mir nicht sicher, wie ich überprüfen soll, ob der Block gültig ist. Kann jemand einen Tipp geben?

Ich bin auf dasselbe Problem gestoßen. Hast du gelöst? Wie?

Antworten (1)

Der Genesis-Block muss weiterhin die Arbeitsnachweisanforderungen erfüllen, die auch andere Blöcke erfüllen müssen. Sie müssen also tatsächlich den Genesis-Block abbauen. Dazu müssen Sie CreateGenesisBlock in eine whileSchleife versetzen und einfach die Nonce weiter erhöhen und bei Bedarf eine Extranonce in der Coinbase-Transaktion erhöhen.

Um zu überprüfen, ob ein gültiger Arbeitsnachweis vorliegt, verwenden Sie die CheckProofOfWork()Funktion (grep for it und Sie können herausfinden, welche Argumente erforderlich sind).

To check that it has a valid proof of work, use the CheckProofOfWork() functionIch denke, das ist es, was mir gefehlt hat. Beifall!
@soupdiver Bitte schreiben Sie den gesamten Code, den Sie verwendet haben. Ich stecke auch seit Tagen in dieser Phase fest...
@leegod Ich nehme an, wir arbeiten an demselben (Demo-)Projekt wie (die meisten?) der anderen, die diese Frage in den letzten Monaten gestellt haben ... Am Ende fand ich eine Python, die ich ändern musste, die einen gültigen Genesis-Block "abgebaut" haben.
@soupdiver Ich arbeite an der neuesten Litecoin-Quelle. alt machen. Also, was ist das für eine Python? Du meinst GenesisH0? Wie haben Sie geändert und welche Werte muss ich genau eingeben, um es richtig zu verwenden?
@leegod ja, es ist GenesisH0. Ich kenne die Anforderungen/Spezifikationen der Münze, die Sie erstellen möchten, nicht. Daher kann ich dir keine genauen Werte nennen.
Ich möchte nur Litecoin mit einigen Parameteränderungen klonen. Und GenesisH0, ich kann den richtigen Wert nicht zuordnen, welche Werte ich dort eingeben soll, weiß ich nicht genau, ich habe verschiedene Dinge ausprobiert, es sind nur Fehler. Also gebe ich die Verwendung von GenesisH0 auf, habe nur die printf-Methode verwendet, jetzt sagt der Fehler, siehe debug.log-Datei, debug.log sagt, ReadBlockFromDisk-Fehler.
und auch, wenn GenesisH0 verwendet wird, ist es nur in seinem Skript meins, nicht wahr? Dann keine Verbindung zum mycoin-Client? Wie kann man dann eine Pre-Mining-Belohnung für die eigene Wallet-Adresse erstellen? Weil die Verwendung von GenesisH0 kein eigentliches Genesis-Block-Mining auf Clientseite bedeutet?
@ Andrew Chow Hallo. Danke für die Antwort. Aber ich stecke auch in dieser Phase fest. Können Sie den genauen Arbeitscode verlinken oder einfügen? Ich kann nirgendwo finden.
@Andrew Chow Wo ist dieser CreateGenesisBlock? Der ursprüngliche Ort von chainparams.cpp? (Zeile 123~5) und dies mit einer While-Schleife abschließen? Und ist das der Code, den Sie beantwortet haben? pastebin.com/EC4tVZQZ
@leegod Ich habe keinen bestimmten Code, den ich Ihnen zur Verfügung stellen kann. Ich habe es nicht geschrieben und habe es auch nicht vor. Ich bin nicht im Geschäft, Altcoins zu erstellen oder Menschen bei der Herstellung von Altcoins zu helfen.
@AndrewChow Also habe ich in der Datei chainparams.cpp wie folgt vorgegangen: const CChainParams& chainparams = Params(); while(!CheckProofOfWork(genesis.GetHash(), genesis.nBits, chainparams.GetConsensus()) { ++ genesis.nNonce; } Aber das wird noch nicht einmal kompiliert. Ich habe #include "pow.h" am Anfang von chainparams hinzugefügt. cpp, aber wenn ich 'make' zum Kompilieren versuche, sagt der Terminalfehler, chainparams.cpp:127 : undefined reference to "CheckProofOfWork(uint256,,,,, )' How to pass this?... Plz.
Sie müssen die Datei Makefile.am ändern, damit das generierte Makefile pow.h finden und verknüpfen kann, wenn es die Datei "validation.cpp" kompiliert.
@AndrewChow Also habe ich Makefile.am überarbeitet, also ist dieser [undefinierte] Fehler jetzt behoben. Aber jetzt bekomme ich einen neuen Fehler, sagt lee@newlite:~/Desktop/BitcoinEssence/src$ ./bitcoinessenced bitcoinessenced: chainparams.cpp:524: const CChainParams& Params(): Assertion `globalChainParams' failed. Abgebrochen (Core Dump) Hier ist ein Detail. bitcointalk.org/index.php?topic=3031897.new#new