def prepare_state_and_get_random_deposits(spec, state, rng): num_deposits = rng.randrange(spec.MAX_DEPOSITS) deposit_data_leaves = [ spec.DepositData() for _ in range(len(state.validators)) ] deposits = [] # First build deposit data leaves for i in range(num_deposits): index = len(state.validators) + i _, root, deposit_data_leaves = build_deposit( spec, deposit_data_leaves, pubkeys[index], privkeys[index], spec.MAX_EFFECTIVE_BALANCE, withdrawal_credentials=b'\x00' * 32, signed=True, ) state.eth1_data.deposit_root = root state.eth1_data.deposit_count += num_deposits # Then for that context, build deposits/proofs for i in range(num_deposits): index = len(state.validators) + i deposit, _, _ = deposit_from_context(spec, deposit_data_leaves, index) deposits.append(deposit) return deposits
def test_invalid_sig_other_version(spec, state): validator_index = len(state.validators) amount = spec.MAX_EFFECTIVE_BALANCE pubkey = pubkeys[validator_index] privkey = privkeys[validator_index] withdrawal_credentials = spec.BLS_WITHDRAWAL_PREFIX + spec.hash(pubkey)[1:] # Go through the effort of manually signing, not something normally done. This sig domain will be invalid. deposit_message = spec.DepositMessage( pubkey=pubkey, withdrawal_credentials=withdrawal_credentials, amount=amount) domain = spec.compute_domain(domain_type=spec.DOMAIN_DEPOSIT, fork_version=spec.Version('0xaabbccdd')) deposit_data = spec.DepositData( pubkey=pubkey, withdrawal_credentials=withdrawal_credentials, amount=amount, signature=bls.Sign(privkey, spec.compute_signing_root(deposit_message, domain))) deposit, root, _ = deposit_from_context(spec, [deposit_data], 0) state.eth1_deposit_index = 0 state.eth1_data.deposit_root = root state.eth1_data.deposit_count = 1 yield from run_deposit_processing(spec, state, deposit, validator_index, valid=True, effective=False)
def get_random_deposits(spec, state, rng, num_deposits=None): if not num_deposits: num_deposits = rng.randrange(1, spec.MAX_DEPOSITS) if num_deposits == 0: return [], b"\x00" * 32 deposit_data_leaves = [ spec.DepositData() for _ in range(len(state.validators)) ] deposits = [] # First build deposit data leaves for i in range(num_deposits): index = len(state.validators) + i _, root, deposit_data_leaves = build_deposit( spec, deposit_data_leaves, pubkeys[index], privkeys[index], spec.MAX_EFFECTIVE_BALANCE, withdrawal_credentials=b'\x00' * 32, signed=True, ) # Then for that context, build deposits/proofs for i in range(num_deposits): index = len(state.validators) + i deposit, _, _ = deposit_from_context(spec, deposit_data_leaves, index) deposits.append(deposit) return deposits, root