Block is the representation of the tracing of a block in the Ethereum
blockchain. A block is a collection of [TransactionTrace] that are grouped
together and processed as an atomic unit. Each [TransactionTrace] is composed
of a series of [Call] (a.k.a internal transactions) and there is also at
least one call per transaction a.k.a the root call which essentially has the
same parameters as the transaction itself (e.g. from, to, gas, value,
etc.).
BlockWithRefs is a lightweight block, with traces and transactions
purged from the block within, and only. It is used in transports
to pass block data around.
The gas change model represents the reason why some gas cost has occurred.
The gas is computed per actual op codes. Doing them completely might prove
overwhelming in most cases.
HeaderOnlyBlock is used to optimally unpack the [Block] structure (note the
corresponding message number for the header field) while consuming less
memory, when only the header is desired.