"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const script_1 = require("./script"); const multisig = require("./templates/multisig"); const nullData = require("./templates/nulldata"); const pubKey = require("./templates/pubkey"); const pubKeyHash = require("./templates/pubkeyhash"); const scriptHash = require("./templates/scripthash"); const witnessCommitment = require("./templates/witnesscommitment"); const witnessPubKeyHash = require("./templates/witnesspubkeyhash"); const witnessScriptHash = require("./templates/witnessscripthash"); const types = { P2MS: 'multisig', NONSTANDARD: 'nonstandard', NULLDATA: 'nulldata', P2PK: 'pubkey', P2PKH: 'pubkeyhash', P2SH: 'scripthash', P2WPKH: 'witnesspubkeyhash', P2WSH: 'witnessscripthash', WITNESS_COMMITMENT: 'witnesscommitment', }; exports.types = types; function classifyOutput(script) { if (witnessPubKeyHash.output.check(script)) return types.P2WPKH; if (witnessScriptHash.output.check(script)) return types.P2WSH; if (pubKeyHash.output.check(script)) return types.P2PKH; if (scriptHash.output.check(script)) return types.P2SH; // XXX: optimization, below functions .decompile before use const chunks = script_1.decompile(script); if (!chunks) throw new TypeError('Invalid script'); if (multisig.output.check(chunks)) return types.P2MS; if (pubKey.output.check(chunks)) return types.P2PK; if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT; if (nullData.output.check(chunks)) return types.NULLDATA; return types.NONSTANDARD; } exports.output = classifyOutput; function classifyInput(script, allowIncomplete) { // XXX: optimization, below functions .decompile before use const chunks = script_1.decompile(script); if (!chunks) throw new TypeError('Invalid script'); if (pubKeyHash.input.check(chunks)) return types.P2PKH; if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH; if (multisig.input.check(chunks, allowIncomplete)) return types.P2MS; if (pubKey.input.check(chunks)) return types.P2PK; return types.NONSTANDARD; } exports.input = classifyInput; function classifyWitness(script, allowIncomplete) { // XXX: optimization, below functions .decompile before use const chunks = script_1.decompile(script); if (!chunks) throw new TypeError('Invalid script'); if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH; if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH; return types.NONSTANDARD; } exports.witness = classifyWitness;