Search in sources :

Example 1 with RxEnvironmentModule

use of com.radixdlt.environment.rx.RxEnvironmentModule in project radixdlt by radixdlt.

the class RadixNodeModule method configure.

@Override
protected void configure() {
    if (this.networkId <= 0) {
        throw new IllegalStateException("Illegal networkId " + networkId);
    }
    var addressing = Addressing.ofNetworkId(networkId);
    bind(Addressing.class).toInstance(addressing);
    bindConstant().annotatedWith(NetworkId.class).to(networkId);
    bind(Txn.class).annotatedWith(Genesis.class).toInstance(loadGenesis(networkId));
    bind(RuntimeProperties.class).toInstance(properties);
    // Consensus configuration
    // These cannot be changed without introducing possibilities of
    // going out of sync with consensus.
    bindConstant().annotatedWith(BFTSyncPatienceMillis.class).to(properties.get("bft.sync.patience", 200));
    // Default values mean that pacemakers will sync if they are within 5 views of each other.
    // 5 consecutive failing views will take 1*(2^6)-1 seconds = 63 seconds.
    bindConstant().annotatedWith(PacemakerTimeout.class).to(3000L);
    bindConstant().annotatedWith(PacemakerRate.class).to(1.1);
    bindConstant().annotatedWith(PacemakerMaxExponent.class).to(0);
    // Mempool configuration
    var mempoolMaxSize = properties.get("mempool.maxSize", 10000);
    install(MempoolConfig.asModule(mempoolMaxSize, 5, 60000, 60000, 100));
    // Sync configuration
    final long syncPatience = properties.get("sync.patience", 5000L);
    bind(SyncConfig.class).toInstance(SyncConfig.of(syncPatience, 10, 3000L));
    // System (e.g. time, random)
    install(new SystemModule());
    install(new RxEnvironmentModule());
    install(new EventLoggerModule());
    install(new DispatcherModule());
    // Consensus
    install(new PersistedBFTKeyModule());
    install(new CryptoModule());
    install(new ConsensusModule());
    // Ledger
    install(new LedgerModule());
    install(new MempoolReceiverModule());
    // Mempool Relay
    install(new MempoolRelayerModule());
    // Sync
    install(new SyncServiceModule());
    // Epochs - Consensus
    install(new EpochsConsensusModule());
    // Epochs - Sync
    install(new EpochsSyncModule());
    // State Computer
    install(new ForksModule());
    if (properties.get("testing_forks.enable", false)) {
        String testingForksModuleName = properties.get("testing_forks.fork_config_name", "TestingForksModuleV1");
        if (testingForksModuleName.isBlank()) {
            testingForksModuleName = "TestingForksModuleV1";
        }
        log.info("Using testing forks module '{}'", testingForksModuleName);
        install(new TestingForksLoader().createTestingForksModuleConfigFromClassName(testingForksModuleName));
    } else {
        final var forksModule = FORKS_MODULE_BY_NETWORK_ID.getOrDefault(networkId, new GenericTestnetForksModule());
        log.info("Using a predefined forks module '{}'", forksModule.getClass().getSimpleName());
        install(forksModule);
    }
    if (properties.get("overwrite_forks.enable", false)) {
        log.info("Enabling fork overwrites from properties");
        install(new ForkOverwritesFromPropertiesModule());
    }
    install(new RadixEngineStateComputerModule());
    install(new RadixEngineModule());
    install(new RadixEngineStoreModule());
    // Checkpoints
    install(new RadixEngineCheckpointModule());
    // Storage
    install(new DatabasePropertiesModule());
    install(new PersistenceModule());
    install(new ConsensusRecoveryModule());
    install(new LedgerRecoveryModule());
    // System Info
    install(new SystemInfoModule());
    // Network
    install(new MessagingModule());
    install(new MessageCentralModule(properties));
    install(new HostIpModule(properties));
    install(new P2PModule(properties));
    install(new PeerDiscoveryModule());
    install(new PeerLivenessMonitorModule());
    // API
    var bindAddress = properties.get("api.bind.address", DEFAULT_BIND_ADDRESS);
    var port = properties.get("api.port", DEFAULT_CORE_PORT);
    var enableTransactions = properties.get("api.transactions.enable", false);
    var enableSign = properties.get("api.sign.enable", false);
    install(new ApiModule(bindAddress, port, enableTransactions, enableSign));
    // Substate Hash Accumulator
    boolean isUpdateEpochHashFileEnabled = properties.get(UPDATE_EPOCH_HASH_FILE_ENABLE_PROPERTY_NAME, false);
    boolean isVerifyEpochHashEnabled = properties.get(VERIFY_EPOCH_HASH_ENABLE_PROPERTY_NAME, false);
    if (isUpdateEpochHashFileEnabled || isVerifyEpochHashEnabled) {
        SubstateAccumulatorHashModule substateAccumulatorHashModule = new SubstateAccumulatorHashModule(isUpdateEpochHashFileEnabled, isVerifyEpochHashEnabled);
        log.info("Enabling Substate Hash Accumulator Module.");
        install(substateAccumulatorHashModule);
    }
}
Also used : RadixEngineModule(com.radixdlt.statecomputer.RadixEngineModule) ApiModule(com.radixdlt.api.ApiModule) GenericTestnetForksModule(com.radixdlt.statecomputer.forks.modules.GenericTestnetForksModule) MainnetForksModule(com.radixdlt.statecomputer.forks.modules.MainnetForksModule) ReleasenetForksModule(com.radixdlt.statecomputer.forks.modules.ReleasenetForksModule) StokenetForksModule(com.radixdlt.statecomputer.forks.modules.StokenetForksModule) ForksModule(com.radixdlt.statecomputer.forks.ForksModule) RadixEngineStateComputerModule(com.radixdlt.statecomputer.RadixEngineStateComputerModule) SyncConfig(com.radixdlt.sync.SyncConfig) Addressing(com.radixdlt.networks.Addressing) MessageCentralModule(com.radixdlt.network.messaging.MessageCentralModule) PacemakerMaxExponent(com.radixdlt.hotstuff.bft.PacemakerMaxExponent) PacemakerRate(com.radixdlt.hotstuff.bft.PacemakerRate) GenericTestnetForksModule(com.radixdlt.statecomputer.forks.modules.GenericTestnetForksModule) SubstateAccumulatorHashModule(com.radixdlt.statecomputer.substatehash.SubstateAccumulatorHashModule) HostIpModule(com.radixdlt.network.hostip.HostIpModule) RuntimeProperties(com.radixdlt.properties.RuntimeProperties) PeerLivenessMonitorModule(com.radixdlt.network.p2p.PeerLivenessMonitorModule) BFTSyncPatienceMillis(com.radixdlt.hotstuff.sync.BFTSyncPatienceMillis) TestingForksLoader(com.radixdlt.statecomputer.forks.modules.testing.TestingForksLoader) PacemakerTimeout(com.radixdlt.hotstuff.bft.PacemakerTimeout) PersistenceModule(com.radixdlt.store.PersistenceModule) NetworkId(com.radixdlt.networks.NetworkId) RxEnvironmentModule(com.radixdlt.environment.rx.RxEnvironmentModule) DatabasePropertiesModule(com.radixdlt.store.DatabasePropertiesModule) MempoolRelayerModule(com.radixdlt.mempool.MempoolRelayerModule) MessagingModule(com.radixdlt.network.messaging.MessagingModule) ForkOverwritesFromPropertiesModule(com.radixdlt.statecomputer.forks.ForkOverwritesFromPropertiesModule) RadixEngineCheckpointModule(com.radixdlt.statecomputer.checkpoint.RadixEngineCheckpointModule) Genesis(com.radixdlt.statecomputer.checkpoint.Genesis) P2PModule(com.radixdlt.network.p2p.P2PModule) PeerDiscoveryModule(com.radixdlt.network.p2p.PeerDiscoveryModule) PersistedBFTKeyModule(com.radixdlt.keys.PersistedBFTKeyModule) MempoolReceiverModule(com.radixdlt.mempool.MempoolReceiverModule)

