sign method

  1. @override
ScTxData sign()
override

Implementation

@override
ScTxData sign() {
  final inputs =
      (txData.transaction['siacoinInputs'] as List<dynamic>?) ?? [];
  if (inputs.length != txData.toSign.length) {
    throw StateError(
        'siacoinInputs length (${inputs.length}) must match '
        'toSign length (${txData.toSign.length})');
  }

  for (int i = 0; i < txData.toSign.length; i++) {
    // wallet.sign() returns base64-encoded ed25519 signature.
    // The V2 transaction expects hex-encoded signatures.
    final base64Sig = wallet.sign(txData.toSign[i]);
    final sigBytes = base64.decode(base64Sig);
    final sigHex = dynamicToString(sigBytes);

    (inputs[i]['satisfiedPolicy'] as Map)['signatures'] = [sigHex];
  }

  if (txData.toSign.isNotEmpty) {
    txData.message = txData.toSign.first;
    final firstSigs =
        (inputs.first['satisfiedPolicy'] as Map)['signatures'] as List;
    txData.signature = firstSigs.first as String;
  }
  txData.isSigned = true;
  return txData;
}