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])
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())
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])
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])