@@ -140,7 +140,7 @@ func (l *Link) startReceiverChannel(errCh chan error) error {
140
140
}
141
141
})
142
142
143
- if l .bls .Verifier .Height < rs .Height () {
143
+ if l .bls .Verifier .Height < rs .Height () || l . bls . RxSeq < rs . Seq () {
144
144
if err = l .handleRelayMessage (); err != nil {
145
145
errCh <- err
146
146
}
@@ -168,8 +168,10 @@ func (l *Link) startSenderChannel(errCh chan error) error {
168
168
select {
169
169
case rc := <- rcc :
170
170
err := l .result (rc )
171
- l .l .Debugf ("SenderChannel error : %+v" , err )
172
- errCh <- err
171
+ if err != nil {
172
+ l .l .Debugf ("SenderChannel error : %+v" , err )
173
+ errCh <- err
174
+ }
173
175
}
174
176
}
175
177
}()
@@ -183,7 +185,7 @@ func (l *Link) buildRelayMessage() error {
183
185
}
184
186
185
187
//Get Block
186
- bus , err := l .buildBlockUpdates (l . bls )
188
+ bus , err := l .buildBlockUpdates ()
187
189
if err != nil {
188
190
return err
189
191
}
@@ -287,13 +289,23 @@ func (l *Link) handleRelayMessage() error {
287
289
if err := l .sendRelayMessage (); err != nil {
288
290
return err
289
291
}
290
-
291
292
for {
292
293
if l .relayState != PENDING &&
293
294
len (l .rss ) != 0 &&
294
- l .bls .Verifier .Height < l .rss [len (l .rss )- 1 ].Height () {
295
- if err := l .buildRelayMessage (); err != nil {
296
- return err
295
+ (l .bls .Verifier .Height < l .rss [len (l .rss )- 1 ].Height () ||
296
+ l .bls .RxSeq < l .rss [len (l .rss )- 1 ].Seq ()) {
297
+ if l .bls .Verifier .Height < l .rss [len (l .rss )- 1 ].Height () {
298
+ if err := l .buildRelayMessage (); err != nil {
299
+ return err
300
+ }
301
+ } else if l .bls .RxSeq < l .rss [len (l .rss )- 1 ].Seq () {
302
+ _ , err := l .buildProof (nil )
303
+ if err != nil {
304
+ return err
305
+ }
306
+ if err = l .appendRelayMessage (); err != nil {
307
+ return err
308
+ }
297
309
}
298
310
299
311
if err := l .sendRelayMessage (); err != nil {
@@ -312,10 +324,10 @@ func (l *Link) handleRelayMessage() error {
312
324
return nil
313
325
}
314
326
315
- func (l * Link ) buildBlockUpdates (bs * types. BMCLinkStatus ) ([]BlockUpdate , error ) {
327
+ func (l * Link ) buildBlockUpdates () ([]BlockUpdate , error ) {
316
328
l .l .Debugf ("BuildBlockUpdates (bls height:%d, bls rxSeq:%d)" , l .bls .Verifier .Height , l .bls .RxSeq )
317
329
for {
318
- bus , err := l .r .BuildBlockUpdate (bs , l .limitSize - l .rmi .size )
330
+ bus , err := l .r .BuildBlockUpdate (l . bls , l .limitSize - l .rmi .size )
319
331
if err != nil {
320
332
return nil , err
321
333
}
@@ -331,7 +343,7 @@ func (l *Link) handleUndeliveredRelayMessage() error {
331
343
return nil
332
344
}
333
345
for l .bls .RxSeq < rs .Seq () {
334
- l .l .Debugf ("HandleUndeliveredRelayMessage ReceiveStatus(height : %d, seq : %s ), BMCLinkStatus(height : %d, seq : %s )" ,
346
+ l .l .Debugf ("HandleUndeliveredRelayMessage ReceiveStatus(height : %d, seq : %d ), BMCLinkStatus(height : %d, seq : %d )" ,
335
347
rs .Height (), rs .Seq (), l .bls .Verifier .Height , l .bls .RxSeq )
336
348
_ , err := l .buildProof (nil )
337
349
if err != nil {
@@ -350,12 +362,19 @@ func (l *Link) handleUndeliveredRelayMessage() error {
350
362
func (l * Link ) buildProof (bu BlockUpdate ) (int64 , error ) {
351
363
l .l .Debugf ("BuildProof (bls height:%d, bls rxSeq:%d)" , l .bls .Verifier .Height , l .bls .RxSeq )
352
364
var mpLen int64
353
- rs := l .getReceiveStatusForHeight (l .bls .Verifier .Height )
354
- if rs == nil {
355
- return 0 , nil
365
+ var seq int64
366
+ if bu != nil {
367
+ rs := l .getReceiveStatusForHeight (l .bls .Verifier .Height )
368
+ if rs == nil {
369
+ return 0 , nil
370
+ }
371
+ seq = rs .Seq ()
372
+ } else {
373
+ seq = l .rss [len (l .rss )- 1 ].Seq ()
356
374
}
375
+
357
376
for {
358
- if rs . Seq () <= l .bls .RxSeq {
377
+ if seq <= l .bls .RxSeq {
359
378
break
360
379
}
361
380
0 commit comments