diff --git a/lib/services/address/index.js b/lib/services/address/index.js index eea07afd7..57902457d 100644 --- a/lib/services/address/index.js +++ b/lib/services/address/index.js @@ -230,6 +230,9 @@ AddressService.prototype._extractAddressInfoFromScript = function(script) { var pubkey = script.chunks[0].buf; var address = Address.fromPublicKey(new PublicKey(pubkey), this.node.network); hashBuffer = address.hashBuffer; + // pay-to-publickey doesn't have an address, however for compatibility + // purposes, we can create an address + addressType = Address.PayToPublicKeyHash; } else { return false; } diff --git a/test/services/address/index.unit.js b/test/services/address/index.unit.js index 8dd3df874..ef3da7bb6 100644 --- a/test/services/address/index.unit.js +++ b/test/services/address/index.unit.js @@ -7,6 +7,8 @@ var bitcorenode = require('../../../'); var AddressService = bitcorenode.services.Address; var blockData = require('../../data/livenet-345003.json'); var bitcore = require('bitcore'); +var Script = bitcore.Script; +var Address = bitcore.Address; var Networks = bitcore.Networks; var EventEmitter = require('events').EventEmitter; var errors = bitcorenode.errors; @@ -106,6 +108,40 @@ describe('Address Service', function() { }); }); + describe('#_extractAddressInfoFromScript', function() { + var am; + before(function() { + am = new AddressService({node: mocknode}); + am.node.network = Networks.livenet; + }); + it('pay-to-publickey', function() { + var pubkey = new bitcore.PublicKey('022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da'); + var script = Script.buildPublicKeyOut(pubkey); + var info = am._extractAddressInfoFromScript(script); + info.addressType.should.equal(Address.PayToPublicKeyHash); + info.hashBuffer.toString('hex').should.equal('9674af7395592ec5d91573aa8d6557de55f60147'); + }); + it('pay-to-publickeyhash', function() { + var script = Script('OP_DUP OP_HASH160 20 0x0000000000000000000000000000000000000000 OP_EQUALVERIFY OP_CHECKSIG'); + var info = am._extractAddressInfoFromScript(script); + info.addressType.should.equal(Address.PayToPublicKeyHash); + info.hashBuffer.toString('hex').should.equal('0000000000000000000000000000000000000000'); + }); + it('pay-to-scripthash', function() { + var script = Script('OP_HASH160 20 0x0000000000000000000000000000000000000000 OP_EQUAL'); + var info = am._extractAddressInfoFromScript(script); + info.addressType.should.equal(Address.PayToScriptHash); + info.hashBuffer.toString('hex').should.equal('0000000000000000000000000000000000000000'); + }); + it('non-address script type', function() { + var buf = new Buffer(40); + buf.fill(0); + var script = Script('OP_RETURN 40 0x' + buf.toString('hex')); + var info = am._extractAddressInfoFromScript(script); + info.should.equal(false); + }); + }); + describe('#blockHandler', function() { var am; var testBlock = bitcore.Block.fromString(blockData);