Example #1
0
 public AuRaBlockProcessor(
     ISpecProvider specProvider,
     IBlockValidator blockValidator,
     IRewardCalculator rewardCalculator,
     ITransactionProcessor transactionProcessor,
     IStateProvider stateProvider,
     IStorageProvider storageProvider,
     ITxPool txPool,
     IReceiptStorage receiptStorage,
     ILogManager logManager,
     IBlockTree blockTree,
     ITxFilter?txFilter = null,
     AuRaContractGasLimitOverride?gasLimitOverride = null)
     : base(
         specProvider,
         blockValidator,
         rewardCalculator,
         transactionProcessor,
         stateProvider,
         storageProvider,
         txPool,
         receiptStorage,
         NullWitnessCollector.Instance, // TODO: we will not support beam sync on AuRa chains for now
         logManager)
 {
     _specProvider     = specProvider;
     _blockTree        = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _logger           = logManager?.GetClassLogger <AuRaBlockProcessor>() ?? throw new ArgumentNullException(nameof(logManager));
     _txFilter         = txFilter ?? NullTxFilter.Instance;
     _gasLimitOverride = gasLimitOverride;
 }
Example #2
0
        /// <summary>
        /// Button 'Charge Fee' click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnChargeFee_Click(object sender, EventArgs e)
        {
            ITransactionProcessor transactionProccesor = TransactionProcessor.GetTransactionProcessor();

            CurrencyAmount currencyAmount = new CurrencyAmount();

            currencyAmount.Amount   = Convert.ToInt32(txtTransactionAmoun.Text);
            currencyAmount.Currency = txtTransactionCurrency.Text;

            IDepositAccount depositAccount = createDepositAccount();
            ILoanAccount    loanAccount    = createLoanAccount();

            List <IAccount> accounts = new List <IAccount>();

            accounts.Add(depositAccount);
            accounts.Add(loanAccount);

            TransactionStatus status = ProcessorExtensions.ChargeProcessingFee(transactionProccesor, currencyAmount, accounts);

            if (status.Equals(TransactionStatus.Completed))
            {
                lblTransactionStatus.Text = "Transaction Completed";
            }
            else
            {
                lblTransactionStatus.Text = "Transaction Failed";
            }


            DisplayLastTransactionDetails();
        }
Example #3
0
 public BlockchainBridge(ReadOnlyTxProcessingEnv processingEnv,
                         ITxPool?txPool,
                         IReceiptFinder?receiptStorage,
                         IFilterStore?filterStore,
                         IFilterManager?filterManager,
                         IEthereumEcdsa?ecdsa,
                         ITimestamper?timestamper,
                         ILogFinder?logFinder,
                         ISpecProvider specProvider,
                         bool isMining)
 {
     _processingEnv        = processingEnv ?? throw new ArgumentNullException(nameof(processingEnv));
     _stateReader          = processingEnv.StateReader ?? throw new ArgumentNullException(nameof(processingEnv.StateReader));
     _stateProvider        = processingEnv.StateProvider ?? throw new ArgumentNullException(nameof(processingEnv.StateProvider));
     _blockTree            = processingEnv.BlockTree ?? throw new ArgumentNullException(nameof(processingEnv.BlockTree));
     _transactionProcessor = processingEnv.TransactionProcessor ?? throw new ArgumentNullException(nameof(processingEnv.TransactionProcessor));
     _txPool        = txPool ?? throw new ArgumentNullException(nameof(_txPool));
     _receiptFinder = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore   = filterStore ?? throw new ArgumentNullException(nameof(filterStore));
     _filterManager = filterManager ?? throw new ArgumentNullException(nameof(filterManager));
     _ecdsa         = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _timestamper   = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     _logFinder     = logFinder ?? throw new ArgumentNullException(nameof(logFinder));
     _specProvider  = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     IsMining       = isMining;
 }
        public UniqueValidationSource(ITransactionProcessor transactionProcessor, ITypeDescriptorCache descriptors)
        {
            _transactionProcessor = transactionProcessor;
            _descriptors          = descriptors;

            _rules = new Cache <Type, IEnumerable <IValidationRule> >(DetermineRulesFor);
        }
 public ReadOnlyTransactionProcessor(ITransactionProcessor transactionProcessor, IStateProvider stateProvider, Keccak startState)
 {
     _transactionProcessor    = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor));
     _stateProvider           = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _stateBefore             = _stateProvider.StateRoot;
     _stateProvider.StateRoot = startState ?? throw new ArgumentException(nameof(startState));
 }
 public BlockchainBridge(
     IStateReader stateReader,
     IStateProvider stateProvider,
     IStorageProvider storageProvider,
     IBlockTree blockTree,
     ITransactionPool transactionPool,
     ITransactionPoolInfoProvider transactionPoolInfoProvider,
     IReceiptStorage receiptStorage,
     IFilterStore filterStore,
     IFilterManager filterManager,
     IWallet wallet,
     ITransactionProcessor transactionProcessor)
 {
     _stateReader                 = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _stateProvider               = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _storageProvider             = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider));
     _blockTree                   = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _transactionPool             = transactionPool ?? throw new ArgumentNullException(nameof(_transactionPool));
     _transactionPoolInfoProvider = transactionPoolInfoProvider ?? throw new ArgumentNullException(nameof(transactionPoolInfoProvider));
     _receiptStorage              = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore                 = filterStore ?? throw new ArgumentException(nameof(filterStore));
     _filterManager               = filterManager ?? throw new ArgumentException(nameof(filterManager));
     _wallet = wallet ?? throw new ArgumentException(nameof(wallet));
     _transactionProcessor = transactionProcessor ?? throw new ArgumentException(nameof(transactionProcessor));
 }
