@@ -43,7 +43,6 @@ func (s Storage) String() (str string) {
43
43
for key , value := range s {
44
44
str += fmt .Sprintf ("%X : %X\n " , key , value )
45
45
}
46
-
47
46
return
48
47
}
49
48
@@ -52,7 +51,6 @@ func (s Storage) Copy() Storage {
52
51
for key , value := range s {
53
52
cpy [key ] = value
54
53
}
55
-
56
54
return cpy
57
55
}
58
56
@@ -68,13 +66,6 @@ type stateObject struct {
68
66
data types.StateAccount
69
67
db * StateDB
70
68
71
- // DB error.
72
- // State objects are used by the consensus core and VM which are
73
- // unable to deal with database-level errors. Any error that occurs
74
- // during a database read is memoized here and will eventually be returned
75
- // by StateDB.Commit.
76
- dbErr error
77
-
78
69
// Write caches.
79
70
trie Trie // storage trie, which becomes non-nil on first access
80
71
code Code // contract bytecode, which gets set when code is loaded
@@ -84,7 +75,7 @@ type stateObject struct {
84
75
dirtyStorage Storage // Storage entries that have been modified in the current transaction execution
85
76
86
77
// Cache flags.
87
- // When an object is marked suicided it will be delete from the trie
78
+ // When an object is marked suicided it will be deleted from the trie
88
79
// during the "update" phase of the state transition.
89
80
dirtyCode bool // true if the code was updated
90
81
suicided bool
@@ -123,13 +114,6 @@ func (s *stateObject) EncodeRLP(w io.Writer) error {
123
114
return rlp .Encode (w , & s .data )
124
115
}
125
116
126
- // setError remembers the first non-nil error it is called with.
127
- func (s * stateObject ) setError (err error ) {
128
- if s .dbErr == nil {
129
- s .dbErr = err
130
- }
131
- }
132
-
133
117
func (s * stateObject ) markSuicided () {
134
118
s .suicided = true
135
119
}
@@ -214,23 +198,23 @@ func (s *stateObject) GetCommittedState(db Database, key common.Hash) common.Has
214
198
start := time .Now ()
215
199
tr , err := s .getTrie (db )
216
200
if err != nil {
217
- s .setError (err )
201
+ s .db . setError (err )
218
202
return common.Hash {}
219
203
}
220
204
enc , err = tr .TryGet (key .Bytes ())
221
205
if metrics .EnabledExpensive {
222
206
s .db .StorageReads += time .Since (start )
223
207
}
224
208
if err != nil {
225
- s .setError (err )
209
+ s .db . setError (err )
226
210
return common.Hash {}
227
211
}
228
212
}
229
213
var value common.Hash
230
214
if len (enc ) > 0 {
231
215
_ , content , _ , err := rlp .Split (enc )
232
216
if err != nil {
233
- s .setError (err )
217
+ s .db . setError (err )
234
218
}
235
219
value .SetBytes (content )
236
220
}
@@ -296,7 +280,7 @@ func (s *stateObject) updateTrie(db Database) (Trie, error) {
296
280
)
297
281
tr , err := s .getTrie (db )
298
282
if err != nil {
299
- s .setError (err )
283
+ s .db . setError (err )
300
284
return nil , err
301
285
}
302
286
// Insert all the pending updates into the trie
@@ -311,15 +295,15 @@ func (s *stateObject) updateTrie(db Database) (Trie, error) {
311
295
var v []byte
312
296
if (value == common.Hash {}) {
313
297
if err := tr .TryDelete (key [:]); err != nil {
314
- s .setError (err )
298
+ s .db . setError (err )
315
299
return nil , err
316
300
}
317
301
s .db .StorageDeleted += 1
318
302
} else {
319
303
// Encoding []byte cannot fail, ok to ignore the error.
320
304
v , _ = rlp .EncodeToBytes (common .TrimLeftZeroes (value [:]))
321
305
if err := tr .TryUpdate (key [:], v ); err != nil {
322
- s .setError (err )
306
+ s .db . setError (err )
323
307
return nil , err
324
308
}
325
309
s .db .StorageUpdated += 1
@@ -351,7 +335,6 @@ func (s *stateObject) updateTrie(db Database) (Trie, error) {
351
335
func (s * stateObject ) updateRoot (db Database ) {
352
336
tr , err := s .updateTrie (db )
353
337
if err != nil {
354
- s .setError (fmt .Errorf ("updateRoot (%x) error: %w" , s .address , err ))
355
338
return
356
339
}
357
340
// If nothing changed, don't bother with hashing anything
@@ -372,9 +355,6 @@ func (s *stateObject) commitTrie(db Database) (*trie.NodeSet, error) {
372
355
if err != nil {
373
356
return nil , err
374
357
}
375
- if s .dbErr != nil {
376
- return nil , s .dbErr
377
- }
378
358
// If nothing changed, don't bother with committing anything
379
359
if tr == nil {
380
360
return nil , nil
@@ -385,7 +365,7 @@ func (s *stateObject) commitTrie(db Database) (*trie.NodeSet, error) {
385
365
}
386
366
root , nodes := tr .Commit (false )
387
367
s .data .Root = root
388
- return nodes , err
368
+ return nodes , nil
389
369
}
390
370
391
371
// AddBalance adds amount to s's balance.
@@ -457,7 +437,7 @@ func (s *stateObject) Code(db Database) []byte {
457
437
}
458
438
code , err := db .ContractCode (s .addrHash , common .BytesToHash (s .CodeHash ()))
459
439
if err != nil {
460
- s .setError (fmt .Errorf ("can't load code hash %x: %v" , s .CodeHash (), err ))
440
+ s .db . setError (fmt .Errorf ("can't load code hash %x: %v" , s .CodeHash (), err ))
461
441
}
462
442
s .code = code
463
443
return code
@@ -475,7 +455,7 @@ func (s *stateObject) CodeSize(db Database) int {
475
455
}
476
456
size , err := db .ContractCodeSize (s .addrHash , common .BytesToHash (s .CodeHash ()))
477
457
if err != nil {
478
- s .setError (fmt .Errorf ("can't load code size %x: %v" , s .CodeHash (), err ))
458
+ s .db . setError (fmt .Errorf ("can't load code size %x: %v" , s .CodeHash (), err ))
479
459
}
480
460
return size
481
461
}
@@ -519,10 +499,3 @@ func (s *stateObject) Balance() *big.Int {
519
499
func (s * stateObject ) Nonce () uint64 {
520
500
return s .data .Nonce
521
501
}
522
-
523
- // Value is never called, but must be present to allow stateObject to be used
524
- // as a vm.Account interface that also satisfies the vm.ContractRef
525
- // interface. Interfaces are awesome.
526
- func (s * stateObject ) Value () * big.Int {
527
- panic ("Value on stateObject should never be called" )
528
- }
0 commit comments