Beispiel #1
0
def extract_transaction_sender(transaction: SignedTransactionAPI) -> Address:
    vrs = (transaction.y_parity, transaction.r, transaction.s)
    signature = keys.Signature(vrs=vrs)
    message = transaction.get_message_for_signing()
    public_key = signature.recover_public_key_from_msg(message)
    sender = public_key.to_canonical_address()
    return Address(sender)
Beispiel #2
0
def validate_transaction_signature(transaction: SignedTransactionAPI) -> None:
    message = transaction.get_message_for_signing()
    vrs = (transaction.y_parity, transaction.r, transaction.s)
    try:
        signature = keys.Signature(vrs=vrs)
        public_key = signature.recover_public_key_from_msg(message)
    except BadSignature as e:
        raise ValidationError(f"Bad Signature: {str(e)}")

    if not signature.verify_msg(message, public_key):
        raise ValidationError("Invalid Signature")