itns-sidechain/test/script-introspection-test.js
2021-12-09 11:51:45 +04:00

69 lines
1.9 KiB
JavaScript

'use strict';
const assert = require('bsert');
const Address = require('../lib/primitives/address');
const Script = require('../lib/script/script');
const Witness = require('../lib/script/witness');
const Opcode = require('../lib/script/opcode');
const MTX = require('../lib/primitives/mtx');
const Coin = require('../lib/primitives/coin');
const Output = require('../lib/primitives/output');
const Covenant = require('../lib/primitives/covenant');
describe('Script transaction introspection', function() {
describe('OP_TYPE', function() {
it('should verify covenant type from TX output', async() => {
for (let t = 0; t < 10; t++) {
const script = new Script([
Opcode.fromSymbol('OP_TYPE'),
Opcode.fromInt(t),
Opcode.fromSymbol('OP_EQUAL')
]);
const coin = Coin.fromOptions({
value: 1000,
address: Address.fromScript(script)
});
const witness = new Witness([script.encode()]);
const output = new Output();
output.covenant = new Covenant(t, []);
const mtx = new MTX();
mtx.addCoin(coin);
mtx.inputs[0].witness.fromStack(witness);
mtx.outputs[0] = output;
assert(mtx.verify());
}
});
it('should reject wrong covenant type from TX output', async() => {
for (let t = 0; t < 10; t++) {
const script = new Script([
Opcode.fromSymbol('OP_TYPE'),
Opcode.fromInt(t),
Opcode.fromSymbol('OP_EQUAL')
]);
const coin = Coin.fromOptions({
value: 1000,
address: Address.fromScript(script)
});
const witness = new Witness([script.encode()]);
const output = new Output();
output.covenant = new Covenant(t + 1, []);
const mtx = new MTX();
mtx.addCoin(coin);
mtx.inputs[0].witness.fromStack(witness);
mtx.outputs[0] = output;
assert(!mtx.verify());
}
});
});
});