UNPKG

2.57 kBJavaScriptView Raw
1'use strict';
2Object.defineProperty(exports, '__esModule', { value: true });
3const script_1 = require('./script');
4const multisig = require('./templates/multisig');
5const nullData = require('./templates/nulldata');
6const pubKey = require('./templates/pubkey');
7const pubKeyHash = require('./templates/pubkeyhash');
8const scriptHash = require('./templates/scripthash');
9const witnessCommitment = require('./templates/witnesscommitment');
10const witnessPubKeyHash = require('./templates/witnesspubkeyhash');
11const witnessScriptHash = require('./templates/witnessscripthash');
12const types = {
13 P2MS: 'multisig',
14 NONSTANDARD: 'nonstandard',
15 NULLDATA: 'nulldata',
16 P2PK: 'pubkey',
17 P2PKH: 'pubkeyhash',
18 P2SH: 'scripthash',
19 P2WPKH: 'witnesspubkeyhash',
20 P2WSH: 'witnessscripthash',
21 WITNESS_COMMITMENT: 'witnesscommitment',
22};
23exports.types = types;
24function classifyOutput(script) {
25 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH;
26 if (witnessScriptHash.output.check(script)) return types.P2WSH;
27 if (pubKeyHash.output.check(script)) return types.P2PKH;
28 if (scriptHash.output.check(script)) return types.P2SH;
29 // XXX: optimization, below functions .decompile before use
30 const chunks = script_1.decompile(script);
31 if (!chunks) throw new TypeError('Invalid script');
32 if (multisig.output.check(chunks)) return types.P2MS;
33 if (pubKey.output.check(chunks)) return types.P2PK;
34 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT;
35 if (nullData.output.check(chunks)) return types.NULLDATA;
36 return types.NONSTANDARD;
37}
38exports.output = classifyOutput;
39function classifyInput(script, allowIncomplete) {
40 // XXX: optimization, below functions .decompile before use
41 const chunks = script_1.decompile(script);
42 if (!chunks) throw new TypeError('Invalid script');
43 if (pubKeyHash.input.check(chunks)) return types.P2PKH;
44 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH;
45 if (multisig.input.check(chunks, allowIncomplete)) return types.P2MS;
46 if (pubKey.input.check(chunks)) return types.P2PK;
47 return types.NONSTANDARD;
48}
49exports.input = classifyInput;
50function classifyWitness(script, allowIncomplete) {
51 // XXX: optimization, below functions .decompile before use
52 const chunks = script_1.decompile(script);
53 if (!chunks) throw new TypeError('Invalid script');
54 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH;
55 if (witnessScriptHash.input.check(chunks, allowIncomplete))
56 return types.P2WSH;
57 return types.NONSTANDARD;
58}
59exports.witness = classifyWitness;