@@ -15,7 +15,6 @@ import (
1515 "github.com/NethermindEth/juno/feed"
1616 junoplugin "github.com/NethermindEth/juno/plugin"
1717 "github.com/NethermindEth/juno/service"
18- "github.com/NethermindEth/juno/starknetdata"
1918 "github.com/NethermindEth/juno/utils"
2019 "github.com/sourcegraph/conc/stream"
2120)
@@ -117,7 +116,7 @@ type Synchronizer struct {
117116 blockchain * blockchain.Blockchain
118117 db db.KeyValueStore
119118 readOnlyBlockchain bool
120- starknetData starknetdata. StarknetData
119+ dataSource DataSource
121120 startingBlockNumber * uint64
122121 highestBlockHeader atomic.Pointer [core.Header ]
123122 newHeads * feed.Feed [* core.Block ]
@@ -135,13 +134,18 @@ type Synchronizer struct {
135134 currReorg * ReorgBlockRange // If nil, no reorg is happening
136135}
137136
138- func New (bc * blockchain.Blockchain , starkNetData starknetdata.StarknetData , log utils.SimpleLogger ,
139- pendingPollInterval time.Duration , readOnlyBlockchain bool , database db.KeyValueStore ,
137+ func New (
138+ bc * blockchain.Blockchain ,
139+ dataSource DataSource ,
140+ log utils.SimpleLogger ,
141+ pendingPollInterval time.Duration ,
142+ readOnlyBlockchain bool ,
143+ database db.KeyValueStore ,
140144) * Synchronizer {
141145 s := & Synchronizer {
142146 blockchain : bc ,
147+ dataSource : dataSource ,
143148 db : database ,
144- starknetData : starkNetData ,
145149 log : log ,
146150 newHeads : feed .New [* core.Block ](),
147151 reorgFeed : feed .New [* ReorgBlockRange ](),
@@ -179,77 +183,20 @@ func (s *Synchronizer) fetcherTask(ctx context.Context, height uint64, verifiers
179183 case <- ctx .Done ():
180184 return func () {}
181185 default :
182- stateUpdate , block , err := s .starknetData .StateUpdateWithBlock (ctx , height )
183- if err != nil {
184- continue
185- }
186-
187- newClasses , err := s .fetchUnknownClasses (ctx , stateUpdate )
186+ committedBlock , err := s .dataSource .BlockByNumber (ctx , height )
188187 if err != nil {
189188 continue
190189 }
191190
192191 return func () {
193192 verifiers .Go (func () stream.Callback {
194- return s .verifierTask (ctx , block , stateUpdate , newClasses , resetStreams )
193+ return s .verifierTask (ctx , committedBlock . Block , committedBlock . StateUpdate , committedBlock . NewClasses , resetStreams )
195194 })
196195 }
197196 }
198197 }
199198}
200199
201- func (s * Synchronizer ) fetchUnknownClasses (ctx context.Context , stateUpdate * core.StateUpdate ) (map [felt.Felt ]core.Class , error ) {
202- state , closer , err := s .blockchain .HeadState ()
203- if err != nil {
204- // if err is db.ErrKeyNotFound we are on an empty DB
205- if ! errors .Is (err , db .ErrKeyNotFound ) {
206- return nil , err
207- }
208- closer = func () error {
209- return nil
210- }
211- }
212-
213- newClasses := make (map [felt.Felt ]core.Class )
214- fetchIfNotFound := func (classHash * felt.Felt ) error {
215- if _ , ok := newClasses [* classHash ]; ok {
216- return nil
217- }
218-
219- stateErr := db .ErrKeyNotFound
220- if state != nil {
221- _ , stateErr = state .Class (classHash )
222- }
223-
224- if errors .Is (stateErr , db .ErrKeyNotFound ) {
225- class , fetchErr := s .starknetData .Class (ctx , classHash )
226- if fetchErr == nil {
227- newClasses [* classHash ] = class
228- }
229- return fetchErr
230- }
231- return stateErr
232- }
233-
234- for _ , classHash := range stateUpdate .StateDiff .DeployedContracts {
235- if err = fetchIfNotFound (classHash ); err != nil {
236- return nil , utils .RunAndWrapOnError (closer , err )
237- }
238- }
239- for _ , classHash := range stateUpdate .StateDiff .DeclaredV0Classes {
240- if err = fetchIfNotFound (classHash ); err != nil {
241- return nil , utils .RunAndWrapOnError (closer , err )
242- }
243- }
244- for classHash := range stateUpdate .StateDiff .DeclaredV1Classes {
245- if err = fetchIfNotFound (& classHash ); err != nil {
246- return nil , utils .RunAndWrapOnError (closer , err )
247- }
248- }
249-
250- return newClasses , closer ()
251- }
252-
253200func (s * Synchronizer ) handlePluginRevertBlock () {
254201 fromBlock , err := s .blockchain .Head ()
255202 if err != nil {
@@ -519,7 +466,7 @@ func (s *Synchronizer) pollLatest(ctx context.Context, sem chan struct{}) {
519466 defer func () {
520467 <- sem
521468 }()
522- highestBlock , err := s .starknetData .BlockLatest (ctx )
469+ highestBlock , err := s .dataSource .BlockLatest (ctx )
523470 if err != nil {
524471 s .log .Warnw ("Failed fetching latest block" , "err" , err )
525472 } else {
@@ -560,22 +507,14 @@ func (s *Synchronizer) fetchAndStorePending(ctx context.Context) error {
560507 return nil
561508 }
562509
563- pendingStateUpdate , pendingBlock , err := s .starknetData . StateUpdatePendingWithBlock (ctx )
510+ pending , err := s .dataSource . BlockPending (ctx )
564511 if err != nil {
565512 return err
566513 }
514+ pending .Block .Number = head .Number + 1
567515
568- pendingBlock .Number = head .Number + 1
569- newClasses , err := s .fetchUnknownClasses (ctx , pendingStateUpdate )
570- if err != nil {
571- return err
572- }
573- s .log .Debugw ("Found pending block" , "txns" , pendingBlock .TransactionCount )
574- return s .StorePending (& Pending {
575- Block : pendingBlock ,
576- StateUpdate : pendingStateUpdate ,
577- NewClasses : newClasses ,
578- })
516+ s .log .Debugw ("Found pending block" , "txns" , pending .Block .TransactionCount )
517+ return s .StorePending (& pending )
579518}
580519
581520func (s * Synchronizer ) StartingBlockNumber () (uint64 , error ) {
0 commit comments