1 from p2pool.util import skiplist
3 class DistanceSkipList(skiplist.SkipList):
4 def __init__(self, tracker):
5 skiplist.SkipList.__init__(self)
8 def previous(self, element):
9 return self.tracker.shares[element].previous_hash
11 def get_delta(self, element):
12 return element, 1, self.tracker.shares[element].previous_hash
14 def combine_deltas(self, (from_hash1, dist1, to_hash1), (from_hash2, dist2, to_hash2)):
15 if to_hash1 != from_hash2:
16 raise AssertionError()
17 return from_hash1, dist1 + dist2, to_hash2
19 def initial_solution(self, start, (n,)):
22 def apply_delta(self, (dist1, to_hash1), (from_hash2, dist2, to_hash2), (n,)):
23 if to_hash1 != from_hash2:
24 raise AssertionError()
25 return dist1 + dist2, to_hash2
27 def judge(self, (dist, hash), (n,)):
35 def finalize(self, (dist, hash)):
38 if __name__ == '__main__':
40 from p2pool.bitcoin import data
42 d = DistanceSkipList(t)
43 for i in xrange(2000):
44 t.add(data.FakeShare(hash=i, previous_hash=i - 1 if i > 0 else None))
45 for i in xrange(2000):
46 a = random.randrange(2000)
47 b = random.randrange(a + 1)
49 assert res == a - b, (a, b, res)