Skip to content

Commit

Permalink
feat: add authority status fields to abstractState
Browse files Browse the repository at this point in the history
  • Loading branch information
Grigorov-Georgi committed Jan 27, 2025
1 parent 78eedf8 commit 4702387
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 25 deletions.
20 changes: 0 additions & 20 deletions src/main/java/com/limechain/client/NodeRoleManager.java

This file was deleted.

15 changes: 12 additions & 3 deletions src/main/java/com/limechain/grandpa/state/GrandpaSetState.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,15 @@
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.extern.java.Log;
import org.javatuples.Pair;
import org.springframework.stereotype.Component;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.PriorityQueue;
import java.util.logging.Level;

Expand Down Expand Up @@ -176,6 +178,8 @@ public void startNewSet(List<Authority> authorities) {

roundCache.addRound(setId, grandpaRound);

updateAuthorityStatus();

log.log(Level.INFO, "Successfully transitioned to authority set id: " + setId);
}

Expand Down Expand Up @@ -259,8 +263,13 @@ public void handleVoteMessage(VoteMessage voteMessage) {
}
}

public boolean participatesAsVoter() {
return authorities.stream()
.anyMatch(a -> keyStore.getKeyPair(KeyType.GRANDPA, a.getPublicKey()).isPresent());
private void updateAuthorityStatus() {
Optional<Pair<byte[], byte[]>> keyPair = authorities.stream()
.map(a -> keyStore.getKeyPair(KeyType.GRANDPA, a.getPublicKey()))
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst();

keyPair.ifPresentOrElse(AbstractState::setAuthorityStatus, AbstractState::unsetAuthorityStatus);
}
}
18 changes: 17 additions & 1 deletion src/main/java/com/limechain/state/AbstractState.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,19 @@
import com.limechain.ServiceState;
import com.limechain.sync.SyncMode;
import lombok.Getter;
import org.javatuples.Pair;

public abstract class AbstractState implements ServiceState {

@Getter
protected boolean initialized;

@Getter
private static SyncMode syncMode;
@Getter
protected boolean initialized;
private static boolean isActiveAuthority = false;
@Getter
private static Pair<byte[], byte[]> grandpaKeyPair = null;

public static void setSyncMode(SyncMode mode) {
if (syncMode != null && syncMode.ordinal() > mode.ordinal()) {
Expand All @@ -19,6 +25,16 @@ public static void setSyncMode(SyncMode mode) {
syncMode = mode;
}

public static void setAuthorityStatus(Pair<byte[], byte[]> keyPair) {
isActiveAuthority = true;
grandpaKeyPair = keyPair;
}

public static void unsetAuthorityStatus() {
isActiveAuthority = false;
grandpaKeyPair = null;
}

@Override
public void initialize() {
initialized = true;
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/com/limechain/sync/warpsync/WarpSyncState.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.limechain.network.protocol.warp.scale.reader.JustificationReader;
import com.limechain.runtime.Runtime;
import com.limechain.runtime.RuntimeBuilder;
import com.limechain.state.AbstractState;
import com.limechain.state.StateManager;
import com.limechain.storage.DBConstants;
import com.limechain.storage.KVRepository;
Expand Down Expand Up @@ -148,7 +149,7 @@ public synchronized void syncCommit(CommitMessage commitMessage, PeerId peerId)
.getRound(commitMessage.getSetId(), commitMessage.getRoundNumber())
.addCommitMessageToArchive(commitMessage);

if (warpSyncFinished && !grandpaSetState.participatesAsVoter()) {
if (warpSyncFinished && !AbstractState.isActiveAuthority()) {
updateState(commitMessage);
}
}
Expand Down

0 comments on commit 4702387

Please sign in to comment.