This doc summarizes the updates that went into Deneb that require new validator and builder interactions. It assumes you have a basic understanding of today's interaction between validator and builder. We'll cover the new workflow and additional safety considerations.
What's new in Deneb? Validator signs block in addition blob sidecars.
Block now includes kzg commitment that anchors the blobsidecar.
class BeaconBlockBody(Container):
execution_payload: ExecutionPayload # [Modified in Deneb]
blob_kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK] # [New in Deneb]
What is a blob? It is the following in the consensus layer land for signed and unsigned version.
class SignedBlobSidecar(Container):
message: BlobSidecar
signature: BLSSignature
class BlobSidecar(Container):
block_root: Root
index: BlobIndex # Index of blob in block
slot: Slot
block_parent_root: Root # Proposer shuffling determinant
proposer_index: ValidatorIndex
blob: Blob
kzg_commitment: KZGCommitment
kzg_proof: KZGProof # Allows for quick verification of kzg_commitment
On the execution layer land, a new type of EIP-2718 transaction in introduced, “blob transaction”, where the TransactionType
is BLOB_TX_TYPE
and the TransactionPayload
is the following RLP value:
rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, to, value, data, access_list, max_fee_per_data_gas, blob_versioned_hashes, y_parity, r, s])
The most important thing to note is that a Deneb block is valid. All the following three fields have to align:
blob_kzg_commitments
execution_payload
's blob_versioned_hashes
blob
Besides alignment, the BlobSidecar
itself has to be valid concerning the consensus rule, but that's outside this doc's scope.
Note: I am generalizing the builder here. Builder means an external party for execution block construction. It could be mev-boost, relayer, builder, or searcher. Whomever the validator interacts with and agrees to exchange block construction with.
The interaction today is simple:
getHeader
to request a blind execution block to sign. (Think of it as the commit phase)execution_header
. Validator signs itsubmitBlindBlock
alongside the signed header and rest of the consensus block contentsThe interaction is simplified. I avoided side effects like timing, attacks, circuit breaker, fail-over, etc. We'll cover them in the later section for Deneb.
The interaction in Deneb brings in additional complexity, given that blobs are decoupled from the block. They are highlighted in bold:
getHeader
to request a blind execution block and blind blobs bundle to sign so that validators can create signatures over the blind blobs. Blind blob utilizes blob_root
instead of clear blob
class BlindedBlobsBundle(Container):
commitments: List[KZGCommitment, MAX_BLOBS_PER_BLOCK]
proofs: List[KZGProof, MAX_BLOBS_PER_BLOCK]
blob_roots: List[Root, MAX_BLOBS_PER_BLOCK]
execution_header
and blinded_blobs
. Validator signs itclass BuilderBid(Container):
header: ExecutionPayloadHeader # [Modified in Deneb]
blinded_blobs: BlindedBlobsBundle # [New in Deneb]
value: uint256
pubkey: BLSPubkey
submitBlindBlock
alongside the SignedBlindedBlockContents
class SignedBlindedBlobSidecar(Container):
message: BlindedBlobSidecar
signature: BLSSignature
class SignedBlindedBlockContents(Container):
signed_blinded_block: SignedBlindedBeaconBlock
signed_blinded_blob_sidecars: List[SignedBlindedBlobSidecar, MAX_BLOBS_PER_BLOCK]
ExecutionPayloadAndBlobsBundle
:class ExecutionPayloadAndBlobsBundle(Container):
execution_payload: ExecutionPayload
blobs_bundle: BlobsBundle
execution_payload
and full blob sidecars using blobs_bundle
and broadcasts them over respected gossip subnetsThe consensus layer client can default to local execution block production in the event it detects
For (1), it performs the following safety check
Post-deneb, the following safety check could be applied on BlindedBlobsBundle
at the getHeader
phase:
Once the CL client gets ExecutionPayloadAndBlobsBundle
at the submitBlindBlock
phase, more validations can be done to broadcast the network, but this is not strictly necessary given its client's best interest to broadcast block and blobs as soon as possible to prevent reorg.
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing