Notice: This document is a work-in-progress for researchers and implementers.
The specification of these changes continues in the same format as the network specifications of previous upgrades, and assumes them as pre-requisite. The adjustments and additions for Shards are outlined in this document.
Name | Value | Description |
---|---|---|
SHARD_ROW_SUBNET_COUNT |
512 |
The number of shard_row_{subnet_id} subnets used in the gossipsub protocol. |
SHARD_COLUMN_SUBNET_COUNT |
512 |
The number of shard_column_{subnet_id} subnets used in the gossipsub protocol. |
Following the same scheme as the Phase0 gossip topics, names and payload types are:
Name | Message Type |
---|---|
shard_row_{subnet_id} |
SignedShardSample |
shard_column_{subnet_id} |
SignedShardSample |
builder_block_bid |
BuilderBlockBid |
The DAS network specification defines additional topics.
- [IGNORE] The
bid
is published 1 slot early or later (with aMAXIMUM_GOSSIP_CLOCK_DISPARITY
allowance) -- i.e. validate thatbid.slot <= current_slot + 1
(a client MAY queue future samples for propagation at the appropriate slot). - [IGNORE] The
bid
is for the current or next block i.e. validate thatbid.slot >= current_slot
- [IGNORE] The
bid
is the firstbid
valid bid forbid.slot
, or the bid is at least 1% higher than the previous knownbid
- [REJECT] The validator defined by
bid.validator_index
exists and is slashable. - [REJECT] The bid signature, which is an Eth1 signature, needs to be valid and the address needs to contain enough Ether to cover the bid and the data gas base fee.
Shard sample (row/column) subnets are used by builders to make their samples available as part of their intermediate block release after selection by beacon block proposers.
Shard sample data, in the form of a SignedShardSample
is published to the shard_row_{subnet_id}
and shard_column_{subnet_id}
subnets.
The following validations MUST pass before forwarding the sample
.
- [IGNORE] The
sample
is published 1 slot early or later (with aMAXIMUM_GOSSIP_CLOCK_DISPARITY
allowance) -- i.e. validate thatsample.slot <= current_slot + 1
(a client MAY queue future samples for propagation at the appropriate slot). - [IGNORE] The
sample
is new enough to still be processed -- i.e. validate thatcompute_epoch_at_slot(sample.slot) >= get_previous_epoch(state)
- [REJECT] The shard sample is for the correct subnet --
i.e.
sample.row == subnet_id
forshard_row_{subnet_id}
andsample.column == subnet_id
forshard_column_{subnet_id}
- [IGNORE] The sample is the first sample with valid signature received for the
(sample.builder, sample.slot, sample.row, sample.column)
combination. - [REJECT] The
sample.data
MUST NOT contain any pointx >= BLS_MODULUS
. Although it is auint256
, not the full 256 bit range is valid. - [REJECT] The validator defined by
sample.builder
exists and is slashable. - [REJECT] The sample is proposed by the expected
builder
for the sample'sslot
. i.e., the beacon block atsample.slot - 1
according to the node's fork choice contains anIntermediateBlockBid
withintermediate_block_bid.validator_index == sample.builder
- [REJECT] The sample signature,
sample.signature
, is valid for the builder -- i.e.bls.Verify(builder_pubkey, sample_signing_root, sample.signature)
ORsample.signature == Bytes96(b"\0" * 96)
AND the sample verificationverify_sample
passes