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)
         },
     });
 }
Пример #2
0
        public static ITxFilter?CreateTxPermissionFilter(AuRaNethermindApi api, IReadOnlyTransactionProcessorSource readOnlyTxProcessorSource)
        {
            if (api.ChainSpec == null)
            {
                throw new StepDependencyException(nameof(api.ChainSpec));
            }

            if (api.ChainSpec.Parameters.TransactionPermissionContract != null)
            {
                api.TxFilterCache ??= new PermissionBasedTxFilter.Cache();

                var txPermissionFilter = new PermissionBasedTxFilter(
                    new VersionedTransactionPermissionContract(api.AbiEncoder,
                                                               api.ChainSpec.Parameters.TransactionPermissionContract,
                                                               api.ChainSpec.Parameters.TransactionPermissionContractTransition ?? 0,
                                                               readOnlyTxProcessorSource,
                                                               api.TransactionPermissionContractVersions),
                    api.TxFilterCache,
                    api.ChainHeadStateProvider,
                    api.LogManager);

                return(txPermissionFilter);
            }

            return(null);
        }
Пример #3
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;
 }
Пример #4
0
        public static (TxPriorityContract?Contract, TxPriorityContract.LocalDataSource?DataSource) CreateTxPrioritySources(
            IAuraConfig config,
            AuRaNethermindApi api,
            IReadOnlyTransactionProcessorSource readOnlyTxProcessorSource)
        {
            Address.TryParse(config.TxPriorityContractAddress, out Address? txPriorityContractAddress);
            bool usesTxPriorityContract = txPriorityContractAddress != null;

            TxPriorityContract?txPriorityContract = null;

            if (usesTxPriorityContract)
            {
                txPriorityContract = new TxPriorityContract(api.AbiEncoder, txPriorityContractAddress, readOnlyTxProcessorSource);
            }

            string?auraConfigTxPriorityConfigFilePath = config.TxPriorityConfigFilePath;
            bool   usesTxPriorityLocalData            = auraConfigTxPriorityConfigFilePath != null;

            if (usesTxPriorityLocalData)
            {
                api.TxPriorityContractLocalDataSource ??= new TxPriorityContract.LocalDataSource(auraConfigTxPriorityConfigFilePath, api.EthereumJsonSerializer, api.FileSystem, api.LogManager);
            }

            return(txPriorityContract, api.TxPriorityContractLocalDataSource);
        }
 public TransactionPermissionContractV1(
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
     : base(abiEncoder, contractAddress, readOnlyTransactionProcessorSource)
 {
 }
Пример #6
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);
 }
