Example #1
0
        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);
        }