forked from nannan7/stratum-mining
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcoinbaser.py
68 lines (54 loc) · 2.21 KB
/
coinbaser.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import util
from twisted.internet import defer
import settings
import lib.logger
log = lib.logger.get_logger('coinbaser')
# TODO: Add on_* hooks in the app
class SimpleCoinbaser(object):
'''This very simple coinbaser uses constant bitcoin address
for all generated blocks.'''
def __init__(self, bitcoin_rpc, address):
log.debug("Got to coinbaser")
# Fire Callback when the coinbaser is ready
self.on_load = defer.Deferred()
self.address = address
self.is_valid = False
self.bitcoin_rpc = bitcoin_rpc
self._validate()
def _validate(self):
d = self.bitcoin_rpc.validateaddress(self.address)
d.addCallback(self.address_check)
d.addErrback(self._failure)
def address_check(self, result):
if result['isvalid'] and result['ismine']:
self.is_valid = True
log.info("Coinbase address '%s' is valid" % self.address)
if 'address' in result:
self.address = result['address']
if 'pubkey' in result:
self.pubkey = result['pubkey']
if not self.on_load.called:
self.address = result['address']
self.on_load.callback(True)
elif result['isvalid'] and settings.ALLOW_NONLOCAL_WALLET == True :
self.is_valid = True
log.warning("!!! Coinbase address '%s' is valid BUT it is not local" % self.address)
if 'pubkey' in result:
log.debug("PubKey = %s " % result['pubkey'])
self.pubkey = result['pubkey']
if not self.on_load.called:
self.on_load.callback(True)
else:
self.is_valid = False
log.error("Coinbase address '%s' is NOT valid!" % self.address)
def _failure(self, failure):
log.exception("Cannot validate Wallet address '%s'" % self.address)
raise
def get_script_pubkey(self):
if settings.COINDAEMON_Reward == 'POW':
self._validate()
return util.script_to_address(self.address)
else:
return util.script_to_pubkey(self.pubkey)
def get_coinbase_data(self):
return ''