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