toBroadcast method

  1. @override
Map<String, dynamic> toBroadcast()
override

Build the legacy broadcast payload matching buildLegacyBroadcastPayload in the JS reference.

Converts the first hex signature to base64 and adds it under a transactionSignatures field, then wraps everything in { data: ... }.

Implementation

@override
Map<String, dynamic> toBroadcast() {
  if (!isSigned) return {};

  final data = Map<String, dynamic>.from(transaction);

  final inputs = data['siacoinInputs'] as List<dynamic>?;
  final sigs = inputs?.isNotEmpty == true
      ? inputs!.first['satisfiedPolicy']['signatures'] as List<dynamic>?
      : null;
  final firstSigHex = sigs?.isNotEmpty == true ? sigs!.first as String : null;

  if (firstSigHex == null) {
    return {};
  }

  data['transactionSignatures'] = [
    {
      'signature': base64.encode(
        List<int>.generate(firstSigHex.length ~/ 2, (i) {
          return int.parse(firstSigHex.substring(i * 2, i * 2 + 2),
              radix: 16);
        }),
      ),
    }
  ];

  return {'data': data};
}