itns-sidechain/test/script-test.js

133 lines
3.9 KiB
JavaScript
Raw Normal View History

2014-05-04 23:24:32 +04:00
var assert = require('assert');
2016-04-06 18:20:03 -07:00
var bcoin = require('../')();
2016-03-14 19:45:11 -07:00
var Script = bcoin.script;
2016-03-14 20:33:15 -07:00
var Stack = bcoin.script.stack;
2016-03-28 19:42:05 -07:00
var opcodes = bcoin.protocol.constants.opcodes;
2014-05-04 23:24:32 +04:00
describe('Script', function() {
it('should encode/decode script', function() {
var src = '20' +
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f' +
'20' +
'101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f' +
'ac';
2016-02-22 20:37:15 -08:00
var decoded = bcoin.script.decode(new Buffer(src, 'hex'));
2014-05-04 23:24:32 +04:00
assert.equal(decoded.length, 3);
assert.equal(
bcoin.utils.toHex(decoded[0]),
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f');
assert.equal(
bcoin.utils.toHex(decoded[1]),
'101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f');
2016-03-28 19:42:05 -07:00
assert.equal(decoded[2], opcodes.OP_CHECKSIG);
2014-05-04 23:24:32 +04:00
var dst = bcoin.script.encode(decoded);
assert.equal(bcoin.utils.toHex(dst), src);
});
2014-05-06 00:55:24 +04:00
2016-03-28 16:50:59 -07:00
if (0)
2014-05-06 00:55:24 +04:00
it('should encode/decode numbers', function() {
2016-02-22 21:59:52 -08:00
var script = [ 0, 1, 2, 16 ];
2014-05-06 00:55:24 +04:00
var encoded = bcoin.script.encode(script);
assert.deepEqual(encoded, [ 0, 0x51, 0x52, 0x60 ]);
var decoded = bcoin.script.decode(encoded);
assert.deepEqual(decoded, script);
});
it('should recognize a P2SH output', function () {
var hex = 'a91419a7d869032368fd1f1e26e5e73a4ad0e474960e87'
2016-02-22 20:37:15 -08:00
var encoded = new Buffer(hex, 'hex')
2016-03-14 19:45:11 -07:00
var decoded = new bcoin.script(encoded);
assert(decoded.isScripthash())
2016-03-14 20:33:15 -07:00
});
it('should recognize a Null Data output', function () {
var hex = '6a28590c080112220a1b353930632e6f7267282a5f5e294f7665726c6179404f7261636c65103b1a010c'
2016-02-22 20:37:15 -08:00
var encoded = new Buffer(hex, 'hex')
2016-03-14 19:45:11 -07:00
var decoded = new Script(encoded);
assert(decoded.isNulldata())
2016-03-14 20:33:15 -07:00
});
it('should handle if statements correctly', function () {
2016-03-28 19:42:05 -07:00
var inputScript = new Script([opcodes.OP_1, opcodes.OP_2]);
var prevOutScript = new Script([
opcodes.OP_2,
opcodes.OP_EQUAL,
opcodes.OP_IF,
opcodes.OP_3,
opcodes.OP_ELSE,
opcodes.OP_4,
opcodes.OP_ENDIF,
opcodes.OP_5
]);
2016-03-14 20:33:15 -07:00
var stack = new Stack();
2016-03-14 19:45:11 -07:00
inputScript.execute(stack);
var res = prevOutScript.execute(stack);
assert(res);
assert.deepEqual(stack.slice(), [[1], [3], [5]]);
2016-03-28 19:42:05 -07:00
var inputScript = new Script([opcodes.OP_1, opcodes.OP_2]);
var prevOutScript = new Script([
opcodes.OP_9,
opcodes.OP_EQUAL,
opcodes.OP_IF,
opcodes.OP_3,
opcodes.OP_ELSE,
opcodes.OP_4,
opcodes.OP_ENDIF,
opcodes.OP_5
]);
2016-03-14 20:33:15 -07:00
var stack = new Stack();
2016-03-14 19:45:11 -07:00
inputScript.execute(stack);
var res = prevOutScript.execute(stack);
assert(res);
assert.deepEqual(stack.slice(), [[1], [4], [5]]);
2016-03-28 19:42:05 -07:00
var inputScript = new Script([opcodes.OP_1, opcodes.OP_2]);
var prevOutScript = new Script([
opcodes.OP_2,
opcodes.OP_EQUAL,
opcodes.OP_IF,
opcodes.OP_3,
opcodes.OP_ENDIF,
opcodes.OP_5
]);
2016-03-14 20:33:15 -07:00
var stack = new Stack();
2016-03-14 19:45:11 -07:00
inputScript.execute(stack);
var res = prevOutScript.execute(stack);
assert(res);
assert.deepEqual(stack.slice(), [[1], [3], [5]]);
2016-03-28 19:42:05 -07:00
var inputScript = new Script([opcodes.OP_1, opcodes.OP_2]);
var prevOutScript = new Script([
opcodes.OP_9,
opcodes.OP_EQUAL,
opcodes.OP_IF,
opcodes.OP_3,
opcodes.OP_ENDIF,
opcodes.OP_5
]);
2016-03-14 20:33:15 -07:00
var stack = new Stack();
2016-03-14 19:45:11 -07:00
inputScript.execute(stack);
var res = prevOutScript.execute(stack);
assert(res);
assert.deepEqual(stack.slice(), [[1], [5]]);
2016-03-28 19:42:05 -07:00
var inputScript = new Script([opcodes.OP_1, opcodes.OP_2]);
var prevOutScript = new Script([
opcodes.OP_9,
opcodes.OP_EQUAL,
opcodes.OP_NOTIF,
opcodes.OP_3,
opcodes.OP_ENDIF,
opcodes.OP_5
]);
2016-03-14 20:33:15 -07:00
var stack = new Stack();
2016-03-14 19:45:11 -07:00
inputScript.execute(stack);
var res = prevOutScript.execute(stack);
assert(res);
assert.deepEqual(stack.slice(), [[1], [3], [5]]);
2016-03-14 20:33:15 -07:00
});
2014-05-04 23:24:32 +04:00
});