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)
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")