mirror of
https://github.com/Qortal/qortal.git
synced 2025-02-12 10:15:49 +00:00
Fixed long term bug in comparePeers() causing peers with invalid blocks to prevent alternate valid but lower weight candidates from being chosen.
This commit is contained in:
parent
a2e1efab90
commit
4440e82bb9
@ -571,6 +571,7 @@ public class BlockMinter extends Thread {
|
|||||||
|
|
||||||
List<Peer> peers = Network.getInstance().getImmutableHandshakedPeers();
|
List<Peer> peers = Network.getInstance().getImmutableHandshakedPeers();
|
||||||
// Loop through handshaked peers and check for any new block candidates
|
// Loop through handshaked peers and check for any new block candidates
|
||||||
|
// TODO: filter out peers with invalid blocks
|
||||||
for (Peer peer : peers) {
|
for (Peer peer : peers) {
|
||||||
if (peer.getCommonBlockData() != null && peer.getCommonBlockData().getCommonBlockSummary() != null) {
|
if (peer.getCommonBlockData() != null && peer.getCommonBlockData().getCommonBlockSummary() != null) {
|
||||||
// This peer has common block data
|
// This peer has common block data
|
||||||
|
@ -632,7 +632,9 @@ public class Synchronizer extends Thread {
|
|||||||
int minChainLength = this.calculateMinChainLengthOfPeers(peersSharingCommonBlock, commonBlockSummary);
|
int minChainLength = this.calculateMinChainLengthOfPeers(peersSharingCommonBlock, commonBlockSummary);
|
||||||
|
|
||||||
// Fetch block summaries from each peer
|
// 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 we're shutting down, just return the latest peer list
|
||||||
if (Controller.isStopping())
|
if (Controller.isStopping())
|
||||||
@ -689,6 +691,8 @@ public class Synchronizer extends Thread {
|
|||||||
if (this.containsInvalidBlockSummary(peer.getCommonBlockData().getBlockSummariesAfterCommonBlock())) {
|
if (this.containsInvalidBlockSummary(peer.getCommonBlockData().getBlockSummariesAfterCommonBlock())) {
|
||||||
LOGGER.debug("Ignoring peer %s because it holds an invalid block", peer);
|
LOGGER.debug("Ignoring peer %s because it holds an invalid block", peer);
|
||||||
peers.remove(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
|
// 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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user