diff --git a/src/main/java/org/qortal/controller/BlockMinter.java b/src/main/java/org/qortal/controller/BlockMinter.java index c77bc579..f4556349 100644 --- a/src/main/java/org/qortal/controller/BlockMinter.java +++ b/src/main/java/org/qortal/controller/BlockMinter.java @@ -571,6 +571,7 @@ public class BlockMinter extends Thread { List peers = Network.getInstance().getImmutableHandshakedPeers(); // Loop through handshaked peers and check for any new block candidates + // TODO: filter out peers with invalid blocks for (Peer peer : peers) { if (peer.getCommonBlockData() != null && peer.getCommonBlockData().getCommonBlockSummary() != null) { // This peer has common block data diff --git a/src/main/java/org/qortal/controller/Synchronizer.java b/src/main/java/org/qortal/controller/Synchronizer.java index 7721629c..516197d6 100644 --- a/src/main/java/org/qortal/controller/Synchronizer.java +++ b/src/main/java/org/qortal/controller/Synchronizer.java @@ -632,7 +632,9 @@ public class Synchronizer extends Thread { int minChainLength = this.calculateMinChainLengthOfPeers(peersSharingCommonBlock, commonBlockSummary); // Fetch block summaries from each peer - for (Peer peer : peersSharingCommonBlock) { + Iterator peersSharingCommonBlockIterator = peersSharingCommonBlock.iterator(); + while (peersSharingCommonBlockIterator.hasNext()) { + Peer peer = (Peer) peersSharingCommonBlockIterator.next(); // If we're shutting down, just return the latest peer list if (Controller.isStopping()) @@ -689,6 +691,8 @@ public class Synchronizer extends Thread { if (this.containsInvalidBlockSummary(peer.getCommonBlockData().getBlockSummariesAfterCommonBlock())) { LOGGER.debug("Ignoring peer %s because it holds an invalid block", peer); peers.remove(peer); + peersSharingCommonBlockIterator.remove(); + continue; } // Reduce minChainLength if needed. If we don't have any blocks, this peer will be excluded from chain weight comparisons later in the process, so we shouldn't update minChainLength