コード例 #1
0
        private static bool FindTransactionAndTimestamp(List <BlockWithTransactions> blockTransactions, string transactionHash, out Transaction transaction, out Hex.HexTypes.HexBigInteger blockTimestamp)
        {
            var transactionAndBlock = blockTransactions.Select(b =>
            {
                return(b.Transactions
                       .Where(t => t.TransactionHash.Equals(transactionHash, StringComparison.OrdinalIgnoreCase))
                       .Select(t => new { timestamp = b.Timestamp, transaction = t })
                       .FirstOrDefault());
            }).FirstOrDefault();

            transaction    = null;
            blockTimestamp = null;

            if (transactionAndBlock?.transaction == null)
            {
                return(false);
            }

            blockTimestamp = transactionAndBlock.timestamp;
            transaction    = transactionAndBlock.transaction;

            return(true);
        }
コード例 #2
0
        private async Task SendToHandler(List <ITransactionHandler> handlers, string transactionHash, Transaction transaction, Hex.HexTypes.HexBigInteger blockTimestamp)
        {
            var receipt = await _blockchainProxyService.GetTransactionReceipt(transactionHash);

            if (transaction.IsForContractCreation(receipt))
            {
                var code = await _blockchainProxyService.GetCode(receipt.ContractAddress);

                var contractCreationFailure    = (code == null) || (code == "0x");
                var contactCreationTransaction = new ContractCreationTransaction(
                    receipt.ContractAddress,
                    code,
                    transaction,
                    receipt,
                    contractCreationFailure,
                    blockTimestamp);

                foreach (var handler in handlers)
                {
                    await handler.HandleContractCreationTransactionAsync(contactCreationTransaction);
                }
            }
            else
            {
                var txWithReceipt = new TransactionWithReceipt(
                    transaction,
                    receipt,
                    !receipt.Succeeded(),
                    blockTimestamp);

                foreach (var handler in handlers)
                {
                    await handler.HandleTransactionAsync(txWithReceipt);
                }
            }
        }