75 lines
2.7 KiB
JavaScript
75 lines
2.7 KiB
JavaScript
"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;
|