mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-02-03 06:13:31 +00:00
Merge pull request #4032 from KatyaRyazantseva/random-block-electra
Add randomized execution requests in `random_block_electra`
This commit is contained in:
commit
72061bb110
@ -257,3 +257,116 @@ def run_test_full_random_operations(spec, state, rng=Random(2080)):
|
|||||||
|
|
||||||
yield 'blocks', [signed_block]
|
yield 'blocks', [signed_block]
|
||||||
yield 'post', state
|
yield 'post', state
|
||||||
|
|
||||||
|
|
||||||
|
def get_random_execution_requests(spec, state, rng):
|
||||||
|
deposits = get_random_deposits_requests(spec, state, rng)
|
||||||
|
withdrawals = get_random_withdrawals_requests(spec, state, rng)
|
||||||
|
consolidations = get_random_consolidations_requests(spec, state, rng)
|
||||||
|
|
||||||
|
execution_requests = spec.ExecutionRequests(
|
||||||
|
deposits=deposits,
|
||||||
|
withdrawals=withdrawals,
|
||||||
|
consolidations=consolidations
|
||||||
|
)
|
||||||
|
|
||||||
|
return execution_requests
|
||||||
|
|
||||||
|
|
||||||
|
def get_random_deposits_requests(spec, state, rng, num_deposits=None):
|
||||||
|
if num_deposits is None:
|
||||||
|
num_deposits = rng.randint(0, spec.MAX_DEPOSIT_REQUESTS_PER_PAYLOAD)
|
||||||
|
|
||||||
|
deposit_data_leaves = [spec.DepositData() for _ in range(len(state.validators))]
|
||||||
|
|
||||||
|
deposits_requests = []
|
||||||
|
|
||||||
|
for i in range(num_deposits):
|
||||||
|
index = rng.randrange(0, num_deposits)
|
||||||
|
withdrawal_pubkey = pubkeys[index]
|
||||||
|
withdrawal_credentials = spec.BLS_WITHDRAWAL_PREFIX + spec.hash(withdrawal_pubkey)[1:]
|
||||||
|
|
||||||
|
deposit, _, _ = build_deposit(
|
||||||
|
spec,
|
||||||
|
deposit_data_leaves,
|
||||||
|
pubkeys[index],
|
||||||
|
privkeys[index],
|
||||||
|
rng.randint(spec.EFFECTIVE_BALANCE_INCREMENT, 2 * spec.MAX_EFFECTIVE_BALANCE_ELECTRA),
|
||||||
|
withdrawal_credentials=withdrawal_credentials,
|
||||||
|
signed=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
deposit_request = spec.DepositRequest(
|
||||||
|
pubkey=deposit.data.pubkey,
|
||||||
|
withdrawal_credentials=deposit.data.withdrawal_credentials,
|
||||||
|
amount=deposit.data.amount,
|
||||||
|
signature=deposit.data.signature,
|
||||||
|
index=deposit.data.index,
|
||||||
|
)
|
||||||
|
|
||||||
|
deposits_requests.append(deposit_request)
|
||||||
|
|
||||||
|
return deposits_requests
|
||||||
|
|
||||||
|
|
||||||
|
def get_random_withdrawals_requests(spec, state, rng, num_withdrawals=None):
|
||||||
|
if num_withdrawals is None:
|
||||||
|
num_withdrawals = rng.randint(0, spec.MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD)
|
||||||
|
|
||||||
|
withdrawals_requests = []
|
||||||
|
|
||||||
|
state.slot += spec.config.SHARD_COMMITTEE_PERIOD * spec.SLOTS_PER_EPOCH
|
||||||
|
|
||||||
|
current_epoch = spec.get_current_epoch(state)
|
||||||
|
active_validator_indices = spec.get_active_validator_indices(state, current_epoch)
|
||||||
|
|
||||||
|
for _ in range(num_withdrawals):
|
||||||
|
if not active_validator_indices:
|
||||||
|
break
|
||||||
|
|
||||||
|
address = rng.getrandbits(160).to_bytes(20, 'big')
|
||||||
|
|
||||||
|
validator_index = rng.choice(active_validator_indices)
|
||||||
|
validator = state.validators[validator_index]
|
||||||
|
validator_balance = state.balances[validator_index]
|
||||||
|
|
||||||
|
withdrawal_request = spec.WithdrawalRequest(
|
||||||
|
source_address=address,
|
||||||
|
validator_pubkey=validator.pubkey,
|
||||||
|
amount=rng.randint(0, validator_balance),
|
||||||
|
)
|
||||||
|
|
||||||
|
withdrawals_requests.append(withdrawal_request)
|
||||||
|
|
||||||
|
return withdrawals_requests
|
||||||
|
|
||||||
|
|
||||||
|
def get_random_consolidations_requests(spec, state, rng, num_consolidations=None):
|
||||||
|
if num_consolidations is None:
|
||||||
|
num_consolidations = rng.randint(0, spec.MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD)
|
||||||
|
|
||||||
|
consolidations_requests = []
|
||||||
|
|
||||||
|
state.slot += spec.config.SHARD_COMMITTEE_PERIOD * spec.SLOTS_PER_EPOCH
|
||||||
|
|
||||||
|
current_epoch = spec.get_current_epoch(state)
|
||||||
|
active_validator_indices = spec.get_active_validator_indices(state, current_epoch)
|
||||||
|
|
||||||
|
for _ in range(num_consolidations):
|
||||||
|
source_address = rng.getrandbits(160).to_bytes(20, 'big')
|
||||||
|
|
||||||
|
source_index = rng.choice(active_validator_indices)
|
||||||
|
target_index = rng.choice(active_validator_indices)
|
||||||
|
|
||||||
|
source_validator = state.validators[source_index]
|
||||||
|
target_validator = state.validators[target_index]
|
||||||
|
|
||||||
|
consolidation_request = spec.ConsolidationRequest(
|
||||||
|
source_address=source_address,
|
||||||
|
source_pubkey=source_validator.pubkey,
|
||||||
|
target_pubkey=target_validator.pubkey,
|
||||||
|
)
|
||||||
|
|
||||||
|
consolidations_requests.append(consolidation_request)
|
||||||
|
|
||||||
|
return consolidations_requests
|
||||||
|
@ -16,6 +16,7 @@ from eth2spec.test.helpers.multi_operations import (
|
|||||||
get_random_bls_to_execution_changes,
|
get_random_bls_to_execution_changes,
|
||||||
get_random_sync_aggregate,
|
get_random_sync_aggregate,
|
||||||
prepare_state_and_get_random_deposits,
|
prepare_state_and_get_random_deposits,
|
||||||
|
get_random_execution_requests,
|
||||||
)
|
)
|
||||||
from eth2spec.test.helpers.inactivity_scores import (
|
from eth2spec.test.helpers.inactivity_scores import (
|
||||||
randomize_inactivity_scores,
|
randomize_inactivity_scores,
|
||||||
@ -262,6 +263,7 @@ def random_block_deneb(spec, state, signed_blocks, scenario_state, rng=Random(34
|
|||||||
|
|
||||||
def random_block_electra(spec, state, signed_blocks, scenario_state, rng=Random(3456)):
|
def random_block_electra(spec, state, signed_blocks, scenario_state, rng=Random(3456)):
|
||||||
block = random_block_deneb(spec, state, signed_blocks, scenario_state, rng=rng)
|
block = random_block_deneb(spec, state, signed_blocks, scenario_state, rng=rng)
|
||||||
|
block.body.execution_requests = get_random_execution_requests(spec, state, rng=rng)
|
||||||
|
|
||||||
return block
|
return block
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user