@@ -27,7 +27,6 @@ import (
2727 "github.com/onflow/flow-evm-gateway/metrics"
2828 "github.com/onflow/flow-evm-gateway/models"
2929 errs "github.com/onflow/flow-evm-gateway/models/errors"
30- "github.com/onflow/flow-evm-gateway/services/replayer"
3130 "github.com/onflow/flow-evm-gateway/storage"
3231 "github.com/onflow/flow-evm-gateway/storage/pebble"
3332
@@ -66,6 +65,7 @@ type Requester interface {
6665 from common.Address ,
6766 height uint64 ,
6867 stateOverrides * ethTypes.StateOverride ,
68+ blockOverrides * ethTypes.BlockOverrides ,
6969 ) ([]byte , error )
7070
7171 // EstimateGas executes the given signed transaction data on the state for the given EVM block height.
@@ -95,15 +95,15 @@ type Requester interface {
9595var _ Requester = & EVM {}
9696
9797type EVM struct {
98- registerStore * pebble.RegisterStorage
99- blocksProvider * replayer. BlocksProvider
100- client * CrossSporkClient
101- config config. Config
102- txPool * TxPool
103- logger zerolog. Logger
104- blocks storage. BlockIndexer
105- mux sync. Mutex
106- keystore * KeyStore
98+ registerStore * pebble.RegisterStorage
99+ client * CrossSporkClient
100+ config config. Config
101+ txPool * TxPool
102+ logger zerolog. Logger
103+ blocks storage. BlockIndexer
104+ mux sync. Mutex
105+ keystore * KeyStore
106+
107107 head * types.Header
108108 evmSigner types.Signer
109109 validationOptions * txpool.ValidationOptions
@@ -112,7 +112,6 @@ type EVM struct {
112112
113113func NewEVM (
114114 registerStore * pebble.RegisterStorage ,
115- blocksProvider * replayer.BlocksProvider ,
116115 client * CrossSporkClient ,
117116 config config.Config ,
118117 logger zerolog.Logger ,
@@ -167,7 +166,6 @@ func NewEVM(
167166
168167 evm := & EVM {
169168 registerStore : registerStore ,
170- blocksProvider : blocksProvider ,
171169 client : client ,
172170 config : config ,
173171 logger : logger ,
@@ -250,7 +248,7 @@ func (e *EVM) GetBalance(
250248 address common.Address ,
251249 height uint64 ,
252250) (* big.Int , error ) {
253- view , err := e .getBlockView (height )
251+ view , err := e .getBlockView (height , nil )
254252 if err != nil {
255253 return nil , err
256254 }
@@ -262,7 +260,7 @@ func (e *EVM) GetNonce(
262260 address common.Address ,
263261 height uint64 ,
264262) (uint64 , error ) {
265- view , err := e .getBlockView (height )
263+ view , err := e .getBlockView (height , nil )
266264 if err != nil {
267265 return 0 , err
268266 }
@@ -275,7 +273,7 @@ func (e *EVM) GetStorageAt(
275273 hash common.Hash ,
276274 height uint64 ,
277275) (common.Hash , error ) {
278- view , err := e .getBlockView (height )
276+ view , err := e .getBlockView (height , nil )
279277 if err != nil {
280278 return common.Hash {}, err
281279 }
@@ -288,8 +286,9 @@ func (e *EVM) Call(
288286 from common.Address ,
289287 height uint64 ,
290288 stateOverrides * ethTypes.StateOverride ,
289+ blockOverrides * ethTypes.BlockOverrides ,
291290) ([]byte , error ) {
292- result , err := e .dryRunTx (tx , from , height , stateOverrides )
291+ result , err := e .dryRunTx (tx , from , height , stateOverrides , blockOverrides )
293292 if err != nil {
294293 return nil , err
295294 }
@@ -327,7 +326,7 @@ func (e *EVM) EstimateGas(
327326 tx .Gas = passingGasLimit
328327 // We first execute the transaction at the highest allowable gas limit,
329328 // since if this fails we can return the error immediately.
330- result , err := e .dryRunTx (tx , from , height , stateOverrides )
329+ result , err := e .dryRunTx (tx , from , height , stateOverrides , nil )
331330 if err != nil {
332331 return 0 , err
333332 }
@@ -352,7 +351,7 @@ func (e *EVM) EstimateGas(
352351 optimisticGasLimit := (result .GasConsumed + result .GasRefund + gethParams .CallStipend ) * 64 / 63
353352 if optimisticGasLimit < passingGasLimit {
354353 tx .Gas = optimisticGasLimit
355- result , err = e .dryRunTx (tx , from , height , stateOverrides )
354+ result , err = e .dryRunTx (tx , from , height , stateOverrides , nil )
356355 if err != nil {
357356 // This should not happen under normal conditions since if we make it this far the
358357 // transaction had run without error at least once before.
@@ -382,7 +381,7 @@ func (e *EVM) EstimateGas(
382381 mid = failingGasLimit * 2
383382 }
384383 tx .Gas = mid
385- result , err = e .dryRunTx (tx , from , height , stateOverrides )
384+ result , err = e .dryRunTx (tx , from , height , stateOverrides , nil )
386385 if err != nil {
387386 return 0 , err
388387 }
@@ -405,7 +404,7 @@ func (e *EVM) GetCode(
405404 address common.Address ,
406405 height uint64 ,
407406) ([]byte , error ) {
408- view , err := e .getBlockView (height )
407+ view , err := e .getBlockView (height , nil )
409408 if err != nil {
410409 return nil , err
411410 }
@@ -437,12 +436,25 @@ func (e *EVM) GetLatestEVMHeight(ctx context.Context) (uint64, error) {
437436 return height , nil
438437}
439438
440- func (e * EVM ) getBlockView (height uint64 ) (* query.View , error ) {
439+ func (e * EVM ) getBlockView (
440+ height uint64 ,
441+ blockOverrides * ethTypes.BlockOverrides ,
442+ ) (* query.View , error ) {
443+ blocksProvider := NewOverridableBlocksProvider (
444+ e .blocks ,
445+ e .config .FlowNetworkID ,
446+ nil ,
447+ )
448+
449+ if blockOverrides != nil {
450+ blocksProvider = blocksProvider .WithBlockOverrides (blockOverrides )
451+ }
452+
441453 viewProvider := query .NewViewProvider (
442454 e .config .FlowNetworkID ,
443455 evm .StorageAccountAddress (e .config .FlowNetworkID ),
444456 e .registerStore ,
445- e . blocksProvider ,
457+ blocksProvider ,
446458 blockGasLimit ,
447459 )
448460
@@ -467,8 +479,9 @@ func (e *EVM) dryRunTx(
467479 from common.Address ,
468480 height uint64 ,
469481 stateOverrides * ethTypes.StateOverride ,
482+ blockOverrides * ethTypes.BlockOverrides ,
470483) (* evmTypes.Result , error ) {
471- view , err := e .getBlockView (height )
484+ view , err := e .getBlockView (height , blockOverrides )
472485 if err != nil {
473486 return nil , err
474487 }
@@ -592,7 +605,7 @@ func (e *EVM) validateTransactionWithState(
592605 if err != nil {
593606 return err
594607 }
595- view , err := e .getBlockView (height )
608+ view , err := e .getBlockView (height , nil )
596609 if err != nil {
597610 return err
598611 }
0 commit comments