Skip to content
This repository was archived by the owner on May 23, 2023. It is now read-only.

Commit 416d48e

Browse files
committed
use lru cache for ethash cache
1 parent d41cc8d commit 416d48e

File tree

4 files changed

+9
-45
lines changed

4 files changed

+9
-45
lines changed

ethereum/blocks.py

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -347,10 +347,9 @@ def check_pow(self, db=None, nonce=None):
347347

348348
# Grab current cache
349349
current_cache_size = get_cache_size(self.number)
350-
cache = get_cache_memoized(db, seed, current_cache_size)
350+
cache = get_cache_memoized(seed, current_cache_size)
351351
current_full_size = get_full_size(self.number)
352-
mining_output = hashimoto_light(current_full_size, cache,
353-
header_hash, nonce)
352+
mining_output = hashimoto_light(current_full_size, cache, header_hash, nonce)
354353
diff = self.difficulty
355354
if mining_output['mix digest'] != self.mixhash:
356355
return False
@@ -1242,30 +1241,9 @@ def __repr__(self):
12421241
def __structlog__(self):
12431242
return encode_hex(self.hash)
12441243

1245-
1246-
cache_cache = {}
1247-
1248-
1249-
def peck_cache(db, seedhash, size):
1250-
key = b'cache:' + seedhash + b',' + str_to_bytes(str(size))
1251-
if key not in db:
1252-
cache = mkcache(size, seedhash)
1253-
cache_cache[key] = cache
1254-
cache_serialized = serialize_cache(cache)
1255-
cache_hash = utils.sha3(cache_serialized)
1256-
db.put(cache_hash, cache_serialized)
1257-
db.put(key, cache_hash)
1258-
elif key not in cache_cache:
1259-
o = db.get(db.get(key))
1260-
cache_cache[key] = o
1261-
return deserialize_cache(o)
1262-
1263-
1264-
def get_cache_memoized(db, seedhash, size):
1265-
key = b'cache:' + seedhash + b',' + str_to_bytes(str(size))
1266-
peck_cache(db, seedhash, size)
1267-
return cache_cache[key]
1268-
1244+
@lru_cache(5)
1245+
def get_cache_memoized(seedhash, size):
1246+
return mkcache(size, seedhash)
12691247

12701248
# Gas limit adjustment algo
12711249
def calc_gaslimit(parent):

ethereum/miner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def mine(self, steps=1000):
5858
"""
5959
#b = self.block
6060
sz = blocks.get_cache_size(self.block.number)
61-
cache = blocks.get_cache_memoized(self.block.db, self.block.header.seed, sz)
61+
cache = blocks.get_cache_memoized(self.block.header.seed, sz)
6262
fsz = blocks.get_full_size(self.block.number)
6363
nonce = utils.big_endian_to_int(self.block.nonce)
6464
TT64M1 = 2**64 - 1

ethereum/processblock.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ def _apply_msg(ext, msg, code):
243243

244244

245245
def create_contract(ext, msg):
246-
print('CREATING WITH GAS', msg.gas)
246+
#print('CREATING WITH GAS', msg.gas)
247247
sender = decode_hex(msg.sender) if len(msg.sender) == 40 else msg.sender
248248
if ext.tx_origin != msg.sender:
249249
ext._block.increment_nonce(msg.sender)
@@ -268,7 +268,7 @@ def create_contract(ext, msg):
268268
gas -= gcost
269269
else:
270270
dat = []
271-
print('CONTRACT CREATION OOG', 'have', gas, 'want', gcost)
271+
#print('CONTRACT CREATION OOG', 'have', gas, 'want', gcost)
272272
log_msg.debug('CONTRACT CREATION OOG', have=gas, want=gcost)
273273
ext._block.set_code(msg.to, b''.join(map(ascii_chr, dat)))
274274
return 1, gas, msg.to

ethereum/tests/test_chain.py

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,12 @@
1515
logger = get_logger()
1616
# configure_logging('eth.vm:trace,eth.vm.memory:info')
1717

18-
1918
_db = new_db()
20-
blocks.peck_cache(_db, b'\x00' * 32, ethash_utils.get_cache_size(0))
2119

2220

2321
@pytest.fixture(scope='function')
2422
def db():
25-
"""A database that contains the cache by default."""
26-
new_db = EphemDB()
27-
28-
class DefaultDict(dict):
29-
30-
def __missing__(self, key):
31-
return _db.get(key)
32-
33-
def __contains__(self, key):
34-
return super(DefaultDict, self).__contains__(key) or key in _db
35-
new_db.db = DefaultDict()
36-
return new_db
37-
23+
return EphemDB()
3824
alt_db = db
3925

4026

0 commit comments

Comments
 (0)