Bitte überprüfen Sie die gesamte Frage einmal, bevor Sie eine negative Bewertung abgeben oder als Duplikat markieren von
Warum kann die Coinbase des Genesis-Blocks nicht ausgegeben werden?
Warum ich keine Transaktion vom Genesis-Block erhalten kann [Duplikat]
Ich erstelle AltCoin aus der Litecoin -Quelle. Und verwende GenesisHO , um Genesis-Blockdetails wie Nonce, Genesis-Hash, Merkle usw. zu generieren.
Beim Generieren des Genesis-Blocks habe ich die Münzwertparameter im Genesis-Münzwert geändert. das sind -v
Parameter und generierter Genesis-Hash und Merkle usw.
Ich habe Änderungen in Bezug auf Genesis, Nonce und Münzen für den Genesis-Block vorgenommen.
genesis = CreateGenesisBlock(1538404994, 2086003386, 0x1e0ffff0, 1, 50000 * COIN);
z.B. Ich möchte 50.000 Münzen im Genesis-Block vorschürfen. Ich möchte keine Bedingung in der Validierung.cpp angeben, wie wenn Blockhöhe 1 als Belohnung 50.000 sein sollte.
Ich habe einen Pub-Schlüssel generiert und denselben Pub-Schlüssel beim Generieren von Genesis-Hash verwendet. Ich kann also diese Genesis-Blockmünzen verwenden, indem ich den privaten Schlüssel dieses Pub-Schlüssels importiere.
Nach allen oben genannten Quelländerungen habe ich daemon, cli, tx und qt aus derselben Quelle erstellt.
Nächste
Von cli aus habe ich command( coin-cli generate 1
) ausgeführt, um einen Block zu generieren, damit ich eine Genesis-Blockmünze erhalten kann (Ja !! Anfangs befindet sie sich im unreifen Zustand, nach x (die ich auf 1 gesetzt habe) Menge an Block wird sie im reifen Zustand sein ). Und importierte diesen privaten Schlüssel in die Brieftasche.
Ergebnis von oben:
Nach Ausführung von coin-cli generate 1
Genesis werden Coins generiert. Angezeigt in Wallet und Account unter Accountname „“
Mining gestartet (mit cpuminer), das die Adresse eines anderen Kontos hat. Und nach wenigen Blöcken werden Genesis-Blockmünzen in den reifen Zustand umgewandelt
Problem/Problem
Als ich nun versuchte, Münzen von diesem Genesis-Block zu übertragen, wurde er nicht an eine Adresse übertragen.
Wo muss ich also andere Änderungen vornehmen, um diese Genesis-Münze ausgabefähig zu machen?
Transaktionsdetails
Kontostandsdetails von qt wallet und command
Litecoin-Quelle: https://github.com/litecoin-project/litecoin/tree/0.14
AKTUALISIEREN
Ich habe auch versucht, die Schritte aus dieser Antwort zu befolgen . Nach der Aktualisierung gemäß der obigen Antwort in der Validierung
Aktualisierung 2
In der Antwort erwähnte Änderungen in Bezug auf die Datei "validation.cpp" und "validation.cpp" hier und die gleiche aktualisierte Änderung, die unten zeilenweise erwähnt wird
Änderungen für assert(pindex->pprev);
WriteUndoDataForBlock-Methode hinzugefügt:
Änderung, um das Schreiben von Undo-Daten für den Genesis-Block zu überspringen
Nach dem Aktualisieren der obigen Dinge gibt es einen FehlerSegmentation fault (core dumped)
Und hier sind debug.log-Details
Danke.
Sie müssen ein paar Dinge tun, um den Genesis-Block ausgabefähig zu machen, alles in allem validation.cpp
(ungetestet):
Sendeverbindung zulassen, L#2904 :
if (*pindexPrev->phashBlock == chainparams.GetConsensus().hashGenesisBlock)
// return true;
Coinbase-Betragsprüfung für Genesis-Block überspringen, 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");
Schreiben von Undo-Daten für den Genesis-Block L#1947 überspringen :
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
speziell an dieser Linie Anpassungen vorgenommen? github.com/litecoin-project/litecoin/blob/0.14/src/…Benutzer1140237
Benutzer1140237
JBaczuk
assert(pindex->pprev)
. Alle Änderungen, die Sie vornehmen müssen, befinden sich in dieser Datei.Benutzer1140237