EIP-8025 -- Networking¶
This document contains the networking specifications for EIP-8025.
Note: This specification is built upon Fulu and imports proof types from proof-engine.md.
Table of contents¶
- Table of contents
- Constants
- Execution
- Helpers
- Modified
compute_fork_version - MetaData
- The gossip domain: gossipsub
- Topics and messages
- The Req/Resp domain
- Messages
- The discovery domain: discv5
- ENR structure
Constants¶
Execution¶
Note: The execution values are not definitive.
| Name | Value |
|---|---|
MAX_EXECUTION_PROOFS_PER_PAYLOAD |
uint64(4) |
Helpers¶
Modified compute_fork_version¶
MetaData¶
The MetaData stored locally by clients is updated with an additional field to
communicate execution proof awareness.
Where
seq_number,attnets,syncnets, andcustody_group_counthave the same meaning defined in the previous documents.execution_proof_awareindicates whether the node is aware of optional execution proofs. A value ofTruesignals that the node understands execution proof gossip topics and can participate in execution proof propagation.
The gossip domain: gossipsub¶
Topics and messages¶
Global topics¶
execution_proof¶
This topic is used to propagate SignedExecutionProof messages.
The following validations MUST pass before forwarding the
signed_execution_proof on the network, assuming the alias
proof = signed_execution_proof.message:
- [IGNORE] The proof's corresponding new payload request (identified by
proof.public_input.new_payload_request_root) has been seen (via gossip or non-gossip sources) (a client MAY queue proofs for processing once the new payload request is retrieved). - [IGNORE] No valid proof has already been received for the tuple
(proof.public_input.new_payload_request_root, proof.proof_type)-- i.e. no valid proof forproof.proof_typefrom any prover has been received. - [IGNORE] The proof is the first proof received for the tuple
(proof.public_input.new_payload_request_root, proof.proof_type, signed_execution_proof.validator_index)-- i.e. the first valid or invalid proof forproof.proof_typefromsigned_execution_proof.validator_index. - [REJECT] The validator with index
signed_execution_proof.validator_indexis an active validator -- i.e.is_active_validator(state.validators[signed_execution_proof.validator_index], get_current_epoch(state))returnsTrue. - [REJECT]
signed_execution_proof.signatureis valid with respect to the validator's public key. - [REJECT]
proof.proof_datais non-empty. - [REJECT]
proof.proof_datais not larger thanMAX_PROOF_SIZE. - [REJECT] All of the conditions within
process_execution_proofpass validation. - [IGNORE] No valid proof has already been received for the tuple
(proof.public_input.new_payload_request_root, proof.proof_type)-- i.e. no valid proof forproof.proof_typefrom any prover has been received.
The Req/Resp domain¶
Messages¶
ExecutionProofsByRoot¶
Protocol ID: /eth2/beacon_chain/req/execution_proofs_by_root/1/
The <context-bytes> field is calculated as
context = compute_fork_digest(fork_version, genesis_validators_root).
Request Content:
Response Content:
Requests execution proofs for the given block_root. The response MUST contain
all available proofs for the requested beacon block, up to
MAX_EXECUTION_PROOFS_PER_PAYLOAD.
The following validations MUST pass:
- [REJECT] The
block_rootis a 32-byte value.
The response MUST contain:
- All available execution proofs for the requested
block_root. - The response MUST NOT contain more than
MAX_EXECUTION_PROOFS_PER_PAYLOADproofs.
GetMetaData v4¶
Protocol ID: /eth2/beacon_chain/req/metadata/4/
No Request Content.
Response Content:
Requests the MetaData of a peer, using the new MetaData definition given above
that is extended from Altair. Other conditions for the GetMetaData protocol
are unchanged from the Altair p2p networking document.
The discovery domain: discv5¶
ENR structure¶
Execution proof awareness¶
A new field is added to the ENR under the key eproof to facilitate discovery
of nodes that are aware of optional execution proofs.
| Key | Value |
|---|---|
eproof |
Execution layer proof awareness, uint8 |
A node is considered optional execution proof–aware if the eproof key is
present and its value is not 0.