sign method
Creates a multisig transaction from the input and the multisig account.
Implementation
Future<SignedTransaction> sign({
required Account account,
required RawTransaction transaction,
}) async {
final sender = transaction.sender;
final address = toAddress();
if (sender == null) {
throw AlgorandException(message: 'Sender is not valid');
}
// check that account secret key is in multisig pk list
final index = publicKeys.indexOf(account.address);
if (index == -1) {
throw AlgorandException(
message: 'Multisig account does not contain this secret key',
);
}
// Create the multisignature
final signedTx = await transaction.sign(account);
final subsigs = <MultisigSubsig>[];
for (var i = 0; i < publicKeys.length; i++) {
if (i == index) {
subsigs.add(
MultisigSubsig(
key: account.address,
signature: Signature(
bytes: signedTx.signature ?? Uint8List.fromList([]),
),
),
);
} else {
subsigs.add(MultisigSubsig(key: publicKeys[i]));
}
}
final mSig = MultiSignature(
version: version,
threshold: threshold,
subsigs: subsigs,
);
final msigTx = SignedTransaction(
transaction: transaction,
multiSignature: mSig,
transactionId: signedTx.transactionId,
);
if (sender.encodedAddress != address.encodedAddress) {
msigTx.authAddress = address;
}
return msigTx;
}