Merge pull request #3391 from ethereum/data_gas_used

Add `data_gas_used` field to `ExecutionPayload`
This commit is contained in:
Hsiao-Wei Wang 2023-06-01 23:09:46 +08:00 committed by GitHub
commit a965ca7ac4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 16 additions and 2 deletions

View File

@ -91,6 +91,7 @@ class ExecutionPayload(Container):
block_hash: Hash32 block_hash: Hash32
transactions: List[Transaction, MAX_TRANSACTIONS_PER_PAYLOAD] transactions: List[Transaction, MAX_TRANSACTIONS_PER_PAYLOAD]
withdrawals: List[Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD] withdrawals: List[Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD]
data_gas_used: uint256
excess_data_gas: uint256 excess_data_gas: uint256
deposit_receipts: List[DepositReceipt, MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD] # [New in EIP6110] deposit_receipts: List[DepositReceipt, MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD] # [New in EIP6110]
``` ```
@ -116,6 +117,7 @@ class ExecutionPayloadHeader(Container):
block_hash: Hash32 block_hash: Hash32
transactions_root: Root transactions_root: Root
withdrawals_root: Root withdrawals_root: Root
data_gas_used: uint256
excess_data_gas: uint256 excess_data_gas: uint256
deposit_receipts_root: Root # [New in EIP6110] deposit_receipts_root: Root # [New in EIP6110]
``` ```
@ -268,6 +270,7 @@ def process_execution_payload(state: BeaconState, body: BeaconBlockBody, executi
block_hash=payload.block_hash, block_hash=payload.block_hash,
transactions_root=hash_tree_root(payload.transactions), transactions_root=hash_tree_root(payload.transactions),
withdrawals_root=hash_tree_root(payload.withdrawals), withdrawals_root=hash_tree_root(payload.withdrawals),
data_gas_used=payload.data_gas_used,
excess_data_gas=payload.excess_data_gas, excess_data_gas=payload.excess_data_gas,
deposit_receipts_root=hash_tree_root(payload.deposit_receipts), # [New in EIP6110] deposit_receipts_root=hash_tree_root(payload.deposit_receipts), # [New in EIP6110]
) )

View File

@ -88,6 +88,7 @@ def upgrade_to_eip6110(pre: deneb.BeaconState) -> BeaconState:
block_hash=pre.latest_execution_payload_header.block_hash, block_hash=pre.latest_execution_payload_header.block_hash,
transactions_root=pre.latest_execution_payload_header.transactions_root, transactions_root=pre.latest_execution_payload_header.transactions_root,
withdrawals_root=pre.latest_execution_payload_header.withdrawals_root, withdrawals_root=pre.latest_execution_payload_header.withdrawals_root,
data_gas_used=uint256(0),
excess_data_gas=uint256(0), excess_data_gas=uint256(0),
deposit_receipts_root=Root(), # [New in EIP-6110] deposit_receipts_root=Root(), # [New in EIP-6110]
) )

View File

@ -126,6 +126,7 @@ class ExecutionPayload(Container):
block_hash: Hash32 # Hash of execution block block_hash: Hash32 # Hash of execution block
transactions: List[Transaction, MAX_TRANSACTIONS_PER_PAYLOAD] transactions: List[Transaction, MAX_TRANSACTIONS_PER_PAYLOAD]
withdrawals: List[Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD] withdrawals: List[Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD]
data_gas_used: uint256 # [New in Deneb]
excess_data_gas: uint256 # [New in Deneb] excess_data_gas: uint256 # [New in Deneb]
``` ```
@ -150,6 +151,7 @@ class ExecutionPayloadHeader(Container):
block_hash: Hash32 # Hash of execution block block_hash: Hash32 # Hash of execution block
transactions_root: Root transactions_root: Root
withdrawals_root: Root withdrawals_root: Root
data_gas_used: uint256 # [New in Deneb]
excess_data_gas: uint256 # [New in Deneb] excess_data_gas: uint256 # [New in Deneb]
``` ```
@ -257,6 +259,7 @@ def process_execution_payload(state: BeaconState, body: BeaconBlockBody, executi
block_hash=payload.block_hash, block_hash=payload.block_hash,
transactions_root=hash_tree_root(payload.transactions), transactions_root=hash_tree_root(payload.transactions),
withdrawals_root=hash_tree_root(payload.withdrawals), withdrawals_root=hash_tree_root(payload.withdrawals),
data_gas_used=payload.data_gas_used, # [New in Deneb]
excess_data_gas=payload.excess_data_gas, # [New in Deneb] excess_data_gas=payload.excess_data_gas, # [New in Deneb]
) )
``` ```

View File

@ -83,6 +83,7 @@ def upgrade_to_deneb(pre: capella.BeaconState) -> BeaconState:
block_hash=pre.latest_execution_payload_header.block_hash, block_hash=pre.latest_execution_payload_header.block_hash,
transactions_root=pre.latest_execution_payload_header.transactions_root, transactions_root=pre.latest_execution_payload_header.transactions_root,
withdrawals_root=pre.latest_execution_payload_header.withdrawals_root, withdrawals_root=pre.latest_execution_payload_header.withdrawals_root,
data_gas_used=uint256(0), # [New in Deneb]
excess_data_gas=uint256(0), # [New in Deneb] excess_data_gas=uint256(0), # [New in Deneb]
) )
post = BeaconState( post = BeaconState(

View File

@ -41,6 +41,7 @@ def upgrade_lc_header_to_deneb(pre: capella.LightClientHeader) -> LightClientHea
block_hash=pre.execution.block_hash, block_hash=pre.execution.block_hash,
transactions_root=pre.execution.transactions_root, transactions_root=pre.execution.transactions_root,
withdrawals_root=pre.execution.withdrawals_root, withdrawals_root=pre.execution.withdrawals_root,
data_gas_used=uint256(0), # [New in Deneb]
excess_data_gas=uint256(0), # [New in Deneb] excess_data_gas=uint256(0), # [New in Deneb]
), ),
execution_branch=pre.execution_branch, execution_branch=pre.execution_branch,

