@@ -40,25 +40,27 @@ var _ models.Engine = &Engine{}
4040type Engine struct {
4141 * models.EngineStatus
4242
43- subscriber EventSubscriber
44- blocksProvider * replayer.BlocksProvider
45- store * pebble.Storage
46- registerStore * pebble.RegisterStorage
47- blocks storage.BlockIndexer
48- receipts storage.ReceiptIndexer
49- transactions storage.TransactionIndexer
50- traces storage.TraceIndexer
51- feeParameters storage.FeeParametersIndexer
52- log zerolog.Logger
53- evmLastHeight * models.SequentialHeight
54- blocksPublisher * models.Publisher [* models.Block ]
55- logsPublisher * models.Publisher [[]* gethTypes.Log ]
56- collector metrics.Collector
57- replayerConfig replayer.Config
43+ subscriber EventSubscriber
44+ feeParamsSubscriber FeeParamsSubscriber
45+ blocksProvider * replayer.BlocksProvider
46+ store * pebble.Storage
47+ registerStore * pebble.RegisterStorage
48+ blocks storage.BlockIndexer
49+ receipts storage.ReceiptIndexer
50+ transactions storage.TransactionIndexer
51+ traces storage.TraceIndexer
52+ feeParameters storage.FeeParametersIndexer
53+ log zerolog.Logger
54+ evmLastHeight * models.SequentialHeight
55+ blocksPublisher * models.Publisher [* models.Block ]
56+ logsPublisher * models.Publisher [[]* gethTypes.Log ]
57+ collector metrics.Collector
58+ replayerConfig replayer.Config
5859}
5960
6061func NewEventIngestionEngine (
6162 subscriber EventSubscriber ,
63+ feeParamsSubscriber FeeParamsSubscriber ,
6264 blocksProvider * replayer.BlocksProvider ,
6365 store * pebble.Storage ,
6466 registerStore * pebble.RegisterStorage ,
@@ -78,20 +80,21 @@ func NewEventIngestionEngine(
7880 return & Engine {
7981 EngineStatus : models .NewEngineStatus (),
8082
81- subscriber : subscriber ,
82- blocksProvider : blocksProvider ,
83- store : store ,
84- registerStore : registerStore ,
85- blocks : blocks ,
86- receipts : receipts ,
87- transactions : transactions ,
88- traces : traces ,
89- feeParameters : feeParameters ,
90- log : log ,
91- blocksPublisher : blocksPublisher ,
92- logsPublisher : logsPublisher ,
93- collector : collector ,
94- replayerConfig : replayerConfig ,
83+ subscriber : subscriber ,
84+ feeParamsSubscriber : feeParamsSubscriber ,
85+ blocksProvider : blocksProvider ,
86+ store : store ,
87+ registerStore : registerStore ,
88+ blocks : blocks ,
89+ receipts : receipts ,
90+ transactions : transactions ,
91+ traces : traces ,
92+ feeParameters : feeParameters ,
93+ log : log ,
94+ blocksPublisher : blocksPublisher ,
95+ logsPublisher : logsPublisher ,
96+ collector : collector ,
97+ replayerConfig : replayerConfig ,
9598 }
9699}
97100
@@ -123,6 +126,7 @@ func (e *Engine) Run(ctx context.Context) error {
123126 defer e .MarkStopped ()
124127
125128 events := e .subscriber .Subscribe (ctx )
129+ feeParamsEvents := e .feeParamsSubscriber .Subscribe (ctx )
126130
127131 for {
128132 select {
@@ -145,6 +149,20 @@ func (e *Engine) Run(ctx context.Context) error {
145149 e .log .Error ().Err (err ).Msg ("failed to process EVM events" )
146150 return err
147151 }
152+ case feeParams , ok := <- feeParamsEvents :
153+ if ! ok {
154+ return nil
155+ }
156+ if feeParams .Err != nil {
157+ return fmt .Errorf (
158+ "failure in FeeParametersChanged event subscription with: %w" ,
159+ feeParams .Err ,
160+ )
161+ }
162+ if err := e .processFeeParamsEvents (feeParams ); err != nil {
163+ e .log .Error ().Err (err ).Msg ("failed to process FeeParametersChanged events" )
164+ return err
165+ }
148166 }
149167 }
150168}
@@ -172,6 +190,25 @@ func (e *Engine) withBatch(f func(batch *pebbleDB.Batch) error) error {
172190 return nil
173191}
174192
193+ func (e * Engine ) processFeeParamsEvents (events * models.FeeParamsEvents ) error {
194+ if events == nil || events .FeeParameters == nil {
195+ return nil
196+ }
197+
198+ err := e .withBatch (
199+ func (batch * pebbleDB.Batch ) error {
200+ return e .feeParameters .Store (events .FeeParameters , batch )
201+ },
202+ )
203+ if err != nil {
204+ return fmt .Errorf ("failed to update fee parameters during events ingestion: %w" , err )
205+ }
206+
207+ e .log .Info ().Msg ("updated fee parameters" )
208+
209+ return nil
210+ }
211+
175212// processEvents converts the events to block and transactions and indexes them.
176213//
177214// BlockEvents are received by the access node API and contain Cadence height (always a single Flow block),
@@ -220,16 +257,6 @@ func (e *Engine) processEvents(events *models.CadenceEvents) error {
220257
221258// indexEvents will replay the evm transactions using the block events and index all results.
222259func (e * Engine ) indexEvents (events * models.CadenceEvents , batch * pebbleDB.Batch ) error {
223- if events .FeeParameters () != nil {
224- if err := e .feeParameters .Store (events .FeeParameters (), batch ); err != nil {
225- return fmt .Errorf (
226- "failed to update fee parameters for height: %d, during events ingestion: %w" ,
227- events .CadenceHeight (),
228- err ,
229- )
230- }
231- }
232-
233260 // if heartbeat interval with no data still update the cadence height
234261 if events .Empty () {
235262 if err := e .blocks .SetLatestCadenceHeight (events .CadenceHeight (), batch ); err != nil {
0 commit comments