Coverage Summary for Class: CheckingBestHeaderSyncState (co.rsk.net)
Class |
Class, %
|
Method, %
|
Line, %
|
CheckingBestHeaderSyncState |
0%
(0/1)
|
0%
(0/5)
|
0%
(0/16)
|
1 package co.rsk.net;
2
3 import co.rsk.net.sync.*;
4 import co.rsk.scoring.EventType;
5 import co.rsk.validators.BlockHeaderValidationRule;
6 import org.ethereum.core.BlockHeader;
7 import org.ethereum.util.ByteUtil;
8
9 import java.util.List;
10
11 public class CheckingBestHeaderSyncState extends BaseSyncState implements SyncState {
12 private final BlockHeaderValidationRule blockHeaderValidationRule;
13 private final Peer selectedPeer;
14 private final ChunkDescriptor miniChunk;
15
16 public CheckingBestHeaderSyncState(
17 SyncConfiguration syncConfiguration,
18 SyncEventsHandler syncEventsHandler,
19 BlockHeaderValidationRule blockHeaderValidationRule,
20 Peer peer,
21 byte[] bestBlockHash) {
22 super(syncEventsHandler, syncConfiguration);
23 this.blockHeaderValidationRule = blockHeaderValidationRule;
24 this.selectedPeer = peer;
25 this.miniChunk = new ChunkDescriptor(bestBlockHash, 1);
26 }
27
28 @Override
29 public void onEnter(){
30 trySendRequest();
31 }
32
33 @Override
34 public void newBlockHeaders(List<BlockHeader> chunk){
35 BlockHeader header = chunk.get(0);
36 if (!ByteUtil.fastEquals(header.getHash().getBytes(), miniChunk.getHash()) ||
37 !blockHeaderValidationRule.isValid(header)) {
38 syncEventsHandler.onErrorSyncing(
39 selectedPeer.getPeerNodeID(),
40 "Invalid chunk received from node {}", EventType.INVALID_HEADER,
41 this.getClass());
42 return;
43 }
44
45 syncEventsHandler.startFindingConnectionPoint(selectedPeer);
46 }
47
48 private void trySendRequest() {
49 syncEventsHandler.sendBlockHeadersRequest(selectedPeer, miniChunk);
50 }
51
52 @Override
53 protected void onMessageTimeOut() {
54 syncEventsHandler.onErrorSyncing(selectedPeer.getPeerNodeID(),
55 "Timeout waiting requests {}",
56 EventType.TIMEOUT_MESSAGE,
57 this.getClass(),
58 selectedPeer.getPeerNodeID());
59 }
60 }