Estoy tratando de crear un nuevo bloque de génesis, ya sabes, para la ciencia. Vi muchos escritos en línea, pero la mayoría de ellos parecen un poco desactualizados. Encontré la función CreateGenesisBlock()
en el código fuente.
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();
Este es mi código actual. Al ejecutar mi coind
falla conERROR: ReadBlockFromDisk: Errors in block header at CBlockDiskPos(nFile=0, nPos=8)
Según mi investigación actual, parece que el bloque de génesis no cumplió con los criterios de PoW de alguna manera.
Pensé en ponerlo CreateGenesisBlock
en un bucle para generar bloques hasta que encontré uno válido, pero no estoy seguro de cómo verificar si el bloque es válido. ¿Alguien puede darme un consejo?
El bloque de génesis aún debe cumplir con los requisitos de prueba de trabajo que también deben cumplir otros bloques. Así que en realidad debes extraer el bloque de génesis. Para hacer esto, debe poner CreateGenesisBlock en un while
bucle y seguir incrementando el nonce y, si es necesario, incrementar un extranonce en la transacción de la base de monedas.
Para verificar que tiene una prueba de trabajo válida, use la CheckProofOfWork()
función (grep para ella y puede averiguar qué argumentos toma).
To check that it has a valid proof of work, use the CheckProofOfWork() function
Creo que esto es lo que me estaba perdiendo. ¡Salud!
creador