Exemple #1
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;
 }
Exemple #2
0
        public MultiValidator(
            AuRaParameters.Validator validator,
            IAuRaValidatorFactory validatorFactory,
            IBlockTree blockTree,
            IValidatorStore validatorStore,
            IAuRaBlockFinalizationManager finalizationManager,
            BlockHeader parentHeader,
            ILogManager logManager,
            bool forSealing = false)
        {
            if (validator == null)
            {
                throw new ArgumentNullException(nameof(validator));
            }
            if (validator.ValidatorType != AuRaParameters.ValidatorType.Multi)
            {
                throw new ArgumentException("Wrong validator type.", nameof(validator));
            }
            _validatorFactory = validatorFactory ?? throw new ArgumentNullException(nameof(validatorFactory));
            _blockTree        = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _validatorStore   = validatorStore ?? throw new ArgumentNullException(nameof(validatorStore));
            _forSealing       = forSealing;
            _logger           = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _validators = validator.Validators?.Count > 0
                ? validator.Validators
                : throw new ArgumentException("Multi validator cannot be empty.", nameof(validator.Validators));

            SetFinalizationManager(finalizationManager, parentHeader);
        }
 public AuraHealthHintService(
     IAuRaStepCalculator auRaStepCalculator,
     IValidatorStore validatorStore)
 {
     _auRaStepCalculator = auRaStepCalculator;
     _validatorStore     = validatorStore;
 }
