public async Task <IEnumerable <TransactionReceipt> > ExecuteAsync( BigInteger blockNumber) { var block = await _iconService.GetBlock(blockNumber); var transactions = block?.GetTransactions(); var transactionReceipts = new List <TransactionReceipt>(); if (transactions != null) { foreach (var blockTransaction in transactions) { var txHash = blockTransaction.GetTxHash().ToHexString(true); var bytes = new Bytes(txHash); var txResult = await _iconService.GetTransactionResult(bytes); if (txResult == null) { throw new InvalidOperationException( $"Block[{blockNumber}] contains confirmed transaction " + $"which results can not be retrieved as transaction results: txHash[{txHash}]"); } var error = await _tryGetTransactionErrorStrategy.ExecuteAsync(txResult.GetStatus(), txHash); if (error != null) { continue; } if (blockTransaction.GetTo() != null && blockTransaction.GetTo().GetPrefix() == AddressPrefix.FromString(AddressPrefix.Contract)) { transactionReceipts.AddRange ( GetInternalTransactionReceipts ( blockTransaction.GetTxHash().ToHexString(true), txResult, block.GetTimestamp() ) ); } var transactionTransferValue = blockTransaction.GetValue(); if (transactionTransferValue != null && transactionTransferValue != BigInteger.Zero) { transactionReceipts.Add(new TransactionReceipt ( amount: transactionTransferValue.Value, blockNumber: blockNumber, from: blockTransaction.GetFrom().ToString(), hash: blockTransaction.GetTxHash().ToHexString(true), index: 0, timestamp: block.GetTimestamp(), to: blockTransaction.GetTo().ToString() )); } } } return(transactionReceipts); }