From b87e687fd9c4994e21f8706813fa683c3de90039 Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Thu, 4 Dec 2014 11:01:23 -0300 Subject: [PATCH] implement Script.buildPublicKeyHashOut() --- lib/script.js | 14 ++++++++++++-- test/script.js | 6 +++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/script.js b/lib/script.js index 8f7a15c..65fcb55 100644 --- a/lib/script.js +++ b/lib/script.js @@ -3,6 +3,8 @@ var BufferReader = require('./encoding/bufferreader'); var BufferWriter = require('./encoding/bufferwriter'); var Opcode = require('./opcode'); +var Address = require('./address'); +var PublicKey = require('./publickey'); var Script = function Script(from) { if (!(this instanceof Script)) { @@ -445,8 +447,16 @@ Script.buildMultisigOut = function(pubkeys, m) { * address or public key */ Script.buildPublicKeyHashOut = function(to) { - console.log(to); - return new Script(); + if (to instanceof PublicKey) { + to = to.toAddress(); + } + var s = new Script(); + s.add(Opcode('OP_DUP')) + .add(Opcode('OP_HASH160')) + .add(to.hashBuffer) + .add(Opcode('OP_EQUALVERIFY')) + .add(Opcode('OP_CHECKSIG')); + return s; }; /** diff --git a/test/script.js b/test/script.js index b84a6ec..4e8844e 100644 --- a/test/script.js +++ b/test/script.js @@ -404,21 +404,21 @@ describe('Script', function() { var address = Address.fromString('1NaTVwXDDUJaXDQajoa9MqHhz4uTxtgK14'); var s = Script.buildPublicKeyHashOut(address); should.exist(s); - s.toString().should.equal('OP_DUP OP_HASH160 ecae7d092947b7ee4998e254aa48900d26d2ce1d OP_EQUALVERIFY OP_CHECKSIG'); + s.toString().should.equal('OP_DUP OP_HASH160 20 0xecae7d092947b7ee4998e254aa48900d26d2ce1d OP_EQUALVERIFY OP_CHECKSIG'); s.isPublicKeyHashOut().should.equal(true); }); it('should create script from testnet address', function() { var address = Address.fromString('mxRN6AQJaDi5R6KmvMaEmZGe3n5ScV9u33'); var s = Script.buildPublicKeyHashOut(address); should.exist(s); - s.toString().should.equal('OP_DUP OP_HASH160 b96b816f378babb1fe585b7be7a2cd16eb99b3e4 OP_EQUALVERIFY OP_CHECKSIG'); + s.toString().should.equal('OP_DUP OP_HASH160 20 0xb96b816f378babb1fe585b7be7a2cd16eb99b3e4 OP_EQUALVERIFY OP_CHECKSIG'); s.isPublicKeyHashOut().should.equal(true); }); it('should create script from public key', function() { var pubkey = new PublicKey('022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da'); var s = Script.buildPublicKeyHashOut(pubkey); should.exist(s); - s.toString().should.equal('OP_DUP OP_HASH160 9674af7395592ec5d91573aa8d6557de55f60147 OP_EQUALVERIFY OP_CHECKSIG'); + s.toString().should.equal('OP_DUP OP_HASH160 20 0x9674af7395592ec5d91573aa8d6557de55f60147 OP_EQUALVERIFY OP_CHECKSIG'); s.isPublicKeyHashOut().should.equal(true); }); });