EIP-8205 -- Honest Validator
Note: This document is a work-in-progress for researchers and implementers.
Introduction
This document represents the changes to be made in the code of an "honest
validator" to implement EIP-8205.
Beacon chain responsibilities
All validator responsibilities remain unchanged other than those noted below.
Block and sidecar proposal
Constructing the BeaconBlockBody
Execution requests
Note: The function get_execution_requests is modified to parse the validator
preregistration requests.
| def get_execution_requests(execution_requests_list: Sequence[bytes]) -> ExecutionRequests:
deposits = DepositRequests()
withdrawals = WithdrawalRequests()
consolidations = ConsolidationRequests()
builder_deposits = BuilderDepositRequests()
builder_exits = BuilderExitRequests()
# [New in EIP8205]
preregistrations = PreregistrationRequests()
request_types = [
DEPOSIT_REQUEST_TYPE,
WITHDRAWAL_REQUEST_TYPE,
CONSOLIDATION_REQUEST_TYPE,
BUILDER_DEPOSIT_REQUEST_TYPE,
BUILDER_EXIT_REQUEST_TYPE,
# [New in EIP8205]
PREREGISTRATION_REQUEST_TYPE,
]
prev_request_type = None
for request in execution_requests_list:
request_type, request_data = request[0:1], request[1:]
# Check that the request type is valid
assert request_type in request_types
# Check that the request data is not empty
assert len(request_data) != 0
# Check that requests are in strictly ascending order
# Each successive type must be greater than the last with no duplicates
assert prev_request_type is None or prev_request_type < request_type
prev_request_type = request_type
if request_type == DEPOSIT_REQUEST_TYPE:
deposits = ssz_deserialize(DepositRequests, request_data)
elif request_type == WITHDRAWAL_REQUEST_TYPE:
withdrawals = ssz_deserialize(WithdrawalRequests, request_data)
elif request_type == CONSOLIDATION_REQUEST_TYPE:
consolidations = ssz_deserialize(ConsolidationRequests, request_data)
elif request_type == BUILDER_DEPOSIT_REQUEST_TYPE:
builder_deposits = ssz_deserialize(BuilderDepositRequests, request_data)
elif request_type == BUILDER_EXIT_REQUEST_TYPE:
builder_exits = ssz_deserialize(BuilderExitRequests, request_data)
# [New in EIP8205]
elif request_type == PREREGISTRATION_REQUEST_TYPE:
preregistrations = ssz_deserialize(PreregistrationRequests, request_data)
return ExecutionRequests(
deposits=deposits,
withdrawals=withdrawals,
consolidations=consolidations,
builder_deposits=builder_deposits,
builder_exits=builder_exits,
# [New in EIP8205]
preregistrations=preregistrations,
)
|