74 lines
2.4 KiB
74 lines
2.4 KiB
var decompile = require('../script').decompile
|
|
var multisig = require('./multisig')
|
|
var nullData = require('./nulldata')
|
|
var pubKey = require('./pubkey')
|
|
var pubKeyHash = require('./pubkeyhash')
|
|
var scriptHash = require('./scripthash')
|
|
var witnessPubKeyHash = require('./witnesspubkeyhash')
|
|
var witnessScriptHash = require('./witnessscripthash')
|
|
var witnessCommitment = require('./witnesscommitment')
|
|
|
|
var types = {
|
|
MULTISIG: 'multisig',
|
|
NONSTANDARD: 'nonstandard',
|
|
NULLDATA: 'nulldata',
|
|
P2PK: 'pubkey',
|
|
P2PKH: 'pubkeyhash',
|
|
P2SH: 'scripthash',
|
|
P2WPKH: 'witnesspubkeyhash',
|
|
P2WSH: 'witnessscripthash',
|
|
WITNESS_COMMITMENT: 'witnesscommitment'
|
|
}
|
|
|
|
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
|
|
var chunks = decompile(script)
|
|
if (multisig.output.check(chunks)) return types.MULTISIG
|
|
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
|
|
}
|
|
|
|
function classifyInput (script, allowIncomplete) {
|
|
// XXX: optimization, below functions .decompile before use
|
|
var chunks = decompile(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.MULTISIG
|
|
if (pubKey.input.check(chunks)) return types.P2PK
|
|
|
|
return types.NONSTANDARD
|
|
}
|
|
|
|
function classifyWitness (script, allowIncomplete) {
|
|
// XXX: optimization, below functions .decompile before use
|
|
var chunks = decompile(script)
|
|
|
|
if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
|
|
if (witnessScriptHash.input.check(chunks)) return types.P2WSH
|
|
|
|
return types.NONSTANDARD
|
|
}
|
|
|
|
module.exports = {
|
|
classifyInput: classifyInput,
|
|
classifyOutput: classifyOutput,
|
|
classifyWitness: classifyWitness,
|
|
multisig: multisig,
|
|
nullData: nullData,
|
|
pubKey: pubKey,
|
|
pubKeyHash: pubKeyHash,
|
|
scriptHash: scriptHash,
|
|
witnessPubKeyHash: witnessPubKeyHash,
|
|
witnessScriptHash: witnessScriptHash,
|
|
witnessCommitment: witnessCommitment,
|
|
types: types
|
|
}
|
|
|