getTransactionInfo method

Future<XRPTransactionInfo> getTransactionInfo(
  1. String adress
)

Implementation

Future<XRPTransactionInfo> getTransactionInfo(
  String adress,
) async {
  final serverInfoRequest = await networkClient.postHTTP('', {
    "method": "server_info",
    "params": [{}],
    "id": "dontcare",
    "jsonrpc": "2.0"
  });
  final serverInfo = serverInfoRequest.data['result']['info'] as Map;
  late Map<String, dynamic> accountData;
  try {
    accountData = await getAccountInfo(adress);
  } catch (err) {
    if (err is Map) {
      throw Exception(err['result']["error_message"]);
    }
    rethrow;
  }

  final networkId = serverInfo['network_id'] as int;

  final sequence = accountData['account_data']['Sequence'] as int;

  //Fee calculation

  final baseFee = serverInfo["validated_ledger"]["base_fee_xrp"] as double;

  final serverLoadFactor = serverInfo["load_factor"] ?? 1;
  const feeCushion = 1.2;

  double fee = baseFee * serverLoadFactor * feeCushion;
  const maxFeeXRP = 2.0;

  fee = min(fee, maxFeeXRP);

  final String feeString =
      XrpFormatter.xrpToDrops(double.parse(fee.toStringAsFixed(6)))
          .toString();

  // LatestValidatedLedgerSequence calculation

  final ledgerSequenceRequest = await networkClient.postHTTP('', {
    "method": "ledger",
    "params": [
      {
        "ledger_index": "validated",
        "transactions": false,
        "expand": false,
        "owner_funds": false
      }
    ]
  });

  final ledgerIndex =
      ledgerSequenceRequest.data['result']['ledger_index'] as int;
  const ledgerOffset = 20;
  final lastLedgerSequence = ledgerIndex + ledgerOffset;

  return XRPTransactionInfo(
    lastLedgerSequence: lastLedgerSequence,
    fee: feeString,
    sequence: sequence,
    networkId: networkId,
  );
}