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
Exemple #2
0
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
Exemple #3
0
def test_wrong_deposit_for_deposit_count(spec, state):
    deposit_data_leaves = [
        spec.DepositData() for _ in range(len(state.validators))
    ]

    # build root for deposit_1
    index_1 = len(deposit_data_leaves)
    pubkey_1 = pubkeys[index_1]
    privkey_1 = privkeys[index_1]
    _, _, deposit_data_leaves = build_deposit(
        spec,
        state,
        deposit_data_leaves,
        pubkey_1,
        privkey_1,
        spec.MAX_EFFECTIVE_BALANCE,
        withdrawal_credentials=b'\x00' * 32,
        signed=True,
    )
    deposit_count_1 = len(deposit_data_leaves)

    # build root for deposit_2
    index_2 = len(deposit_data_leaves)
    pubkey_2 = pubkeys[index_2]
    privkey_2 = privkeys[index_2]
    deposit_2, root_2, deposit_data_leaves = build_deposit(
        spec,
        state,
        deposit_data_leaves,
        pubkey_2,
        privkey_2,
        spec.MAX_EFFECTIVE_BALANCE,
        withdrawal_credentials=b'\x00' * 32,
        signed=True,
    )

    # state has root for deposit_2 but is at deposit_count for deposit_1
    state.eth1_data.deposit_root = root_2
    state.eth1_data.deposit_count = deposit_count_1

    yield from run_deposit_processing(spec,
                                      state,
                                      deposit_2,
                                      index_2,
                                      valid=False)