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); }
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); } } }