Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support attaching signatures to transactions #241

Open
jasonpaulos opened this issue Oct 7, 2021 · 1 comment
Open

Support attaching signatures to transactions #241

jasonpaulos opened this issue Oct 7, 2021 · 1 comment

Comments

@jasonpaulos
Copy link
Contributor

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:

  • attach_signature(signer_addr: string, signature: bytes) -> SignedTransaction
    • Create a signed transaction using an existing signature. This would be very similar to the existing sign method, except it accepts the signature as an input. And if signer_addr is not the same as the sender of the transaction, the authorizing_address field should be set on the SignedTransaction.
@jannotti
Copy link
Contributor

jannotti commented Oct 7, 2021

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants