algorand / py-algorand-sdk

Algorand Python SDK
MIT License
268 stars 143 forks source link

Support attaching signatures to transactions #241

Open jasonpaulos opened 3 years ago

jasonpaulos commented 3 years ago

Summary

This SDK has the ability to create a signed transaction given a private key using the Transaction.sign method. However, we should also support use cases where the SDK does not have access the private key, such as if the key is on another system or stored in a hardware wallet.

We can support this by providing a function which creates a signed transaction based on an arbitrary signature, which can be computed elsewhere.

Scope

I propose creating the following new method on the Transaction class:

jannotti commented 3 years ago
def sign(self, private_key):
    """
    Sign the transaction with a private key.

    Args:
        private_key (str): the private key of the signing account

    Returns:
        SignedTransaction: signed transaction with the signature
    """
    sig = self.raw_sign(private_key)
    sig = base64.b64encode(sig).decode()
    return self.attach_signature(sig, account.address_from_private_key(private_key)):

def attach_signature(self, sig, address)
        authorizing_address = None
        if self.sender != address:
            authorizing_address = address
        stx = SignedTransaction(self, sig, authorizing_address)
        return stx