buildMessageSendTransaction method

Future<({KeyPair previousKeyPair, Transaction transaction})> buildMessageSendTransaction({
  1. required Keychain keychain,
  2. required ApiService apiService,
  3. required String discussionSCAddress,
  4. required String messageContent,
  5. required String senderAddress,
  6. required String senderServiceName,
  7. required KeyPair senderKeyPair,
})

Implementation

Future<({Transaction transaction, KeyPair previousKeyPair})>
    buildMessageSendTransaction({
  required Keychain keychain,
  required ApiService apiService,
  required String discussionSCAddress,
  required String messageContent,
  required String senderAddress,
  required String senderServiceName,
  required KeyPair senderKeyPair,
}) async {
  final message = '''
    {
      "compressionAlgo": "gzip",
      "message": "${await _encodeMessage(message: messageContent, apiService: apiService, discussionSCAddress: discussionSCAddress, senderKeyPair: senderKeyPair)}"
    }
  ''';

  final blockchainTxVersion = int.parse(
    (await apiService.getBlockchainVersion()).version.transaction,
  );
  final tx = Transaction(
    type: 'transfer',
    version: blockchainTxVersion,
    data: Transaction.initData(),
  ).setContent(message).addRecipient(discussionSCAddress);

  final indexMap = await apiService.getTransactionIndex(
    [senderAddress],
  );

  final index = indexMap[senderAddress] ?? 0;
  final originPrivateKey = apiService.getOriginKey();

  final buildTxResult =
      keychain.buildTransaction(tx, senderServiceName, index);

  return (
    transaction: buildTxResult.transaction.originSign(originPrivateKey),
    previousKeyPair: buildTxResult.keyPair,
  );
}