diff --git a/lib/services/wallet-api/index.js b/lib/services/wallet-api/index.js index 93ca49c3..52338b98 100644 --- a/lib/services/wallet-api/index.js +++ b/lib/services/wallet-api/index.js @@ -101,7 +101,7 @@ WalletService.prototype.blockHandler = function(block, connectBlock, callback) { continue; } - var address = self.services.address.getAddressString(script); + var address = self.getAddressString(script); if(!address || !self._addressMap[address]) { continue; @@ -144,7 +144,7 @@ WalletService.prototype.blockHandler = function(block, connectBlock, callback) { return next(); } - var inputAddress = self.services.address.getAddressString(input.script); + var inputAddress = self.getAddressString(input.script); if(!inputAddress || !self._addressMap[inputAddress]) { return next(); @@ -202,6 +202,32 @@ WalletService.prototype.blockHandler = function(block, connectBlock, callback) { }); }; +WalletService.prototype.getAddressString = function(script, output) { + var address = script.toAddress(); + if(address) { + return address.toString(); + } + + try { + var pubkey = script.getPublicKey(); + if(pubkey) { + return pubkey.toString('hex'); + } + } catch(e) { + //log.warn('Error getting public key from: ', script.toASM(), script.toHex()); + // if there is an error, it's because a pubkey can not be extracted from the script + // continue on and return null + } + + //TODO add back in P2PK, but for this we need to look up the utxo for this script + if(output && output.script && output.script.isPublicKeyOut()) { + return output.script.getPublicKey().toString('hex'); + } + + //log.warn('No utxo given for script spending a P2PK: ', script.toASM(), script.toHex()); + return null; +}; + WalletService.prototype.concurrentBlockHandler = function(block, connectBlock, callback) { var self = this; @@ -260,7 +286,7 @@ WalletService.prototype.concurrentBlockHandler = function(block, connectBlock, c continue; } - var inputAddress = self._getAddressString(input.script); + var inputAddress = self.getAddressString(input.script); if(!inputAddress || !self._addressMap[inputAddress]) { continue; @@ -288,10 +314,10 @@ WalletService.prototype._loadAllAddresses = function(callback) { self._addressMap = {}; - var start = self._encoding.encodeWalletKey('00'); - var end = self._encoding.encodeWalletKey(Array(65).join('f')); + var start = self._encoding.encodeWalletAddressesKey('00'); + var end = self._encoding.encodeWalletAddressesKey(Array(65).join('f')); - var stream = self.db.createReadStream({ + var stream = self.store.createReadStream({ gte: start, lt: end }); @@ -328,7 +354,7 @@ WalletService.prototype._loadAllBalances = function(callback) { var start = self._encoding.encodeWalletBalanceKey('00'); var end = self._encoding.encodeWalletBalanceKey(Array(65).join('f')); - var stream = self.db.createReadStream({ + var stream = self.store.createReadStream({ gte: start, lt: end });