Skip to content

EIP-8025 -- Networking

This document contains the networking specification for EIP-8025.

Table of contents

Constants

Note: There are MAX_EXECUTION_PROOFS_PER_PAYLOAD (from beacon-chain.md) execution proof subnets to provide 1-to-1 mapping with proof systems. Each proof system gets its own dedicated subnet.

Containers

Note: Execution proofs are broadcast directly as SignedExecutionProof containers. No additional message wrapper is needed.

The gossip domain: gossipsub

Topics and messages

Global topics

execution_proof_{subnet_id}

Execution proof subnets are used to propagate execution proofs for specific proof systems.

The execution proof subnet for a given proof_id is:

1
2
3
def compute_subnet_for_execution_proof(proof_id: ProofID) -> SubnetID:
    assert proof_id < MAX_EXECUTION_PROOFS_PER_PAYLOAD
    return SubnetID(proof_id)

The following validations MUST pass before forwarding the signed_execution_proof on the network:

  • [IGNORE] The proof is the first valid proof received for the tuple (signed_execution_proof.message.zk_proof.public_inputs.block_hash, subnet_id).
  • [REJECT] The signed_execution_proof.message.validator_index is within the known validator registry.
  • [REJECT] The signed_execution_proof.signature is valid with respect to the validator's public key.
  • [REJECT] The signed_execution_proof.message.zk_proof.proof_data is non-empty.
  • [REJECT] The proof system ID matches the subnet: signed_execution_proof.message.zk_proof.proof_type == subnet_id.
  • [REJECT] The execution proof is valid as verified by verify_execution_proof() with the appropriate parent and block hashes from the execution layer.

The Req/Resp domain

Messages

ExecutionProofsByHash

Protocol ID: /eth2/beacon/req/execution_proofs_by_hash/1/

The <context-bytes> field is calculated as context = compute_fork_digest(fork_version, genesis_validators_root).

Request Content:

1
2
3
(
  Hash32  # block_hash
)

Response Content:

1
2
3
(
  List[SignedExecutionProof, MAX_EXECUTION_PROOFS_PER_PAYLOAD]
)

Requests execution proofs for the given execution payload block_hash. The response MUST contain all available proofs for the requested block hash, up to MAX_EXECUTION_PROOFS_PER_PAYLOAD.

The following validations MUST pass:

  • [REJECT] The block_hash is a 32-byte value.

The response MUST contain:

  • All available execution proofs for the requested block hash.
  • The response MUST NOT contain more than MAX_EXECUTION_PROOFS_PER_PAYLOAD proofs.