Example #7
0
 public BlockProcessor(ISpecProvider specProvider,
                       IBlockValidator blockValidator,
                       IRewardCalculator rewardCalculator,
                       ITransactionProcessor transactionProcessor,
                       ISnapshotableDb stateDb,
                       ISnapshotableDb codeDb,
                       IStateProvider stateProvider,
                       IStorageProvider storageProvider,
                       ITxPool txPool,
                       IReceiptStorage receiptStorage,
                       ILogManager logManager)
 {
     _logger               = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _specProvider         = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _blockValidator       = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
     _stateProvider        = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _storageProvider      = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider));
     _txPool               = txPool ?? throw new ArgumentNullException(nameof(txPool));
     _receiptStorage       = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _rewardCalculator     = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator));
     _transactionProcessor = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor));
     _stateDb              = stateDb ?? throw new ArgumentNullException(nameof(stateDb));
     _codeDb               = codeDb ?? throw new ArgumentNullException(nameof(codeDb));
     _receiptsTracer       = new BlockReceiptsTracer();
 }
Example #8
0
        private (bool success, UserOperationAccessList accessList, string?error) SimulateValidation(
            Transaction transaction, UserOperation userOperation, BlockHeader parent,
            ITransactionProcessor transactionProcessor)
        {
            UserOperationBlockTracer blockTracer = CreateBlockTracer(parent, userOperation);
            ITxTracer txTracer = blockTracer.StartNewTxTrace(transaction);

            transactionProcessor.CallAndRestore(transaction, parent, txTracer);
            blockTracer.EndTxTrace();

            string?error = null;

            if (!blockTracer.Success)
            {
                if (blockTracer.FailedOp is not null)
                {
                    error = blockTracer.FailedOp.ToString() !;
                }
                else
                {
                    error = blockTracer.Error;
                }
                return(false, UserOperationAccessList.Empty, error);
            }

            UserOperationAccessList userOperationAccessList = new(blockTracer.AccessedStorage);

            return(true, userOperationAccessList, error);
        }
