sign Transaction
Signs a challenge transaction with provided keypairs.
Takes a validated challenge transaction and adds signatures from the provided keypairs. The server's original signature is preserved, and new signatures are appended.
For multi-signature accounts, all required signers must be provided to meet the account's signing threshold.
The signing process:
Parse challenge XDR to transaction envelope
Compute transaction hash for the network
Preserve existing signatures (server's signature)
Optionally sign with client domain keypair or delegate FIRST (if provided)
Then sign transaction hash with each provided user keypair
Append new signatures to the envelope
Return updated envelope as base64 XDR
Signing order: Client domain signing happens BEFORE user keypair signing. This ensures user signatures are not exposed to the delegate and follows the principle of least privilege (domain verification before user signing).
Example - Single signature:
val signedChallenge = webAuth.signTransaction(
challengeXdr = challenge.transaction,
signers = listOf(userKeyPair)
)Example - Multi-signature account:
val signedChallenge = webAuth.signTransaction(
challengeXdr = challenge.transaction,
signers = listOf(signer1, signer2, signer3)
)Example - With client domain (local signing):
val signedChallenge = webAuth.signTransaction(
challengeXdr = challenge.transaction,
signers = listOf(userKeyPair),
clientDomainKeyPair = clientDomainKeyPair
)Example - With client domain (external signing):
val signedChallenge = webAuth.signTransaction(
challengeXdr = challenge.transaction,
signers = listOf(userKeyPair),
clientDomainSigningDelegate = hsmDelegate
)Security warning: Only sign validated challenges. Always call validateChallenge before calling this method.
Return
Base64-encoded signed transaction XDR
Parameters
Base64-encoded challenge transaction XDR
List of keypairs to sign with (must have private keys)
Optional keypair for local client domain signing
Optional delegate for external client domain signing
Throws
If parsing fails or transaction is invalid, or both signing methods provided
If transaction type is invalid