Merge pull request #248 from braydonf/pubkeyout

Address compatibility with pay-to-publickey output scripts.
This commit is contained in:
Chris Kleeschulte 2015-09-21 14:39:42 -04:00
commit d474d03cf2
2 changed files with 39 additions and 0 deletions

View File

@ -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;
}

View File

@ -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);