sign method
Implementation
@override
ScpTxData sign() {
final sigs = txData.transactionSignatures;
if (sigs.length != txData.toSign.length) {
throw StateError(
'transactionSignatures length (${sigs.length}) must match '
'toSign length (${txData.toSign.length})');
}
// Build the mutable list of signature entries in the transaction map
final txSigsList = (txData.transaction['transactionSignatures'] as List?) ??
<dynamic>[];
for (int i = 0; i < txData.toSign.length; i++) {
// wallet.sign() returns base64-encoded ed25519 signature — exactly what
// SCP expects in transactionSignatures[*].signature.
final base64Sig = wallet.sign(txData.toSign[i]);
// Update the model object
sigs[i] = ScpTransactionSignature(
parentID: sigs[i].parentID,
publicKeyIndex: sigs[i].publicKeyIndex,
coveredFields: sigs[i].coveredFields,
signature: base64Sig,
);
// Update the transaction map
if (i < txSigsList.length) {
(txSigsList[i] as Map)['signature'] = base64Sig;
}
}
if (txData.toSign.isNotEmpty) {
txData.message = txData.toSign.first;
txData.signature = sigs.first.signature;
}
txData.isSigned = true;
return txData;
}