Example 2 with RxEnvironmentModule

use of com.radixdlt.environment.rx.RxEnvironmentModule in project radixdlt by radixdlt.

the class MempoolRunnerTest method createModule.

@SuppressWarnings(// The mock method doesn't support type-safe generics due to type erasure
"unchecked")
public Module createModule() {
    return new AbstractModule() {

        @Override
        public void configure() {
            bind(BFTNode.class).annotatedWith(Self.class).toInstance(BFTNode.random());
            bind(LedgerProof.class).annotatedWith(LastProof.class).toInstance(mock(LedgerProof.class));
            bind(StateComputer.class).toInstance(stateComputer);
            bind(SystemCounters.class).toInstance(new SystemCountersImpl());
            bind(RxRemoteEnvironment.class).toInstance(new RxRemoteEnvironment() {

                @Override
                public <T> Flowable<RemoteEvent<T>> remoteEvents(Class<T> remoteEventClass) {
                    return Flowable.never();
                }
            });
            bind(LedgerAccumulator.class).toInstance(mock(LedgerAccumulator.class));
            bind(LedgerAccumulatorVerifier.class).toInstance(mock(LedgerAccumulatorVerifier.class));
            bind(new TypeLiteral<Comparator<LedgerProof>>() {
            }).toInstance(mock(Comparator.class));
            bind(Addressing.class).toInstance(Addressing.ofNetwork(Network.LOCALNET));
            bind(TimeSupplier.class).toInstance(System::currentTimeMillis);
            Multibinder.newSetBinder(binder(), StartProcessorOnRunner.class);
            install(MempoolConfig.asModule(100, 10));
            install(new MockedKeyModule());
            install(new MockedCryptoModule());
            install(new RxEnvironmentModule());
            install(new DispatcherModule());
            install(new MempoolReceiverModule());
            install(new EventLoggerModule());
        }
    };
}
Also used : MockedKeyModule(com.radixdlt.modules.MockedKeyModule) Self(com.radixdlt.hotstuff.bft.Self) TimeSupplier(com.radixdlt.utils.TimeSupplier) Addressing(com.radixdlt.networks.Addressing) Comparator(java.util.Comparator) LedgerAccumulatorVerifier(com.radixdlt.ledger.LedgerAccumulatorVerifier) TypeLiteral(com.google.inject.TypeLiteral) LedgerProof(com.radixdlt.hotstuff.LedgerProof) StateComputer(com.radixdlt.ledger.StateComputerLedger.StateComputer) LedgerAccumulator(com.radixdlt.ledger.LedgerAccumulator) RxRemoteEnvironment(com.radixdlt.environment.rx.RxRemoteEnvironment) SystemCounters(com.radixdlt.counters.SystemCounters) MockedCryptoModule(com.radixdlt.modules.MockedCryptoModule) RxEnvironmentModule(com.radixdlt.environment.rx.RxEnvironmentModule) AbstractModule(com.google.inject.AbstractModule) LastProof(com.radixdlt.store.LastProof) SystemCountersImpl(com.radixdlt.counters.SystemCountersImpl) DispatcherModule(com.radixdlt.modules.DispatcherModule) EventLoggerModule(com.radixdlt.modules.EventLoggerModule) Flowable(io.reactivex.rxjava3.core.Flowable)

