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 coind
schlä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 CreateGenesisBlock
in 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?
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 while
Schleife 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() function
Ich denke, das ist es, was mir gefehlt hat. Beifall!
Schöpfer