Пример #7
0
 public CertifierContract(
     IAbiEncoder abiEncoder,
     IRegisterContract registerContract,
     IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
     : base(abiEncoder, registerContract, ServiceTransactionContractRegistryName)
 {
     Constant = GetConstant(readOnlyTransactionProcessorSource);
 }
Пример #8
0
 public RegisterContract(
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
     : base(abiEncoder, contractAddress)
 {
     Constant = GetConstant(readOnlyTransactionProcessorSource);
 }
 protected TransactionPermissionContract(
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
     : base(abiEncoder, contractAddress)
 {
     Constant = GetConstant(readOnlyTransactionProcessorSource);
 }
 public TransactionPermissionContract(ITransactionProcessor transactionProcessor,
                                      IAbiEncoder abiEncoder,
                                      Address contractAddress,
                                      IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
     : base(transactionProcessor, abiEncoder, contractAddress)
 {
     Constant = GetConstant(readOnlyReadOnlyTransactionProcessorSource);
 }
Пример #11
0
 private static TransactionPermissionContractV3 CreateV3(IAbiEncoder abiEncoder,
                                                         Address contractAddress,
                                                         IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
 {
     return(new TransactionPermissionContractV3(
                abiEncoder,
                contractAddress,
                readOnlyTransactionProcessorSource));
 }
Пример #12
0
 public ReportingValidatorContract(
     ITransactionProcessor transactionProcessor,
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IStateProvider stateProvider,
     IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
     : base(transactionProcessor, abiEncoder, contractAddress, stateProvider, readOnlyReadOnlyTransactionProcessorSource)
 {
 }
Пример #13
0
 public void SetUp()
 {
     _block = new Block(Build.A.BlockHeader.TestObject, new BlockBody());
     _transactionProcessor = Substitute.For <IReadOnlyTransactionProcessor>();
     _readOnlyTransactionProcessorSource = Substitute.For <IReadOnlyTransactionProcessorSource>();
     _readOnlyTransactionProcessorSource.Get(TestItem.KeccakA).Returns(_transactionProcessor);
     _stateProvider = Substitute.For <IStateProvider>();
     _stateProvider.StateRoot.Returns(TestItem.KeccakA);
 }
Пример #14
0
 public ConstantContract(
     Contract contract,
     IStateProvider stateProvider,
     IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
 {
     StateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _contract     = contract;
     _readOnlyReadOnlyTransactionProcessorSource = readOnlyReadOnlyTransactionProcessorSource ?? throw new ArgumentNullException(nameof(readOnlyReadOnlyTransactionProcessorSource));
 }
Пример #15
0
 public BlockGasLimitContract(
     IAbiEncoder abiEncoder,
     Address contractAddress,
     long transitionBlock,
     IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
     : base(abiEncoder, contractAddress)
 {
     Activation = transitionBlock;
     Constant   = GetConstant(readOnlyTransactionProcessorSource);
 }
 public ValidatorContract(
     ITransactionProcessor transactionProcessor,
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IStateProvider stateProvider,
     IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
     : base(transactionProcessor, abiEncoder, contractAddress)
 {
     _abiEncoder = abiEncoder ?? throw new ArgumentNullException(nameof(abiEncoder));
     Constant    = GetConstant(stateProvider, readOnlyReadOnlyTransactionProcessorSource);
 }
 public static TransactionPermissionContractV2 CreateV2(ITransactionProcessor transactionProcessor,
                                                        IAbiEncoder abiEncoder,
                                                        Address contractAddress,
                                                        IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
 {
     return(new TransactionPermissionContractV2(
                transactionProcessor,
                abiEncoder,
                contractAddress,
                readOnlyReadOnlyTransactionProcessorSource));
 }
Пример #18
0
 public TxPriorityContract(
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
     : base(abiEncoder, contractAddress)
 {
     Constant         = GetConstant(readOnlyTransactionProcessorSource);
     SendersWhitelist = new DataContract <Address>(GetSendersWhitelist, SendersWhitelistSet);
     MinGasPrices     = new DataContract <Destination>(GetMinGasPrices, MinGasPriceSet);
     Priorities       = new DataContract <Destination>(GetPriorities, PrioritySet);
 }
Пример #19
0
 public RandomContract(ITransactionProcessor transactionProcessor,
                       IAbiEncoder abiEncoder,
                       Address contractAddress,
                       IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource,
                       long transitionBlock,
                       Address nodeAddress)
     : base(transactionProcessor, abiEncoder, contractAddress)
 {
     _nodeAddress = nodeAddress;
     Activation   = transitionBlock;
     Constant     = GetConstant(readOnlyReadOnlyTransactionProcessorSource);
 }
Пример #20
0
        public static ITxFilter CreateAuRaTxFilter(
            IMiningConfig miningConfig,
            AuRaNethermindApi api,
            IReadOnlyTransactionProcessorSource readOnlyTxProcessorSource,
            IDictionaryContractDataStore <TxPriorityContract.Destination>?minGasPricesContractDataStore)
        {
            ITxFilter baseAuRaTxFilter   = CreateBaseAuRaTxFilter(miningConfig, api, readOnlyTxProcessorSource, minGasPricesContractDataStore);
            ITxFilter?txPermissionFilter = CreateTxPermissionFilter(api, readOnlyTxProcessorSource);

            return(txPermissionFilter != null
                ? new CompositeTxFilter(baseAuRaTxFilter, txPermissionFilter)
                : baseAuRaTxFilter);
        }
Пример #21
0
 public VersionedTransactionPermissionContract(IAbiEncoder abiEncoder,
                                               Address contractAddress,
                                               long activation,
                                               IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource,
                                               ICache <Keccak, UInt256> cache)
     : base(
         CreateAllVersions(abiEncoder,
                           contractAddress,
                           readOnlyTransactionProcessorSource),
         cache,
         activation)
 {
 }
        public TransactionPermissionContract(ITransactionProcessor transactionProcessor,
                                             IAbiEncoder abiEncoder,
                                             Address contractAddress,
                                             long activationBlock,
                                             IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
            : base(transactionProcessor, abiEncoder, contractAddress)
        {
            Activation = activationBlock;
            var constantContract = GetConstant(readOnlyReadOnlyTransactionProcessorSource);

            _versionedContracts = GetContracts(constantContract).ToDictionary(c => c.Version);
            _versionContract    = (IVersionContract)_versionedContracts.Values.First(c => c is IVersionContract);
        }
Пример #23
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)
 {
 }
Пример #24
0
 public VersionedTransactionPermissionContract(
     ITransactionProcessor transactionProcessor,
     IAbiEncoder abiEncoder,
     Address contractAddress,
     long activation,
     IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
     : base(
         TransactionPermissionContract.CreateAllVersions(
             transactionProcessor,
             abiEncoder,
             contractAddress,
             readOnlyReadOnlyTransactionProcessorSource),
         activation)
 {
 }
 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;
 }
Пример #27
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;
 }
Пример #28
0
        private static ITxFilter CreateBaseAuRaTxFilter(
            IMiningConfig miningConfig,
            AuRaNethermindApi api,
            IReadOnlyTransactionProcessorSource readOnlyTxProcessorSource,
            IDictionaryContractDataStore <TxPriorityContract.Destination>?minGasPricesContractDataStore)
        {
            ITxFilter gasPriceTxFilter = CreateStandardTxFilter(miningConfig);

            if (minGasPricesContractDataStore != null)
            {
                gasPriceTxFilter = new MinGasPriceContractTxFilter(gasPriceTxFilter, minGasPricesContractDataStore);
            }

            Address?registrar = api.ChainSpec?.Parameters.Registrar;

            if (registrar != null)
            {
                RegisterContract  registerContract  = new RegisterContract(api.AbiEncoder, registrar, readOnlyTxProcessorSource);
                CertifierContract certifierContract = new CertifierContract(api.AbiEncoder, registerContract, readOnlyTxProcessorSource);
                return(new TxCertifierFilter(certifierContract, gasPriceTxFilter, api.LogManager));
            }

            return(gasPriceTxFilter);
        }
Пример #29
0
 public ConstantContract(Contract contract, IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
 {
     _contract = contract;
     _readOnlyReadOnlyTransactionProcessorSource = readOnlyReadOnlyTransactionProcessorSource ?? throw new ArgumentNullException(nameof(readOnlyReadOnlyTransactionProcessorSource));
 }
Пример #30
0
 /// <summary>
 /// Gets constant version of the contract. Allowing to call contract methods without state modification.
 /// </summary>
 /// <param name="readOnlyReadOnlyTransactionProcessorSource">Source of readonly <see cref="ITransactionProcessor"/> to call transactions.</param>
 /// <returns>Constant version of the contract.</returns>
 protected ConstantContract GetConstant(IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource) =>
 new ConstantContract(this, readOnlyReadOnlyTransactionProcessorSource);