Add data_gas_used field to ExecutionPayload

This commit is contained in:
Hsiao-Wei Wang
2023-05-30 00:39:13 +08:00
parent 017a8495f7
commit 296efec256
8 changed files with 14 additions and 1 deletions

View File

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

View File

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

View File

@@ -127,6 +127,7 @@ class ExecutionPayload(Container):
transactions: List[Transaction, MAX_TRANSACTIONS_PER_PAYLOAD]
withdrawals: List[Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD]
excess_data_gas: uint256 # [New in Deneb]
data_gas_used: uint256 # [New in Deneb]
```
#### `ExecutionPayloadHeader`
@@ -151,6 +152,7 @@ class ExecutionPayloadHeader(Container):
transactions_root: Root
withdrawals_root: Root
excess_data_gas: uint256 # [New in Deneb]
data_gas_used: uint256 # [New in Deneb]
```
## Helper functions
@@ -258,6 +260,7 @@ def process_execution_payload(state: BeaconState, body: BeaconBlockBody, executi
transactions_root=hash_tree_root(payload.transactions),
withdrawals_root=hash_tree_root(payload.withdrawals),
excess_data_gas=payload.excess_data_gas, # [New in Deneb]
data_gas_used=payload.data_gas_used, # [New in Deneb]
)
```

View File

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

View File

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

View File

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

View File

@@ -68,7 +68,7 @@ def is_valid_light_client_header(header: LightClientHeader) -> bool:
# [New in Deneb]
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
if epoch < CAPELLA_FORK_EPOCH:

View File

@@ -32,6 +32,7 @@ def get_execution_payload_header(spec, execution_payload):
payload_header.withdrawals_root = spec.hash_tree_root(execution_payload.withdrawals)
if is_post_deneb(spec):
payload_header.excess_data_gas = execution_payload.excess_data_gas
payload_header.data_gas_used = execution_payload.data_gas_used
if is_post_eip6110(spec):
payload_header.deposit_receipts_root = spec.hash_tree_root(execution_payload.deposit_receipts)
return payload_header
@@ -99,6 +100,7 @@ def compute_el_header_block_hash(spec,
if is_post_deneb(spec):
# excess_data_gas
execution_payload_header_rlp.append((big_endian_int, payload_header.excess_data_gas))
execution_payload_header_rlp.append((big_endian_int, payload_header.data_gas_used))
if is_post_eip6110(spec):
# deposit_receipts_root
assert deposit_receipts_trie_root is not None
@@ -202,6 +204,7 @@ def build_empty_execution_payload(spec, state, randao_mix=None):
payload.withdrawals = spec.get_expected_withdrawals(state)
if is_post_deneb(spec):
payload.excess_data_gas = 0
payload.data_gas_used = 0
if is_post_eip6110(spec):
# just to be clear
payload.deposit_receipts = []