Skip to content

Commit f103d67

Browse files
authored
fix(evm): ensure stateDB doesn't persist after upgrade handler (#2328)
* fix(evm): ensure stateDB doesn't persist after upgrade handler * Update CHANGELOG.md * fix unit tests * Revert "fix unit tests" This reverts commit cc14439. * fix: ensure that the stateDB is nil when entering the upgrade
1 parent cff55c5 commit f103d67

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ See https://github.com/dangoslen/changelog-enforcer.
5252
- [#2316](https://github.com/NibiruChain/nibiru/pull/2316) - feat(ux): add GET behavior to the Ethereum JSON-RPC endpoints for Nibiru so they return info instead of a blank page or error.
5353
- [#2324](https://github.com/NibiruChain/nibiru/pull/2324) - fix(evm): adjust the v2.5.0 upgrade handler to maintain the original stNIBI ERC20 contract's state.
5454
- [#2327](https://github.com/NibiruChain/nibiru/pull/2327) - fix(eth): implement unmarshal json for TransactionReceipt
55+
- [#2328](https://github.com/NibiruChain/nibiru/pull/2328) - fix(evm): ensure StateDB doesn't persist between EVM calls
5556

5657
## [v2.4.0](https://github.com/NibiruChain/nibiru/releases/tag/v2.4.0) - 2025-05-29
5758

app/upgrades/v2_5_0/v2_5_0.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,14 @@ func UpgradeStNibiContractOnMainnet(
149149
SkipNonceChecks: false,
150150
SkipFromEOACheck: false,
151151
}
152-
sdb := keepers.EvmKeeper.NewStateDB(ctx, keepers.EvmKeeper.TxConfig(ctx, gethcommon.Hash{}))
153-
evmObj := keepers.EvmKeeper.NewEVM(ctx, evmMsg, keepers.EvmKeeper.GetEVMConfig(ctx), nil, sdb)
152+
stateDB := keepers.EvmKeeper.Bank.StateDB
153+
if stateDB == nil {
154+
stateDB = keepers.EvmKeeper.NewStateDB(ctx, keepers.EvmKeeper.TxConfig(ctx, gethcommon.Hash{}))
155+
}
156+
defer func() {
157+
keepers.EvmKeeper.Bank.StateDB = nil
158+
}()
159+
evmObj := keepers.EvmKeeper.NewEVM(ctx, evmMsg, keepers.EvmKeeper.GetEVMConfig(ctx), nil, stateDB)
154160

155161
evmResp, err := keepers.EvmKeeper.CallContractWithInput(
156162
ctx, evmObj, evmMsg.From, nil, true /*commit*/, contractInput,

app/upgrades/v2_5_0/v2_5_0_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ func (s *Suite) TestUpgrade() {
118118

119119
s.Run(fmt.Sprintf("Perform upgrade on stNIBI ERC20 address: %s", funtoken.Erc20Addr.Address), func() {
120120
s.T().Log("IMPORTANT: Schedule the upgrade")
121+
deps.EvmKeeper.Bank.StateDB = nil // IMPORTANT: make sure to clear the StateDB before running the upgrade
121122
s.Require().True(deps.App.UpgradeKeeper.HasHandler(v2_5_0.Upgrade.UpgradeName))
122123

123124
beforeEvents := deps.Ctx.EventManager().Events()

0 commit comments

Comments
 (0)