Esempio n. 1
0
 def mk_vote(validator_index, target_hash, target_epoch, source_epoch,
             validation_key):
     msg_hash = w3.sha3(
         rlp.encode(
             [validator_index, target_hash, target_epoch, source_epoch]))
     signed = w3.eth.account.signHash(msg_hash, validation_key)
     sig = encode_int32(signed.v) + encode_int32(signed.r) + encode_int32(
         signed.s)
     return rlp.encode(
         [validator_index, target_hash, target_epoch, source_epoch, sig])
Esempio n. 2
0
def test_invalid_signature_fails(casper, concise_casper, funded_account,
                                 validation_key, deposit_amount,
                                 induct_validator, mk_vote, fake_hash,
                                 assert_tx_failed):
    validator_index = induct_validator(funded_account, validation_key,
                                       deposit_amount)

    # construct double votes but one has an invalid signature
    valid_signed_vote = mk_vote(validator_index,
                                concise_casper.recommended_target_hash(),
                                concise_casper.current_epoch(),
                                concise_casper.recommended_source_epoch(),
                                validation_key)
    invalid_signed_vote = mk_vote(
        validator_index,
        fake_hash,
        concise_casper.current_epoch(),
        concise_casper.recommended_source_epoch(),
        encode_int32(42)  # not the validators key
    )

    assert not concise_casper.slashable(valid_signed_vote, invalid_signed_vote)
    assert_tx_failed(lambda: casper.functions.slash(
        valid_signed_vote, invalid_signed_vote).transact())

    # flip the order of arguments
    assert not concise_casper.slashable(invalid_signed_vote, valid_signed_vote)
    assert_tx_failed(lambda: casper.functions.slash(
        invalid_signed_vote, valid_signed_vote).transact())
Esempio n. 3
0
 def mk_logout_msg_unsigned(validator_index, epoch):
     v, r, s = (0, 0, 0)
     sig = encode_int32(v) + encode_int32(r) + encode_int32(s)
     return rlp.encode([validator_index, epoch, sig])
Esempio n. 4
0
 def mk_logout_msg_signed(validator_index, epoch, validation_key):
     msg_hash = Web3.sha3(rlp.encode([validator_index, epoch]))
     signed = w3.eth.account.signHash(msg_hash, validation_key)
     sig = encode_int32(signed.v) + encode_int32(signed.r) + encode_int32(
         signed.s)
     return rlp.encode([validator_index, epoch, sig])