add initialize beacon state from eth1 for AttSlotRAnge
This commit is contained in:
parent
78403ccf8a
commit
558be7a9a3
|
@ -72,3 +72,58 @@ def process_attestation(state: BeaconState, attestation: Attestation) -> None:
|
||||||
proposer_reward = Gwei(proposer_reward_numerator // proposer_reward_denominator)
|
proposer_reward = Gwei(proposer_reward_numerator // proposer_reward_denominator)
|
||||||
increase_balance(state, get_beacon_proposer_index(state), proposer_reward)
|
increase_balance(state, get_beacon_proposer_index(state), proposer_reward)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
*Note*: The function `initialize_beacon_state_from_eth1` is modified for pure AttSlotRange testing only.
|
||||||
|
Modifications include:
|
||||||
|
1. Use `ATTSLOTRANGE_FORK_VERSION` as the previous and current fork version.
|
||||||
|
|
||||||
|
```python
|
||||||
|
def initialize_beacon_state_from_eth1(eth1_block_hash: Hash32,
|
||||||
|
eth1_timestamp: uint64,
|
||||||
|
deposits: Sequence[Deposit],
|
||||||
|
execution_payload_header: ExecutionPayloadHeader=ExecutionPayloadHeader()
|
||||||
|
) -> BeaconState:
|
||||||
|
fork = Fork(
|
||||||
|
previous_version=ATTSLOTRANGE_FORK_VERSION, # [Modified in AttSlotRange] for testing only
|
||||||
|
current_version=EIP7002_FORK_VERSION, # [Modified in AttSlotRange]
|
||||||
|
epoch=GENESIS_EPOCH,
|
||||||
|
)
|
||||||
|
state = BeaconState(
|
||||||
|
genesis_time=eth1_timestamp + GENESIS_DELAY,
|
||||||
|
fork=fork,
|
||||||
|
eth1_data=Eth1Data(block_hash=eth1_block_hash, deposit_count=uint64(len(deposits))),
|
||||||
|
latest_block_header=BeaconBlockHeader(body_root=hash_tree_root(BeaconBlockBody())),
|
||||||
|
randao_mixes=[eth1_block_hash] * EPOCHS_PER_HISTORICAL_VECTOR, # Seed RANDAO with Eth1 entropy
|
||||||
|
)
|
||||||
|
|
||||||
|
# Process deposits
|
||||||
|
leaves = list(map(lambda deposit: deposit.data, deposits))
|
||||||
|
for index, deposit in enumerate(deposits):
|
||||||
|
deposit_data_list = List[DepositData, 2**DEPOSIT_CONTRACT_TREE_DEPTH](*leaves[:index + 1])
|
||||||
|
state.eth1_data.deposit_root = hash_tree_root(deposit_data_list)
|
||||||
|
process_deposit(state, deposit)
|
||||||
|
|
||||||
|
# Process activations
|
||||||
|
for index, validator in enumerate(state.validators):
|
||||||
|
balance = state.balances[index]
|
||||||
|
validator.effective_balance = min(balance - balance % EFFECTIVE_BALANCE_INCREMENT, MAX_EFFECTIVE_BALANCE)
|
||||||
|
if validator.effective_balance == MAX_EFFECTIVE_BALANCE:
|
||||||
|
validator.activation_eligibility_epoch = GENESIS_EPOCH
|
||||||
|
validator.activation_epoch = GENESIS_EPOCH
|
||||||
|
|
||||||
|
# Set genesis validators root for domain separation and chain versioning
|
||||||
|
state.genesis_validators_root = hash_tree_root(state.validators)
|
||||||
|
|
||||||
|
# Fill in sync committees
|
||||||
|
# Note: A duplicate committee is assigned for the current and next committee at genesis
|
||||||
|
state.current_sync_committee = get_next_sync_committee(state)
|
||||||
|
state.next_sync_committee = get_next_sync_committee(state)
|
||||||
|
|
||||||
|
# Initialize the execution payload header
|
||||||
|
state.latest_execution_payload_header = execution_payload_header
|
||||||
|
|
||||||
|
return state
|
||||||
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue