@@ -25,6 +25,8 @@ type chainProcessor struct {
25
25
ctx context.Context
26
26
cancel context.CancelFunc
27
27
28
+ chainSync ChainSync
29
+
28
30
// blocks that are ready for processing. ie. their parent is known, or their parent is ahead
29
31
// of them within this channel and thus will be processed first
30
32
readyBlocks * blockQueue
@@ -42,24 +44,35 @@ type chainProcessor struct {
42
44
telemetry telemetry.Client
43
45
}
44
46
45
- func newChainProcessor (readyBlocks * blockQueue , pendingBlocks DisjointBlockSet ,
46
- blockState BlockState , storageState StorageState ,
47
- transactionState TransactionState , babeVerifier BabeVerifier ,
48
- finalityGadget FinalityGadget , blockImportHandler BlockImportHandler , telemetry telemetry.Client ) * chainProcessor {
47
+ type chainProcessorConfig struct {
48
+ readyBlocks * blockQueue
49
+ pendingBlocks DisjointBlockSet
50
+ syncer ChainSync
51
+ blockState BlockState
52
+ storageState StorageState
53
+ transactionState TransactionState
54
+ babeVerifier BabeVerifier
55
+ finalityGadget FinalityGadget
56
+ blockImportHandler BlockImportHandler
57
+ telemetry telemetry.Client
58
+ }
59
+
60
+ func newChainProcessor (cfg chainProcessorConfig ) * chainProcessor {
49
61
ctx , cancel := context .WithCancel (context .Background ())
50
62
51
63
return & chainProcessor {
52
64
ctx : ctx ,
53
65
cancel : cancel ,
54
- readyBlocks : readyBlocks ,
55
- pendingBlocks : pendingBlocks ,
56
- blockState : blockState ,
57
- storageState : storageState ,
58
- transactionState : transactionState ,
59
- babeVerifier : babeVerifier ,
60
- finalityGadget : finalityGadget ,
61
- blockImportHandler : blockImportHandler ,
62
- telemetry : telemetry ,
66
+ readyBlocks : cfg .readyBlocks ,
67
+ pendingBlocks : cfg .pendingBlocks ,
68
+ chainSync : cfg .syncer ,
69
+ blockState : cfg .blockState ,
70
+ storageState : cfg .storageState ,
71
+ transactionState : cfg .transactionState ,
72
+ babeVerifier : cfg .babeVerifier ,
73
+ finalityGadget : cfg .finalityGadget ,
74
+ blockImportHandler : cfg .blockImportHandler ,
75
+ telemetry : cfg .telemetry ,
63
76
}
64
77
}
65
78
@@ -109,6 +122,8 @@ func (s *chainProcessor) processBlockData(bd *types.BlockData) error {
109
122
return fmt .Errorf ("failed to check block state has body for hash %s: %w" , bd .Hash , err )
110
123
}
111
124
125
+ // while in bootstrap mode we don't need to broadcast block announcements
126
+ announceImportedBlock := s .chainSync .syncState () == tip
112
127
if hasHeader && hasBody {
113
128
// TODO: fix this; sometimes when the node shuts down the "best block" isn't stored properly,
114
129
// so when the node restarts it has blocks higher than what it thinks is the best, causing it not to sync
@@ -149,7 +164,7 @@ func (s *chainProcessor) processBlockData(bd *types.BlockData) error {
149
164
return err
150
165
}
151
166
152
- if err := s .blockImportHandler .HandleBlockImport (block , state ); err != nil {
167
+ if err := s .blockImportHandler .HandleBlockImport (block , state , announceImportedBlock ); err != nil {
153
168
logger .Warnf ("failed to handle block import: %s" , err )
154
169
}
155
170
@@ -170,7 +185,7 @@ func (s *chainProcessor) processBlockData(bd *types.BlockData) error {
170
185
Body : * bd .Body ,
171
186
}
172
187
173
- if err := s .handleBlock (block ); err != nil {
188
+ if err := s .handleBlock (block , announceImportedBlock ); err != nil {
174
189
logger .Debugf ("failed to handle block number %d: %s" , block .Header .Number , err )
175
190
return err
176
191
}
@@ -201,7 +216,7 @@ func (s *chainProcessor) handleBody(body *types.Body) {
201
216
}
202
217
203
218
// handleHeader handles blocks (header+body) included in BlockResponses
204
- func (s * chainProcessor ) handleBlock (block * types.Block ) error {
219
+ func (s * chainProcessor ) handleBlock (block * types.Block , announceImportedBlock bool ) error {
205
220
parent , err := s .blockState .GetHeader (block .Header .ParentHash )
206
221
if err != nil {
207
222
return fmt .Errorf ("%w: %s" , errFailedToGetParent , err )
@@ -233,7 +248,7 @@ func (s *chainProcessor) handleBlock(block *types.Block) error {
233
248
return fmt .Errorf ("failed to execute block %d: %w" , block .Header .Number , err )
234
249
}
235
250
236
- if err = s .blockImportHandler .HandleBlockImport (block , ts ); err != nil {
251
+ if err = s .blockImportHandler .HandleBlockImport (block , ts , announceImportedBlock ); err != nil {
237
252
return err
238
253
}
239
254
0 commit comments