Skip to content

Commit e3096d3

Browse files
author
Braydon Fuller
committed
Address compatibility with pay-to-publickey output scripts.
1 parent 05812b2 commit e3096d3

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

lib/services/address/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@ AddressService.prototype._extractAddressInfoFromScript = function(script) {
230230
var pubkey = script.chunks[0].buf;
231231
var address = Address.fromPublicKey(new PublicKey(pubkey), this.node.network);
232232
hashBuffer = address.hashBuffer;
233+
// pay-to-publickey doesn't have an address, however for compatibility
234+
// purposes, we can create an address
235+
addressType = Address.PayToPublicKeyHash;
233236
} else {
234237
return false;
235238
}

test/services/address/index.unit.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ var bitcorenode = require('../../../');
77
var AddressService = bitcorenode.services.Address;
88
var blockData = require('../../data/livenet-345003.json');
99
var bitcore = require('bitcore');
10+
var Script = bitcore.Script;
11+
var Address = bitcore.Address;
1012
var Networks = bitcore.Networks;
1113
var EventEmitter = require('events').EventEmitter;
1214
var errors = bitcorenode.errors;
@@ -106,6 +108,40 @@ describe('Address Service', function() {
106108
});
107109
});
108110

111+
describe('#_extractAddressInfoFromScript', function() {
112+
var am;
113+
before(function() {
114+
am = new AddressService({node: mocknode});
115+
am.node.network = Networks.livenet;
116+
});
117+
it('pay-to-publickey', function() {
118+
var pubkey = new bitcore.PublicKey('022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da');
119+
var script = Script.buildPublicKeyOut(pubkey);
120+
var info = am._extractAddressInfoFromScript(script);
121+
info.addressType.should.equal(Address.PayToPublicKeyHash);
122+
info.hashBuffer.toString('hex').should.equal('9674af7395592ec5d91573aa8d6557de55f60147');
123+
});
124+
it('pay-to-publickeyhash', function() {
125+
var script = Script('OP_DUP OP_HASH160 20 0x0000000000000000000000000000000000000000 OP_EQUALVERIFY OP_CHECKSIG');
126+
var info = am._extractAddressInfoFromScript(script);
127+
info.addressType.should.equal(Address.PayToPublicKeyHash);
128+
info.hashBuffer.toString('hex').should.equal('0000000000000000000000000000000000000000');
129+
});
130+
it('pay-to-scripthash', function() {
131+
var script = Script('OP_HASH160 20 0x0000000000000000000000000000000000000000 OP_EQUAL');
132+
var info = am._extractAddressInfoFromScript(script);
133+
info.addressType.should.equal(Address.PayToScriptHash);
134+
info.hashBuffer.toString('hex').should.equal('0000000000000000000000000000000000000000');
135+
});
136+
it('non-address script type', function() {
137+
var buf = new Buffer(40);
138+
buf.fill(0);
139+
var script = Script('OP_RETURN 40 0x' + buf.toString('hex'));
140+
var info = am._extractAddressInfoFromScript(script);
141+
info.should.equal(false);
142+
});
143+
});
144+
109145
describe('#blockHandler', function() {
110146
var am;
111147
var testBlock = bitcore.Block.fromString(blockData);

0 commit comments

Comments
 (0)