Example #9
0
        public BlockchainBridge.CallOutput EstimateGas(BlockHeader header, Transaction tx, CancellationToken cancellationToken)
        {
            ReadOnlyTxProcessingEnv txProcessingEnv =
                new(_dbProvider, _trieStore, _blockTree, _specProvider, _logManager);
            ITransactionProcessor transactionProcessor = txProcessingEnv.Build(_stateProvider.StateRoot);

            EstimateGasTracer estimateGasTracer = new();

            (bool Success, string Error)tryCallResult = TryCallAndRestore(
                transactionProcessor,
                txProcessingEnv,
                header,
                UInt256.Max(header.Timestamp + 1, _timestamper.UnixTime.Seconds),
                tx,
                true,
                estimateGasTracer.WithCancellation(cancellationToken));

            GasEstimator gasEstimator = new(transactionProcessor, _stateProvider, _specProvider);
            long         estimate     = gasEstimator.Estimate(tx, header, estimateGasTracer);

            return(new BlockchainBridge.CallOutput
            {
                Error = tryCallResult.Success ? estimateGasTracer.Error : tryCallResult.Error,
                GasSpent = estimate,
                InputError = !tryCallResult.Success
            });
        }
Example #10
0
 public UniqueValidationRule(string key, Type targetType, ITransactionProcessor transactions, IEnumerable <PropertyInfo> properties)
 {
     _key          = key;
     _targetType   = targetType;
     _transactions = transactions;
     _properties   = properties;
 }
 public void SetUp()
 {
     _stateReader          = Substitute.For <IStateReader>();
     _stateProvider        = Substitute.For <IStateProvider>();
     _storageProvider      = Substitute.For <IStorageProvider>();
     _blockTree            = Substitute.For <IBlockTree>();
     _txPool               = Substitute.For <ITxPool>();
     _receiptStorage       = Substitute.For <IReceiptStorage>();
     _filterStore          = Substitute.For <IFilterStore>();
     _filterManager        = Substitute.For <IFilterManager>();
     _wallet               = Substitute.For <IWallet>();
     _transactionProcessor = Substitute.For <ITransactionProcessor>();
     _ethereumEcdsa        = Substitute.For <IEthereumEcdsa>();
     _bloomStorage         = Substitute.For <IBloomStorage>();
     _receiptsRecovery     = Substitute.For <IReceiptsRecovery>();
     _blockchainBridge     = new BlockchainBridge(
         _stateReader,
         _stateProvider,
         _storageProvider,
         _blockTree,
         _txPool,
         _receiptStorage,
         _filterStore,
         _filterManager,
         _wallet,
         _transactionProcessor,
         _ethereumEcdsa,
         _bloomStorage,
         _receiptsRecovery);
 }
        public async Task SetUp()
        {
            _dbProvider = await TestMemDbProvider.InitAsync();

            _timestamper          = new ManualTimestamper();
            _blockTree            = Substitute.For <IBlockTree>();
            _txPool               = Substitute.For <ITxPool>();
            _receiptStorage       = Substitute.For <IReceiptStorage>();
            _filterStore          = Substitute.For <IFilterStore>();
            _filterManager        = Substitute.For <IFilterManager>();
            _transactionProcessor = Substitute.For <ITransactionProcessor>();
            _ethereumEcdsa        = Substitute.For <IEthereumEcdsa>();
            _specProvider         = MainnetSpecProvider.Instance;

            ReadOnlyTxProcessingEnv processingEnv = new ReadOnlyTxProcessingEnv(
                new ReadOnlyDbProvider(_dbProvider, false),
                new TrieStore(_dbProvider.StateDb, LimboLogs.Instance).AsReadOnly(),
                new ReadOnlyBlockTree(_blockTree),
                _specProvider,
                LimboLogs.Instance);

            processingEnv.TransactionProcessor = _transactionProcessor;

            _blockchainBridge = new BlockchainBridge(
                processingEnv,
                _txPool,
                _receiptStorage,
                _filterStore,
                _filterManager,
                _ethereumEcdsa,
                _timestamper,
                Substitute.For <ILogFinder>(),
                false,
                false);
        }
        public void Prepared_block_contains_author_field()
        {
            ISnapshotableDb       stateDb              = new StateDb();
            ISnapshotableDb       codeDb               = new StateDb();
            IDb                   traceDb              = new MemDb();
            IStateProvider        stateProvider        = new StateProvider(new StateTree(stateDb, Keccak.EmptyTreeHash), codeDb, LimboLogs.Instance);
            ITransactionProcessor transactionProcessor = Substitute.For <ITransactionProcessor>();
            BlockProcessor        processor            = new BlockProcessor(
                RinkebySpecProvider.Instance,
                TestBlockValidator.AlwaysValid,
                new NoBlockRewards(),
                transactionProcessor,
                stateDb,
                codeDb,
                traceDb,
                stateProvider,
                new StorageProvider(stateDb, stateProvider, LimboLogs.Instance),
                NullTransactionPool.Instance,
                NullReceiptStorage.Instance,
                LimboLogs.Instance);

            BlockHeader header = Build.A.BlockHeader.WithAuthor(TestObject.AddressD).TestObject;
            Block       block  = Build.A.Block.WithHeader(header).TestObject;

            Block[] processedBlocks = processor.Process(Keccak.EmptyTreeHash, new [] { block }, ProcessingOptions.None, NullBlockTracer.Instance);
            Assert.AreEqual(1, processedBlocks.Length, "length");
            Assert.AreEqual(block.Author, processedBlocks[0].Author, "author");
        }
