Skip to content

Commit 03c2691

Browse files
committed
Construct replayer tracer with proper chain config based on EVM height
1 parent 6ae6588 commit 03c2691

4 files changed

Lines changed: 36 additions & 33 deletions

File tree

bootstrap/bootstrap.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,17 +162,13 @@ func (b *Bootstrap) StartEventIngestion(ctx context.Context) error {
162162
nextCadenceHeight,
163163
)
164164

165-
callTracerCollector, err := replayer.NewCallTracerCollector(
166-
b.config.EVMNetworkID,
165+
callTracerCollector := replayer.NewCallTracerCollector(
166+
b.config,
167167
b.logger,
168168
)
169-
if err != nil {
170-
return err
171-
}
172169
blocksProvider := replayer.NewBlocksProvider(
173170
b.storages.Blocks,
174171
chainID,
175-
callTracerCollector.TxTracer(),
176172
)
177173
replayerConfig := replayer.Config{
178174
ChainID: chainID,

services/ingestion/engine.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,19 @@ func (e *Engine) indexEvents(events *models.CadenceEvents, batch *pebbleDB.Batch
236236
return err
237237
}
238238

239+
traceCollector := e.replayerConfig.CallTracerCollector
240+
txTracer, err := traceCollector.TxTracer(events.Block().Height)
241+
if err != nil {
242+
return err
243+
}
244+
239245
replayer := sync.NewReplayer(
240246
e.replayerConfig.ChainID,
241247
e.replayerConfig.RootAddr,
242248
e.registerStore,
243249
e.blocksProvider,
244250
e.log,
245-
e.replayerConfig.CallTracerCollector.TxTracer(),
251+
txTracer,
246252
e.replayerConfig.ValidateResults,
247253
)
248254

@@ -293,7 +299,6 @@ func (e *Engine) indexEvents(events *models.CadenceEvents, batch *pebbleDB.Batch
293299
return fmt.Errorf("failed to index receipts for block %d event: %w", events.Block().Height, err)
294300
}
295301

296-
traceCollector := e.replayerConfig.CallTracerCollector
297302
for _, tx := range events.Transactions() {
298303
txHash := tx.Hash()
299304
traceResult, err := traceCollector.Collect(txHash)

services/replayer/blocks_provider.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
evmTypes "github.com/onflow/flow-go/fvm/evm/types"
1111
flowGo "github.com/onflow/flow-go/model/flow"
1212
gethCommon "github.com/onflow/go-ethereum/common"
13-
"github.com/onflow/go-ethereum/eth/tracers"
1413
)
1514

1615
type blockSnapshot struct {
@@ -38,7 +37,7 @@ func (bs *blockSnapshot) BlockContext() (evmTypes.BlockContext, error) {
3837
return blockHash
3938
},
4039
bs.block.PrevRandao,
41-
bs.tracer,
40+
nil, // Set by the sync.ReplayBlockExecution method
4241
)
4342
if err != nil {
4443
return evmTypes.BlockContext{}, err
@@ -59,7 +58,6 @@ func (bs *blockSnapshot) BlockContext() (evmTypes.BlockContext, error) {
5958
type BlocksProvider struct {
6059
blocks storage.BlockIndexer
6160
chainID flowGo.ChainID
62-
tracer *tracers.Tracer
6361
latestBlock *models.Block
6462
}
6563

@@ -68,12 +66,10 @@ var _ evmTypes.BlockSnapshotProvider = (*BlocksProvider)(nil)
6866
func NewBlocksProvider(
6967
blocks storage.BlockIndexer,
7068
chainID flowGo.ChainID,
71-
tracer *tracers.Tracer,
7269
) *BlocksProvider {
7370
return &BlocksProvider{
7471
blocks: blocks,
7572
chainID: chainID,
76-
tracer: tracer,
7773
}
7874
}
7975

services/replayer/call_tracer_collector.go

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"math/big"
77

8+
"github.com/onflow/flow-evm-gateway/config"
89
"github.com/onflow/flow-go/fvm/evm/emulator"
910
"github.com/onflow/go-ethereum/common"
1011
"github.com/onflow/go-ethereum/core/tracing"
@@ -18,8 +19,11 @@ const (
1819
TracerName = "callTracer"
1920
)
2021

21-
func DefaultCallTracer(evmChainID *big.Int) (*tracers.Tracer, error) {
22-
evmChainConfig := emulator.MakeChainConfig(evmChainID)
22+
func DefaultCallTracer(evmHeight uint64, cfg config.Config) (*tracers.Tracer, error) {
23+
evmChainConfig := emulator.MakeChainConfig(cfg.EVMNetworkID)
24+
if !config.IsPrague(evmHeight, cfg.FlowNetworkID) {
25+
evmChainConfig.PragueTime = nil
26+
}
2327

2428
tracer, err := tracers.DefaultDirectory.New(
2529
TracerName,
@@ -35,44 +39,46 @@ func DefaultCallTracer(evmChainID *big.Int) (*tracers.Tracer, error) {
3539
}
3640

3741
type EVMTracer interface {
38-
TxTracer() *tracers.Tracer
42+
TxTracer(evmHeight uint64) (*tracers.Tracer, error)
3943
ResetTracer() error
4044
Collect(txID common.Hash) (json.RawMessage, error)
4145
}
4246

4347
type CallTracerCollector struct {
4448
tracer *tracers.Tracer
4549
resultsByTxID map[common.Hash]json.RawMessage
50+
config config.Config
4651
logger zerolog.Logger
47-
evmChainID *big.Int
52+
lastEvmHeight uint64
4853
}
4954

5055
var _ EVMTracer = (*CallTracerCollector)(nil)
5156

52-
func NewCallTracerCollector(evmChainID *big.Int, logger zerolog.Logger) (
53-
*CallTracerCollector,
57+
func NewCallTracerCollector(config config.Config, logger zerolog.Logger) *CallTracerCollector {
58+
return &CallTracerCollector{
59+
resultsByTxID: make(map[common.Hash]json.RawMessage),
60+
config: config,
61+
logger: logger.With().Str("component", "evm-tracer").Logger(),
62+
}
63+
}
64+
65+
func (t *CallTracerCollector) TxTracer(evmHeight uint64) (
66+
*tracers.Tracer,
5467
error,
5568
) {
56-
tracer, err := DefaultCallTracer(evmChainID)
69+
var err error
70+
t.tracer, err = DefaultCallTracer(evmHeight, t.config)
5771
if err != nil {
5872
return nil, err
5973
}
74+
t.lastEvmHeight = evmHeight
6075

61-
return &CallTracerCollector{
62-
tracer: tracer,
63-
resultsByTxID: make(map[common.Hash]json.RawMessage),
64-
logger: logger.With().Str("component", "evm-tracer").Logger(),
65-
evmChainID: evmChainID,
66-
}, nil
67-
}
68-
69-
func (t *CallTracerCollector) TxTracer() *tracers.Tracer {
70-
return NewSafeTxTracer(t)
76+
return NewSafeTxTracer(t), nil
7177
}
7278

7379
func (t *CallTracerCollector) ResetTracer() error {
7480
var err error
75-
t.tracer, err = DefaultCallTracer(t.evmChainID)
81+
t.tracer, err = DefaultCallTracer(t.lastEvmHeight, t.config)
7682
return err
7783
}
7884

@@ -207,8 +213,8 @@ var _ EVMTracer = (*nopTracer)(nil)
207213

208214
type nopTracer struct{}
209215

210-
func (n nopTracer) TxTracer() *tracers.Tracer {
211-
return nil
216+
func (n nopTracer) TxTracer(_ uint64) (*tracers.Tracer, error) {
217+
return nil, nil
212218
}
213219

214220
func (n nopTracer) Collect(_ common.Hash) (json.RawMessage, error) {

0 commit comments

Comments
 (0)