remove dangling whitespace
[stratum-mining.git] / lib / coinbaser.py
1 import util
2 from twisted.internet import defer
3
4 import stratum.logger
5 log = stratum.logger.get_logger('coinbaser')
6
7 # TODO: Add on_* hooks in the app
8
9 class SimpleCoinbaser(object):
10     '''This very simple coinbaser uses constant bitcoin address
11     for all generated blocks.'''
12
13     def __init__(self, bitcoin_rpc, address):
14         # Fire callback when coinbaser is ready
15         self.on_load = defer.Deferred()
16
17         self.address = address
18         self.is_valid = False # We need to check if pool can use this address
19
20         self.bitcoin_rpc = bitcoin_rpc
21         self._validate()
22
23     def _validate(self):
24         d = self.bitcoin_rpc.validateaddress(self.address)
25         d.addCallback(self._address_check)
26         d.addErrback(self._failure)
27
28     def _address_check(self, result):
29         if result['isvalid'] and result['ismine']:
30             self.is_valid = True
31             log.info("Coinbase address '%s' is valid" % self.address)
32
33             if not self.on_load.called:
34                 self.on_load.callback(True)
35
36         else:
37             self.is_valid = False
38             log.error("Coinbase address '%s' is NOT valid!" % self.address)
39
40     def _failure(self, failure):
41         log.error("Cannot validate Bitcoin address '%s'" % self.address)
42         raise
43
44     #def on_new_block(self):
45     #    pass
46
47     #def on_new_template(self):
48     #    pass
49
50     def get_script_pubkey(self):
51         if not self.is_valid:
52             # Try again, maybe bitcoind was down?
53             self._validate()
54             raise Exception("Coinbase address is not validated!")
55         return util.script_to_address(self.address)
56
57     def get_coinbase_data(self):
58         return ''