try:
if aux_work is not None and (pow_hash <= aux_work['target'] or p2pool.DEBUG):
assert bitcoin_data.HashType().pack(aux_work['hash'])[::-1].encode('hex') == transactions[0]['tx_ins'][0]['script'][-32-8:-8].encode('hex')
- df = merged_proxy.rpc_getauxblock(
+ df = deferral.retry('Error submitting merged block: (will retry)', 10, 10)(merged_proxy.rpc_getauxblock)(
bitcoin_data.HashType().pack(aux_work['hash'])[::-1].encode('hex'),
bitcoin_data.aux_pow_type.pack(dict(
merkle_tx=dict(
parent_block_header=header,
)).encode('hex'),
)
- @df.addBoth
+ @df.addCallback
def _(result):
if result != (pow_hash <= aux_work['target']):
print >>sys.stderr, 'Merged block submittal result: %s Expected: %s' % (result, pow_hash <= aux_work['target'])
else:
print 'Merged block submittal result: %s' % (result,)
+ @df.addErrback
+ def _(err):
+ log.err(err, 'Error submitting merged block:')
except:
log.err(None, 'Error while processing merged mining POW:')
from __future__ import division
+import itertools
+
from twisted.internet import defer, reactor
from twisted.python import failure, log
reactor.callLater(t, d.callback, None)
return d
-def retry(message, delay):
+def retry(message, delay, max_retries=None):
'''
@retry('Error getting block:', 1)
@defer.inlineCallbacks
def retry2(func):
@defer.inlineCallbacks
def f(*args, **kwargs):
- while True:
+ for i in itertools.count():
try:
result = yield func(*args, **kwargs)
except:
+ if i == max_retries:
+ raise
log.err(None, message)
yield sleep(delay)
else: