示例#1
0
        public static (TxPriorityContract?Contract, TxPriorityContract.LocalDataSource?DataSource) CreateTxPrioritySources(
            IAuraConfig config,
            AuRaNethermindApi api,
            IReadOnlyTxProcessorSource 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);
        }
示例#2
0
        public static ITxFilter?CreateTxPermissionFilter(AuRaNethermindApi api, IReadOnlyTxProcessorSource readOnlyTxProcessorSource)
        {
            if (api.ChainSpec == null)
            {
                throw new StepDependencyException(nameof(api.ChainSpec));
            }
            if (api.SpecProvider == null)
            {
                throw new StepDependencyException(nameof(api.SpecProvider));
            }

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

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

                return(txPermissionFilter);
            }

            return(null);
        }
示例#3
0
        private static ITxFilter CreateBaseAuRaTxFilter(
            IMiningConfig miningConfig,
            AuRaNethermindApi api,
            IReadOnlyTxProcessorSource readOnlyTxProcessorSource,
            IDictionaryContractDataStore <TxPriorityContract.Destination>?minGasPricesContractDataStore,
            ISpecProvider specProvider)
        {
            IMinGasPriceTxFilter minGasPriceTxFilter = TxFilterBuilders.CreateStandardMinGasPriceTxFilter(miningConfig, specProvider);
            ITxFilter            gasPriceTxFilter    = minGasPriceTxFilter;

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

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

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

            return(gasPriceTxFilter);
        }
示例#4
0
        public static ITxFilter CreateAuRaTxFilter(
            AuRaNethermindApi api,
            IReadOnlyTxProcessorSource readOnlyTxProcessorSource,
            ISpecProvider specProvider,
            ITxFilter baseTxFilter)
        {
            ITxFilter baseAuRaTxFilter   = CreateBaseAuRaTxFilter(api, readOnlyTxProcessorSource, specProvider, baseTxFilter);
            ITxFilter?txPermissionFilter = CreateTxPermissionFilter(api, readOnlyTxProcessorSource);

            return(txPermissionFilter != null
                ? new CompositeTxFilter(baseAuRaTxFilter, txPermissionFilter)
                : baseAuRaTxFilter);
        }
示例#5
0
        public static ITxFilter CreateAuRaTxFilterForProducer(
            IMiningConfig miningConfig,
            AuRaNethermindApi api,
            IReadOnlyTxProcessorSource readOnlyTxProcessorSource,
            IDictionaryContractDataStore <TxPriorityContract.Destination>?minGasPricesContractDataStore,
            ISpecProvider specProvider)
        {
            ITxFilter baseAuRaTxFilter   = CreateBaseAuRaTxFilter(miningConfig, api, readOnlyTxProcessorSource, minGasPricesContractDataStore, specProvider);
            ITxFilter?txPermissionFilter = CreateTxPermissionFilter(api, readOnlyTxProcessorSource);

            return(txPermissionFilter != null
                ? new CompositeTxFilter(baseAuRaTxFilter, txPermissionFilter)
                : baseAuRaTxFilter);
        }
 protected virtual BlockProcessor NewBlockProcessor(AuRaNethermindApi api, ITxFilter txFilter, ContractRewriter contractRewriter) =>
 new AuRaBlockProcessor(
     _api.SpecProvider,
     _api.BlockValidator,
     _api.RewardCalculatorSource.Get(_api.TransactionProcessor),
     new BlockProcessor.BlockValidationTransactionsExecutor(_api.TransactionProcessor, _api.StateProvider),
     _api.StateProvider,
     _api.StorageProvider,
     _api.ReceiptStorage,
     _api.LogManager,
     _api.BlockTree,
     txFilter,
     GetGasLimitCalculator(),
     contractRewriter
     );
示例#7
0
 public static DictionaryContractDataStore <TxPriorityContract.Destination>?CreateMinGasPricesDataStore(
     AuRaNethermindApi api,
     TxPriorityContract?txPriorityContract,
     TxPriorityContract.LocalDataSource?localDataSource)
 {
     return(txPriorityContract != null || localDataSource != null
         ? new DictionaryContractDataStore <TxPriorityContract.Destination>(
                new TxPriorityContract.DestinationSortedListContractDataStoreCollection(),
                txPriorityContract?.MinGasPrices,
                api.BlockTree,
                api.ReceiptFinder,
                api.LogManager,
                localDataSource?.GetMinGasPricesLocalDataSource())
         : null);
 }
示例#8
0
        private static ITxFilter CreateBaseAuRaTxFilter(
            AuRaNethermindApi api,
            IReadOnlyTxProcessorSource readOnlyTxProcessorSource,
            ISpecProvider specProvider,
            ITxFilter baseTxFilter)
        {
            Address?registrar = api.ChainSpec?.Parameters.Registrar;

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

            return(baseTxFilter);
        }
示例#9
0
 public StartBlockProducerAuRa(AuRaNethermindApi api)
 {
     _api        = api;
     _auraConfig = NethermindApi.Config <IAuraConfig>();
 }
 public InitializeBlockchainAuRa(AuRaNethermindApi api) : base(api)
 {
     _api        = api;
     _auraConfig = NethermindApi.Config <IAuraConfig>();
 }
示例#11
0
 public InitializeNetworkAuRa(AuRaNethermindApi api) : base(api)
 {
 }
 public LoadGenesisBlockAuRa(AuRaNethermindApi api) : base(api)
 {
     _api = api;
 }
示例#13
0
 public InitRlpAuRa(AuRaNethermindApi context) : base(context)
 {
 }
 public StartBlockProcessorAuRa(AuRaNethermindApi api) : base(api)
 {
 }