Blockgrößenbegrenzung in Bitcoin v0.01

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?

if (vtx.empty() || vtx.size() > MAX_BLOCK_SIZE || ::GetSerializeSize(*this, SER_NETWORK) > MAX_BLOCK_SIZE) . sourceforge.net/p/bitcoin/code/251/tree//trunk/main.cpp

Antworten (1)

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, - 10000sicherzustellen, 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

außerdem ist die Variable auf src/consensus/consensus.h definiert. /** Die maximal zulässige Größe für einen serialisierten Block in Bytes (nur für Puffergrößenbeschränkungen) */ static const unsigned int MAX_BLOCK_SERIALIZED_SIZE = 4000000;