Owner: @Marcin Pawlowski @Thomas Lavaur
Reviewers: 🟢@Daniel Sanchez Quiros 🟢@David Rusu 🟢@Álvaro Castro-Castilla
In this document, we present the specification defining the construction of the block proposal, its validation, and execution. We define the block proposal construction that contains references to transactions (from the mempool) instead of a complete transaction to limit its length. The raw block size increases with the size of transactions it contains up to 1 MB, and the proposal compresses its size down to 33 kB, which saves the bandwidth necessary to broadcast new blocks.
For the consensus protocol to make progress, a new leader is elected through the leader lottery. The new leader is in possession of a proof of leadership (PoL) that confirms that it is indeed the leader. The main objective of the leader is to construct a new block, hence becoming a block builder, and share it with other members of the network as a block proposer. The block must be correctly constructed; otherwise, it will be rejected by the network nodes who are validating every block. Only validated blocks are executed, which means that the transactions included in the block are interpreted by all nodes, and the state of the chain is modified according to the instructions embedded in the transactions.
Below, we present a high-level description of the block life cycle. The main focus of this section is to build an intuition on the block construction, validation, and execution.
The hashing algorithm used in the specification is blake2b
([**BLAKE2b (General-Purpose Hashing)**](https://nomos-tech.notion.site/BLAKE2b-General-Purpose-Hashing-1fd261aa09df81b3890fcc4f9606ee9e)). The default length of the output of the hashing algorithm is 256 bits (32 bytes).
The Proposal is a block proposal that, instead of containing complete Mantle Transactions of an unlimited size, contains references of fixed size to the transactions. Therefore, the size of the proposal is constant and it is 33129 bytes.
We define the following message structure: