예제 #1
0
def test_no_double_or_surround(spec, state):
    attester_slashing = get_valid_attester_slashing(spec,
                                                    state,
                                                    signed_1=False,
                                                    signed_2=True)

    attester_slashing.attestation_1.data.target_epoch += 1
    sign_indexed_attestation(spec, state, attester_slashing.attestation_1)

    yield from run_attester_slashing_processing(spec, state, attester_slashing,
                                                False)
def test_same_data(spec, state):
    attester_slashing = get_valid_attester_slashing(spec,
                                                    state,
                                                    signed_1=False,
                                                    signed_2=True)

    attester_slashing.attestation_1.data = attester_slashing.attestation_2.data
    sign_indexed_attestation(spec, state, attester_slashing.attestation_1)

    yield from run_attester_slashing_processing(spec, state, attester_slashing,
                                                False)
예제 #3
0
def test_custody_bit_0_and_1(state):
    attester_slashing = get_valid_attester_slashing(state,
                                                    signed_1=False,
                                                    signed_2=True)

    attester_slashing.attestation_1.custody_bit_1_indices = (
        attester_slashing.attestation_1.custody_bit_0_indices)
    sign_indexed_attestation(state, attester_slashing.attestation_1)

    yield from run_attester_slashing_processing(state, attester_slashing,
                                                False)
예제 #4
0
def test_same_data(spec, state):
    attester_slashing = get_valid_attester_slashing(spec, state, signed_1=False, signed_2=True)

    indexed_att_1 = attester_slashing.attestation_1
    att_2_data = get_attestation_2_data(spec, attester_slashing)
    if spec.fork == 'phase1':
        indexed_att_1.attestation.data = att_2_data
    else:
        indexed_att_1.data = att_2_data
    sign_indexed_attestation(spec, state, attester_slashing.attestation_1)

    yield from run_attester_slashing_processing(spec, state, attester_slashing, False)
def test_unsorted_att_2(spec, state):
    attester_slashing = get_valid_attester_slashing(spec,
                                                    state,
                                                    signed_1=True,
                                                    signed_2=False)

    indices = attester_slashing.attestation_2.attesting_indices
    assert len(indices) >= 3
    indices[1], indices[2] = indices[2], indices[
        1]  # unsort second and third index
    sign_indexed_attestation(spec, state, attester_slashing.attestation_2)

    yield from run_attester_slashing_processing(spec, state, attester_slashing,
                                                False)
def test_att2_duplicate_index_normal_signed(spec, state):
    attester_slashing = get_valid_attester_slashing(spec, state, signed_1=True, signed_2=False)

    indices = attester_slashing.attestation_2.attesting_indices
    indices.pop(2)  # remove an index, make room for the additional duplicate index.
    attester_slashing.attestation_2.attesting_indices = sorted(indices)

    # sign it, the signature will be valid for a single occurence. If the transition accidentally ignores the duplicate.
    sign_indexed_attestation(spec, state, attester_slashing.attestation_2)

    indices.append(indices[1])  # add one of the indices a second time
    attester_slashing.attestation_2.attesting_indices = sorted(indices)

    # it will just appear normal, unless the double index is spotted
    yield from run_attester_slashing_processing(spec, state, attester_slashing, False)
예제 #7
0
def test_att2_duplicate_index_double_signed(spec, state):
    attester_slashing = get_valid_attester_slashing(spec,
                                                    state,
                                                    signed_1=True,
                                                    signed_2=False)

    indices = list(attester_slashing.attestation_2.attesting_indices)
    indices.pop(
        1)  # remove an index, make room for the additional duplicate index.
    indices.append(indices[2])  # add one of the indices a second time
    attester_slashing.attestation_2.attesting_indices = sorted(indices)
    sign_indexed_attestation(spec, state, attester_slashing.attestation_2
                             )  # will have one attester signing it double

    yield from run_attester_slashing_processing(spec, state, attester_slashing,
                                                False)
def test_success_surround(spec, state):
    next_epoch(spec, state)
    apply_empty_block(spec, state)

    state.current_justified_checkpoint.epoch += 1
    attester_slashing = get_valid_attester_slashing(spec, state, signed_1=False, signed_2=True)
    attestation_1 = attester_slashing.attestation_1
    attestation_2 = attester_slashing.attestation_2

    # set attestion1 to surround attestation 2
    attestation_1.data.source.epoch = attestation_2.data.source.epoch - 1
    attestation_1.data.target.epoch = attestation_2.data.target.epoch + 1

    sign_indexed_attestation(spec, state, attester_slashing.attestation_1)

    yield from run_attester_slashing_processing(spec, state, attester_slashing)
예제 #9
0
def get_valid_attester_slashing_by_indices(spec, state, indices_1, indices_2=None, signed_1=False, signed_2=False):
    if indices_2 is None:
        indices_2 = indices_1

    assert indices_1 == sorted(indices_1)
    assert indices_2 == sorted(indices_2)

    attester_slashing = get_valid_attester_slashing(spec, state)

    attester_slashing.attestation_1.attesting_indices = indices_1
    attester_slashing.attestation_2.attesting_indices = indices_2

    if signed_1:
        sign_indexed_attestation(spec, state, attester_slashing.attestation_1)
    if signed_2:
        sign_indexed_attestation(spec, state, attester_slashing.attestation_2)

    return attester_slashing