Exemple #4
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 AuRaSealValidator(AuRaParameters parameters, IAuRaStepCalculator stepCalculator, IValidatorStore validatorStore, IEthereumEcdsa ecdsa, ILogManager logManager)
 {
     _parameters     = parameters ?? throw new ArgumentNullException(nameof(parameters));
     _stepCalculator = stepCalculator ?? throw new ArgumentNullException(nameof(stepCalculator));
     _validatorStore = validatorStore ?? throw new ArgumentNullException(nameof(validatorStore));
     _ecdsa          = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _logger         = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
        public void Initialize()
        {
            _chainLevelInfoRepository = Substitute.For <IChainLevelInfoRepository>();
            _blockProcessor           = Substitute.For <IBlockProcessor>();
            _validatorStore           = Substitute.For <IValidatorStore>();
            _logManager          = LimboLogs.Instance;
            _validSealerStrategy = Substitute.For <IValidSealerStrategy>();

            _validatorStore.GetValidators(Arg.Any <long?>()).Returns(new Address[] { TestItem.AddressA, TestItem.AddressB, TestItem.AddressC });
        }
 public AuRaBlockFinalizationManager(IBlockTree blockTree, IChainLevelInfoRepository chainLevelInfoRepository, IBlockProcessor blockProcessor, IValidatorStore validatorStore, IValidSealerStrategy validSealerStrategy, ILogManager logManager)
 {
     _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _chainLevelInfoRepository = chainLevelInfoRepository ?? throw new ArgumentNullException(nameof(chainLevelInfoRepository));
     _logger                         = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _blockProcessor                 = blockProcessor ?? throw new ArgumentNullException(nameof(blockProcessor));
     _validatorStore                 = validatorStore ?? throw new ArgumentNullException(nameof(validatorStore));
     _validSealerStrategy            = validSealerStrategy ?? throw new ArgumentNullException(nameof(validSealerStrategy));
     _blockProcessor.BlockProcessed += OnBlockProcessed;
     Initialize();
 }
Exemple #8
0
        public void SetUp()
        {
            _validator           = GetValidator(AuRaParameters.ValidatorType.List);
            _innerValidators     = new SortedList <long, IAuRaValidator>();
            _factory             = Substitute.For <IAuRaValidatorFactory>();
            _logManager          = LimboLogs.Instance;
            _finalizationManager = Substitute.For <IBlockFinalizationManager>();
            _blockTree           = Substitute.For <IBlockTree>();
            _validatorStore      = Substitute.For <IValidatorStore>();
            _finalizationManager.LastFinalizedBlockLevel.Returns(0);

            _factory.CreateValidatorProcessor(default, default, default)
        public void Initialize()
        {
            _chainLevelInfoRepository = Substitute.For <IChainLevelInfoRepository>();
            _blockProcessor           = Substitute.For <IBlockProcessor>();
            _validatorStore           = Substitute.For <IValidatorStore>();
            _logManager          = LimboLogs.Instance;
            _validSealerStrategy = Substitute.For <IValidSealerStrategy>();

            _validatorStore.GetValidators().Returns(new Address[] { TestItem.AddressA, TestItem.AddressB, TestItem.AddressC });

            Rlp.Decoders[typeof(BlockInfo)] = new BlockInfoDecoder(true);
        }
Exemple #10
0
 protected AuRaValidatorBase(
     IValidSealerStrategy validSealerStrategy,
     IValidatorStore validatorStore,
     ILogManager logManager,
     long startBlockNumber,
     bool forSealing)
 {
     ValidatorStore       = validatorStore ?? throw new ArgumentNullException(nameof(validatorStore));
     _validSealerStrategy = validSealerStrategy ?? throw new ArgumentNullException(nameof(validSealerStrategy));
     _logger         = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     InitBlockNumber = startBlockNumber;
     ForSealing      = forSealing;
 }
Exemple #11
0
 public ReportingContractBasedValidator(AuRaParameters.Validator validator,
                                        IStateProvider stateProvider,
                                        IAbiEncoder abiEncoder,
                                        ITransactionProcessor transactionProcessor,
                                        IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource,
                                        IBlockTree blockTree,
                                        IReceiptStorage receiptStorage,
                                        IValidatorStore validatorStore,
                                        IValidSealerStrategy validSealerStrategy,
                                        ILogManager logManager,
                                        long startBlockNumber)
     : base(validator, stateProvider, abiEncoder, transactionProcessor, readOnlyTransactionProcessorSource, blockTree, receiptStorage, validatorStore, validSealerStrategy, logManager, startBlockNumber)
 {
 }
Exemple #12
0
 public AuRaSealer(
     IBlockTree blockTree,
     IValidatorStore validatorStore,
     IAuRaStepCalculator auRaStepCalculator,
     ISigner signer,
     IValidSealerStrategy validSealerStrategy,
     ILogManager logManager)
 {
     _blockTree           = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _validatorStore      = validatorStore ?? throw new ArgumentNullException(nameof(validatorStore));
     _auRaStepCalculator  = auRaStepCalculator ?? throw new ArgumentNullException(nameof(auRaStepCalculator));
     _signer              = signer ?? throw new ArgumentNullException(nameof(signer));
     _validSealerStrategy = validSealerStrategy ?? throw new ArgumentNullException(nameof(validSealerStrategy));
     _logger              = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
Exemple #13
0
 public AuRaSealer(
     IBlockTree blockTree,
     IValidatorStore validatorStore,
     IAuRaStepCalculator auRaStepCalculator,
     Address nodeAddress,
     IBasicWallet wallet,
     IValidSealerStrategy validSealerStrategy,
     ILogManager logManager)
 {
     _blockTree           = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _validatorStore      = validatorStore ?? throw new ArgumentNullException(nameof(validatorStore));
     _auRaStepCalculator  = auRaStepCalculator ?? throw new ArgumentNullException(nameof(auRaStepCalculator));
     _nodeAddress         = nodeAddress ?? throw new ArgumentNullException(nameof(nodeAddress));
     _wallet              = wallet ?? throw new ArgumentNullException(nameof(wallet));
     _validSealerStrategy = validSealerStrategy ?? throw new ArgumentNullException(nameof(validSealerStrategy));
     _logger              = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
 public ReportingContractBasedValidator(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, stateProvider, abiEncoder, transactionProcessor, readOnlyTransactionProcessorSource, blockTree, receiptFinder, validatorStore, validSealerStrategy, finalizationManager, parentHeader, logManager, startBlockNumber, forSealing)
 {
 }
 public AuRaValidatorProcessorFactory(IStateProvider stateProvider,
                                      IAbiEncoder abiEncoder,
                                      ITransactionProcessor transactionProcessor,
                                      IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource,
                                      IBlockTree blockTree,
                                      IReceiptStorage receiptStorage,
                                      IValidatorStore validatorStore,
                                      ILogManager logManager)
 {
     _stateProvider        = stateProvider;
     _abiEncoder           = abiEncoder;
     _transactionProcessor = transactionProcessor;
     _readOnlyReadOnlyTransactionProcessorSource = readOnlyTransactionProcessorSource;
     _blockTree      = blockTree;
     _receiptStorage = receiptStorage;
     _validatorStore = validatorStore;
     _logManager     = logManager;
 }
        public void GetBlockProcessorAndProducerIntervalHint_returns_expected_result(
            [ValueSource(nameof(BlockProcessorIntervalHintTestCases))]
            BlockProcessorIntervalHint test)
        {
            ManualTimestamper  manualTimestamper = new ManualTimestamper(DateTime.Now);
            AuRaStepCalculator stepCalculator    = new AuRaStepCalculator(new Dictionary <long, long>()
            {
                { 0, test.StepDuration }
            }, manualTimestamper, LimboLogs.Instance);
            IValidatorStore validatorStore = Substitute.For <IValidatorStore>();

            validatorStore.GetValidators().Returns(new Address[test.ValidatorsCount]);
            IHealthHintService healthHintService = new AuraHealthHintService(stepCalculator, validatorStore);
            ulong?actualProcessing = healthHintService.MaxSecondsIntervalForProcessingBlocksHint();
            ulong?actualProducing  = healthHintService.MaxSecondsIntervalForProducingBlocksHint();

            Assert.AreEqual(test.ExpectedProcessingHint, actualProcessing);
            Assert.AreEqual(test.ExpectedProducingHint, actualProducing);
        }
Exemple #17
0
        public MultiValidator(AuRaParameters.Validator validator, IAuRaValidatorProcessorFactory validatorFactory, IBlockTree blockTree, IValidatorStore validatorStore, ILogManager logManager)
        {
            if (validator == null)
            {
                throw new ArgumentNullException(nameof(validator));
            }
            if (validator.ValidatorType != AuRaParameters.ValidatorType.Multi)
            {
                throw new ArgumentException("Wrong validator type.", nameof(validator));
            }
            _validatorFactory = validatorFactory ?? throw new ArgumentNullException(nameof(validatorFactory));
            _blockTree        = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _validatorStore   = validatorStore ?? throw new ArgumentNullException(nameof(validatorStore));
            _logger           = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _validators = validator.Validators?.Count > 0
                ? validator.Validators
                : throw new ArgumentException("Multi validator cannot be empty.", nameof(validator.Validators));
        }
Exemple #18
0
 public ContractBasedValidator(
     IValidatorContract validatorContract,
     IBlockTree blockTree,
     IReceiptFinder receiptFinder,
     IValidatorStore validatorStore,
     IValidSealerStrategy validSealerStrategy,
     IAuRaBlockFinalizationManager finalizationManager,
     BlockHeader parentHeader,
     ILogManager logManager,
     long startBlockNumber,
     long posdaoTransition = long.MaxValue,
     bool forSealing       = false) : base(validSealerStrategy, validatorStore, logManager, startBlockNumber, forSealing)
 {
     BlockTree         = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _receiptFinder    = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder));
     _posdaoTransition = posdaoTransition;
     _logger           = logManager?.GetClassLogger <ContractBasedValidator>() ?? throw new ArgumentNullException(nameof(logManager));
     ValidatorContract = validatorContract ?? throw new ArgumentNullException(nameof(validatorContract));
     SetPendingValidators(LoadPendingValidators());
     SetFinalizationManager(finalizationManager, parentHeader ?? BlockTree.Head?.Header);
 }
Exemple #19
0
        public void Setup()
        {
            _blockTree = Substitute.For <IBlockTree>();
            _headStep  = 10;
            _blockTree.Head.Returns(Build.A.Block.WithHeader(Build.A.BlockHeader.WithHash(Keccak.Compute("hash")).WithAura(_headStep, Array.Empty <byte>()).TestObject).TestObject);

            _auRaStepCalculator  = Substitute.For <IAuRaStepCalculator>();
            _validatorStore      = Substitute.For <IValidatorStore>();
            _validSealerStrategy = Substitute.For <IValidSealerStrategy>();
            var signer = new Signer(ChainId.Mainnet, Build.A.PrivateKey.TestObject, LimboLogs.Instance);

            _address = signer.Address;

            _auRaSealer = new AuRaSealer(
                _blockTree,
                _validatorStore,
                _auRaStepCalculator,
                signer,
                _validSealerStrategy,
                LimboLogs.Instance);
        }
Exemple #20
0
 public AuRaValidatorFactory(IStateProvider stateProvider,
                             IAbiEncoder abiEncoder,
                             ITransactionProcessor transactionProcessor,
                             IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource,
                             IBlockTree blockTree,
                             IReceiptFinder receiptFinder,
                             IValidatorStore validatorStore,
                             IBlockFinalizationManager finalizationManager,
                             ILogManager logManager,
                             bool forSealing = false)
 {
     _stateProvider        = stateProvider;
     _abiEncoder           = abiEncoder;
     _transactionProcessor = transactionProcessor;
     _readOnlyReadOnlyTransactionProcessorSource = readOnlyTransactionProcessorSource;
     _blockTree           = blockTree;
     _receiptFinder       = receiptFinder;
     _validatorStore      = validatorStore;
     _finalizationManager = finalizationManager;
     _logManager          = logManager;
     _forSealing          = forSealing;
 }
Exemple #21
0
        public void Setup()
        {
            _blockTree = Substitute.For <IBlockTree>();
            _headStep  = 10;
            _blockTree.Head.Returns(Build.A.BlockHeader.WithHash(Keccak.Compute("hash")).WithAura(_headStep, Bytes.Empty).TestObject);

            _auRaStepCalculator  = Substitute.For <IAuRaStepCalculator>();
            _validatorStore      = Substitute.For <IValidatorStore>();
            _validSealerStrategy = Substitute.For <IValidSealerStrategy>();
            var wallet = new DevWallet(new WalletConfig(), LimboLogs.Instance);

            _address = wallet.NewAccount(new NetworkCredential(string.Empty, "AAA").SecurePassword);

            _auRaSealer = new AuRaSealer(
                _blockTree,
                _validatorStore,
                _auRaStepCalculator,
                _address,
                wallet,
                _validSealerStrategy,
                LimboLogs.Instance);
        }
        public override async Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
        {
            if (_validatorStore == null)
            {
                _validatorStore = ServiceLocator.Current.Get <IValidatorStore>();
            }
            var type  = default(Type);
            var model = default(object);

            foreach (var parameter in actionContext.ActionDescriptor.GetParameters().Where(x => x.GetCustomAttributes <object>().OfType <Validator>().Any()))
            {
                if (parameter.ParameterName == "id")
                {
                    var temp = ((ReflectedHttpActionDescriptor)actionContext.ActionDescriptor).MethodInfo.DeclaringType.GetGenericArguments();
                    type  = temp.Any() ? temp[0] : ((ReflectedHttpActionDescriptor)actionContext.ActionDescriptor).MethodInfo.DeclaringType.BaseType.GetGenericArguments()[0];
                    model = (IModel)Activator.CreateInstance(type);
                    ((IModel)model).Id = (int)actionContext.ActionArguments[parameter.ParameterName];
                }
                if (parameter.ParameterType.GetInterface("IModel") != null)
                {
                    type  = actionContext.ActionArguments[parameter.ParameterName].GetType();
                    model = actionContext.ActionArguments[parameter.ParameterName];
                }
                if (type == default(Type))
                {
                    continue;
                }
                var attribute = parameter.GetCustomAttributes <object>().OfType <Validator>().FirstOrDefault();
                var validator = _validatorStore.GetValidator(attribute.Mode, type);
                var result    = await validator.ValidateAsync(model);

                if (!result.IsValid)
                {
                    throw new ApiValidationException(string.Join(Environment.NewLine, result.Errors));
                }
            }
        }
        public ListBasedValidator(AuRaParameters.Validator validator, IValidSealerStrategy validSealerStrategy, IValidatorStore validatorStore, ILogManager logManager, long startBlockNumber, bool forSealing = false)
            : base(validator, validSealerStrategy, validatorStore, logManager, startBlockNumber, forSealing)
        {
            Validators = validator.Addresses?.Length > 0
                ? validator.Addresses
                : throw new ArgumentException("Empty validator Addresses.", nameof(validator.Addresses));

            InitValidatorStore();
        }
 protected AuRaValidatorProcessorExtension(AuRaParameters.Validator validator, IValidSealerStrategy validSealerStrategy, IValidatorStore validatorStore, ILogManager logManager, long startBlockNumber)
 {
     if (validator == null)
     {
         throw new ArgumentNullException(nameof(validator));
     }
     ValidatorStore       = validatorStore ?? throw new ArgumentNullException(nameof(validatorStore));
     _validSealerStrategy = validSealerStrategy ?? throw new ArgumentNullException(nameof(validSealerStrategy));
     _logger         = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     InitBlockNumber = startBlockNumber;
 }