Search in sources :

Example 1 with StateComputer

use of com.radixdlt.ledger.StateComputerLedger.StateComputer in project radixdlt by radixdlt.

the class EpochManagerTest method getExternalModule.

private Module getExternalModule() {
    BFTNode self = BFTNode.create(ecKeyPair.getPublicKey());
    return new AbstractModule() {

        @Override
        protected void configure() {
            bind(HashSigner.class).toInstance(ecKeyPair::sign);
            bind(BFTNode.class).annotatedWith(Self.class).toInstance(self);
            bind(new TypeLiteral<EventDispatcher<LocalTimeoutOccurrence>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<BFTInsertUpdate>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<BFTRebuildUpdate>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<BFTHighQCUpdate>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<BFTCommittedUpdate>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<EpochLocalTimeoutOccurrence>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<EpochView>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<LocalSyncRequest>>() {
            }).toInstance(syncLedgerRequestSender);
            bind(new TypeLiteral<EventDispatcher<ViewQuorumReached>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<EpochViewUpdate>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<ViewUpdate>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<NoVote>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<EventDispatcher<LedgerUpdate>>() {
            }).toInstance(rmock(EventDispatcher.class));
            bind(new TypeLiteral<ScheduledEventDispatcher<GetVerticesRequest>>() {
            }).toInstance(timeoutScheduler);
            bind(new TypeLiteral<ScheduledEventDispatcher<ScheduledLocalTimeout>>() {
            }).toInstance(rmock(ScheduledEventDispatcher.class));
            bind(new TypeLiteral<ScheduledEventDispatcher<Epoched<ScheduledLocalTimeout>>>() {
            }).toInstance(rmock(ScheduledEventDispatcher.class));
            bind(new TypeLiteral<ScheduledEventDispatcher<VertexRequestTimeout>>() {
            }).toInstance(rmock(ScheduledEventDispatcher.class));
            bind(new TypeLiteral<RemoteEventDispatcher<Proposal>>() {
            }).toInstance(proposalDispatcher);
            bind(new TypeLiteral<RemoteEventDispatcher<Vote>>() {
            }).toInstance(voteDispatcher);
            bind(new TypeLiteral<RemoteEventDispatcher<GetVerticesRequest>>() {
            }).toInstance(rmock(RemoteEventDispatcher.class));
            bind(new TypeLiteral<RemoteEventDispatcher<GetVerticesResponse>>() {
            }).toInstance(rmock(RemoteEventDispatcher.class));
            bind(new TypeLiteral<RemoteEventDispatcher<GetVerticesErrorResponse>>() {
            }).toInstance(rmock(RemoteEventDispatcher.class));
            bind(new TypeLiteral<RemoteEventDispatcher<LedgerStatusUpdate>>() {
            }).toInstance(rmock(RemoteEventDispatcher.class));
            bind(PersistentSafetyStateStore.class).toInstance(mock(PersistentSafetyStateStore.class));
            bind(NextTxnsGenerator.class).toInstance(nextTxnsGenerator);
            bind(SystemCounters.class).toInstance(new SystemCountersImpl());
            bind(Mempool.class).toInstance(mempool);
            bind(StateComputer.class).toInstance(stateComputer);
            bind(PersistentVertexStore.class).toInstance(mock(PersistentVertexStore.class));
            bind(RateLimiter.class).annotatedWith(GetVerticesRequestRateLimit.class).toInstance(RateLimiter.create(Double.MAX_VALUE));
            bindConstant().annotatedWith(BFTSyncPatienceMillis.class).to(50);
            bindConstant().annotatedWith(PacemakerTimeout.class).to(10L);
            bindConstant().annotatedWith(PacemakerRate.class).to(2.0);
            bindConstant().annotatedWith(PacemakerMaxExponent.class).to(0);
            bind(TimeSupplier.class).toInstance(System::currentTimeMillis);
            bind(new TypeLiteral<Consumer<EpochViewUpdate>>() {
            }).toInstance(rmock(Consumer.class));
        }

        @Provides
        private ViewUpdate view(BFTConfiguration bftConfiguration) {
            HighQC highQC = bftConfiguration.getVertexStoreState().getHighQC();
            View view = highQC.highestQC().getView().next();
            return ViewUpdate.create(view, highQC, self, self);
        }

        @Provides
        BFTValidatorSet validatorSet() {
            return BFTValidatorSet.from(Stream.of(BFTValidator.from(self, UInt256.ONE)));
        }

        @Provides
        @LastProof
        LedgerProof verifiedLedgerHeaderAndProof(BFTValidatorSet validatorSet) {
            var accumulatorState = new AccumulatorState(0, HashUtils.zero256());
            return LedgerProof.genesis(accumulatorState, validatorSet, 0);
        }

        @Provides
        @LastEpochProof
        LedgerProof lastEpochProof(BFTValidatorSet validatorSet) {
            var accumulatorState = new AccumulatorState(0, HashUtils.zero256());
            return LedgerProof.genesis(accumulatorState, validatorSet, 0);
        }

        @Provides
        BFTConfiguration bftConfiguration(@Self BFTNode self, Hasher hasher, BFTValidatorSet validatorSet) {
            var accumulatorState = new AccumulatorState(0, HashUtils.zero256());
            var unverifiedVertex = UnverifiedVertex.createGenesis(LedgerHeader.genesis(accumulatorState, validatorSet, 0));
            var verifiedVertex = new VerifiedVertex(unverifiedVertex, hasher.hash(unverifiedVertex));
            var qc = QuorumCertificate.ofGenesis(verifiedVertex, LedgerHeader.genesis(accumulatorState, validatorSet, 0));
            var proposerElection = new WeightedRotatingLeaders(validatorSet);
            return new BFTConfiguration(proposerElection, validatorSet, VerifiedVertexStoreState.create(HighQC.from(qc), verifiedVertex, Optional.empty(), hasher));
        }
    };
}
Also used : HighQC(com.radixdlt.consensus.HighQC) AccumulatorState(com.radixdlt.ledger.AccumulatorState) LocalSyncRequest(com.radixdlt.sync.messages.local.LocalSyncRequest) BFTCommittedUpdate(com.radixdlt.consensus.bft.BFTCommittedUpdate) VertexRequestTimeout(com.radixdlt.consensus.sync.VertexRequestTimeout) NextTxnsGenerator(com.radixdlt.consensus.liveness.NextTxnsGenerator) BFTInsertUpdate(com.radixdlt.consensus.bft.BFTInsertUpdate) PacemakerMaxExponent(com.radixdlt.consensus.bft.PacemakerMaxExponent) ViewUpdate(com.radixdlt.consensus.bft.ViewUpdate) VerifiedVertex(com.radixdlt.consensus.bft.VerifiedVertex) Consumer(java.util.function.Consumer) ScheduledEventDispatcher(com.radixdlt.environment.ScheduledEventDispatcher) Mempool(com.radixdlt.mempool.Mempool) StateComputer(com.radixdlt.ledger.StateComputerLedger.StateComputer) BFTNode(com.radixdlt.consensus.bft.BFTNode) Vote(com.radixdlt.consensus.Vote) NoVote(com.radixdlt.consensus.bft.NoVote) GetVerticesResponse(com.radixdlt.consensus.sync.GetVerticesResponse) HashSigner(com.radixdlt.consensus.HashSigner) RemoteEventDispatcher(com.radixdlt.environment.RemoteEventDispatcher) Hasher(com.radixdlt.crypto.Hasher) NoVote(com.radixdlt.consensus.bft.NoVote) Proposal(com.radixdlt.consensus.Proposal) LedgerStatusUpdate(com.radixdlt.sync.messages.remote.LedgerStatusUpdate) WeightedRotatingLeaders(com.radixdlt.consensus.liveness.WeightedRotatingLeaders) LedgerUpdate(com.radixdlt.ledger.LedgerUpdate) GetVerticesRequest(com.radixdlt.consensus.sync.GetVerticesRequest) LocalTimeoutOccurrence(com.radixdlt.consensus.liveness.LocalTimeoutOccurrence) EpochLocalTimeoutOccurrence(com.radixdlt.consensus.liveness.EpochLocalTimeoutOccurrence) Self(com.radixdlt.consensus.bft.Self) TimeSupplier(com.radixdlt.utils.TimeSupplier) PersistentVertexStore(com.radixdlt.consensus.bft.PersistentVertexStore) EpochLocalTimeoutOccurrence(com.radixdlt.consensus.liveness.EpochLocalTimeoutOccurrence) PacemakerRate(com.radixdlt.consensus.bft.PacemakerRate) RemoteEventDispatcher(com.radixdlt.environment.RemoteEventDispatcher) ScheduledEventDispatcher(com.radixdlt.environment.ScheduledEventDispatcher) EventDispatcher(com.radixdlt.environment.EventDispatcher) TypeLiteral(com.google.inject.TypeLiteral) BFTSyncPatienceMillis(com.radixdlt.consensus.sync.BFTSyncPatienceMillis) BFTRebuildUpdate(com.radixdlt.consensus.bft.BFTRebuildUpdate) GetVerticesErrorResponse(com.radixdlt.consensus.sync.GetVerticesErrorResponse) SystemCounters(com.radixdlt.counters.SystemCounters) PacemakerTimeout(com.radixdlt.consensus.bft.PacemakerTimeout) BFTValidatorSet(com.radixdlt.consensus.bft.BFTValidatorSet) View(com.radixdlt.consensus.bft.View) AbstractModule(com.google.inject.AbstractModule) BFTConfiguration(com.radixdlt.consensus.BFTConfiguration) SystemCountersImpl(com.radixdlt.counters.SystemCountersImpl) ViewQuorumReached(com.radixdlt.consensus.bft.ViewQuorumReached) ScheduledLocalTimeout(com.radixdlt.consensus.liveness.ScheduledLocalTimeout) BFTHighQCUpdate(com.radixdlt.consensus.bft.BFTHighQCUpdate) GetVerticesRequestRateLimit(com.radixdlt.middleware2.network.GetVerticesRequestRateLimit) PersistentSafetyStateStore(com.radixdlt.consensus.safety.PersistentSafetyStateStore)