Aggregations

RxEnvironmentModule (com.radixdlt.environment.rx.RxEnvironmentModule)2 Addressing (com.radixdlt.networks.Addressing)2 AbstractModule (com.google.inject.AbstractModule)1 TypeLiteral (com.google.inject.TypeLiteral)1 ApiModule (com.radixdlt.api.ApiModule)1 SystemCounters (com.radixdlt.counters.SystemCounters)1 SystemCountersImpl (com.radixdlt.counters.SystemCountersImpl)1 RxRemoteEnvironment (com.radixdlt.environment.rx.RxRemoteEnvironment)1 LedgerProof (com.radixdlt.hotstuff.LedgerProof)1 PacemakerMaxExponent (com.radixdlt.hotstuff.bft.PacemakerMaxExponent)1 PacemakerRate (com.radixdlt.hotstuff.bft.PacemakerRate)1 PacemakerTimeout (com.radixdlt.hotstuff.bft.PacemakerTimeout)1 Self (com.radixdlt.hotstuff.bft.Self)1 BFTSyncPatienceMillis (com.radixdlt.hotstuff.sync.BFTSyncPatienceMillis)1 PersistedBFTKeyModule (com.radixdlt.keys.PersistedBFTKeyModule)1 LedgerAccumulator (com.radixdlt.ledger.LedgerAccumulator)1 LedgerAccumulatorVerifier (com.radixdlt.ledger.LedgerAccumulatorVerifier)1 StateComputer (com.radixdlt.ledger.StateComputerLedger.StateComputer)1 MempoolReceiverModule (com.radixdlt.mempool.MempoolReceiverModule)1 MempoolRelayerModule (com.radixdlt.mempool.MempoolRelayerModule)1