@@ -46,7 +46,7 @@ func TestGetSetExtra(t *testing.T) {
4646 extra := rng .Bytes (8 )
4747
4848 views := newWithSnaps (t )
49- stateDB := views .stateDB
49+ stateDB := views .newStateDB ( t , types . EmptyRootHash )
5050 assert .Nilf (t , state .GetExtra (stateDB , payloads , addr ), "state.GetExtra() returns zero-value %T if before account creation" , extra )
5151 stateDB .CreateAccount (addr )
5252 stateDB .SetNonce (addr , nonce )
@@ -87,24 +87,42 @@ func TestGetSetExtra(t *testing.T) {
8787 require .Falsef (t , iter .Next (), "%T.Next() after first account (i.e. only one)" , iter )
8888 })
8989
90- t .Run (fmt .Sprintf ("retrieve from new %T" , views .stateDB ), func (t * testing.T ) {
91- stateDB , err := state .New (root , views .database , views .snaps )
92- require .NoError (t , err , "state.New()" )
90+ t .Run (fmt .Sprintf ("retrieve from new %T" , stateDB ), func (t * testing.T ) {
91+ s := views .newStateDB (t , root )
92+ assert .Equalf (t , nonce , s .GetNonce (addr ), "%T.GetNonce()" , s )
93+ assert .Equalf (t , balance , s .GetBalance (addr ), "%T.GetBalance()" , s )
94+ assert .Equal (t , extra , state .GetExtra (s , payloads , addr ), "state.GetExtra()" )
95+ })
96+
97+ t .Run ("reverting to snapshot" , func (t * testing.T ) {
98+ s := views .newStateDB (t , root )
99+ snap := s .Snapshot ()
100+
101+ oldExtra := extra
102+ newExtra := rng .Bytes (16 )
103+ assert .NotEqual (t , oldExtra , newExtra , "new extra payload is different to old one" )
93104
94- // triggers SlimAccount RLP decoding
95- assert .Equalf (t , nonce , stateDB .GetNonce (addr ), "%T.GetNonce()" , stateDB )
96- assert .Equalf (t , balance , stateDB .GetBalance (addr ), "%T.GetBalance()" , stateDB )
97- assert .Equal (t , extra , state .GetExtra (stateDB , payloads , addr ), "state.GetExtra()" )
105+ state .SetExtra (s , payloads , addr , newExtra )
106+ assert .Equalf (t , newExtra , state .GetExtra (s , payloads , addr ), "state.GetExtra() after overwriting with new value" )
107+
108+ s .RevertToSnapshot (snap )
109+ assert .Equalf (t , oldExtra , state .GetExtra (s , payloads , addr ), "state.GetExtra() after reverting to snapshot" )
98110 })
99111}
100112
101113// stateViews are different ways to access the same data.
102114type stateViews struct {
103- stateDB * state.StateDB
104115 snaps * snapshot.Tree
105116 database state.Database
106117}
107118
119+ func (v stateViews ) newStateDB (t * testing.T , root common.Hash ) * state.StateDB {
120+ t .Helper ()
121+ s , err := state .New (root , v .database , v .snaps )
122+ require .NoError (t , err , "state.New()" )
123+ return s
124+ }
125+
108126func newWithSnaps (t * testing.T ) stateViews {
109127 t .Helper ()
110128 empty := types .EmptyRootHash
@@ -120,13 +138,8 @@ func newWithSnaps(t *testing.T) stateViews {
120138 )
121139 require .NoError (t , err , "snapshot.New()" )
122140
123- database := state .NewDatabase (ethDB )
124- stateDB , err := state .New (empty , database , snaps )
125- require .NoError (t , err , "state.New()" )
126-
127141 return stateViews {
128- stateDB : stateDB ,
129142 snaps : snaps ,
130- database : database ,
143+ database : state . NewDatabase ( ethDB ) ,
131144 }
132145}
0 commit comments