Polishing and fixes according to github comments

This commit is contained in:
Mikhail Kalinin 2021-04-08 20:14:01 +06:00
parent c1101a8181
commit 13586cd9f8
1 changed files with 11 additions and 9 deletions

View File

@ -138,14 +138,14 @@ class ExecutionPayloadHeader(Container):
```python ```python
def is_transition_completed(state: BeaconState) -> boolean: def is_transition_completed(state: BeaconState) -> boolean:
return state.latest_execution_payload_header.block_hash != Bytes32() return state.latest_execution_payload_header != ExecutionPayloadHeader()
``` ```
#### `is_transition_block` #### `is_transition_block`
```python ```python
def is_transition_block(state: BeaconState, block_body: BeaconBlockBody) -> boolean: def is_transition_block(state: BeaconState, block_body: BeaconBlockBody) -> boolean:
return state.latest_execution_payload_header.block_hash == Bytes32() and block_body.execution_payload.block_hash != Bytes32() return not is_transition_completed(state) and block_body.execution_payload != ExecutionPayload()
``` ```
### Block processing ### Block processing
@ -163,14 +163,14 @@ def process_block(state: BeaconState, block: BeaconBlock) -> None:
##### `get_execution_state` ##### `get_execution_state`
*Note*: `ExecutionState` class is an abstract class representing ethereum execution state. *Note*: `ExecutionState` class is an abstract class representing Ethereum execution state.
Let `get_execution_state(execution_state_root: Bytes32) -> ExecutionState` be the function that given the root hash returns a copy of ethereum execution state. Let `get_execution_state(execution_state_root: Bytes32) -> ExecutionState` be the function that given the root hash returns a copy of Ethereum execution state.
The body of the function is implementation dependent. The body of the function is implementation dependent.
##### `execution_state_transition` ##### `execution_state_transition`
Let `execution_state_transition(execution_state: ExecutionState, execution_payload: ExecutionPayload) -> None` be the transition function of ethereum execution state. Let `execution_state_transition(execution_state: ExecutionState, execution_payload: ExecutionPayload) -> None` be the transition function of Ethereum execution state.
The body of the function is implementation dependent. The body of the function is implementation dependent.
*Note*: `execution_state_transition` must throw `AssertionError` if either the transition itself or one of the pre or post conditions has failed. *Note*: `execution_state_transition` must throw `AssertionError` if either the transition itself or one of the pre or post conditions has failed.
@ -183,16 +183,18 @@ def process_execution_payload(state: BeaconState, body: BeaconBlockBody) -> None
Note: This function is designed to be able to be run in parallel with the other `process_block` sub-functions Note: This function is designed to be able to be run in parallel with the other `process_block` sub-functions
""" """
execution_payload = body.execution_payload
if not is_transition_completed(state): if not is_transition_completed(state):
assert body.execution_payload == ExecutionPayload() assert execution_payload == ExecutionPayload()
return return
if not is_transition_block(state, body): if not is_transition_block(state, body):
assert body.execution_payload.parent_hash == state.latest_execution_payload_header.block_hash assert execution_payload.parent_hash == state.latest_execution_payload_header.block_hash
assert body.execution_payload.number == state.latest_execution_payload_header.number + 1 assert execution_payload.number == state.latest_execution_payload_header.number + 1
execution_state = get_execution_state(state.latest_execution_payload_header.state_root) execution_state = get_execution_state(state.latest_execution_payload_header.state_root)
execution_state_transition(execution_state, body.execution_payload) execution_state_transition(execution_state, execution_payload)
state.latest_execution_payload_header = ExecutionPayloadHeader( state.latest_execution_payload_header = ExecutionPayloadHeader(
block_hash=execution_payload.block_hash, block_hash=execution_payload.block_hash,