Пример #1
0
def validate_is_slashable_attestation_data(
        attestation_1: IndexedAttestation,
        attestation_2: IndexedAttestation) -> None:
    is_slashable_data = is_slashable_attestation_data(attestation_1.data,
                                                      attestation_2.data)

    if not is_slashable_data:
        raise ValidationError(
            "The `AttesterSlashing` object doesn't meet the Casper FFG slashing conditions."
        )
Пример #2
0
def test_is_slashable_attestation_data(sample_attestation_data_params,
                                       is_double_vote, is_surround_vote):
    data_1 = AttestationData(**sample_attestation_data_params)
    data_2 = AttestationData(**sample_attestation_data_params)

    if is_double_vote:
        data_2 = data_2.copy(beacon_block_root=(
            int.from_bytes(data_1.beacon_block_root, "little") +
            1).to_bytes(32, "little"))

    if is_surround_vote:
        data_1 = data_1.copy(
            source=data_1.source.copy(epoch=data_2.source.epoch - 1),
            target=data_1.target.copy(epoch=data_2.target.epoch + 1),
        )

    assert is_slashable_attestation_data(data_1,
                                         data_2) == (is_double_vote
                                                     or is_surround_vote)
Пример #3
0
def test_is_slashable_attestation_data(sample_attestation_data_params,
                                       is_double_vote, is_surround_vote):
    data_1 = AttestationData.create(**sample_attestation_data_params)
    data_2 = AttestationData.create(**sample_attestation_data_params)

    if is_double_vote:
        data_2 = data_2.set(
            "beacon_block_root",
            (int.from_bytes(data_1.beacon_block_root, "little") + 1).to_bytes(
                32, "little"),
        )

    if is_surround_vote:
        data_1 = data_1.transform(
            ("source", "epoch"), data_2.source.epoch - 1).transform(
                ("target", "epoch"), data_2.target.epoch + 1)

    assert is_slashable_attestation_data(data_1,
                                         data_2) == (is_double_vote
                                                     or is_surround_vote)