Example #14
0
        public BlockProcessor(
            ISpecProvider?specProvider,
            IBlockValidator?blockValidator,
            IRewardCalculator?rewardCalculator,
            ITransactionProcessor?transactionProcessor,
            IStateProvider?stateProvider,
            IStorageProvider?storageProvider,
            ITxPool?txPool,
            IReceiptStorage?receiptStorage,
            IWitnessCollector?witnessCollector,
            ILogManager?logManager)
        {
            _logger               = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _specProvider         = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _blockValidator       = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
            _stateProvider        = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
            _storageProvider      = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider));
            _txPool               = txPool ?? throw new ArgumentNullException(nameof(txPool));
            _receiptStorage       = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _witnessCollector     = witnessCollector ?? throw new ArgumentNullException(nameof(witnessCollector));
            _rewardCalculator     = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator));
            _transactionProcessor = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor));

            _receiptsTracer = new BlockReceiptsTracer();
        }
Example #15
0
 public BlockchainBridge(
     IStateReader stateReader,
     IStateProvider stateProvider,
     IStorageProvider storageProvider,
     IBlockTree blockTree,
     ITxPool txPool,
     IReceiptStorage receiptStorage,
     IFilterStore filterStore,
     IFilterManager filterManager,
     IWallet wallet,
     ITransactionProcessor transactionProcessor,
     IEthereumEcdsa ecdsa,
     IBloomStorage bloomStorage,
     IReceiptsRecovery receiptsRecovery,
     int findLogBlockDepthLimit = 1000)
 {
     _stateReader          = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _stateProvider        = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _storageProvider      = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider));
     _blockTree            = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _txPool               = txPool ?? throw new ArgumentNullException(nameof(_txPool));
     _receiptStorage       = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore          = filterStore ?? throw new ArgumentException(nameof(filterStore));
     _filterManager        = filterManager ?? throw new ArgumentException(nameof(filterManager));
     _wallet               = wallet ?? throw new ArgumentException(nameof(wallet));
     _transactionProcessor = transactionProcessor ?? throw new ArgumentException(nameof(transactionProcessor));
     _ecdsa     = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _logFinder = new LogFinder(_blockTree, _receiptStorage, bloomStorage, receiptsRecovery, findLogBlockDepthLimit);
 }
        public UniqueValidationSource(ITransactionProcessor transactionProcessor, ITypeDescriptorCache descriptors)
        {
            _transactionProcessor = transactionProcessor;
            _descriptors = descriptors;

            _rules = new Cache<Type, IEnumerable<IValidationRule>>(DetermineRulesFor);
        }
        public void Can_store_a_witness()
        {
            IDb stateDb   = new MemDb();
            IDb codeDb    = new MemDb();
            var trieStore = new TrieStore(stateDb, LimboLogs.Instance);

            IStateProvider        stateProvider        = new StateProvider(trieStore, codeDb, LimboLogs.Instance);
            ITransactionProcessor transactionProcessor = Substitute.For <ITransactionProcessor>();
            IWitnessCollector     witnessCollector     = Substitute.For <IWitnessCollector>();
            BlockProcessor        processor            = new(
                RinkebySpecProvider.Instance,
                TestBlockValidator.AlwaysValid,
                NoBlockRewards.Instance,
                new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider),
                stateProvider,
                new StorageProvider(trieStore, stateProvider, LimboLogs.Instance),
                NullReceiptStorage.Instance,
                witnessCollector,
                LimboLogs.Instance);

            BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject;
            Block       block  = Build.A.Block.WithHeader(header).TestObject;

            _ = processor.Process(
                Keccak.EmptyTreeHash,
                new List <Block> {
                block
            },
                ProcessingOptions.None,
                NullBlockTracer.Instance);

            witnessCollector.Received(1).Persist(block.Hash);
        }
 public static Dictionary <UInt256, TransactionPermissionContract> CreateAllVersions(
     ITransactionProcessor transactionProcessor,
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
 {
     return(new Dictionary <UInt256, TransactionPermissionContract>
     {
         {
             UInt256.One, CreateV1(
                 transactionProcessor,
                 abiEncoder,
                 contractAddress,
                 readOnlyReadOnlyTransactionProcessorSource)
         },
         {
             2, CreateV2(
                 transactionProcessor,
                 abiEncoder,
                 contractAddress,
                 readOnlyReadOnlyTransactionProcessorSource)
         },
         {
             3, CreateV3(
                 transactionProcessor,
                 abiEncoder,
                 contractAddress,
                 readOnlyReadOnlyTransactionProcessorSource)
         },
     });
 }
Example #19
0
 public void InvokeTransaction(BlockHeader header, ITransactionProcessor transactionProcessor, Transaction transaction, CallOutputTracer tracer)
 {
     if (transaction != null && !TryInvokeTransaction(header, transactionProcessor, transaction, tracer))
     {
         throw new AuRaException($"System call returned error '{tracer.Error}' at block {header.Number}.");
     }
 }
        public void Prepared_block_contains_author_field()
        {
            IDb                   stateDb              = new MemDb();
            IDb                   codeDb               = new MemDb();
            TrieStore             trieStore            = new(stateDb, LimboLogs.Instance);
            IStateProvider        stateProvider        = new StateProvider(trieStore, codeDb, LimboLogs.Instance);
            ITransactionProcessor transactionProcessor = Substitute.For <ITransactionProcessor>();
            BlockProcessor        processor            = new(
                RinkebySpecProvider.Instance,
                TestBlockValidator.AlwaysValid,
                NoBlockRewards.Instance,
                new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider),
                stateProvider,
                new StorageProvider(trieStore, stateProvider, LimboLogs.Instance),
                NullReceiptStorage.Instance,
                NullWitnessCollector.Instance,
                LimboLogs.Instance);

            BlockHeader header = Build.A.BlockHeader.WithAuthor(TestItem.AddressD).TestObject;
            Block       block  = Build.A.Block.WithHeader(header).TestObject;

            Block[] processedBlocks = processor.Process(
                Keccak.EmptyTreeHash,
                new List <Block> {
                block
            },
                ProcessingOptions.None,
                NullBlockTracer.Instance);
            Assert.AreEqual(1, processedBlocks.Length, "length");
            Assert.AreEqual(block.Author, processedBlocks[0].Author, "author");
        }
