import sys
from twisted.internet import protocol, reactor
+from twisted.python import log
from p2pool.bitcoin import data as bitcoin_data, getwork
from p2pool.util import expiring_dict, jsonrpc, pack
class StratumRPCMiningProvider(object):
- def __init__(self, wb, other):
+ def __init__(self, wb, other, transport):
self.wb = wb
self.other = other
+ self.transport = transport
self.username = None
self.handler_map = expiring_dict.ExpiringDict(300)
reactor.callLater(0, self._send_work)
def _send_work(self):
- x, got_response = self.wb.get_work(*self.wb.preprocess_request('' if self.username is None else self.username))
+ try:
+ x, got_response = self.wb.get_work(*self.wb.preprocess_request('' if self.username is None else self.username))
+ except:
+ log.err()
+ self.transport.loseConnection()
+ return
jobid = str(random.randrange(2**128))
self.other.svc_mining.rpc_set_difficulty(bitcoin_data.target_to_difficulty(x['share_target'])*self.wb.net.DUMB_SCRYPT_DIFF).addErrback(lambda err: None)
self.other.svc_mining.rpc_notify(
class StratumProtocol(jsonrpc.LineBasedPeer):
def connectionMade(self):
- self.svc_mining = StratumRPCMiningProvider(self.factory.wb, self.other)
+ self.svc_mining = StratumRPCMiningProvider(self.factory.wb, self.other, self.transport)
def connectionLost(self, reason):
self.svc_mining.close()