Browse Source

hasInvalidSigner() now only checks the chain tip block, to reduce the amount of unintended side effects that can occur.

at-states-fix
CalDescent 2 years ago
parent
commit
5ff7b3df6d
  1. 15
      src/main/java/org/qortal/controller/Controller.java

15
src/main/java/org/qortal/controller/Controller.java

@ -758,24 +758,15 @@ public class Controller extends Thread {
};
public static final Predicate<Peer> hasInvalidSigner = peer -> {
final List<BlockSummaryData> peerChainTipSummaries = peer.getChainTipSummaries();
if (peerChainTipSummaries == null) {
final BlockSummaryData peerChainTipData = peer.getChainTipData();
if (peerChainTipData == null)
return true;
}
try (Repository repository = RepositoryManager.getRepository()) {
for (BlockSummaryData blockSummaryData : peerChainTipSummaries) {
if (Account.getRewardShareEffectiveMintingLevel(repository, blockSummaryData.getMinterPublicKey()) == 0) {
return true;
}
}
return Account.getRewardShareEffectiveMintingLevel(repository, peerChainTipData.getMinterPublicKey()) == 0;
} catch (DataException e) {
return true;
}
// We got this far without encountering invalid or missing summaries, nor was an exception thrown,
// so it is safe to assume that all of this peer's recent blocks had a valid signer.
return false;
};
private long getRandomRepositoryMaintenanceInterval() {

Loading…
Cancel
Save