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
- Containers
ProofByRootIdentifier- Helpers
- Modified
compute_fork_version - New
compute_max_request_execution_proofs - 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) |
Containers¶
ProofByRootIdentifier¶
Helpers¶
Modified compute_fork_version¶
New compute_max_request_execution_proofs¶
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 by block root and proof types. The response is a list
of SignedExecutionProof whose length is less than or equal to
requested_proofs_count, where
requested_proofs_count = sum(len(r.proof_types) for r in request). It may be
less in the case that the responding peer is missing blocks or proofs.
No more than compute_max_request_execution_proofs() may be requested at a
time.
The response MUST consist of zero or more response_chunk. Each successful
response_chunk MUST contain a single SignedExecutionProof payload.
Clients MUST respond with at least one proof, if they have it. Clients MAY limit the number of proofs in the response.
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.