connector

This commit is contained in:
4tochka 2019-05-13 12:28:57 +04:00
parent 48d76431f1
commit 8c5ca2ecd8

View File

@ -1,7 +1,6 @@
from pybtc import int_to_c_int, c_int_to_int, c_int_len from pybtc import int_to_c_int, c_int_to_int, c_int_len
import asyncio import asyncio
from collections import OrderedDict, deque from collections import OrderedDict, deque
from collections import OrderedDict, deque as LRU
from pybtc import LRU from pybtc import LRU
class UTXO(): class UTXO():
@ -12,6 +11,7 @@ class UTXO():
self.checkpoints = deque() self.checkpoints = deque()
self.log = log self.log = log
self.loaded = OrderedDict() self.loaded = OrderedDict()
self.pending_saved = OrderedDict()
self.maturity = 100 self.maturity = 100
self.size_limit = cache_size self.size_limit = cache_size
self._db_pool = db_pool self._db_pool = db_pool
@ -68,19 +68,14 @@ class UTXO():
utxo.add((i[0],b"".join((int_to_c_int(i[1][0]), utxo.add((i[0],b"".join((int_to_c_int(i[1][0]),
int_to_c_int(i[1][1]), int_to_c_int(i[1][1]),
i[1][2])))) i[1][2]))))
self.pending_saved[i[0]] = i[1]
if block_changed: if block_changed:
self.cached.append({i[0]: i[1]}) self.cached.append({i[0]: i[1]})
if not checkpoint_found: if not checkpoint_found:
for i in reversed(utxo): for i in reversed(self.pending_saved):
d = i[1] self.cached.append({i: self.pending_saved[i]})
pointer = c_int_to_int(d) self.log.critical("checkpoint not found")
f = c_int_len(pointer) return
amount = c_int_to_int(d[f:])
f += c_int_len(amount)
address = d[f:]
self.cached.append({i[0]: (pointer, amount, address)})
self.log.critical("checkpoint not found")
return
self.log.critical("found checkpoint " + str(lb) + " len " + str(len(utxo)) + " cached " + str(len(self.cached)) ) self.log.critical("found checkpoint " + str(lb) + " len " + str(len(utxo)) + " cached " + str(len(self.cached)) )
# self.log.critical(">" + str(len(self.cached))) # self.log.critical(">" + str(len(self.cached)))
@ -151,9 +146,14 @@ class UTXO():
self._hit += 1 self._hit += 1
return i return i
except: except:
self._failed_requests += 1 try:
self.missed.add(key) i = self.pending_saved[key]
return None self._hit += 1
return i
except:
self._failed_requests += 1
self.missed.add(key)
return None
def get_loaded(self, key, block_height): def get_loaded(self, key, block_height):
try: try: