getContractTxs method
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;
}