merkle_root_to_transactions = expiring_dict.ExpiringDict(300)
- def compute(state):
+ def compute(state, all_targets):
extra_txs = [tx for tx in tx_pool.itervalues() if tx.is_good()]
# XXX limit to merkle_branch and block max size - 1000000 byte
# and sigops
timestamp = timestamp2
ba = bitcoin.getwork.BlockAttempt(state['version'], state['previous_block'], merkle_root, timestamp, state['target'])
#print 'SENT', 2**256//p2pool.coinbase_type.unpack(generate_tx['tx_ins'][0]['script'])['share_data']['target2']
- return ba.getwork(p2pool.coinbase_type.unpack(generate_tx['tx_ins'][0]['script'])['share_data']['target2'])
+ target = p2pool.coinbase_type.unpack(generate_tx['tx_ins'][0]['script'])['share_data']['target2']
+ if not all_targets:
+ target = min(2**256//2**32 - 1, target)
+ return ba.getwork(target)
def got_response(data):
try:
raise Error(-32601, u'Method not found')
method_meth = getattr(self, method_name)
+ if hasattr(method_meth, "takes_headers"):
+ params = [request.received_headers] + list(params)
try:
result = yield method_meth(*params)
def render_GET(self, request):
request.setHeader('X-Long-Polling', '/long-polling')
- res = self.compute((yield self.work.changed.get_deferred()))
+ res = self.compute((yield self.work.changed.get_deferred()), 'x-all-targets' in map(str.lower, request.received_headers))
request.write(json.dumps({
'jsonrpc': '2.0',
LongPollingWorkerInterface(self.work, self.compute))
self.putChild('', self)
- def rpc_getwork(self, data=None):
+ def rpc_getwork(self, headers, data=None):
if data is not None:
return self.response_callback(data)
- return self.compute(self.work.value)
+ return self.compute(self.work.value, 'x-all-targets' in map(str.lower, headers))
+ rpc_getwork.takes_headers = True