Skip to content

Commit 25e5a92

Browse files
committed
solve dup witness bug
1 parent e9f8db0 commit 25e5a92

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/main/java/org/tron/core/services/WitnessService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22

33
import static org.tron.core.witness.BlockProductionCondition.NOT_MY_TURN;
44

5+
import com.google.common.cache.Cache;
6+
import com.google.common.cache.CacheBuilder;
57
import com.google.common.collect.Maps;
68
import com.google.protobuf.ByteString;
79
import java.util.Arrays;
810
import java.util.Map;
911
import java.util.Random;
12+
import java.util.concurrent.TimeUnit;
1013
import java.util.concurrent.atomic.AtomicInteger;
1114
import java.util.concurrent.atomic.AtomicLong;
1215
import lombok.Getter;
@@ -36,6 +39,7 @@
3639
import org.tron.core.exception.ValidateSignatureException;
3740
import org.tron.core.net.TronNetService;
3841
import org.tron.core.net.message.BlockMessage;
42+
import org.tron.core.net.peer.Item;
3943
import org.tron.core.witness.BlockProductionCondition;
4044
import org.tron.core.witness.WitnessController;
4145

@@ -77,6 +81,7 @@ public class WitnessService implements Service {
7781
private AtomicLong dupBlockTime = new AtomicLong(0);
7882
private long blockCycle =
7983
ChainConstant.BLOCK_PRODUCED_INTERVAL * ChainConstant.MAX_ACTIVE_WITNESS_NUM;
84+
private Cache<ByteString, Long> blocks = CacheBuilder.newBuilder().maximumSize(10).build();
8085

8186
/**
8287
* Construction method.
@@ -338,6 +343,11 @@ private boolean dupWitnessCheck() {
338343

339344
public void checkDupWitness(BlockCapsule block) {
340345
if (block.generatedByMyself) {
346+
blocks.put(block.getBlockId().getByteString(), System.currentTimeMillis());
347+
return;
348+
}
349+
350+
if (blocks.getIfPresent(block.getBlockId().getByteString()) != null) {
341351
return;
342352
}
343353

0 commit comments

Comments
 (0)