In main.h (Zeile 17) haben wir eine Konstante MAX_SIZE
static const unsigned int MAX_SIZE = 0x02000000;
was im Dezimalformat 33554432 (32 MB) entspricht
Diese Konstante wird verwendet, um zu überprüfen, ob der Block die Größenbeschränkung in main.cpp (Zeile 1154) überschreitet.
bool CBlock::CheckBlock() const
{
// These are checks that are independent of context
// that can be verified before saving an orphan block.
// Size limits
if (vtx.empty() || vtx.size() > MAX_SIZE || ::GetSerializeSize(*this, SER_DISK) > MAX_SIZE)
return error("CheckBlock() : size limits failed");
...
}
Laut der Git-Pull-Request-Historie wurde die Zeile 18 von Gavin Andresen zu main.h hinzugefügt:
static const unsigned int MAX_BLOCK_SIZE = 1000000;
https://github.com/bitcoin/bitcoin/blame/9d2174b6f5f3fac2463c7ebc2dbb9004b3740d23/main.h
diese neue Konstante scheint nur in der Funktion BitcoinMiner() auf main.cpp verwendet zu werden
https://github.com/bitcoin/bitcoin/blame/9d2174b6f5f3fac2463c7ebc2dbb9004b3740d23/main.cpp#L2613
if (nBlockSize + nTxSize >= MAX_BLOCK_SIZE - 10000)
continue;
Anscheinend glaubte Satoshi, dass dies die Kette teilen würde, aber dies wird nur auf dem Mining-Knoten eingerichtet, nicht auf einem Knoten, der nur neue Blöcke sammelt und sie ihrer Kette hinzufügt.
Welche Bedeutung hat diese letzte Zeile? Wie wirkt sich das auf den Konsens aus? Wo ist der Code, der die Blockgröße in der aktuellsten Version von Bitcoin Core begrenzt?
Welche Bedeutung hat diese letzte Zeile?
Es stellt sicher, dass der eingebaute Miner keine Blöcke erstellt, die größer als MAX_BLOCK_SIZE
. Es prüft, ob die ausgewählte Transaktion größer als das Limit ist. Der Grund dafür ist, - 10000
sicherzustellen, dass genügend Platz für die Coinbase-Transaktion und den Block-Header vorhanden ist.
Wie wirkt sich das auf den Konsens aus?
Es ist effektiv eine weiche Gabel. Bergleute werden keine Blöcke größer als MAX_BLOCK_SIZE
. Ansonsten gibt es keine Auswirkung auf den Konsens.
Wo ist der Code, der die Blockgröße in der aktuellsten Version von Bitcoin Core begrenzt?
Es ist in CheckBlock()
, die gleiche Funktion wie die Größenprüfung, seit es eine Größenprüfung gibt. Der Standort dieser Funktion ist natürlich umgezogen. Derzeit ist es hier: https://github.com/bitcoin/bitcoin/blob/master/src/validation.cpp#L3093
Pedro