diff --git a/lib/Script.js b/lib/Script.js index 85f1772..1fbc5de 100644 --- a/lib/Script.js +++ b/lib/Script.js @@ -110,7 +110,7 @@ function isSmallIntOp(opcode) { Script.prototype.isMultiSig = function() { return (this.chunks.length > 3 && isSmallIntOp(this.chunks[0]) && - Buffer.isBuffer(this.chunks[1]) && + this.chunks.slice(1,this.chunks.length-2).every(function(i){return Buffer.isBuffer(i);}) && isSmallIntOp(this.chunks[this.chunks.length - 2]) && this.chunks[this.chunks.length - 1] == Opcode.map.OP_CHECKMULTISIG); }; diff --git a/test/test.Script.js b/test/test.Script.js index 3117d03..25afbcd 100644 --- a/test/test.Script.js +++ b/test/test.Script.js @@ -175,5 +175,23 @@ describe('Script', function() { }); + describe('#isMultiSig', function() { + it('should return true for valid multisig scripts', function() { + var pubs = testPubKeysHex.map( function(hex) { + return new Buffer(hex,'hex'); + }); + var s1 = Script.createMultisig(3,pubs, {noSorting: true}); + s1.isMultiSig().should.equal(true); + }); + it('should return false for invalid multisig scripts', function() { + (new Script(new Buffer('000000ae','hex'))).isMultiSig().should.equal(false); + var s = new Script(new Buffer('522103bb52138972c48a132fc1f637858c5189607dd0f7fe40c4f20f6ad65f2d389ba42103bb52138972c48a132fc1f637858c5189607dd0f7fe40c4f20f6ad65f2d389ba45f6054ae','hex')); + +console.log('[test.Script.js.189]',s.chunks); //TODO + + (new Script(new Buffer('522103bb52138972c48a132fc1f637858c5189607dd0f7fe40c4f20f6ad65f2d389ba42103bb52138972c48a132fc1f637858c5189607dd0f7fe40c4f20f6ad65f2d389ba45f6054ae','hex'))).isMultiSig().should.equal(false); + + }); + }); });