Skip to content

Commit 3762a26

Browse files
committed
Add the GetStateAndCommittedState method on StateDB type
1 parent 540ec01 commit 3762a26

2 files changed

Lines changed: 23 additions & 0 deletions

File tree

fvm/evm/emulator/state/stateDB.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,17 @@ func (db *StateDB) GetCommittedState(addr gethCommon.Address, key gethCommon.Has
256256
return value
257257
}
258258

259+
// GetStateAndCommittedState returns the current value and the original value.
260+
func (db *StateDB) GetStateAndCommittedState(
261+
addr gethCommon.Address,
262+
key gethCommon.Hash,
263+
) (gethCommon.Hash, gethCommon.Hash) {
264+
origin := db.GetCommittedState(addr, key)
265+
value := db.GetState(addr, key)
266+
267+
return value, origin
268+
}
269+
259270
// GetState returns the value for the given storage slot
260271
func (db *StateDB) GetState(addr gethCommon.Address, key gethCommon.Hash) gethCommon.Hash {
261272
state, err := db.latestView().GetState(types.SlotAddress{Address: addr, Key: key})

fvm/evm/emulator/state/stateDB_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,21 @@ func TestStateDB(t *testing.T) {
8888
ret = db.GetCommittedState(addr1, key1)
8989
require.Equal(t, gethCommon.Hash{}, ret)
9090

91+
currentState, originalState := db.GetStateAndCommittedState(addr1, key1)
92+
require.Equal(t, value1, currentState)
93+
require.Equal(t, gethCommon.Hash{}, originalState)
94+
9195
commit, err := db.Commit(true)
9296
require.NoError(t, err)
9397
require.NotEmpty(t, commit)
9498

9599
ret = db.GetCommittedState(addr1, key1)
96100
require.Equal(t, value1, ret)
97101

102+
currentState, originalState = db.GetStateAndCommittedState(addr1, key1)
103+
require.Equal(t, value1, currentState)
104+
require.Equal(t, value1, originalState)
105+
98106
// create a new db
99107
db, err = state.NewStateDB(ledger, rootAddr)
100108
require.NoError(t, err)
@@ -106,6 +114,10 @@ func TestStateDB(t *testing.T) {
106114
val := db.GetState(addr1, key1)
107115
require.NoError(t, db.Error())
108116
require.Equal(t, value1, val)
117+
118+
currentState, originalState = db.GetStateAndCommittedState(addr1, key1)
119+
require.Equal(t, value1, currentState)
120+
require.Equal(t, value1, originalState)
109121
})
110122

111123
t.Run("test snapshot and revert functionality", func(t *testing.T) {

0 commit comments

Comments
 (0)