Skip to content
Closed
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
715c921
Add VM trace support for StateSyncTx tracing
milando12 Feb 6, 2026
7b13a88
generate mocks
milando12 Feb 6, 2026
12e21b6
Remove debug trace logs from StateSyncTx processing
milando12 Feb 12, 2026
276a404
Propagate VM config through HeaderChain for tracer access
milando12 Feb 12, 2026
2b43baf
Pass tracingStateDB to Finalize in state processor
milando12 Feb 12, 2026
afa51c2
Add vm.Config parameter to failingGenesisContract's CommitState method
milando12 Feb 23, 2026
ee7c122
Refactor StateSyncTx tracing logic to instantiate only if tracing is …
milando12 Feb 23, 2026
f1e065e
Remove unused comment in StateSyncTx tracing initialization logic
milando12 Feb 23, 2026
9e48c5e
trigger PR update
milando12 Feb 24, 2026
8ddbaad
trigger PR update
milando12 Feb 24, 2026
911e13f
Merge upstream/develop
milando12 Feb 25, 2026
fbbc506
Add `vm.Config` parameter to methods for improved VM tracing support
milando12 Feb 27, 2026
61ffef5
Merge remote-tracking branch 'upstream/develop' into md/feat-tracer
milando12 Feb 27, 2026
8c27ab3
trigger PR update
milando12 Feb 27, 2026
52a90b4
Refactor: Extract VM config retrieval logic into `extractVMConfig` he…
milando12 Feb 27, 2026
d7d8dca
Merge remote-tracking branch 'upstream/develop' into md/feat-tracer
milando12 Mar 2, 2026
c2d6e33
eth/tracers: fix supply tracer tests to expect block rewards
milando12 Mar 2, 2026
ce855ca
merge upstream
milando12 Mar 11, 2026
bd255d4
consensus/bor: use getter for systemAddress instead of exporting vari…
milando12 Mar 12, 2026
8304f4a
refactor state-sync tracing
manav2401 Mar 16, 2026
dfd2f16
Merge branch 'develop' into md/feat-tracer
manav2401 Mar 16, 2026
1ac6590
fix mocks
manav2401 Mar 16, 2026
ce6db80
update flags, docs and minor refactors
manav2401 Mar 16, 2026
e28eec5
skip force loading tracers in cmd package
manav2401 Mar 16, 2026
cd0d9c7
remove vm config from header chain
manav2401 Mar 16, 2026
5f16ec6
update docs
manav2401 Mar 16, 2026
9d1096f
small refactor
manav2401 Mar 16, 2026
83b8a83
cmd/keeper: go mod tidy
manav2401 Mar 18, 2026
6f2062c
eth/tracers: refactor all trace methods for better state-sync handling
manav2401 Mar 18, 2026
cddeedf
eth: handle out of bound index
manav2401 Mar 18, 2026
2a4d484
eth/tracers: remove TraceBorBlock cli sub-command
manav2401 Mar 18, 2026
711f500
core/types: add tx.GetStateSyncData for state-sync txs
manav2401 Mar 19, 2026
ec342cd
correct tracing of state-syncs
manav2401 Mar 19, 2026
31e41da
eth/tracers: add state-sync tracing tests
manav2401 Mar 27, 2026
f579f51
Merge branch 'develop' into md/feat-tracer
manav2401 Mar 28, 2026
d8cb4ab
fix lint and tests
manav2401 Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cmd/cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ import (

"github.com/ethereum/go-ethereum/internal/cli"
"github.com/ethereum/go-ethereum/params"

// Force-load the tracer engines to trigger registration
_ "github.com/ethereum/go-ethereum/eth/tracers/js"
Comment thread
manav2401 marked this conversation as resolved.
Outdated
_ "github.com/ethereum/go-ethereum/eth/tracers/live"
_ "github.com/ethereum/go-ethereum/eth/tracers/native"
)

