Estoy tratando de crear una moneda de prueba usando litecoin. Para crear el bloque de génesis, cambié algunas líneas a:
block.nTime = 1390948469; // current time
uint256 hashGenesisBlock("0x"); //I dont now it's true or false
uint256 hash = block.GetHash();
printf("%s\n", hash.ToString().c_str());
printf("%s\n", hashGenesisBlock.ToString().c_str());
printf("%s\n", block.hashMerkleRoot.ToString().c_str());
assert(block.hashMerkleRoot == uint256("0x")); //I dont now it's true or false.
block.print();
assert(hash == hashGenesisBlock);
Cuando construyo el daemon y lo ejecuto, aparece este error:
litecoind: main.cpp:2788: bool InitBlockIndex(): Assertion `hash == hashGenesisBlock' failed.
Aborted
Cuando reviso el ./litecoin debug.log
archivo, veo el hashMerkleRoot y el hashGenesisBlock anteriores que litecoin usa ahora. No puedo crear nuevos hash y merkle root.
Crear bloque de génesis. Algunas personas se quedan atrapadas allí, es muy fácil:
Una vez que haya terminado, guárdelo. Ahora el bloque de génesis no coincidirá con la verificación de hash y la verificación de raíz de merkle, no importa.
La primera vez que ejecute el código compilado (daemon o qt), dirá "la afirmación falló". Simplemente salga del programa, vaya al directorio de configuración (en AppData/Roaming), abra debug.log, obtenga el hash después de "block.GetHash() =", cópielo y péguelo al principio de main.cpp, hashGenesisBlock. Obtenga también la raíz de merkle en el mismo archivo de registro, péguela en la posición ... en el siguiente código, en LoadBlockIndex()
assert(block.hashMerkleRoot == uint256("0x..."));
Vuelva a compilar el código y se creará el bloque de génesis.
Por cierto, no olvide cambiar "txNew.vout[0].nValue = " a la moneda por bloque que definió, no importa dejar 50, solo sea consistente con su moneda por bloque (haga esto antes de ajustar el hash y m-root, de lo contrario se cambiarán de nuevo).
consulte https://bitcointalk.org/index.php?topic=225690.0 para obtener información completa
Si desea generar nuestro propio bloque de génesis único, debe generar y reemplazar al menos los siguientes parámetros:
La clave pública en el script de transacción de salida también se puede cambiar a un valor único. Sin embargo, como el bloque de génesis no se puede gastar de todos modos, se puede usar la misma clave pública que en, por ejemplo, Litecoin. Además, los nBits no deben cambiarse si planea crear un clon de Litecoin.
Puede usar este script para crear los valores para un genesisblock scrypt: https://github.com/lhartikk/GenesisH0
No veo el código donde realmente cambias el block
hash del objeto. El método hashGenesisBlock()
devuelve un hash, pero nunca se pasa al block
objeto.
Además, la primera línea de tu código también tiene un error: la hora actual es 1390959227
, no 1390948469
. Esto también podría causar un problema.
Creé mi génesis usando este código, pero debes comentar todas las afirmaciones en chainparams.cpp:
arith_uint256 best = arith_uint256();
int n=0;
arith_uint256 hashTarget = arith_uint256().SetCompact(genesis.nBits);
while (UintToArith256(genesis.GetHash()) > hashTarget) {
arith_uint256 c=UintToArith256(genesis.GetHash());
if(c < best || n==0)
{
best = c;
n=1;
printf("%s %s %s\n",genesis.GetHash().GetHex().c_str(),hashTarget.GetHex().c_str(),
best.GetHex().c_str());
}
++genesis.nNonce;
if (genesis.nNonce == 0) { ++genesis.nTime; }
}
printf("%s\n",genesis.ToString().c_str());
ZG-RG
pszTimestamp
, puse el último tiempo de Unix. Después de compilar y comenzar a hacer daemon,litecoind: main.cpp:2788: bool InitBlockIndex(): Assertion hash == hashGenesisBlock' failed. Aborted
obtengo . Cuando reviso debug.log, veo el génesis original de litecoin y los hashes de merkleroot. ¿Qué estoy haciendo mal?claudio
ERROR: CheckProofOfWork() : hash doesn't match nBits
- ¿alguna idea?creador