self.get_cumulative_weights = skiplists.WeightsSkipList(self)
- def attempt_verify(self, share, now):
+ def attempt_verify(self, share):
if share.hash in self.verified.shares:
return True
height, last = self.get_height_and_last(share.hash)
self.verified.add(share)
return True
- def think(self, ht, previous_block, now):
+ def think(self, ht, previous_block):
desired = set()
# O(len(self.heads))
head_height, last = self.get_height_and_last(head)
for share in self.get_chain(head, head_height if last is None else min(5, max(0, head_height - self.net.CHAIN_LENGTH))):
- if self.attempt_verify(share, now):
+ if self.attempt_verify(share):
break
if share.hash in self.heads:
bads.add(share.hash)
get = min(want, can)
#print 'Z', head_height, last_hash is None, last_height, last_last_hash is None, want, can, get
for share in self.get_chain(last_hash, get):
- if not self.attempt_verify(share, now):
+ if not self.attempt_verify(share):
break
if head_height < self.net.CHAIN_LENGTH and last_last_hash is not None:
desired.add((self.verified.shares[random.choice(list(self.verified.reverse_shares[last_hash]))].peer, last_last_hash))
previous_block=work['previous_block_hash'],
bits=work['bits'],
))
+ factory.new_block.watch(lambda block_hash: set_real_work1())
def set_real_work2():
- best, desired = tracker.think(ht, pre_current_work.value['previous_block'], time.time() - pre_current_work2.value['clock_offset'])
+ best, desired = tracker.think(ht, pre_current_work.value['previous_block'])
current_work2.set(pre_current_work2.value)
t = dict(pre_current_work.value)
print ' ...success!'
print
- # done!
- # do new getwork when a block is heard on the p2p interface
+ # call getmemorypool every 15 seconds to check that bitcoind is alive
+ task.LoopingCall(set_real_work1).start(15)
+
+ # done!
print 'Started successfully!'
print
- @defer.inlineCallbacks
- def work1_thread():
- while True:
- flag = factory.new_block.get_deferred()
- try:
- yield set_real_work1()
- except:
- log.err()
- yield defer.DeferredList([flag, deferral.sleep(random.uniform(1, 10))], fireOnOneCallback=True)
-
- @defer.inlineCallbacks
- def work2_thread():
- while True:
- try:
- set_real_work2()
- except:
- log.err()
- yield deferral.sleep(random.expovariate(1/20))
-
- work1_thread()
- work2_thread()
-
if hasattr(signal, 'SIGALRM'):
def watchdog_handler(signum, frame):