import time, threading
-
class AbeStore(Datastore_class):
def __init__(self, config):
elif args.dbtype == 'psycopg2':
args.connect_args = { 'database' : config.get('database','database') }
+ coin = config.get('server', 'coin')
+ self.addrtype = 0
+ if coin == 'litecoin':
+ print 'Litecoin settings:'
+ datadir = config.get('server','datadir')
+ print ' datadir = ' + datadir
+ args.datadir = [{"dirname":datadir,"chain":"Litecoin","code3":"LTC","address_version":"\u0030"}]
+ print ' addrtype = 48'
+ self.addrtype = 48
+
Datastore_class.__init__(self,args)
+ # Use 1 (Bitcoin) if chain_id is not sent
+ self.chain_id = self.datadirs[0]["chain_id"] or 1
+ print 'Coin chain_id = %d' % self.chain_id
+
self.sql_limit = int( config.get('database','limit') )
self.tx_cache = {}
#print "WARNING: missing tx_in for tx", txid
continue
- address = hash_to_address(chr(0), _hash)
+ address = hash_to_address(chr(self.addrtype), _hash)
if self.tx_cache.has_key(address):
print "cache: invalidating", address
self.tx_cache.pop(address)
#print "WARNING: missing tx_out for tx", txid
continue
- address = hash_to_address(chr(0), _hash)
+ address = hash_to_address(chr(self.addrtype), _hash)
if self.tx_cache.has_key(address):
print "cache: invalidating", address
self.tx_cache.pop(address)
JOIN txout prevout ON (txin.txout_id = prevout.txout_id)
JOIN pubkey ON (pubkey.pubkey_id = prevout.pubkey_id)
WHERE pubkey.pubkey_hash = ?
+ AND cc.chain_id = ?
AND cc.in_longest = 1
- LIMIT ? """, (dbhash,self.sql_limit))
+ LIMIT ? """, (dbhash, self.chain_id, self.sql_limit))
if len(out)==self.sql_limit:
raise BaseException('limit reached')
JOIN txout ON (txout.tx_id = tx.tx_id)
JOIN pubkey ON (pubkey.pubkey_id = txout.pubkey_id)
WHERE pubkey.pubkey_hash = ?
+ AND cc.chain_id = ?
AND cc.in_longest = 1
- LIMIT ? """, (dbhash,self.sql_limit))
+ LIMIT ? """, (dbhash, self.chain_id, self.sql_limit))
if len(out)==self.sql_limit:
raise BaseException('limit reached')
if not _hash:
#print "WARNING: missing tx_in for tx", tx_id, addr
continue
- address = hash_to_address(chr(0), _hash)
+ address = hash_to_address(chr(self.addrtype), _hash)
txinputs.append(address)
txpoint['inputs'] = txinputs
txoutputs = []
if not _hash:
#print "WARNING: missing tx_out for tx", tx_id, addr
continue
- address = hash_to_address(chr(0), _hash)
+ address = hash_to_address(chr(self.addrtype), _hash)
txoutputs.append(address)
txpoint['outputs'] = txoutputs
with store.dblock:
store.catch_up()
store.memorypool_update()
- block_number = store.get_block_number(1)
+ block_number = store.get_block_number(store.chain_id)
return block_number
if self.block_number != block_number:
self.block_number = block_number
print "block number:", self.block_number
- self.push_response({ 'method':'blockchain.numblocks.subscribe', 'params':[self.block_number] })
+ self.push_response({ 'id': None, 'method':'blockchain.numblocks.subscribe', 'params':[self.block_number] })
while True:
try:
break
if addr in self.watched_addresses:
status = self.store.get_status( addr )
- self.push_response({ 'method':'blockchain.address.subscribe', 'params':[addr, status] })
+ self.push_response({ 'id': None, 'method':'blockchain.address.subscribe', 'params':[addr, status] })
threading.Timer(10, self.run_store_iteration).start()
self.host = config.get('server','host')
self.nick = config.get('server', 'irc_nick')
if not self.nick: self.nick = random_string(10)
+ self.prepend = 'E_'
+ if config.get('server', 'coin') == 'litecoin':
+ self.prepend = 'EL_'
+ self.nick = self.prepend + self.nick
def get_peers(self):
return self.peers.values()
s = socket.socket()
s.connect(('irc.freenode.net', 6667))
s.send('USER electrum 0 * :' + self.host + ' ' + ircname + '\n')
- s.send('NICK E_' + self.nick + '\n')
+ s.send('NICK ' + self.nick + '\n')
s.send('JOIN #electrum\n')
sf = s.makefile('r', 0)
t = 0
elif '353' in line: # answer to /names
k = line.index('353')
for item in line[k+1:]:
- if item[0:2] == 'E_':
+ if item.startswith(self.prepend):
s.send('WHO %s\n'%item)
elif '352' in line: # answer to /who
# warning: this is a horrible hack which apparently works