Exemple #1
0
        public async Task ProcessTransactionAsync(
            Transaction transaction,
            TransactionReceipt transactionReceipt,
            HexBigInteger blockTimestamp)
        {
            var     transactionHash = transaction.TransactionHash;
            var     hasStackTrace   = false;
            JObject stackTrace      = null;
            var     error           = string.Empty;
            var     hasError        = transactionReceipt.Failed();

            if (EnabledVmProcessing)
            {
                try
                {
                    stackTrace = await _web3
                                 .GetTransactionVmStack(transactionHash)
                                 .ConfigureAwait(false);
                }
                catch (Exception)
                {
                }

                if (stackTrace != null)
                {
                    //TODO!  _Remove this debug line
                    //File.WriteAllText($"c:/Temp/StackTrace_{transactionReceipt.BlockNumber.Value}.json", stackTrace.ToString());

                    error         = _vmStackErrorChecker.GetError(stackTrace);
                    hasError      = !string.IsNullOrEmpty(error);
                    hasStackTrace = true;

                    await _transactionVmStackHandler.HandleAsync
                        (new TransactionVmStack(transactionHash, transaction.To, stackTrace))
                    .ConfigureAwait(false);
                }
            }

            var tx = new TransactionWithReceipt(
                transaction,
                transactionReceipt,
                hasError,
                blockTimestamp,
                error,
                hasStackTrace);

            await _transactionHandler.HandleTransactionAsync(tx)
            .ConfigureAwait(false);
        }
Exemple #2
0
        public async Task ProcessTransactionAsync(
            Transaction transaction,
            TransactionReceipt transactionReceipt,
            HexBigInteger blockTimestamp)
        {
            var     transactionHash = transaction.TransactionHash;
            var     hasStackTrace   = false;
            JObject stackTrace      = null;
            var     error           = string.Empty;
            var     hasError        = transactionReceipt.Failed();

            if (EnabledVmProcessing)
            {
                try
                {
                    stackTrace = await _vmStackProxy
                                 .GetTransactionVmStack(transactionHash)
                                 .ConfigureAwait(false);
                }
                catch
                {
                }

                if (stackTrace != null)
                {
                    error         = _vmStackErrorChecker.GetError(stackTrace);
                    hasError      = !string.IsNullOrEmpty(error);
                    hasStackTrace = true;

                    await _transactionVmStackHandler.HandleAsync
                        (new TransactionVmStack(transactionHash, transaction.To, stackTrace));
                }
            }

            await _transactionHandler.HandleTransactionAsync(
                new TransactionWithReceipt(
                    transaction,
                    transactionReceipt,
                    hasError,
                    blockTimestamp,
                    error,
                    hasStackTrace));
        }