getContractTxs method

Future<ApiContractTxsResponse> getContractTxs(
  1. String address,
  2. int limit,
  3. String typeOfContract
)

Implementation

Future<ApiContractTxsResponse> getContractTxs(
    String address, int limit, String typeOfContract) async {
  HttpClient httpClient = new HttpClient();
  ApiContractTxsResponse apiContractTxsResponse =
      new ApiContractTxsResponse();
  apiContractTxsResponse.result =
      List<ApiContractTxsResponseResult>.empty(growable: true);
  Completer<ApiContractTxsResponse> _completer =
      new Completer<ApiContractTxsResponse>();

  Map contractCharged = new Map();

  try {
    HttpClientRequest request = await httpClient.getUrl(Uri.parse(
        "https://api.idena.io/api/Address/" +
            address +
            "/Txs?limit=" +
            limit.toString()));
    request.headers.set('content-type', 'application/json');
    HttpClientResponse response = await request.close();
    if (response.statusCode == 200) {
      String reply = await response.transform(utf8.decoder).join();
      ApiContractTxsResponse apiContractTxsResponseTmp =
          apiContractTxsResponseFromJson(reply);
      if (apiContractTxsResponseTmp != null &&
          apiContractTxsResponseTmp.result != null) {
        for (int i = 0; i < apiContractTxsResponseTmp.result.length; i++) {
          if (apiContractTxsResponseTmp.result[i].type == "CallContract" ||
              apiContractTxsResponseTmp.result[i].type ==
                  "TerminateContract" ||
              apiContractTxsResponseTmp.result[i].type == "DeployContract") {
            String contractAddress = apiContractTxsResponseTmp.result[i].to;
            if (apiContractTxsResponseTmp.result[i].type ==
                "DeployContract") {
              BcnTxReceiptResponse bcnTxReceiptResponse = await getTxReceipt(
                  apiContractTxsResponseTmp.result[i].hash);
              if (bcnTxReceiptResponse != null &&
                  bcnTxReceiptResponse.result != null) {
                contractAddress = bcnTxReceiptResponse.result.contract;
                apiContractTxsResponseTmp.result[i].to = contractAddress;
              }
            }

            if (contractAddress != null &&
                contractCharged.containsKey(contractAddress.toUpperCase()) ==
                    false) {
              ApiContractResponse apiContractResponse =
                  await getContract(contractAddress);
              if (apiContractResponse != null &&
                  apiContractResponse.result != null &&
                  apiContractResponse.result.type == typeOfContract) {
                apiContractTxsResponse.result
                    .add(apiContractTxsResponseTmp.result[i]);
                contractCharged.putIfAbsent(contractAddress.toUpperCase(),
                    () => contractAddress.toUpperCase());
              }
            }
          }
        }
      }
    }
  } catch (e) {
    print("exception : " + e.toString());
  } finally {
    httpClient.close();
  }

  _completer.complete(apiContractTxsResponse);

  return _completer.future;
}