Welches Fragment des Satoshi-Clients überprüft, ob der angekündigte Block eine gültige Belohnung hat?
Ich meine, wir leben jetzt in der 25-BTC-Belohnungsperiode. Ich schätze, der Kunde führt nach Erhalt eines neu geprägten Blocks Überprüfungen durch, wie zum Beispiel die Überprüfung, ob Ein- und Ausgänge ausgeglichen sind, und ich schätze, ob die Belohnung 25 BTC beträgt, richtig?
Wo ist also dieses Fragment des Codes?
Ich weiß, wo der Code ist, der das BTC-Angebot auf 21 Millionen begrenzt :
int64 static GetBlockValue(int nHeight, int64 nFees)
{
int64 nSubsidy = 50 * COIN;
// Subsidy is cut in half every 210000 blocks, which will occur approximately every 4 years
nSubsidy >>= (nHeight / 210000);
return nSubsidy + nFees;
}
...und ich suche jemanden, der mich an die richtige Stelle weist, wo die Überprüfung durchgeführt wird.
Es gibt 3 Stellen, an denen GetBlockValue aufgerufen wird. Einer befindet sich auf eingehenden Blöcken, einer auf Blöcken, die wir abbauen, und einer ist eine Fehlermeldung. Dies ist derjenige für eingehende Blöcke:
if (vtx[0].GetValueOut() > GetBlockValue(pindex->nHeight, nFees))
return state.DoS(100, error("ConnectBlock() : coinbase pays too much (actual=%"PRI64d" vs limit=%"PRI64d")", vtx[0].GetValueOut(), GetBlockValue(pindex->nHeight, nFees)));
Dieser betrachtet die erste Transaktion (die Coinbase-Transaktion) und prüft den Wert. Wenn es größer ist als die Subvention plus die Gebühren, dann wird der Block abgelehnt und der Knoten, der den Block gesendet hat, wird auf die schwarze Liste gesetzt.
meeDamian