Skip to content

Commit

Permalink
fixed pr comments.
Browse files Browse the repository at this point in the history
  • Loading branch information
Hristiyan Mitov committed Feb 28, 2025
1 parent 2fe5766 commit 776843e
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 41 deletions.
3 changes: 1 addition & 2 deletions src/main/java/com/limechain/beefy/dto/SignedCommitment.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.limechain.beefy.dto;

import io.libp2p.core.crypto.PubKey;
import lombok.Data;

import java.util.List;
Expand All @@ -9,5 +8,5 @@
@Data
public class SignedCommitment {
private Commitment commitment;
private List<Optional<PubKey>> signatures;
private List<Optional<byte[]>> signatures;
}
12 changes: 4 additions & 8 deletions src/main/java/com/limechain/beefy/dto/ValidatorSet.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
package com.limechain.beefy.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Value;

import java.math.BigInteger;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Value
public class ValidatorSet {
private List<byte[]> validators;
private BigInteger setId;
List<byte[]> validators;
BigInteger setId;
}
3 changes: 1 addition & 2 deletions src/main/java/com/limechain/beefy/dto/VoteMessage.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.limechain.beefy.dto;

import io.libp2p.core.crypto.PubKey;
import lombok.Data;

@Data
public class VoteMessage {
private Commitment commitment;
private byte[] authorityId;
private PubKey signature;
private byte[] signature;
}
11 changes: 6 additions & 5 deletions src/main/java/com/limechain/beefy/state/BeefySession.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package com.limechain.beefy.state;

import com.limechain.beefy.dto.ValidatorSet;
import lombok.Data;
import lombok.Value;

import java.math.BigInteger;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

@Data
@Value
public class BeefySession {
private ValidatorSet validatorSet;
private Set<BigInteger> nonMandatoryBlockNumbers = Collections.synchronizedSortedSet(new TreeSet<>());
ValidatorSet validatorSet;
Set<BigInteger> nonMandatoryBlockNumbers = Collections.synchronizedSet(new HashSet<>());
}