View File

@ -49,6 +49,7 @@ def block_to_light_client_header(block: SignedBeaconBlock) -> LightClientHeader:
# [New in Deneb] # [New in Deneb]
if epoch >= DENEB_FORK_EPOCH: if epoch >= DENEB_FORK_EPOCH:
execution_header.data_gas_used = payload.data_gas_used
execution_header.excess_data_gas = payload.excess_data_gas execution_header.excess_data_gas = payload.excess_data_gas
execution_branch = compute_merkle_proof_for_block_body(block.message.body, EXECUTION_PAYLOAD_INDEX) execution_branch = compute_merkle_proof_for_block_body(block.message.body, EXECUTION_PAYLOAD_INDEX)

View File

@ -68,7 +68,7 @@ def is_valid_light_client_header(header: LightClientHeader) -> bool:
# [New in Deneb] # [New in Deneb]
if epoch < DENEB_FORK_EPOCH: if epoch < DENEB_FORK_EPOCH:
if header.execution.excess_data_gas != uint256(0): if header.execution.excess_data_gas != uint256(0) or header.execution.data_gas_used != uint256(0):
return False return False
if epoch < CAPELLA_FORK_EPOCH: if epoch < CAPELLA_FORK_EPOCH:

View File

@ -16,13 +16,14 @@ from eth2spec.test.helpers.sharding import (
) )
def run_block_with_blobs(spec, state, blob_count, excess_data_gas=1, valid=True): def run_block_with_blobs(spec, state, blob_count, data_gas_used=1, excess_data_gas=1, valid=True):
yield 'pre', state yield 'pre', state
block = build_empty_block_for_next_slot(spec, state) block = build_empty_block_for_next_slot(spec, state)
opaque_tx, _, blob_kzg_commitments, _ = get_sample_opaque_tx(spec, blob_count=blob_count) opaque_tx, _, blob_kzg_commitments, _ = get_sample_opaque_tx(spec, blob_count=blob_count)
block.body.blob_kzg_commitments = blob_kzg_commitments block.body.blob_kzg_commitments = blob_kzg_commitments
block.body.execution_payload.transactions = [opaque_tx] block.body.execution_payload.transactions = [opaque_tx]
block.body.execution_payload.data_gas_used = data_gas_used
block.body.execution_payload.excess_data_gas = excess_data_gas block.body.execution_payload.excess_data_gas = excess_data_gas
block.body.execution_payload.block_hash = compute_el_block_hash(spec, block.body.execution_payload) block.body.execution_payload.block_hash = compute_el_block_hash(spec, block.body.execution_payload)

View File

@ -31,6 +31,7 @@ def get_execution_payload_header(spec, execution_payload):
if is_post_capella(spec): if is_post_capella(spec):
payload_header.withdrawals_root = spec.hash_tree_root(execution_payload.withdrawals) payload_header.withdrawals_root = spec.hash_tree_root(execution_payload.withdrawals)
if is_post_deneb(spec): if is_post_deneb(spec):
payload_header.data_gas_used = execution_payload.data_gas_used
payload_header.excess_data_gas = execution_payload.excess_data_gas payload_header.excess_data_gas = execution_payload.excess_data_gas
if is_post_eip6110(spec): if is_post_eip6110(spec):
payload_header.deposit_receipts_root = spec.hash_tree_root(execution_payload.deposit_receipts) payload_header.deposit_receipts_root = spec.hash_tree_root(execution_payload.deposit_receipts)
@ -98,6 +99,7 @@ def compute_el_header_block_hash(spec,
execution_payload_header_rlp.append((Binary(32, 32), withdrawals_trie_root)) execution_payload_header_rlp.append((Binary(32, 32), withdrawals_trie_root))
if is_post_deneb(spec): if is_post_deneb(spec):
# excess_data_gas # excess_data_gas
execution_payload_header_rlp.append((big_endian_int, payload_header.data_gas_used))
execution_payload_header_rlp.append((big_endian_int, payload_header.excess_data_gas)) execution_payload_header_rlp.append((big_endian_int, payload_header.excess_data_gas))
if is_post_eip6110(spec): if is_post_eip6110(spec):
# deposit_receipts_root # deposit_receipts_root
@ -201,6 +203,7 @@ def build_empty_execution_payload(spec, state, randao_mix=None):
if is_post_capella(spec): if is_post_capella(spec):
payload.withdrawals = spec.get_expected_withdrawals(state) payload.withdrawals = spec.get_expected_withdrawals(state)
if is_post_deneb(spec): if is_post_deneb(spec):
payload.data_gas_used = 0
payload.excess_data_gas = 0 payload.excess_data_gas = 0
if is_post_eip6110(spec): if is_post_eip6110(spec):
# just to be clear # just to be clear