Cómo crear un nuevo bloque de génesis usando la función CreateGenesisBlock()

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 coindfalla 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 CreateGenesisBlocken 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?

Me encontré con el mismo problema. ¿Has resuelto? ¿Cómo?

Respuestas (1)

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 whilebucle 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() functionCreo que esto es lo que me estaba perdiendo. ¡Salud!
@soupdiver Escriba todo el código que utilizó. Yo también estoy atascado en esta etapa durante días...
@leegod Supongo que estamos trabajando en el mismo proyecto (de demostración) que (¿la mayoría?) de los otros a los que se les ocurrió esa pregunta en los últimos meses... Al final encontré un python, que tuve que modificar, que "minó" un bloque de génesis válido.
@soupdiver Estoy trabajando en la fuente más nueva de litecoin. Para hacer alt. Entonces, ¿qué es esa pitón? ¿Te refieres a GénesisH0? ¿Cómo modificó y qué valores debo ingresar exactamente para usarlo correctamente?
@leegod sí, es GenesisH0. No sé sobre los requisitos/especificaciones de la moneda que intentas crear. Así que no puedo darte valores exactos.
Solo quiero clonar litecoin con algunos cambios de parámetros. Y GenesisH0, no puedo hacer coincidir el valor correcto, qué valores debo ingresar allí, no lo sé exactamente, probé varias cosas, solo hay errores. así que dejé de usar GenesisH0, solo usé el método printf, ahora el error dice ver el archivo debug.log, debug.log dice error ReadBlockFromDisk.
y también, si usa GenesisH0, solo es mío en su script, ¿no es así? Entonces, ¿no está relacionado con el cliente de mycoind? Entonces, ¿cómo hacer una recompensa previa a la mina para poseer la dirección de la billetera? ¿Porque usar GenesisH0 significa que no hay minería de bloques de génesis real del lado del cliente?
@Andrew Chow Hola. Gracias por responder. Pero también estoy atascado en esta etapa. ¿Puedes vincular o poner el código de trabajo exacto? No puedo encontrar en ningún lado.
@Andrew Chow ¿Dónde está ese CreateGenesisBlock? ¿El lugar original de chainparams.cpp? (línea 123~5) y terminar esto con while loop? ¿Y este es el código que respondiste? pastebin.com/EC4tVZQZ
@leegod No tengo ningún código específico que pueda proporcionarle. No lo he escrito ni lo planeo. No estoy en el negocio de crear altcoins o ayudar a la gente a hacer altcoins.
@AndrewChow Entonces lo hice en el archivo chainparams.cpp como, const CChainParams& chainparams = Params(); while(!CheckProofOfWork(genesis.GetHash(), genesis.nBits, chainparams.GetConsensus()) { ++ genesis.nNonce; } Pero esto ni siquiera se compila. Agregué #include "pow.h" en la parte superior de chainparams. cpp, pero cuando intento 'hacer' para compilar, el error del terminal dice, chainparams.cpp:127: referencia indefinida a "CheckProofOfWork(uint256,,,,, )' ¿Cómo pasar esto?... Por favor.
Necesitará modificar el archivo Makefile.am para que el Makefile generado pueda encontrar pow.h y vincularlo cuando compile validation.cpp.
@AndrewChow Así que revisé Makefile.am, así que ahora se resolvió el error [indefinido]. Pero ahora recibo un nuevo error, dice, lee@newlite:~/Desktop/BitcoinEssence/src$ ./bitcoinessenced bitcoinessenced: chainparams.cpp:524: const CChainParams& Params(): La afirmación `globalChainParams' falló. Anulado (núcleo volcado) Aquí está el detalle. bitcointalk.org/index.php?topic=3031897.new#new