Example 2 with StateComputer

use of com.radixdlt.ledger.StateComputerLedger.StateComputer in project radixdlt by radixdlt.

the class StateComputerLedgerTest method setup.

@Before
public void setup() {
    this.mempool = TypedMocks.rmock(Mempool.class);
    // No type check issues with mocking generic here
    this.stateComputer = mock(StateComputer.class);
    this.counters = mock(SystemCounters.class);
    this.headerComparator = TypedMocks.rmock(Comparator.class);
    this.accumulator = new SimpleLedgerAccumulatorAndVerifier(hasher);
    this.accumulatorVerifier = new SimpleLedgerAccumulatorAndVerifier(hasher);
    var accumulatorState = new AccumulatorState(0, HashUtils.zero256());
    this.ledgerHeader = LedgerHeader.genesis(accumulatorState, null, 0);
    this.genesis = UnverifiedVertex.createGenesis(ledgerHeader);
    this.genesisVertex = new VerifiedVertex(genesis, hasher.hash(genesis));
    this.genesisQC = QuorumCertificate.ofGenesis(genesisVertex, ledgerHeader);
    this.currentLedgerHeader = this.genesisQC.getCommittedAndLedgerStateProof(hasher).map(Pair::getSecond).orElseThrow();
    this.sut = new StateComputerLedger(mock(TimeSupplier.class), currentLedgerHeader, headerComparator, stateComputer, accumulator, accumulatorVerifier, counters);
}
Also used : StateComputer(com.radixdlt.ledger.StateComputerLedger.StateComputer) VerifiedVertex(com.radixdlt.consensus.bft.VerifiedVertex) SystemCounters(com.radixdlt.counters.SystemCounters) Mempool(com.radixdlt.mempool.Mempool) Comparator(java.util.Comparator) Pair(com.radixdlt.utils.Pair) Before(org.junit.Before)

