28
28
BLANK_ROOT_HASH ,
29
29
EMPTY_SHA3 ,
30
30
)
31
+ from eth .db .backends .base import (
32
+ BaseDB ,
33
+ )
31
34
from eth .db .batch import (
32
35
BatchDB ,
33
36
)
@@ -71,7 +74,7 @@ def __init__(self) -> None:
71
74
72
75
@property
73
76
@abstractmethod
74
- def state_root (self ):
77
+ def state_root (self ) -> Hash32 :
75
78
raise NotImplementedError ("Must be implemented by subclasses" )
76
79
77
80
@abstractmethod
@@ -82,11 +85,11 @@ def has_root(self, state_root: bytes) -> bool:
82
85
# Storage
83
86
#
84
87
@abstractmethod
85
- def get_storage (self , address , slot ) :
88
+ def get_storage (self , address : Address , slot : int ) -> int :
86
89
raise NotImplementedError ("Must be implemented by subclasses" )
87
90
88
91
@abstractmethod
89
- def set_storage (self , address , slot , value ) :
92
+ def set_storage (self , address : Address , slot : int , value : int ) -> None :
90
93
raise NotImplementedError ("Must be implemented by subclasses" )
91
94
92
95
#
@@ -104,40 +107,40 @@ def set_nonce(self, address: Address, nonce: int) -> None:
104
107
# Balance
105
108
#
106
109
@abstractmethod
107
- def get_balance (self , address ) :
110
+ def get_balance (self , address : Address ) -> int :
108
111
raise NotImplementedError ("Must be implemented by subclasses" )
109
112
110
113
@abstractmethod
111
- def set_balance (self , address , balance ) :
114
+ def set_balance (self , address : Address , balance : int ) -> None :
112
115
raise NotImplementedError ("Must be implemented by subclasses" )
113
116
114
- def delta_balance (self , address , delta ) :
117
+ def delta_balance (self , address : Address , delta : int ) -> None :
115
118
self .set_balance (address , self .get_balance (address ) + delta )
116
119
117
120
#
118
121
# Code
119
122
#
120
123
@abstractmethod
121
- def set_code (self , address , code ) :
124
+ def set_code (self , address : Address , code : bytes ) -> None :
122
125
raise NotImplementedError ("Must be implemented by subclasses" )
123
126
124
127
@abstractmethod
125
- def get_code (self , address ) :
128
+ def get_code (self , address : Address ) -> bytes :
126
129
raise NotImplementedError ("Must be implemented by subclasses" )
127
130
128
131
@abstractmethod
129
- def get_code_hash (self , address ) :
132
+ def get_code_hash (self , address : Address ) -> Hash32 :
130
133
raise NotImplementedError ("Must be implemented by subclasses" )
131
134
132
135
@abstractmethod
133
- def delete_code (self , address ) :
136
+ def delete_code (self , address : Address ) -> None :
134
137
raise NotImplementedError ("Must be implemented by subclasses" )
135
138
136
139
#
137
140
# Account Methods
138
141
#
139
142
@abstractmethod
140
- def account_is_empty (self , address ) :
143
+ def account_is_empty (self , address : Address ) -> bool :
141
144
raise NotImplementedError ("Must be implemented by subclass" )
142
145
143
146
#
@@ -177,7 +180,7 @@ class AccountDB(BaseAccountDB):
177
180
178
181
logger = cast (TraceLogger , logging .getLogger ('eth.db.account.AccountDB' ))
179
182
180
- def __init__ (self , db , state_root = BLANK_ROOT_HASH ):
183
+ def __init__ (self , db : BaseDB , state_root : Hash32 = BLANK_ROOT_HASH ) -> None :
181
184
r"""
182
185
Internal implementation details (subject to rapid change):
183
186
Database entries go through several pipes, like so...
@@ -225,11 +228,11 @@ def __init__(self, db, state_root=BLANK_ROOT_HASH):
225
228
self ._journaltrie = JournalDB (self ._trie_cache )
226
229
227
230
@property
228
- def state_root (self ):
231
+ def state_root (self ) -> Hash32 :
229
232
return self ._trie .root_hash
230
233
231
234
@state_root .setter
232
- def state_root (self , value ) :
235
+ def state_root (self , value : Hash32 ) -> None :
233
236
self ._trie_cache .reset_cache ()
234
237
self ._trie .root_hash = value
235
238
@@ -239,7 +242,7 @@ def has_root(self, state_root: bytes) -> bool:
239
242
#
240
243
# Storage
241
244
#
242
- def get_storage (self , address , slot , from_journal = True ):
245
+ def get_storage (self , address : Address , slot : int , from_journal : bool = True ) -> int :
243
246
validate_canonical_address (address , title = "Storage Address" )
244
247
validate_uint256 (slot , title = "Storage Slot" )
245
248
@@ -254,7 +257,7 @@ def get_storage(self, address, slot, from_journal=True):
254
257
else :
255
258
return 0
256
259
257
- def set_storage (self , address , slot , value ) :
260
+ def set_storage (self , address : Address , slot : int , value : int ) -> None :
258
261
validate_uint256 (value , title = "Storage Value" )
259
262
validate_uint256 (slot , title = "Storage Slot" )
260
263
validate_canonical_address (address , title = "Storage Address" )
@@ -272,7 +275,7 @@ def set_storage(self, address, slot, value):
272
275
273
276
self ._set_account (address , account .copy (storage_root = storage .root_hash ))
274
277
275
- def delete_storage (self , address ) :
278
+ def delete_storage (self , address : Address ) -> None :
276
279
validate_canonical_address (address , title = "Storage Address" )
277
280
278
281
account = self ._get_account (address )
@@ -281,13 +284,13 @@ def delete_storage(self, address):
281
284
#
282
285
# Balance
283
286
#
284
- def get_balance (self , address ) :
287
+ def get_balance (self , address : Address ) -> int :
285
288
validate_canonical_address (address , title = "Storage Address" )
286
289
287
290
account = self ._get_account (address )
288
291
return account .balance
289
292
290
- def set_balance (self , address , balance ) :
293
+ def set_balance (self , address : Address , balance : int ) -> None :
291
294
validate_canonical_address (address , title = "Storage Address" )
292
295
validate_uint256 (balance , title = "Account Balance" )
293
296
@@ -297,35 +300,35 @@ def set_balance(self, address, balance):
297
300
#
298
301
# Nonce
299
302
#
300
- def get_nonce (self , address ) :
303
+ def get_nonce (self , address : Address ) -> int :
301
304
validate_canonical_address (address , title = "Storage Address" )
302
305
303
306
account = self ._get_account (address )
304
307
return account .nonce
305
308
306
- def set_nonce (self , address , nonce ) :
309
+ def set_nonce (self , address : Address , nonce : int ) -> None :
307
310
validate_canonical_address (address , title = "Storage Address" )
308
311
validate_uint256 (nonce , title = "Nonce" )
309
312
310
313
account = self ._get_account (address )
311
314
self ._set_account (address , account .copy (nonce = nonce ))
312
315
313
- def increment_nonce (self , address ) :
316
+ def increment_nonce (self , address : Address ) -> None :
314
317
current_nonce = self .get_nonce (address )
315
318
self .set_nonce (address , current_nonce + 1 )
316
319
317
320
#
318
321
# Code
319
322
#
320
- def get_code (self , address ) :
323
+ def get_code (self , address : Address ) -> bytes :
321
324
validate_canonical_address (address , title = "Storage Address" )
322
325
323
326
try :
324
327
return self ._journaldb [self .get_code_hash (address )]
325
328
except KeyError :
326
329
return b""
327
330
328
- def set_code (self , address , code ) :
331
+ def set_code (self , address : Address , code : bytes ) -> None :
329
332
validate_canonical_address (address , title = "Storage Address" )
330
333
validate_is_bytes (code , title = "Code" )
331
334
@@ -335,13 +338,13 @@ def set_code(self, address, code):
335
338
self ._journaldb [code_hash ] = code
336
339
self ._set_account (address , account .copy (code_hash = code_hash ))
337
340
338
- def get_code_hash (self , address ) :
341
+ def get_code_hash (self , address : Address ) -> Hash32 :
339
342
validate_canonical_address (address , title = "Storage Address" )
340
343
341
344
account = self ._get_account (address )
342
345
return account .code_hash
343
346
344
- def delete_code (self , address ) :
347
+ def delete_code (self , address : Address ) -> None :
345
348
validate_canonical_address (address , title = "Storage Address" )
346
349
347
350
account = self ._get_account (address )
@@ -350,40 +353,40 @@ def delete_code(self, address):
350
353
#
351
354
# Account Methods
352
355
#
353
- def account_has_code_or_nonce (self , address ) :
356
+ def account_has_code_or_nonce (self , address : Address ) -> bool :
354
357
return self .get_nonce (address ) != 0 or self .get_code_hash (address ) != EMPTY_SHA3
355
358
356
- def delete_account (self , address ) :
359
+ def delete_account (self , address : Address ) -> None :
357
360
validate_canonical_address (address , title = "Storage Address" )
358
361
359
362
del self ._journaltrie [address ]
360
363
361
- def account_exists (self , address ) :
364
+ def account_exists (self , address : Address ) -> bool :
362
365
validate_canonical_address (address , title = "Storage Address" )
363
366
364
367
return self ._journaltrie .get (address , b'' ) != b''
365
368
366
- def touch_account (self , address ) :
369
+ def touch_account (self , address : Address ) -> None :
367
370
validate_canonical_address (address , title = "Storage Address" )
368
371
369
372
account = self ._get_account (address )
370
373
self ._set_account (address , account )
371
374
372
- def account_is_empty (self , address ) :
375
+ def account_is_empty (self , address : Address ) -> bool :
373
376
return not self .account_has_code_or_nonce (address ) and self .get_balance (address ) == 0
374
377
375
378
#
376
379
# Internal
377
380
#
378
- def _get_account (self , address , from_journal = True ):
381
+ def _get_account (self , address : Address , from_journal : bool = True ) -> Account :
379
382
rlp_account = (self ._journaltrie if from_journal else self ._trie_cache ).get (address , b'' )
380
383
if rlp_account :
381
384
account = rlp .decode (rlp_account , sedes = Account )
382
385
else :
383
386
account = Account ()
384
387
return account
385
388
386
- def _set_account (self , address , account ) :
389
+ def _set_account (self , address : Address , account : Account ) -> None :
387
390
rlp_account = rlp .encode (account , sedes = Account )
388
391
self ._journaltrie [address ] = rlp_account
389
392
@@ -424,7 +427,7 @@ def _log_pending_accounts(self) -> None:
424
427
continue
425
428
else :
426
429
accounts_displayed .add (address )
427
- account = self ._get_account (address )
430
+ account = self ._get_account (Address ( address ) )
428
431
self .logger .trace (
429
432
"Account %s: balance %d, nonce %d, storage root %s, code hash %s" ,
430
433
encode_hex (address ),
0 commit comments