Example #21
0
        /// <summary>
        /// Helper method that actually does the actual call to <see cref="ITransactionProcessor"/>.
        /// </summary>
        /// <param name="transactionProcessor">Actual transaction processor to be called upon.</param>
        /// <param name="header">Header in which context the call is done.</param>
        /// <param name="transaction">Transaction to be executed.</param>
        /// <param name="callAndRestore">Is it restore call.</param>
        /// <returns>Bytes with result.</returns>
        /// <exception cref="AbiException">Thrown when there is an exception during execution or <see cref="CallOutputTracer.StatusCode"/> is <see cref="StatusCode.Failure"/>.</exception>
        protected static byte[] CallCore(ITransactionProcessor transactionProcessor, BlockHeader header, Transaction transaction, bool callAndRestore = false)
        {
            bool failure;

            CallOutputTracer tracer = new CallOutputTracer();

            try
            {
                if (callAndRestore)
                {
                    transactionProcessor.CallAndRestore(transaction, header, tracer);
                }
                else
                {
                    transactionProcessor.Execute(transaction, header, tracer);
                }

                failure = tracer.StatusCode != StatusCode.Success;
            }
            catch (Exception e)
            {
                throw new AbiException($"System call returned an exception '{e.Message}' at block {header.Number}.", e);
            }

            if (failure)
            {
                throw new AbiException($"System call returned error '{tracer.Error}' at block {header.Number}.");
            }
            else
            {
                return(tracer.ReturnValue);
            }
        }
        public void SetUp()
        {
            _db = Substitute.For <IDb>();
            _db[ContractValidator.PendingValidatorsKey.Bytes].Returns((byte[])null);
            _stateProvider            = Substitute.For <IStateProvider>();
            _abiEncoder               = Substitute.For <IAbiEncoder>();
            _logManager               = Substitute.For <ILogManager>();
            _blockTree                = Substitute.For <IBlockTree>();
            _blockFinalizationManager = Substitute.For <IBlockFinalizationManager>();
            _receiptsStorage          = Substitute.For <IReceiptStorage>();
            _validator                = new AuRaParameters.Validator()
            {
                Addresses     = new[] { _contractAddress },
                ValidatorType = AuRaParameters.ValidatorType.Contract
            };

            _block = new Block(Prepare.A.BlockHeader().WithNumber(1).WithAura(1, Bytes.Empty).TestObject, new BlockBody());

            _transactionProcessor = Substitute.For <ITransactionProcessor>();

            _abiEncoder
            .Encode(AbiEncodingStyle.IncludeSignature, Arg.Is <AbiSignature>(s => s.Name == "getValidators"), Arg.Any <object[]>())
            .Returns(_getValidatorsData);

            _abiEncoder
            .Encode(AbiEncodingStyle.IncludeSignature, Arg.Is <AbiSignature>(s => s.Name == "finalizeChange"), Arg.Any <object[]>())
            .Returns(_finalizeChangeData);
        }
