Processes_Failed_Contract_Creation_Transaction_But_Does_Not_Invoke_ContractHandler (string code) { var transaction = new Transaction { To = "" }; var receipt = new TransactionReceipt { ContractAddress = "0x1009b29f2094457d3dba62d1953efea58176ba27" }; MockGetCode(receipt, code); const bool failedContractCreation = true; MockHandleTransaction(transaction, receipt, code, failedContractCreation); _processor = CreateProcessor(); await _processor.ProcessTransactionAsync( transaction, receipt, _blockTimestamp); EnsureContractHandlerWasNotInvoked(transaction); EnsureTransactionHandlerWasInvoked(); }
public async Task Ignores_Non_Contract_Creation_Transactions() { var transaction = new Transaction { To = "0x1009b29f2094457d3dba62d1953efea58176ba28" }; var receipt = new TransactionReceipt(); _processor = CreateProcessor(); await _processor.ProcessTransactionAsync( transaction, receipt, _blockTimestamp); EnsureNothingWasProcessed(transaction, receipt); }
public static IBlockProcessor Create( IBlockchainProxyService web3, IVmStackErrorChecker vmStackErrorChecker, HandlerContainer handlers, FilterContainer filters = null, bool postVm = false, bool processTransactionsInParallel = true) { var transactionLogProcessor = new TransactionLogProcessor( filters?.TransactionLogFilters, handlers.TransactionLogHandler); var contractTransactionProcessor = new ContractTransactionProcessor( web3, vmStackErrorChecker, handlers.ContractHandler, handlers.TransactionHandler, handlers.TransactionVmStackHandler); var contractCreationTransactionProcessor = new ContractCreationTransactionProcessor( web3, handlers.ContractHandler, handlers.TransactionHandler); var valueTransactionProcessor = new ValueTransactionProcessor( handlers.TransactionHandler); var transactionProcessor = new TransactionProcessor( web3, contractTransactionProcessor, valueTransactionProcessor, contractCreationTransactionProcessor, transactionLogProcessor, filters?.TransactionFilters, filters?.TransactionReceiptFilters, filters?.TransactionAndReceiptFilters); if (postVm) { return new BlockVmPostProcessor( web3, handlers.BlockHandler, transactionProcessor) { ProcessTransactionsInParallel = processTransactionsInParallel } } ; transactionProcessor.ContractTransactionProcessor.EnabledVmProcessing = false; return(new BlockProcessor( web3, handlers.BlockHandler, transactionProcessor, filters?.BlockFilters) { ProcessTransactionsInParallel = processTransactionsInParallel }); } }
public IBlockProcessor Create( IWeb3Wrapper web3, IVmStackErrorChecker vmStackErrorChecker, IBlockchainProcessingStrategy strategy, bool postVm = false, bool processTransactionsInParallel = true) { var transactionLogProcessor = new TransactionLogProcessor( strategy.Filters?.TransactionLogFilters, strategy.TransactionLogHandler); var contractTransactionProcessor = new ContractTransactionProcessor( web3, vmStackErrorChecker, strategy.ContractHandler, strategy.TransactionHandler, strategy.TransactionVmStackHandler); var contractCreationTransactionProcessor = new ContractCreationTransactionProcessor( web3, strategy.ContractHandler, strategy.TransactionHandler); var valueTransactionProcessor = new ValueTransactionProcessor( strategy.TransactionHandler); var transactionProcessor = new TransactionProcessor( web3, contractTransactionProcessor, valueTransactionProcessor, contractCreationTransactionProcessor, transactionLogProcessor, strategy.Filters?.TransactionFilters, strategy.Filters?.TransactionReceiptFilters, strategy.Filters?.TransactionAndReceiptFilters); if (postVm) { return new BlockVmPostProcessor( web3, strategy.BlockHandler, transactionProcessor) { ProcessTransactionsInParallel = processTransactionsInParallel } } ; transactionProcessor.ContractTransactionProcessor.EnabledVmProcessing = false; return(new BlockProcessor( web3, strategy.BlockHandler, transactionProcessor, strategy.Filters?.BlockFilters) { ProcessTransactionsInParallel = processTransactionsInParallel }); } }
public StorageProcessor(string url, string connectionString, string prefix, bool postVm = false) { _web3 = url.EndsWith(".ipc") ? new Web3.Web3(new IpcClient(url)) : new Web3.Web3(url); var blockRepository = new BlockRepository(); var transactionRepository = new TransactionRepository(); var addressTransactionRepository = new AddressTransactionRepository(); var contractRepository = new ContractRepository(); var logRepository = new TransactionLogRepository(); var vmStackRepository = new TransactionVMStackRepository(); var contractTransactionProcessor = new ContractTransactionProcessor(_web3, contractRepository, transactionRepository //,addressTransactionRepository //,vmStackRepository, //logRepository ); var contractCreationTransactionProcessor = new ContractCreationTransactionProcessor(_web3, contractRepository, transactionRepository //, addressTransactionRepository ); var valueTrasactionProcessor = new ValueTransactionProcessor(transactionRepository //,addressTransactionRepository ); var transactionProcessor = new TransactionProcessor(_web3, contractTransactionProcessor, valueTrasactionProcessor, contractCreationTransactionProcessor); if (postVm) { _procesor = new BlockVmPostProcessor(_web3, blockRepository, transactionProcessor, transactionRepository); } else { transactionProcessor.ContractTransactionProcessor.EnabledVmProcessing = false; _procesor = new BlockProcessor(_web3, blockRepository, transactionProcessor, transactionRepository); } }
public StorageProcessor(string url, string connectionString, string prefix, bool postVm = false) { _web3 = url.EndsWith(".ipc") ? new Web3.Web3(new IpcClient(url)) : new Web3.Web3(url); var tableSetup = new CloudTableSetup(connectionString); _contractTable = tableSetup.GetContractsTable(prefix); var transactionsTable = tableSetup.GetTransactionsTable(prefix); var addressTransactionsTable = tableSetup.GetAddressTransactionsTable(prefix); var blocksTable = tableSetup.GetBlocksTable(prefix); var logTable = tableSetup.GetTransactionsLogTable(prefix); var vmStackTable = tableSetup.GetTransactionsVmStackTable(prefix); var blockRepository = new BlockRepository(blocksTable); var transactionRepository = new TransactionRepository(transactionsTable); var addressTransactionRepository = new AddressTransactionRepository(addressTransactionsTable); var contractRepository = new ContractRepository(_contractTable); var logRepository = new TransactionLogRepository(logTable); var vmStackRepository = new TransactionVMStackRepository(vmStackTable); var contractTransactionProcessor = new ContractTransactionProcessor(_web3, contractRepository, transactionRepository, addressTransactionRepository, vmStackRepository, logRepository); var contractCreationTransactionProcessor = new ContractCreationTransactionProcessor(_web3, contractRepository, transactionRepository, addressTransactionRepository); var valueTrasactionProcessor = new ValueTransactionProcessor(transactionRepository, addressTransactionRepository); var transactionProcessor = new TransactionProcessor(_web3, contractTransactionProcessor, valueTrasactionProcessor, contractCreationTransactionProcessor); if (postVm) { _procesor = new BlockVmPostProcessor(_web3, blockRepository, transactionProcessor); } else { transactionProcessor.ContractTransactionProcessor.EnabledVmProcessing = false; _procesor = new BlockProcessor(_web3, blockRepository, transactionProcessor); } }
public async Task Processes_Valid_Transaction() { var transaction = new Transaction { To = "" }; var receipt = new TransactionReceipt { ContractAddress = "0x1009b29f2094457d3dba62d1953efea58176ba27" }; const string Code = "codecodecodecodeetcetc"; MockGetCode(receipt, Code); MockHandleContract(transaction, receipt, Code); MockHandleTransaction(transaction, receipt, Code); _processor = CreateProcessor(); await _processor.ProcessTransactionAsync( transaction, receipt, _blockTimestamp); EnsureContractHandlerWasInvoked(); EnsureTransactionHandlerWasInvoked(); }