Example 3 with StateComputer

use of com.radixdlt.ledger.StateComputerLedger.StateComputer 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.MockedKeyModule) Self(com.radixdlt.consensus.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.consensus.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.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.DispatcherModule) EventLoggerModule(com.radixdlt.EventLoggerModule) Flowable(io.reactivex.rxjava3.core.Flowable)

Aggregations

SystemCounters (com.radixdlt.counters.SystemCounters)3 StateComputer (com.radixdlt.ledger.StateComputerLedger.StateComputer)3 AbstractModule (com.google.inject.AbstractModule)2 TypeLiteral (com.google.inject.TypeLiteral)2 Self (com.radixdlt.consensus.bft.Self)2 VerifiedVertex (com.radixdlt.consensus.bft.VerifiedVertex)2 SystemCountersImpl (com.radixdlt.counters.SystemCountersImpl)2 Mempool (com.radixdlt.mempool.Mempool)2 TimeSupplier (com.radixdlt.utils.TimeSupplier)2 Comparator (java.util.Comparator)2 DispatcherModule (com.radixdlt.DispatcherModule)1 EventLoggerModule (com.radixdlt.EventLoggerModule)1 MockedCryptoModule (com.radixdlt.MockedCryptoModule)1 MockedKeyModule (com.radixdlt.MockedKeyModule)1 BFTConfiguration (com.radixdlt.consensus.BFTConfiguration)1 HashSigner (com.radixdlt.consensus.HashSigner)1 HighQC (com.radixdlt.consensus.HighQC)1 LedgerProof (com.radixdlt.consensus.LedgerProof)1 Proposal (com.radixdlt.consensus.Proposal)1 Vote (com.radixdlt.consensus.Vote)1