Premine-Münzen aus dem Genesis-Block sind nach einer Transaktion vom Konto/Wallet verschwunden

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 -vParameter 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 1Genesis 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

Geben Sie hier die Bildbeschreibung ein

Kontostandsdetails von qt wallet und command

Geben Sie hier die Bildbeschreibung einFür den Bergbau mit cpuminer

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 im Sonderfall für den Genesis-Block, Überspringen der Verbindung seiner Transaktionen (seine Coinbase ist nicht auszahlbar)

Ä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.

Haben Sie validation.cppspeziell an dieser Linie Anpassungen vorgenommen? github.com/litecoin-project/litecoin/blob/0.14/src/…
@JBaczuk Nun, eigentlich als Neuling. Was ich versucht habe, ist die kommentierte Rückgabe wahr; -Anweisung und Build erneut, aber es gibt einen Fehler, als ich den Daemon-Segmentierungsfehler gestartet habe (Core-Dump). Muss ich dafür irgendeine Änderung in dieser Datei vornehmen?
@JBaczuk, bitte überprüfen Sie die Frage. Ich habe ein Update hinzugefügt
Sie haben Recht, diese Zeile zu kommentieren. Es segfaults, weil es versucht, auf einen vorherigen Block zu verweisen, wenn es sich auf der Genesis befindet, aber es gibt keinen. Suchen Sie nach assert(pindex->pprev). Alle Änderungen, die Sie vornehmen müssen, befinden sich in dieser Datei.
@JBaczuk Ohh okay, aber überprüfen Sie bitte einmal meine aktualisierte Frage, die als Update 2 erwähnt wird

Antworten (1)

Sie müssen ein paar Dinge tun, um den Genesis-Block ausgabefähig zu machen, alles in allem validation.cpp(ungetestet):

  1. Sendeverbindung zulassen, L#2904 :

    if (*pindexPrev->phashBlock == chainparams.GetConsensus().hashGenesisBlock)
        // return true;
    
  2. 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");
    
  3. 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);
        }
    }
    
Okay, lassen Sie mich mit der obigen Änderung versuchen. nach dem Entfernen von Änderungen, die ich in Update 2 vorgenommen habe
Validation.cpp gemäß Antwort aktualisiert . stehe aber vor dem gleichen Problem. Hier habe ich Brieftaschen-Bildschirme angebracht