コード例 #1
0
 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);
        }
コード例 #5
0
 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);
 }
コード例 #9
0
 protected TransactionPermissionContract(
     IAbiEncoder abiEncoder,
     Address contractAddress,
     IReadOnlyTransactionProcessorSource readOnlyTransactionProcessorSource)
     : base(abiEncoder, contractAddress)
 {
     Constant = GetConstant(readOnlyTransactionProcessorSource);
 }
コード例 #10
0
 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);
 }
コード例 #16
0
 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);
 }
コード例 #17
0
 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)
 {
 }
コード例 #22
0
        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)
 {
 }
コード例 #25
0
 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)
 {
 }
コード例 #26
0
 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);