|
|
|
@ -660,29 +660,6 @@ public class Controller extends Thread {
|
|
|
|
|
return lastMisbehaved != null && lastMisbehaved > NTP.getTime() - MISBEHAVIOUR_COOLOFF; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/** True if peer has unknown height, lower height or same height and same block signature (unless we don't have their block signature). */ |
|
|
|
|
public static Predicate<Peer> hasShorterBlockchain = peer -> { |
|
|
|
|
BlockData highestBlockData = getInstance().getChainTip(); |
|
|
|
|
int ourHeight = highestBlockData.getHeight(); |
|
|
|
|
final PeerChainTipData peerChainTipData = peer.getChainTipData(); |
|
|
|
|
|
|
|
|
|
// Ensure we have chain tip data for this peer
|
|
|
|
|
if (peerChainTipData == null) |
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
// Remove if peer is at a lower height than us
|
|
|
|
|
Integer peerHeight = peerChainTipData.getLastHeight(); |
|
|
|
|
if (peerHeight == null || peerHeight < ourHeight) |
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
// Don't remove if peer is on a greater height chain than us, or if we don't have their block signature
|
|
|
|
|
if (peerHeight > ourHeight || peerChainTipData.getLastBlockSignature() == null) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
// Remove if signatures match
|
|
|
|
|
return Arrays.equals(peerChainTipData.getLastBlockSignature(), highestBlockData.getSignature()); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
public static final Predicate<Peer> hasNoRecentBlock = peer -> { |
|
|
|
|
final Long minLatestBlockTimestamp = getMinimumLatestBlockTimestamp(); |
|
|
|
|
final PeerChainTipData peerChainTipData = peer.getChainTipData(); |
|
|
|
|