47 changes: 29 additions & 18 deletions src/main/java/com/limechain/beefy/state/BeefyState.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.limechain.beefy.dto.SignedCommitment;
import com.limechain.beefy.dto.ValidatorSet;
import com.limechain.beefy.dto.VoteMessage;
import com.limechain.network.protocol.warp.dto.BlockHeader;
import com.limechain.runtime.Runtime;
import com.limechain.state.AbstractState;
import com.limechain.storage.DBConstants;
Expand Down Expand Up @@ -86,7 +85,9 @@ public void initializeFromDatabase() {

@Override
public void persistState() {
saveRoundNumber(roundNumber);
persistBeefyValidators();
persistValidatorsSetId();
persistRoundNumber(roundNumber);
}

private void initializeNextDigest() {
Expand All @@ -111,9 +112,7 @@ private void handleSessionTransitions(BigInteger grandpaFinalized) {
BigInteger sessionBlock = validatorsSet.getLeft();
ValidatorSet validatorSet = validatorsSet.getRight();

BeefySession beefySession = new BeefySession();
beefySession.setValidatorSet(validatorSet);

BeefySession beefySession = new BeefySession(validatorSet);
sessions.put(sessionBlock, beefySession);
}
nextDigest = nextDigest.add(BigInteger.ONE);
Expand All @@ -129,10 +128,6 @@ private Pair<BigInteger, ValidatorSet> detectValidatorSetChange(BigInteger maxBl
return null;
}

private BlockHeader fetchBeefyFinalized() {
return repository.find(DBConstants.BEEFY_FINALIZED, new BlockHeader());
}

/**
* The threshold is determined as the numOfValidators - (numOfValidators - 1) / 3
*
Expand All @@ -155,31 +150,47 @@ private void reportDoubleVoting(VoteMessage voteMessage) {
}

private void loadPersistedState() {
BigInteger setId = fetchAuthoritiesSetId();
List<byte[]> validators = fetchValidators(setId);
BigInteger setId = fetchValidatorsSetId();
List<byte[]> validators = fetchBeefyValidators(setId);
this.validatorSet = new ValidatorSet(validators, setId);
}

private BigInteger fetchAuthoritiesSetId() {
return repository.find(DBConstants.SET_ID, BigInteger.ZERO);
private BigInteger fetchValidatorsSetId() {
return repository.find(DBConstants.BEEFY_SET_ID, BigInteger.ZERO);
}

private List<byte[]> fetchValidators(BigInteger setId) {
public void persistValidatorsSetId() {
repository.save(DBConstants.BEEFY_SET_ID, validatorSet.getSetId());
}


private List<byte[]> fetchBeefyValidators(BigInteger setId) {
return repository.find(
StateUtil.generateAuthorityKey(DBConstants.AUTHORITY_SET, setId),
StateUtil.generateAuthorityKey(DBConstants.BEEFY_AUTHORITY_SET, setId),
Collections.emptyList()
);
}

private void saveBeefyFinalized() {
public void persistBeefyValidators() {
repository.save(
StateUtil.generateAuthorityKey(DBConstants.BEEFY_AUTHORITY_SET, validatorSet.getSetId()),
validatorSet.getValidators()
);
}

private BigInteger fetchBeefyFinalized() {
return repository.find(DBConstants.BEEFY_FINALIZED, BigInteger.ZERO);
}

private void persistBeefyFinalized() {
repository.save(DBConstants.BEEFY_FINALIZED, beefyFinalized);
}

private BigInteger fetchRoundNumber() {
return repository.find(DBConstants.BEEFY_ROUND, BigInteger.ZERO);
}

private void saveRoundNumber(BigInteger roundNumber) {
private void persistRoundNumber(BigInteger roundNumber) {
repository.save(DBConstants.BEEFY_ROUND, roundNumber);
}

Expand All @@ -190,7 +201,7 @@ private SignedCommitment fetchJustification(BigInteger blockNumber) {
);
}

private void saveJustification(BigInteger blockNumber, SignedCommitment justification) {
private void persistJustification(BigInteger blockNumber, SignedCommitment justification) {
repository.save(
StateUtil.generateBeefyJustificationKey(DBConstants.BEEFY_JUSTIFICATION, blockNumber),
justification
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,19 +245,19 @@ public GrandpaRound getGrandpaRound(BigInteger roundNumber) {
}

public void saveGrandpaAuthorities() {
repository.save(StateUtil.generateAuthorityKey(DBConstants.AUTHORITY_SET, setId), authorities);
repository.save(StateUtil.generateAuthorityKey(DBConstants.GRANDPA_AUTHORITY_SET, setId), authorities);
}

public Authority[] fetchGrandpaAuthorities() {
return repository.find(StateUtil.generateAuthorityKey(DBConstants.AUTHORITY_SET, setId), new Authority[0]);
return repository.find(StateUtil.generateAuthorityKey(DBConstants.GRANDPA_AUTHORITY_SET, setId), new Authority[0]);
}

public void saveAuthoritySetId() {
repository.save(DBConstants.SET_ID, setId);
repository.save(DBConstants.GRANDPA_SET_ID, setId);
}

public BigInteger fetchAuthoritiesSetId() {
return repository.find(DBConstants.SET_ID, BigInteger.ZERO);
return repository.find(DBConstants.GRANDPA_SET_ID, BigInteger.ZERO);
}

public void saveLatestRoundNumber(BigInteger roundNumber) {
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/com/limechain/storage/DBConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,15 @@ public class DBConstants {
public static final String STATE_ROOT = "ss::stateRoot";

// GrandpaState keys
public static final String AUTHORITY_SET = "gs::authoritySet";
public static final String GRANDPA_AUTHORITY_SET = "gs::grandpaAuthoritySet";
public static final String GRANDPA_SET_ID = "gs::grandpaSetId";
public static final String LATEST_ROUND = "gs::latestRound";
public static final String SET_ID = "gs::setId";
public static final String GRANDPA_PREVOTES = "gs:grandpaPreVotes";
public static final String GRANDPA_PRECOMMITS = "gs:grandpaPreCommits";

//BeefyState keys
public static final String BEEFY_AUTHORITY_SET = "gs::beefyAuthoritySet";
public static final String BEEFY_SET_ID = "gs::beefySetId";
public static final String BEEFY_FINALIZED = "bs:beefyFinalized";
public static final String BEEFY_ROUND = "bs:beefyRound";
public static final String BEEFY_JUSTIFICATION = "bs:justification";
Expand Down

0 comments on commit 776843e

Please sign in to comment.