diff --git a/lib/script/script.js b/lib/script/script.js index 4945e1f..523e88c 100644 --- a/lib/script/script.js +++ b/lib/script/script.js @@ -291,9 +291,6 @@ Script.prototype.isScriptHashIn = function() { return false; } var redeemChunk = this.chunks[this.chunks.length - 1]; - if (!redeemChunk) { - return false; - } var redeemBuf = redeemChunk.buf; if (!redeemBuf) { return false; @@ -449,14 +446,12 @@ Script.prototype.equals = function(script) { } var i; for (i = 0; i < this.chunks.length; i++) { - if (BufferUtil.isBuffer(this.chunks[i]) && !BufferUtil.isBuffer(script.chunks[i])) { - return false; - } else if (this.chunks[i] instanceof Opcode && !(script.chunks[i] instanceof Opcode)) { + if (BufferUtil.isBuffer(this.chunks[i].buf) && !BufferUtil.isBuffer(script.chunks[i].buf)) { return false; } - if (BufferUtil.isBuffer(this.chunks[i]) && !BufferUtil.equals(this.chunks[i], script.chunks[i])) { + if (BufferUtil.isBuffer(this.chunks[i].buf) && !BufferUtil.equals(this.chunks[i].buf, script.chunks[i].buf)) { return false; - } else if (this.chunks[i].num !== script.chunks[i].num) { + } else if (this.chunks[i].opcodenum !== script.chunks[i].opcodenum) { return false; } } diff --git a/test/script/script.js b/test/script/script.js index 6de5476..61cf787 100644 --- a/test/script/script.js +++ b/test/script/script.js @@ -11,6 +11,8 @@ var Opcode = bitcore.Opcode; var PublicKey = bitcore.PublicKey; var Address = bitcore.Address; +var script_valid = require('../data/bitcoind/script_valid'); + describe('Script', function() { it('should make a new script', function() { @@ -713,5 +715,22 @@ describe('Script', function() { }); }); + describe('equals', function() { + it('returns true for same script', function() { + Script('OP_TRUE').equals(Script('OP_TRUE')).should.equal(true); + }); + it('returns false for different chunks sizes', function() { + Script('OP_TRUE').equals(Script('OP_TRUE OP_TRUE')).should.equal(false); + }); + it('returns false for different opcodes', function() { + Script('OP_TRUE OP_TRUE').equals(Script('OP_TRUE OP_FALSE')).should.equal(false); + }); + it('returns false for different data', function() { + Script().add(new Buffer('a')).equals(Script('OP_TRUE')).should.equal(false); + }); + it('returns false for different data', function() { + Script().add(new Buffer('a')).equals(Script().add(new Buffer('b'))).should.equal(false); + }); + }); });