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)
         },
     });
 }
Esempio n. 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);
        }
Esempio n. 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;
 }
Esempio n. 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)
 {
 }
Esempio n. 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);
 }
Esempio n. 7
0
 public CertifierContract(
     IAbiEncoder abiEncoder,
     IRegisterContract registerContract,
     IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
     : base(abiEncoder, registerContract, ServiceTransactionContractRegistryName)
 {
     Constant = GetConstant(readOnlyTransactionProcessorSource);
 }
Esempio n. 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);
 }
Esempio n. 11
0
 private static TransactionPermissionContractV3 CreateV3(IAbiEncoder abiEncoder,
                                                         Address contractAddress,
                                                         IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
 {
     return(new TransactionPermissionContractV3(
                abiEncoder,
                contractAddress,
                readOnlyTransactionProcessorSource));
 }
Esempio n. 12
0
 public ReportingValidatorContract(
     ITransactionProcessor transactionProcessor,
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IStateProvider stateProvider,
     IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
     : base(transactionProcessor, abiEncoder, contractAddress, stateProvider, readOnlyReadOnlyTransactionProcessorSource)
 {
 }
Esempio n. 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);
 }
Esempio n. 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));
 }
Esempio n. 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));
 }
Esempio n. 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);
 }
Esempio n. 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);
 }
Esempio n. 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);
        }
Esempio n. 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);
        }
Esempio n. 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)
 {
 }
Esempio n. 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;
 }
Esempio n. 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;
 }
Esempio n. 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);
        }
Esempio n. 29
0
 public ConstantContract(Contract contract, IReadOnlyTransactionProcessorSource readOnlyReadOnlyTransactionProcessorSource)
 {
     _contract = contract;
     _readOnlyReadOnlyTransactionProcessorSource = readOnlyReadOnlyTransactionProcessorSource ?? throw new ArgumentNullException(nameof(readOnlyReadOnlyTransactionProcessorSource));
 }
Esempio n. 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);