1 from hashlib import sha256
2 from struct import unpack
6 return sha256(sha256(b).digest()).digest()
10 for i in range(0, len(b), 4):
11 o += b[i + 3:i - 1 if i else None:-1]
14 def Bits2Target(bits):
15 return unpack('<L', bits[:3] + b'\0')[0] * 2**(8*(bits[3] - 3))
18 n = unpack('<QQQQ', h)
19 n = (n[3] << 192) | (n[2] << 128) | (n[1] << 64) | n[0]
22 def tryErr(func, *a, **kw):
23 IE = kw.pop('IgnoredExceptions', BaseException)
24 logger = kw.pop('Logger', None)
25 emsg = kw.pop('ErrorMsg', None)
30 emsg = "%s\n" % (emsg,) if emsg else ""
31 emsg += traceback.format_exc()
35 class RejectedShare(ValueError):
46 def _build_heap(self):
47 newheap = list((v[0], k, v[1]) for k, v in self._dict.values())
48 heapq.heapify(newheap)
53 (t, k, o) = self._heap[0]
56 heapq.heappop(self._heap)
61 (t, k, o) = heapq.heappop(self._heap)
67 def __setitem__(self, o, t):
69 self._dict[k] = (t, o)
70 if len(self._heap) / 2 > len(self._dict):
73 heapq.heappush(self._heap, (t, k, o))
75 def __getitem__(self, o):
76 return self._dict[id(o)][0]
78 def __delitem__(self, o):
80 if len(self._dict) < 2:
84 return len(self._dict)