func main() {
Expand Down
2 changes: 1 addition & 1 deletion cmd/keeper/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ require (
github.com/yusufpapurcu/wmi v1.2.4 // indirect
golang.org/x/crypto v0.46.0 // indirect
golang.org/x/sync v0.19.0 // indirect
golang.org/x/sys v0.39.0 // indirect
golang.org/x/sys v0.40.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)

Expand Down
1 change: 1 addition & 0 deletions cmd/keeper/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
Expand Down
61 changes: 51 additions & 10 deletions consensus/bor/bor.go
Original file line number Diff line number Diff line change
Expand Up @@ -1123,6 +1123,19 @@ func (c *Bor) Prepare(chain consensus.ChainHeaderReader, header *types.Header, w
return nil
}

// extractVMConfig retrieves the vm.Config from the chain reader, if available.
func extractVMConfig(chain consensus.ChainHeaderReader) vm.Config {
if bc, ok := chain.(*core.BlockChain); ok {
return *bc.GetVMConfig()
}
if hc, ok := chain.(*core.HeaderChain); ok {
if cfg := hc.GetVMConfig(); cfg != nil {
return *cfg
}
}
return vm.Config{}
}

// Finalize implements consensus.Engine, ensuring no uncles are set, nor block
// rewards given.
func (c *Bor) Finalize(chain consensus.ChainHeaderReader, header *types.Header, wrappedState vm.StateDB, body *types.Body, receipts []*types.Receipt) []*types.Receipt {
Expand All @@ -1139,20 +1152,37 @@ func (c *Bor) Finalize(chain consensus.ChainHeaderReader, header *types.Header,
err error
)

vmCfg := extractVMConfig(chain)

if IsSprintStart(headerNumber, c.config.CalculateSprint(headerNumber)) {
start := time.Now()
cx := statefull.ChainContext{Chain: chain, Bor: c}

// Start tracing StateSyncTx (if present in the block body)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we might have integration tests locally (we maintain our own Polygon Live Tracing branch for now).

I'll check if I could add that on top of your PR.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That sounds great. Feel free to add them on top of this PR whenever you're ready.

if hooks := vmCfg.Tracer; hooks != nil && hooks.OnTxStart != nil {
Comment thread
manav2401 marked this conversation as resolved.
Outdated
if c.config.IsMadhugiri(header.Number) && len(body.Transactions) > 0 {
lastTx := body.Transactions[len(body.Transactions)-1]
if lastTx.Type() == types.StateSyncTxType {
vmenv := vm.NewEVM(
core.NewEVMBlockContext(header, cx, &header.Coinbase),
wrappedState, c.chainConfig, vmCfg,
)
hooks.OnTxStart(vmenv.GetVMContext(), lastTx, statefull.SystemAddress)
}
}
}

// check and commit span
if !c.config.IsRio(header.Number) {
if err := c.checkAndCommitSpan(wrappedState, header, cx); err != nil {
if err := c.checkAndCommitSpan(wrappedState, header, cx, vmCfg); err != nil {
log.Error("Error while committing span", "error", err)
return nil
}
}

if c.HeimdallClient != nil {
// commit states
stateSyncData, err = c.CommitStates(wrappedState, header, cx)
stateSyncData, err = c.CommitStates(wrappedState, header, cx, vmCfg)
if err != nil {
log.Error("Error while committing states", "error", err)
return nil
Expand Down Expand Up @@ -1183,7 +1213,7 @@ func (c *Bor) Finalize(chain consensus.ChainHeaderReader, header *types.Header,
return receipts
}
if lastTx.Type() == types.StateSyncTxType {
receipts = insertStateSyncTransactionAndCalculateReceipt(lastTx, header, body, wrappedState, receipts)
receipts = insertStateSyncTransactionAndCalculateReceipt(lastTx, header, body, wrappedState, receipts, vmCfg)
}
}
} else {
Expand All @@ -1194,7 +1224,7 @@ func (c *Bor) Finalize(chain consensus.ChainHeaderReader, header *types.Header,
return receipts
}

func insertStateSyncTransactionAndCalculateReceipt(stateSyncTx *types.Transaction, header *types.Header, body *types.Body, state vm.StateDB, receipts []*types.Receipt) []*types.Receipt {
func insertStateSyncTransactionAndCalculateReceipt(stateSyncTx *types.Transaction, header *types.Header, body *types.Body, state vm.StateDB, receipts []*types.Receipt, vmConfig vm.Config) []*types.Receipt {
allLogs := state.Logs()
sort.SliceStable(allLogs, func(i, j int) bool {
return allLogs[i].Index < allLogs[j].Index
Expand Down Expand Up @@ -1227,6 +1257,12 @@ func insertStateSyncTransactionAndCalculateReceipt(stateSyncTx *types.Transactio
}

stateSyncReceipt.Bloom = types.CreateBloom(stateSyncReceipt)

// End tracing for StateSyncTx
if hooks := vmConfig.Tracer; hooks != nil && hooks.OnTxEnd != nil {
hooks.OnTxEnd(stateSyncReceipt, nil)
}

receipts = append(receipts, stateSyncReceipt)

return receipts
Expand Down Expand Up @@ -1285,20 +1321,22 @@ func (c *Bor) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *typ
err error
)

vmCfg := extractVMConfig(chain)

if IsSprintStart(headerNumber, c.config.CalculateSprint(headerNumber)) {
cx := statefull.ChainContext{Chain: chain, Bor: c}

// check and commit span
if !c.config.IsRio(header.Number) {
if err = c.checkAndCommitSpan(state, header, cx); err != nil {
if err = c.checkAndCommitSpan(state, header, cx, vmCfg); err != nil {
log.Error("Error while committing span", "error", err)
return nil, nil, 0, err
}
}

if c.HeimdallClient != nil {
// commit states
stateSyncData, err = c.CommitStates(state, header, cx)
stateSyncData, err = c.CommitStates(state, header, cx, vmCfg)
if err != nil {
log.Error("Error while committing states", "error", err)
return nil, nil, 0, err
Expand All @@ -1324,7 +1362,7 @@ func (c *Bor) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *typ
StateSyncData: stateSyncData,
})
body.Transactions = append(body.Transactions, stateSyncTx)
receipts = insertStateSyncTransactionAndCalculateReceipt(stateSyncTx, header, body, state, receipts)
receipts = insertStateSyncTransactionAndCalculateReceipt(stateSyncTx, header, body, state, receipts, vmCfg)
Comment thread
manav2401 marked this conversation as resolved.
Outdated
} else {
// set state sync
bc := chain.(core.BorStateSyncer)
Expand Down Expand Up @@ -1526,6 +1564,7 @@ func (c *Bor) checkAndCommitSpan(
state vm.StateDB,
header *types.Header,
chain core.ChainContext,
vmCfg vm.Config,
) error {
var ctx = context.Background()
headerNumber := header.Number.Uint64()
Expand All @@ -1542,7 +1581,7 @@ func (c *Bor) checkAndCommitSpan(
tempState.IntermediateRoot(false)

if c.needToCommitSpan(span, headerNumber) {
return c.FetchAndCommitSpan(ctx, span.Id+1, state, header, chain)
return c.FetchAndCommitSpan(ctx, span.Id+1, state, header, chain, vmCfg)
}

return nil
Expand Down Expand Up @@ -1581,6 +1620,7 @@ func (c *Bor) FetchAndCommitSpan(
state vm.StateDB,
header *types.Header,
chain core.ChainContext,
vmCfg vm.Config,
) error {
var (
minSpan borTypes.Span
Expand Down Expand Up @@ -1644,14 +1684,15 @@ func (c *Bor) FetchAndCommitSpan(
)
}

return c.spanner.CommitSpan(ctx, minSpan, validators, producers, state, header, chain)
return c.spanner.CommitSpan(ctx, minSpan, validators, producers, state, header, chain, vmCfg)
}

// CommitStates commit states
func (c *Bor) CommitStates(
state vm.StateDB,
header *types.Header,
chain statefull.ChainContext,
vmCfg vm.Config,
) ([]*types.StateSyncData, error) {
fetchStart := time.Now()
number := header.Number.Uint64()
Expand Down Expand Up @@ -1765,7 +1806,7 @@ func (c *Bor) CommitStates(
// we expect that this call MUST emit an event, otherwise we wouldn't make a receipt
// if the receiver address is not a contract then we'll skip the most of the execution and emitting an event as well
// https://github.com/0xPolygon/genesis-contracts/blob/master/contracts/StateReceiver.sol#L27
gasUsed, err = c.GenesisContractsClient.CommitState(eventRecord, state, header, chain)
gasUsed, err = c.GenesisContractsClient.CommitState(eventRecord, state, header, chain, vmCfg)
if err != nil {
return nil, err
}
Expand Down
34 changes: 17 additions & 17 deletions consensus/bor/bor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func (s *fakeSpanner) GetCurrentValidatorsByHash(ctx context.Context, headerHash
func (s *fakeSpanner) GetCurrentValidatorsByBlockNrOrHash(ctx context.Context, _ rpc.BlockNumberOrHash, _ uint64) ([]*valset.Validator, error) {
return s.vals, nil
}
func (s *fakeSpanner) CommitSpan(ctx context.Context, _ borTypes.Span, _ []stakeTypes.MinimalVal, _ []stakeTypes.MinimalVal, _ vm.StateDB, _ *types.Header, _ core.ChainContext) error {
func (s *fakeSpanner) CommitSpan(ctx context.Context, _ borTypes.Span, _ []stakeTypes.MinimalVal, _ []stakeTypes.MinimalVal, _ vm.StateDB, _ *types.Header, _ core.ChainContext, _ vm.Config) error {
if s.shouldFailCommit {
return errors.New("span commit failed")
}
Expand All @@ -77,7 +77,7 @@ type failingHeimdallClient struct{}
// failingGenesisContract simulates GenesisContract failures
type failingGenesisContract struct{}

func (f *failingGenesisContract) CommitState(event *clerk.EventRecordWithTime, state vm.StateDB, header *types.Header, chCtx statefull.ChainContext) (uint64, error) {
func (f *failingGenesisContract) CommitState(event *clerk.EventRecordWithTime, state vm.StateDB, header *types.Header, chCtx statefull.ChainContext, vmCfg vm.Config) (uint64, error) {
return 0, errors.New("commit state failed")
}

Expand Down Expand Up @@ -2049,7 +2049,7 @@ func TestInsertStateSyncTransactionAndCalculateReceipt(t *testing.T) {
},
}

receipts := insertStateSyncTransactionAndCalculateReceipt(stateSyncTx, header, body, mockState, existingReceipts)
receipts := insertStateSyncTransactionAndCalculateReceipt(stateSyncTx, header, body, mockState, existingReceipts, vm.Config{})
require.Len(t, receipts, 2)

ssReceipt := receipts[1]
Expand Down Expand Up @@ -2620,7 +2620,7 @@ func TestFetchAndCommitSpan_WithHeimdallClient(t *testing.T) {

h := &types.Header{Number: big.NewInt(64), ParentHash: genesis.Hash()}

err := b.FetchAndCommitSpan(context.Background(), 1, statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
err := b.FetchAndCommitSpan(context.Background(), 1, statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err)
}

Expand Down Expand Up @@ -2654,7 +2654,7 @@ func TestFetchAndCommitSpan_ChainIDMismatch(t *testing.T) {

h := &types.Header{Number: big.NewInt(64), ParentHash: genesis.Hash()}

err := b.FetchAndCommitSpan(context.Background(), 1, statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
err := b.FetchAndCommitSpan(context.Background(), 1, statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.Error(t, err)
require.Contains(t, err.Error(), "doesn't match")
}
Expand All @@ -2673,7 +2673,7 @@ func TestFetchAndCommitSpan_NilResponse(t *testing.T) {

h := &types.Header{Number: big.NewInt(64), ParentHash: genesis.Hash()}

err := b.FetchAndCommitSpan(context.Background(), 1, statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
err := b.FetchAndCommitSpan(context.Background(), 1, statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.Error(t, err)
}

Expand Down Expand Up @@ -2718,7 +2718,7 @@ func TestCommitStates_WithOverrideSkip(t *testing.T) {
h := &types.Header{Number: big.NewInt(16), ParentHash: genesis.Hash(), Time: genesis.Time + 32}

// CommitStates with override that sets records to 0 should skip
result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err)
require.Empty(t, result)
}
Expand Down Expand Up @@ -2750,7 +2750,7 @@ func TestCommitStates_WithIndore(t *testing.T) {

h := &types.Header{Number: big.NewInt(16), ParentHash: genesis.Hash(), Time: genesis.Time + 32}

result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err)
require.Empty(t, result) // no events
}
Expand Down Expand Up @@ -2793,7 +2793,7 @@ func TestCommitStates_WithEvents(t *testing.T) {

h := &types.Header{Number: big.NewInt(16), ParentHash: genesis.Hash(), Time: uint64(now.Unix())}

result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err)
require.Len(t, result, 1)
require.Equal(t, uint64(1), result[0].ID)
Expand Down Expand Up @@ -3169,7 +3169,7 @@ type mockGenesisContractForCommitStatesIndore struct {
gasUsed uint64
}

func (m *mockGenesisContractForCommitStatesIndore) CommitState(event *clerk.EventRecordWithTime, state vm.StateDB, header *types.Header, chCtx statefull.ChainContext) (uint64, error) {
func (m *mockGenesisContractForCommitStatesIndore) CommitState(event *clerk.EventRecordWithTime, state vm.StateDB, header *types.Header, chCtx statefull.ChainContext, vmCfg vm.Config) (uint64, error) {
return m.gasUsed, nil
}

Expand Down Expand Up @@ -3229,7 +3229,7 @@ func TestCommitStates_WithIndore_EventProcessing(t *testing.T) {
Time: uint64(now.Unix()),
}

result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err)
require.Len(t, result, 2) // both events should be processed
}
Expand Down Expand Up @@ -3283,7 +3283,7 @@ func TestCommitStates_NonIndore(t *testing.T) {
Time: uint64(time.Now().Unix()),
}

result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
result, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err)
require.Len(t, result, 1)
}
Expand Down Expand Up @@ -3808,7 +3808,7 @@ func TestCommitStates_WithOverrideStateSyncRecords(t *testing.T) {
GasLimit: genesis.GasLimit,
}

data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err)
// With OverrideStateSyncRecords truncating to 0, should get empty data
require.Empty(t, data)
Expand Down Expand Up @@ -4068,7 +4068,7 @@ func TestCommitStates_WithOverrideStateSyncRecordsInRange(t *testing.T) {
GasLimit: genesis.GasLimit,
}

data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err)
require.Empty(t, data) // truncated to 0 by range override
}
Expand Down Expand Up @@ -4107,7 +4107,7 @@ func TestCommitStates_StateSyncEventsError(t *testing.T) {
GasLimit: genesis.GasLimit,
}

data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err) // error is logged but returns empty data
require.Empty(t, data)
}
Expand Down Expand Up @@ -4157,7 +4157,7 @@ func TestCommitStates_EventIdLessThanLastStateId(t *testing.T) {
GasLimit: genesis.GasLimit,
}

data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err)
// Event ID=3 should be skipped (3 <= 5), event ID=6 should be processed
require.Len(t, data, 1)
Expand Down Expand Up @@ -4206,7 +4206,7 @@ func TestCommitStates_EventValidationError(t *testing.T) {
GasLimit: genesis.GasLimit,
}

data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b})
data, err := b.CommitStates(statedb, h, statefull.ChainContext{Chain: chain.HeaderChain(), Bor: b}, vm.Config{})
require.NoError(t, err) // validation error is logged but returned data should be empty
require.Empty(t, data)
}
Expand Down
3 changes: 2 additions & 1 deletion consensus/bor/contract/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ func (gc *GenesisContractsClient) CommitState(
state vm.StateDB,
header *types.Header,
chCtx statefull.ChainContext,
vmCfg vm.Config,
) (uint64, error) {
eventRecord := event.BuildEventRecord()

Expand All @@ -96,7 +97,7 @@ func (gc *GenesisContractsClient) CommitState(

log.Info("→ committing new state", "eventRecord", event.ID)

gasUsed, err := statefull.ApplyMessage(context.Background(), msg, state, header, gc.chainConfig, chCtx)
gasUsed, err := statefull.ApplyMessage(context.Background(), msg, state, header, gc.chainConfig, chCtx, vmCfg)

// Logging event log with time and individual gasUsed
log.Info("→ committed new state", "eventRecord", event.String(gasUsed))
Expand Down
2 changes: 1 addition & 1 deletion consensus/bor/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ import (

//go:generate mockgen -destination=./genesis_contract_mock.go -package=bor . GenesisContract
type GenesisContract interface {
CommitState(event *clerk.EventRecordWithTime, state vm.StateDB, header *types.Header, chCtx statefull.ChainContext) (uint64, error)
CommitState(event *clerk.EventRecordWithTime, state vm.StateDB, header *types.Header, chCtx statefull.ChainContext, vmCfg vm.Config) (uint64, error)
LastStateId(state *state.StateDB, number uint64, hash common.Hash) (*big.Int, error)
}
Loading
Loading