Add tests for script.toASM() and new method script.fromASM()
This commit is contained in:
parent
b81a64e8cf
commit
55d8c4156a
|
@ -134,6 +134,48 @@ Script.prototype.toBuffer = function() {
|
|||
return bw.concat();
|
||||
};
|
||||
|
||||
Script.fromASM = function(str) {
|
||||
var script = new Script();
|
||||
script.chunks = [];
|
||||
|
||||
var tokens = str.split(' ');
|
||||
var i = 0;
|
||||
while (i < tokens.length) {
|
||||
var token = tokens[i];
|
||||
var opcode = Opcode(token);
|
||||
var opcodenum = opcode.toNumber();
|
||||
|
||||
if (_.isUndefined(opcodenum)) {
|
||||
var buf = new Buffer(tokens[i], 'hex');
|
||||
script.chunks.push({
|
||||
buf: buf,
|
||||
len: buf.length,
|
||||
opcodenum: buf.length
|
||||
});
|
||||
i = i + 1;
|
||||
} else if (opcodenum === Opcode.OP_PUSHDATA1 ||
|
||||
opcodenum === Opcode.OP_PUSHDATA2 ||
|
||||
opcodenum === Opcode.OP_PUSHDATA4) {
|
||||
script.chunks.push({
|
||||
buf: new Buffer(tokens[i + 2], 'hex'),
|
||||
len: parseInt(tokens[i + 1]),
|
||||
opcodenum: opcodenum
|
||||
});
|
||||
i = i + 3;
|
||||
} else {
|
||||
script.chunks.push({
|
||||
opcodenum: opcodenum
|
||||
});
|
||||
i = i + 1;
|
||||
}
|
||||
}
|
||||
return script;
|
||||
};
|
||||
|
||||
Script.fromHex = function(str) {
|
||||
return new Script(new buffer.Buffer(str, 'hex'));
|
||||
};
|
||||
|
||||
Script.fromString = function(str) {
|
||||
if (JSUtil.isHexa(str) || str.length === 0) {
|
||||
return new Script(new buffer.Buffer(str, 'hex'));
|
||||
|
|
|
@ -159,6 +159,19 @@ describe('Script', function() {
|
|||
|
||||
});
|
||||
|
||||
describe('#fromASM', function() {
|
||||
it('should parse this known script in ASM', function() {
|
||||
var asm = 'OP_DUP OP_HASH160 f4c03610e60ad15100929cc23da2f3a799af1725 OP_EQUALVERIFY OP_CHECKSIG';
|
||||
var script = Script.fromASM(asm);
|
||||
script.chunks[0].opcodenum.should.equal(Opcode.OP_DUP);
|
||||
script.chunks[1].opcodenum.should.equal(Opcode.OP_HASH160);
|
||||
script.chunks[2].opcodenum.should.equal(20);
|
||||
script.chunks[2].buf.toString('hex').should.equal('f4c03610e60ad15100929cc23da2f3a799af1725');
|
||||
script.chunks[3].opcodenum.should.equal(Opcode.OP_EQUALVERIFY);
|
||||
script.chunks[4].opcodenum.should.equal(Opcode.OP_CHECKSIG);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#fromString', function() {
|
||||
|
||||
it('should parse these known scripts', function() {
|
||||
|
@ -191,6 +204,11 @@ describe('Script', function() {
|
|||
script.toString().toString('hex').should.equal('OP_0 OP_PUSHDATA4 3 0x010203 OP_0');
|
||||
});
|
||||
|
||||
it('should output this known script as ASM', function() {
|
||||
var script = Script.fromHex('76a914f4c03610e60ad15100929cc23da2f3a799af172588ac');
|
||||
script.toASM().should.equal('OP_DUP OP_HASH160 f4c03610e60ad15100929cc23da2f3a799af1725 OP_EQUALVERIFY OP_CHECKSIG');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('toHex', function() {
|
||||
|
|
Loading…
Reference in New Issue