Verifique toda la pregunta una vez antes de marcar negativamente o marcar como duplicado de
¿Por qué no se puede gastar la base de monedas del bloque de génesis?
Por qué no puedo obtener la transacción del bloque de génesis [duplicado]
Estoy creando AltCoin a partir de la fuente litecoin . Y estoy usando GenesisHO generando detalles del bloque de génesis como nonce, hash de génesis, merkle, etc.
Mientras generaba el bloque de génesis, cambié los parámetros del valor de la moneda en el valor de la moneda de génesis. es decir, -v
parámetros y hash de génesis generado y merkle, etc.
He hecho cambios con respecto a génesis, nonce, monedas para el bloque génesis.
genesis = CreateGenesisBlock(1538404994, 2086003386, 0x1e0ffff0, 1, 50000 * COIN);
p.ej. Quiero preminar 50.000 monedas en el bloque génesis. No quiero dar una condición en la validación.cpp como si la altura del bloque 1 fuera la recompensa de 50,000.
Generé la clave de publicación y usé la misma clave de publicación mientras generaba el hash de génesis. Así que puedo usar esas monedas de bloque de génesis importando la clave privada de esa clave de publicación.
Después de todo el cambio anterior en la fuente, construí daemon, cli, tx y qt desde la misma fuente.
Próximo
Desde cli, he ejecutado el comando ( coin-cli generate 1
) para generar un bloque para poder obtener la moneda del bloque de génesis (¡Sí! Inicialmente, estará en estado inmaduro después de x (que configuré en 1) la cantidad de bloque estará en estado maduro ). E importó esa clave privada en la billetera.
Resultado de arriba:
Después de la ejecución de coin-cli generate 1
las monedas de génesis, se generan. Se muestran en la billetera y en la cuenta con el nombre de cuenta ""
Minería iniciada (usando cpuminer) que tiene la dirección de otra cuenta. Y después de unos bloques, las monedas del bloque de génesis se convirtieron al estado maduro.
Problema
Ahora, cuando traté de transferir desde ese bloque de monedas de génesis, no se transfirió a ninguna dirección. No se muestra en la billetera qt, pero usando el comando cli se muestra el saldo.
Entonces, ¿dónde necesito hacer otros cambios para que esa moneda de génesis sea gastable?
Detalles de transacciones
Detalles del saldo de qt wallet y command
Fuente de Litecoin: https://github.com/litecoin-project/litecoin/tree/0.14
ACTUALIZAR
También probé y seguí los pasos de esta respuesta Después de actualizar según la respuesta anterior en validation.cpp, aquí está el enlace de la misma
Actualización 2
Los cambios mencionados en la respuesta con respecto a la validación.cpp y el archivo de validación.cpp actualizado aquí y el mismo cambio actualizado mencionado a continuación en la línea sabia
Cambios para afirmar(pindex->pprev);
Se agregó el método WriteUndoDataForBlock:
Cambiar para omitir la escritura de datos de deshacer para el bloque de génesis
Después de actualizar las cosas anteriores, da errorSegmentation fault (core dumped)
Y aquí están los detalles de debug.log
Gracias.
Debe hacer algunas cosas para que el bloque de génesis sea gastable, todo incluido validation.cpp
(no probado):
Permitir conexión tx, L#2904 :
if (*pindexPrev->phashBlock == chainparams.GetConsensus().hashGenesisBlock)
// return true;
Omita la verificación de la cantidad de coinbase para el bloque de génesis, L#1933 :
if (block.vtx[0]->GetValueOut() > blockReward && block.GetHash() != chainparams.GetConsensus().hashGenesisBlock)
return state.DoS(100,
error("ConnectBlock(): coinbase pays too much (actual=%d vs limit=%d)", block.vtx[0]->GetValueOut(), blockReward),= REJECT_INVALID, "bad-cb-amount");
Omita la escritura de datos de deshacer para el bloque de génesis L#1947 :
if (block.GetHash() != chainparams.GetConsensus().hashGenesisBlock)
{
if (pindex->GetUndoPos().IsNull() || !pindex->IsValid(BLOCK_VALID_SCRIPTS))
{
if (pindex->GetUndoPos().IsNull()) {
CDiskBlockPos _pos;
if (!FindUndoPos(state, pindex->nFile, _pos, ::GetSerializeSize(blockundo, SER_DISK, CLIENT_VERSION) + 40))
return error("ConnectBlock(): FindUndoPos failed");
if (!UndoWriteToDisk(blockundo, _pos, pindex->pprev->GetBlockHash(), chainparams.MessageStart()))
return AbortNode(state, "Failed to write undo data");
// update nUndoPos in block index
pindex->nUndoPos = _pos.nPos;
pindex->nStatus |= BLOCK_HAVE_UNDO;
}
pindex->RaiseValidity(BLOCK_VALID_SCRIPTS);
setDirtyBlockIndex.insert(pindex);
}
}
JBaczuk
validation.cpp
, específicamente esta línea? github.com/litecoin-project/litecoin/blob/0.14/src/…usuario1140237
usuario1140237
JBaczuk
assert(pindex->pprev)
_ Todos los cambios que necesita hacer están en ese archivo.usuario1140237