createTransactionSync function

PendingTransactionDescription createTransactionSync({
  1. required String address,
  2. String? amount,
  3. String paymentId = '',
  4. int priorityRaw = 1,
  5. int subaddrAccount = 0,
})

Implementation

PendingTransactionDescription createTransactionSync(
    {required String address,
    String? amount,
    String paymentId = '',
    int priorityRaw = 1,
    int subaddrAccount = 0}) {
  final addressPointer = address.toNativeUtf8().cast<Char>();
  final amountPointer = null != amount
      ? amount.toNativeUtf8().cast<Char>()
      : Pointer<Char>.fromAddress(nullptr.address);
  final paymentIdPointer = paymentId.toNativeUtf8().cast<Char>();
  final pendingTransactionPointer = calloc<ExternPendingTransactionRaw>();
  final errorBoxPointer = monero_flutter.buildErrorBoxPointer();

  monero_flutter.bindings.transaction_create(
      addressPointer,
      paymentIdPointer,
      amountPointer,
      priorityRaw,
      subaddrAccount, // TODO - глянуть имя!
      pendingTransactionPointer,
      errorBoxPointer);

  final errorInfo = monero_flutter.extractErrorInfo(errorBoxPointer);
  calloc.free(addressPointer);
  calloc.free(paymentIdPointer);

  if (amountPointer.address != nullptr.address) {
    calloc.free(amountPointer);
  }

  if (0 != errorInfo.code) {
    calloc.free(pendingTransactionPointer);
    throw CreationTransactionException(message: errorInfo.getErrorMessage());
  }

  final pendingTransactionDescription = PendingTransactionDescription(
      amount: pendingTransactionPointer.ref.amount,
      fee: pendingTransactionPointer.ref.fee,
      hash: pendingTransactionPointer.ref.hash.cast<Utf8>().toDartString(),
      hex: pendingTransactionPointer.ref.hex.cast<Utf8>().toDartString(),
      txKey: pendingTransactionPointer.ref.tx_key.cast<Utf8>().toDartString(),
      multisigSignData: pendingTransactionPointer.ref.multisig_sign_data
          .cast<Utf8>()
          .toDartString(),
      pointerAddress: pendingTransactionPointer.address);

  return pendingTransactionDescription;
}