Example #1
0
def test_get_seed(genesis_state,
                  committee_config,
                  slots_per_epoch,
                  min_seed_lookahead,
                  activation_exit_delay,
                  epochs_per_historical_vector):
    def mock_get_randao_mix(state,
                            epoch,
                            epochs_per_historical_vector):
        return hash_eth2(
            state.hash_tree_root +
            epoch.to_bytes(32, byteorder='little') +
            epochs_per_historical_vector.to_bytes(32, byteorder='little')
        )

    def mock_get_active_index_root(state,
                                   epoch,
                                   epochs_per_historical_vector):
        return hash_eth2(
            state.hash_tree_root +
            epoch.to_bytes(32, byteorder='little') +
            slots_per_epoch.to_bytes(32, byteorder='little') +
            epochs_per_historical_vector.to_bytes(32, byteorder='little')
        )

    state = genesis_state
    epoch = 1
    state = state.copy(
        slot=compute_start_slot_of_epoch(epoch, committee_config.SLOTS_PER_EPOCH),
    )

    epoch_as_bytes = epoch.to_bytes(32, 'little')

    seed = _get_seed(
        state=state,
        epoch=epoch,
        randao_provider=mock_get_randao_mix,
        active_index_root_provider=mock_get_active_index_root,
        epoch_provider=lambda *_: epoch_as_bytes,
        committee_config=committee_config,
    )
    assert seed == hash_eth2(
        mock_get_randao_mix(
            state=state,
            epoch=(epoch + epochs_per_historical_vector - min_seed_lookahead - 1),
            epochs_per_historical_vector=epochs_per_historical_vector,
        ) + mock_get_active_index_root(
            state=state,
            epoch=epoch,
            epochs_per_historical_vector=epochs_per_historical_vector,
        ) + epoch_as_bytes
    )
Example #2
0
def test_get_seed(
    genesis_state,
    config,
    slots_per_epoch,
    min_seed_lookahead,
    max_seed_lookahead,
    epochs_per_historical_vector,
):
    def mock_get_randao_mix(state, epoch, epochs_per_historical_vector):
        return hash_eth2(
            state.hash_tree_root
            + epoch.to_bytes(32, byteorder="little")
            + epochs_per_historical_vector.to_bytes(32, byteorder="little")
        )

    state = genesis_state
    epoch = 1
    state = state.set(
        "slot", compute_start_slot_at_epoch(epoch, config.SLOTS_PER_EPOCH)
    )

    epoch_as_bytes = epoch.to_bytes(32, "little")
    domain_type = signature_domain_to_domain_type(
        SignatureDomain.DOMAIN_BEACON_PROPOSER
    )
    seed = _get_seed(
        state=state,
        epoch=epoch,
        domain_type=domain_type,
        randao_provider=mock_get_randao_mix,
        epoch_provider=lambda *_: epoch_as_bytes,
        config=config,
    )
    assert seed == hash_eth2(
        domain_type
        + epoch_as_bytes
        + mock_get_randao_mix(
            state=state,
            epoch=(epoch + epochs_per_historical_vector - min_seed_lookahead - 1),
            epochs_per_historical_vector=epochs_per_historical_vector,
        )
    )