2 from twisted.internet import defer
5 log = stratum.logger.get_logger('coinbaser')
7 # TODO: Add on_* hooks in the app
9 class SimpleCoinbaser(object):
10 '''This very simple coinbaser uses constant novacoin address
11 for all generated blocks.'''
13 def __init__(self, bitcoin_rpc, address):
14 # Fire callback when coinbaser is ready
15 self.on_load = defer.Deferred()
17 self.address = address
18 self.is_valid = False # We need to check if pool can use this address
20 self.bitcoin_rpc = bitcoin_rpc
24 d = self.bitcoin_rpc.validateaddress(self.address)
25 d.addCallback(self._address_check)
26 d.addErrback(self._failure)
28 def _address_check(self, result):
29 if result['isvalid'] and result['ismine']:
31 log.info("Coinbase address '%s' is valid" % self.address)
33 if not self.on_load.called:
34 self.on_load.callback(True)
38 log.error("Coinbase address '%s' is NOT valid!" % self.address)
40 def _failure(self, failure):
41 log.error("Cannot validate Novacoin address '%s'" % self.address)
44 #def on_new_block(self):
47 #def on_new_template(self):
50 def get_script_pubkey(self):
52 # Try again, maybe novacoind was down?
54 raise Exception("Coinbase address is not validated!")
55 return util.script_to_address(self.address)
57 def get_coinbase_data(self):