Example #23
0
 public BlockchainBridge(
     ReadOnlyTxProcessingEnv processingEnv,
     ITxPool txPool,
     IReceiptFinder receiptStorage,
     IFilterStore filterStore,
     IFilterManager filterManager,
     IEthereumEcdsa ecdsa,
     IBloomStorage bloomStorage,
     ITimestamper timestamper,
     ILogManager logManager,
     bool isMining,
     int findLogBlockDepthLimit          = 1000,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     _processingEnv        = processingEnv ?? throw new ArgumentNullException(nameof(processingEnv));
     _stateReader          = processingEnv.StateReader ?? throw new ArgumentNullException(nameof(processingEnv.StateReader));
     _stateProvider        = processingEnv.StateProvider ?? throw new ArgumentNullException(nameof(processingEnv.StateProvider));
     _blockTree            = processingEnv.BlockTree ?? throw new ArgumentNullException(nameof(processingEnv.BlockTree));
     _transactionProcessor = processingEnv.TransactionProcessor ?? throw new ArgumentException(nameof(processingEnv.TransactionProcessor));
     _txPool        = txPool ?? throw new ArgumentNullException(nameof(_txPool));
     _receiptFinder = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore   = filterStore ?? throw new ArgumentException(nameof(filterStore));
     _filterManager = filterManager ?? throw new ArgumentException(nameof(filterManager));
     _ecdsa         = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _timestamper   = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     IsMining       = isMining;
     _logFinder     = new LogFinder(_blockTree, _receiptFinder, bloomStorage, logManager, new ReceiptsRecovery(), findLogBlockDepthLimit);
 }
