nbits de coincidencia de dosis hash

Estoy tratando de clonar una moneda y creé un bloque de génesis, pero cuando ejecuto la billetera, no se inicia. Cuando voy al archivo de registro, veo este error y, sinceramente, no sé cómo resolver el problema. ¿Cómo creo el bloque de génesis para el algoritmo quark-hash? Probé algunos generadores y no funcionó. Cualquier ayuda sería apreciada.

Esto es del archivo debug.log...

ERROR: CheckProofOfWork() : hash no coincide con nBits ERROR: CheckBlockHeader() : prueba de trabajo fallida ERROR: CheckBlock() : CheckBlockHeader falló ERROR: ConnectTip() : ConnectBlock 7451cc25dd4fdfc6f441298e59dfc012d2dc078d687a120bf94efd20d98be falló

Respuestas (2)

Ok, estoy clonando BitcoinGreen... Utiliza el algoritmo Quark. La forma en que genero el bloque de génesis y MerkleRoot es pegando el código en chainparams.cpp, que es esto...

printf("genesis.GetHash = %s\n", genesis.GetHash().ToString().c_str());

printf("Gensis Hash Merkle: %s\n", genesis.hashMerkleRoot.ToString().c_str());

Aunque esto me dio el código del bloque de génesis, no generó el código correcto para la moneda. Incluso uso este código especial, que también genera el bloque de génesis...

const int SCRYPT_SCRATCHPAD_SIZE = 131072 + 63;

      //if (true && genesis.GetHash() != hashGenesisBlock)
    if(true)
    {
        printf("Searching for genesis block...\n");
        // This will figure out a valid hash and Nonce if you're
        // creating a different genesis block:
        uint256 hashTarget = CBigNum().SetCompact(genesis.nBits).getuint256();
        uint256 thash;
        char scratchpad[SCRYPT_SCRATCHPAD_SIZE];

        while(true)
        {
            scrypt_1024_1_1_256_sp_generic(BEGIN(genesis.nVersion), BEGIN(thash), scratchpad);
            if (thash <= hashTarget)
                break;
            if ((genesis.nNonce & 0xFFF) == 0)
            {
                printf("nonce %08X: hash = %s (target = %s)\n", genesis.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str());
            }
            ++genesis.nNonce;
            if (genesis.nNonce == 0)
            {
                printf("NONCE WRAPPED, incrementing time\n");
                ++genesis.nTime;
            }
        }
        printf("block.nTime = %u \n", genesis.nTime);
        printf("block.nNonce = %u \n", genesis.nNonce);
        printf("block.GetHash = %s\n", genesis.GetHash().ToString().c_str());

        }

Esto tampoco funcionó. Así que eso es todo. Lo intenté.

Actualice su pregunta original la próxima vez en lugar de agregar su actualización como respuesta. Fui a darle un voto positivo a su pregunta por un esfuerzo de investigación y en su lugar se lo di a su respuesta.

Por favor proporcione más datos. ¿Cómo generaste tu bloque de génesis? (Parámetros específicos) ¿Qué moneda está clonando usando qué algoritmo PoW? ¿Qué pasos ha tomado en relación con la edición del código fuente?

EDITAR:

De acuerdo, parece que depende del cliente para imprimir el hash de génesis en el registro de depuración, lo que no funcionará si el cliente nunca se inicia correctamente. Es esto o algún tipo de error de punto de control basado en la salida del registro de depuración. De cualquier manera, recomiendo usar el script genesis python @ https://github.com/lhartikk/GenesisH0/blob/master/genesis.py

Después de descargar con éxito todas las dependencias, puede ejecutar el comando de terminal python genesis.py help en el directorio donde lo descargó para obtener una lista completa de los comandos/indicadores disponibles. Esencialmente, solicita todos los parámetros requeridos (marca de tiempo de Unix, pzTimestamp, PubKey, algoritmo PoW, nonce, etc.) necesarios para producir un hash de génesis válido.

Luego deberá reemplazar todos estos parámetros en el código fuente, así como el propio hash de génesis y asegurarse de que NO haya referencias a NINGÚN otro bloque, ya que de hecho estamos comenzando desde el bloque de génesis.

No dude en publicar actualizaciones para obtener más ayuda si es necesario.