ensure random is validated for all payloads including transition
This commit is contained in:
parent
a552b50160
commit
3ef13561e6
|
@ -291,12 +291,14 @@ def is_valid_gas_limit(payload: ExecutionPayload, parent: ExecutionPayloadHeader
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def process_execution_payload(state: BeaconState, payload: ExecutionPayload, execution_engine: ExecutionEngine) -> None:
|
def process_execution_payload(state: BeaconState, payload: ExecutionPayload, execution_engine: ExecutionEngine) -> None:
|
||||||
# Verify consistency of the parent hash, block number, random, base fee per gas and gas limit
|
# Verify consistency of the parent hash, block number, base fee per gas and gas limit
|
||||||
|
# with respect to the previous execution payload header
|
||||||
if is_merge_complete(state):
|
if is_merge_complete(state):
|
||||||
assert payload.parent_hash == state.latest_execution_payload_header.block_hash
|
assert payload.parent_hash == state.latest_execution_payload_header.block_hash
|
||||||
assert payload.block_number == state.latest_execution_payload_header.block_number + uint64(1)
|
assert payload.block_number == state.latest_execution_payload_header.block_number + uint64(1)
|
||||||
assert payload.random == get_randao_mix(state, get_current_epoch(state))
|
|
||||||
assert is_valid_gas_limit(payload, state.latest_execution_payload_header)
|
assert is_valid_gas_limit(payload, state.latest_execution_payload_header)
|
||||||
|
# Verify random
|
||||||
|
assert payload.random == get_randao_mix(state, get_current_epoch(state))
|
||||||
# Verify timestamp
|
# Verify timestamp
|
||||||
assert payload.timestamp == compute_timestamp_at_slot(state, state.slot)
|
assert payload.timestamp == compute_timestamp_at_slot(state, state.slot)
|
||||||
# Verify the execution payload is valid
|
# Verify the execution payload is valid
|
||||||
|
|
|
@ -144,6 +144,34 @@ def test_bad_parent_hash_regular_payload(spec, state):
|
||||||
yield from run_execution_payload_processing(spec, state, execution_payload, valid=False)
|
yield from run_execution_payload_processing(spec, state, execution_payload, valid=False)
|
||||||
|
|
||||||
|
|
||||||
|
@with_merge_and_later
|
||||||
|
@spec_state_test
|
||||||
|
def test_bad_random_first_payload(spec, state):
|
||||||
|
# pre-state
|
||||||
|
state = build_state_with_incomplete_transition(spec, state)
|
||||||
|
next_slot(spec, state)
|
||||||
|
|
||||||
|
# execution payload
|
||||||
|
execution_payload = build_empty_execution_payload(spec, state)
|
||||||
|
execution_payload.random = b'\x42' * 32
|
||||||
|
|
||||||
|
yield from run_execution_payload_processing(spec, state, execution_payload, valid=False)
|
||||||
|
|
||||||
|
|
||||||
|
@with_merge_and_later
|
||||||
|
@spec_state_test
|
||||||
|
def test_bad_random_regular_payload(spec, state):
|
||||||
|
# pre-state
|
||||||
|
state = build_state_with_complete_transition(spec, state)
|
||||||
|
next_slot(spec, state)
|
||||||
|
|
||||||
|
# execution payload
|
||||||
|
execution_payload = build_empty_execution_payload(spec, state)
|
||||||
|
execution_payload.random = b'\x04' * 32
|
||||||
|
|
||||||
|
yield from run_execution_payload_processing(spec, state, execution_payload, valid=False)
|
||||||
|
|
||||||
|
|
||||||
@with_merge_and_later
|
@with_merge_and_later
|
||||||
@spec_state_test
|
@spec_state_test
|
||||||
def test_bad_number_regular_payload(spec, state):
|
def test_bad_number_regular_payload(spec, state):
|
||||||
|
|
Loading…
Reference in New Issue