Example #24
0
 public ContractBasedValidator(
     AuRaParameters.Validator validator,
     IStateProvider stateProvider,
     IAbiEncoder abiEncoder,
     ITransactionProcessor transactionProcessor,
     IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource,
     IBlockTree blockTree,
     IReceiptFinder receiptFinder,
     IValidatorStore validatorStore,
     IValidSealerStrategy validSealerStrategy,
     IBlockFinalizationManager finalizationManager,
     BlockHeader parentHeader,
     ILogManager logManager,
     long startBlockNumber,
     bool forSealing = false) : base(validator, validSealerStrategy, validatorStore, logManager, startBlockNumber, forSealing)
 {
     _blockTree            = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     ContractAddress       = validator.Addresses?.FirstOrDefault() ?? throw new ArgumentException("Missing contract address for AuRa validator.", nameof(validator.Addresses));
     _stateProvider        = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _transactionProcessor = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor));
     _readOnlyReadOnlyTransactionProcessorSource = readOnlyTransactionProcessorSource ?? throw new ArgumentNullException(nameof(readOnlyTransactionProcessorSource));
     _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder));
     _logger        = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     AbiEncoder     = abiEncoder ?? throw new ArgumentNullException(nameof(abiEncoder));
     SetPendingValidators(LoadPendingValidators());
     SetFinalizationManager(finalizationManager, parentHeader ?? _blockTree.Head?.Header);
 }
        public AuRaRewardCalculator(AuRaParameters auRaParameters, IAbiEncoder abiEncoder, ITransactionProcessor transactionProcessor)
        {
            IList <RewardContract> BuildTransitions()
            {
                var contracts = new List <RewardContract>();

                if (auRaParameters.BlockRewardContractTransitions != null)
                {
                    contracts.AddRange(auRaParameters.BlockRewardContractTransitions.Select(t => new RewardContract(abiEncoder, t.Value, t.Key)));
                }

                contracts.Sort((a, b) => a.TransitionBlock.CompareTo(b.TransitionBlock));

                if (auRaParameters.BlockRewardContractAddress != null)
                {
                    var contractTransition = auRaParameters.BlockRewardContractTransition ?? 0;
                    if (contractTransition > (contracts.FirstOrDefault()?.TransitionBlock ?? long.MaxValue))
                    {
                        throw new ArgumentException($"{nameof(auRaParameters.BlockRewardContractTransition)} provided for {nameof(auRaParameters.BlockRewardContractAddress)} is higher than first {nameof(auRaParameters.BlockRewardContractTransitions)}.");
                    }

                    contracts.Insert(0, new RewardContract(abiEncoder, auRaParameters.BlockRewardContractAddress, contractTransition));
                }

                return(contracts);
            }

            if (auRaParameters == null)
            {
                throw new ArgumentNullException(nameof(AuRaParameters));
            }
            _transactionProcessor  = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor));
            _contracts             = BuildTransitions();
            _blockRewardCalculator = new StaticRewardCalculator(auRaParameters.BlockReward);
        }
Example #26
0
 public AuRaValidatorFactory(IStateProvider stateProvider,
                             IAbiEncoder abiEncoder,
                             ITransactionProcessor transactionProcessor,
                             IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource,
                             IBlockTree blockTree,
                             IReceiptFinder receiptFinder,
                             IValidatorStore validatorStore,
                             IBlockFinalizationManager finalizationManager,
                             ITxSender txSender,
                             ITxPool txPool,
                             ILogManager logManager,
                             ISigner signer,
                             ReportingContractBasedValidator.Cache reportingValidatorCache,
                             long posdaoTransition,
                             bool forSealing = false)
 {
     _stateProvider        = stateProvider;
     _abiEncoder           = abiEncoder;
     _transactionProcessor = transactionProcessor;
     _readOnlyTransactionProcessorSource = readOnlyTransactionProcessorSource;
     _blockTree           = blockTree;
     _receiptFinder       = receiptFinder;
     _validatorStore      = validatorStore;
     _finalizationManager = finalizationManager;
     _txSender            = txSender;
     _txPool     = txPool;
     _logManager = logManager;
     _signer     = signer;
     _reportingValidatorCache = reportingValidatorCache;
     _posdaoTransition        = posdaoTransition;
     _forSealing = forSealing;
 }
Example #27
0
        public void DispatchTransaction(BinaryReader reader, IRemoteNode remoteNode)
        {
            TransactionType       type      = (TransactionType)reader.ReadByte();
            ITransactionProcessor processor = _transactionProcessors[type];

            processor.ProcessTransaction(reader, remoteNode);
        }
