@@ -38,16 +38,17 @@ const uniqueEquivalentProofSuffix = "eqp"
3838// TODO move the keys definitions that are whitelisted in core and use them in InterceptedData implementations, Identifiers() function
3939
4040type resolverRequestHandler struct {
41- mutEpoch sync.RWMutex
42- epoch uint32
43- shardID uint32
44- maxTxsToRequest int
45- requestersFinder dataRetriever.RequestersFinder
46- requestedItemsHandler dataRetriever.RequestedItemsHandler
47- whiteList dataRetriever.WhiteListHandler
48- sweepTime time.Time
49- requestInterval time.Duration
50- mutSweepTime sync.Mutex
41+ mutEpoch sync.RWMutex
42+ epoch uint32
43+ shardID uint32
44+ maxTxsToRequest int
45+ requestersFinder dataRetriever.RequestersFinder
46+ requestedItemsHandler dataRetriever.RequestedItemsHandler
47+ whiteList dataRetriever.WhiteListHandler
48+ sweepTime time.Time
49+ requestInterval time.Duration
50+ requestProofByNonceDelay time.Duration
51+ mutSweepTime sync.Mutex
5152
5253 trieHashesAccumulator map [string ]struct {}
5354 lastTrieRequestTime time.Time
@@ -62,6 +63,7 @@ func NewResolverRequestHandler(
6263 maxTxsToRequest int ,
6364 shardID uint32 ,
6465 requestInterval time.Duration ,
66+ requestProofByNonceDelay time.Duration ,
6567) (* resolverRequestHandler , error ) {
6668
6769 if check .IfNil (finder ) {
@@ -81,14 +83,15 @@ func NewResolverRequestHandler(
8183 }
8284
8385 rrh := & resolverRequestHandler {
84- requestersFinder : finder ,
85- requestedItemsHandler : requestedItemsHandler ,
86- epoch : uint32 (0 ), // will be updated after creation of the request handler
87- shardID : shardID ,
88- maxTxsToRequest : maxTxsToRequest ,
89- whiteList : whiteList ,
90- requestInterval : requestInterval ,
91- trieHashesAccumulator : make (map [string ]struct {}),
86+ requestersFinder : finder ,
87+ requestedItemsHandler : requestedItemsHandler ,
88+ epoch : uint32 (0 ), // will be updated after creation of the request handler
89+ shardID : shardID ,
90+ maxTxsToRequest : maxTxsToRequest ,
91+ whiteList : whiteList ,
92+ requestInterval : requestInterval ,
93+ requestProofByNonceDelay : requestProofByNonceDelay ,
94+ trieHashesAccumulator : make (map [string ]struct {}),
9295 }
9396
9497 rrh .sweepTime = time .Now ()
@@ -1002,46 +1005,50 @@ func (rrh *resolverRequestHandler) RequestEquivalentProofByNonce(headerShard uin
10021005
10031006// RequestEquivalentProofByNonceForEpoch asks for equivalent proof for the provided header nonce and epoch
10041007func (rrh * resolverRequestHandler ) RequestEquivalentProofByNonceForEpoch (headerShard uint32 , headerNonce uint64 , epoch uint32 ) {
1005- key := common .GetEquivalentProofNonceShardKey (headerNonce , headerShard )
1006- if ! rrh .testIfRequestIsNeeded ([]byte (key ), uniqueEquivalentProofSuffix ) {
1007- return
1008- }
1008+ go func (requestEpoch uint32 ) {
1009+ key := common .GetEquivalentProofNonceShardKey (headerNonce , headerShard )
1010+ if ! rrh .testIfRequestIsNeeded ([]byte (key ), uniqueEquivalentProofSuffix ) {
1011+ return
1012+ }
10091013
1010- log .Debug ("requesting equivalent proof by nonce from network" ,
1011- "headerNonce" , headerNonce ,
1012- "headerShard" , headerShard ,
1013- "epoch" , epoch ,
1014- )
1014+ time .Sleep (rrh .requestProofByNonceDelay )
10151015
1016- requester , err := rrh .getEquivalentProofsRequester (headerShard )
1017- if err != nil {
1018- log .Error ("RequestEquivalentProofByNonceForEpoch.getEquivalentProofsRequester" ,
1019- "error" , err .Error (),
1016+ log .Debug ("requesting equivalent proof by nonce from network" ,
10201017 "headerNonce" , headerNonce ,
1018+ "headerShard" , headerShard ,
1019+ "epoch" , epoch ,
10211020 )
1022- return
1023- }
10241021
1025- proofsRequester , ok := requester .(EquivalentProofsRequester )
1026- if ! ok {
1027- log .Warn ("wrong assertion type when creating equivalent proofs requester" )
1028- return
1029- }
1022+ requester , err := rrh .getEquivalentProofsRequester (headerShard )
1023+ if err != nil {
1024+ log .Error ("RequestEquivalentProofByNonceForEpoch.getEquivalentProofsRequester" ,
1025+ "error" , err .Error (),
1026+ "headerNonce" , headerNonce ,
1027+ )
1028+ return
1029+ }
10301030
1031- rrh .whiteList .Add ([][]byte {[]byte (key )})
1031+ proofsRequester , ok := requester .(EquivalentProofsRequester )
1032+ if ! ok {
1033+ log .Warn ("wrong assertion type when creating equivalent proofs requester" )
1034+ return
1035+ }
10321036
1033- err = proofsRequester .RequestDataFromNonce ([]byte (key ), epoch )
1034- if err != nil {
1035- log .Debug ("RequestEquivalentProofByNonceForEpoch.RequestDataFromNonce" ,
1036- "error" , err .Error (),
1037- "headerNonce" , headerNonce ,
1038- "headerShard" , headerShard ,
1039- "epoch" , epoch ,
1040- )
1041- return
1042- }
1037+ rrh .whiteList .Add ([][]byte {[]byte (key )})
1038+
1039+ err = proofsRequester .RequestDataFromNonce ([]byte (key ), epoch )
1040+ if err != nil {
1041+ log .Debug ("RequestEquivalentProofByNonceForEpoch.RequestDataFromNonce" ,
1042+ "error" , err .Error (),
1043+ "headerNonce" , headerNonce ,
1044+ "headerShard" , headerShard ,
1045+ "epoch" , epoch ,
1046+ )
1047+ return
1048+ }
10431049
1044- rrh .addRequestedItems ([][]byte {[]byte (key )}, uniqueEquivalentProofSuffix )
1050+ rrh .addRequestedItems ([][]byte {[]byte (key )}, uniqueEquivalentProofSuffix )
1051+ }(epoch )
10451052}
10461053
10471054func (rrh * resolverRequestHandler ) getEquivalentProofsRequester (headerShard uint32 ) (dataRetriever.Requester , error ) {
0 commit comments