Example #28
0
 public UniqueValidationRule(string key, Type targetType, ITransactionProcessor transactions, IEnumerable<PropertyInfo> properties)
 {
     _key = key;
     _targetType = targetType;
     _transactions = transactions;
     _properties = properties;
 }
Example #29
0
 /// <summary>
 /// Creates contract
 /// </summary>
 /// <param name="transactionProcessor">Transaction processor on which all <see cref="Call(Nethermind.Core.BlockHeader,Nethermind.Core.Transaction)"/> should be run on.</param>
 /// <param name="abiEncoder">Binary interface encoder/decoder.</param>
 /// <param name="contractAddress">Address where contract is deployed.</param>
 protected Contract(ITransactionProcessor transactionProcessor, IAbiEncoder abiEncoder, Address contractAddress)
 {
     // _transactionProcessor = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor));
     _transactionProcessor = transactionProcessor;
     _abiEncoder           = abiEncoder ?? throw new ArgumentNullException(nameof(abiEncoder));
     ContractAddress       = contractAddress ?? throw new ArgumentNullException(nameof(contractAddress));
 }
 public TransactionPermissionContract(ITransactionProcessor transactionProcessor,
                                      IAbiEncoder abiEncoder,
                                      Address contractAddress,
                                      IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
     : base(transactionProcessor, abiEncoder, contractAddress)
 {
     Constant = GetConstant(readOnlyReadOnlyTransactionProcessorSource);
 }
 public ReportingContractValidator(AuRaParameters.Validator validator,
                                   IStateProvider stateProvider,
                                   IAbiEncoder abiEncoder,
                                   ITransactionProcessor transactionProcessor,
                                   ILogManager logManager,
                                   long startBlockNumber) : base(validator, stateProvider, abiEncoder, transactionProcessor, logManager, startBlockNumber)
 {
 }
 public TransactionPermissionContractV3(
     ITransactionProcessor transactionProcessor,
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
     : base(transactionProcessor, abiEncoder, contractAddress, readOnlyReadOnlyTransactionProcessorSource)
 {
 }
Example #33
0
 public WalletContext(
     IQuoteContext quoteContext,
     IAccount account,
     ITransactionProcessor transactionProcessor)
 {
     this.quoteContext = quoteContext;
     this.account = account;
     this.transactionProcessor = transactionProcessor;
 }
Example #34
0
 public Transaction(int timeout, ITimer timer, ITransactionProcessor transactionProcessor)
 {
     TransactionId = Guid.NewGuid();
     _transactionStarted = false;
     _timeout = timeout;
     _timer = timer;
     _transactionProcessor = transactionProcessor;
     _locks = new Lazy<List<TransactionLock>>(() => new List<TransactionLock>());
     _timer = new DefaultTimer { Timeout = _timeout };
 }
Example #35
0
 /// <summary>
 /// Instantiates an <see cref="AccountManager"/>
 /// </summary>
 /// <param name="settings"></param>
 /// <param name="transactionProcessor"></param>
 /// <param name="repositoryFactory"></param>
 /// <param name="account"></param>
 public AccountManager(IAccountManagementSettings settings,
     ITransactionProcessor transactionProcessor,
     IAccountRepositoryFactory repositoryFactory,
     CashAccount account)
 {
     _settings = settings;
     _transactionProcessor = transactionProcessor;
     _repositoryFactory = repositoryFactory;
     _account = account;
 }
Example #36
0
        public void Initialize()
        {
            _settings = A.Fake<IAccountManagementSettings>();
            A.CallTo(() => _settings.FinalizedTransactionLifetime).Returns(TimeSpan.FromDays(7));

            _transactionProcessor = A.Fake<ITransactionProcessor>();
            _repositoryFactory = A.Fake<IAccountRepositoryFactory>();
            _repository = A.Fake<IAccountRepository>();

            A.CallTo(() => _repositoryFactory.CreateRepository()).Returns(_repository);

            _account = new CashAccount();

            _accountManager = new AccountManager(_settings, _transactionProcessor, _repositoryFactory, _account);
        }