UNPKG

@ecash/lib

Version:

Library for eCash transaction building

164 lines 6.61 kB
"use strict"; // Copyright (c) 2024 The Bitcoin developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. Object.defineProperty(exports, "__esModule", { value: true }); exports.SIG_HASH_TYPES_LEGACY = exports.SIG_HASH_TYPES_BIP143 = exports.SINGLE_ANYONECANPAY_LEGACY = exports.SINGLE_LEGACY = exports.NONE_ANYONECANPAY_LEGACY = exports.NONE_LEGACY = exports.ALL_ANYONECANPAY_LEGACY = exports.ALL_LEGACY = exports.SINGLE_ANYONECANPAY_BIP143 = exports.SINGLE_BIP143 = exports.NONE_ANYONECANPAY_BIP143 = exports.NONE_BIP143 = exports.ALL_ANYONECANPAY_BIP143 = exports.ALL_BIP143 = exports.SigHashTypeOutputs = exports.SigHashTypeInputs = exports.SigHashTypeVariant = exports.SigHashType = void 0; /** Type of sighash used to sign for an input for a OP_CHECKSIG operation. */ class SigHashType { constructor(params) { this.variant = params.variant; this.inputType = params.inputType; this.outputType = params.outputType; } /** Reconstruct a SigHashType from the flags */ static fromInt(flags) { if (flags > 0xff || flags < 0) { return undefined; } // No bits may be set other than 0x80, 0x40, 0x02 and 0x01 if ((flags & 0x3c) != 0) { return undefined; } const outputFlags = flags & 0x03; if (outputFlags == 0) { // 0 is not a valid output type return undefined; } return new SigHashType({ variant: flags & 0x40 ? SigHashTypeVariant.BIP143 : SigHashTypeVariant.LEGACY, inputType: flags & 0x80 ? SigHashTypeInputs.ANYONECANPAY : SigHashTypeInputs.FIXED, outputType: outputFlags == 1 ? SigHashTypeOutputs.ALL : outputFlags == 2 ? SigHashTypeOutputs.NONE : SigHashTypeOutputs.SINGLE, }); } /** Get the sighash type as integer flags */ toInt() { return this.variant | this.inputType | this.outputType; } } exports.SigHashType = SigHashType; /** Variant of the sighash */ var SigHashTypeVariant; (function (SigHashTypeVariant) { /** Original Satoshi, pre-BIP143 sighash */ SigHashTypeVariant[SigHashTypeVariant["LEGACY"] = 0] = "LEGACY"; /** New BIP143 sighash introduced by UAHF */ SigHashTypeVariant[SigHashTypeVariant["BIP143"] = 64] = "BIP143"; })(SigHashTypeVariant || (exports.SigHashTypeVariant = SigHashTypeVariant = {})); /** How tx inputs are signed */ var SigHashTypeInputs; (function (SigHashTypeInputs) { /** Inputs are fixed, no other inputs can added/removeed */ SigHashTypeInputs[SigHashTypeInputs["FIXED"] = 0] = "FIXED"; /** Inputs are arbitrary, other inputs can be added/removed */ SigHashTypeInputs[SigHashTypeInputs["ANYONECANPAY"] = 128] = "ANYONECANPAY"; })(SigHashTypeInputs || (exports.SigHashTypeInputs = SigHashTypeInputs = {})); /** How tx outputs are signed */ var SigHashTypeOutputs; (function (SigHashTypeOutputs) { /** All outputs are signed, no outputs can be added/removed */ SigHashTypeOutputs[SigHashTypeOutputs["ALL"] = 1] = "ALL"; /** No outputs are signed, they can be anything */ SigHashTypeOutputs[SigHashTypeOutputs["NONE"] = 2] = "NONE"; /** The output with the identical index as this input is signed */ SigHashTypeOutputs[SigHashTypeOutputs["SINGLE"] = 3] = "SINGLE"; })(SigHashTypeOutputs || (exports.SigHashTypeOutputs = SigHashTypeOutputs = {})); /** ALL|BIP143 */ exports.ALL_BIP143 = new SigHashType({ variant: SigHashTypeVariant.BIP143, inputType: SigHashTypeInputs.FIXED, outputType: SigHashTypeOutputs.ALL, }); /** ALL|ANYONECANPAY|BIP143 */ exports.ALL_ANYONECANPAY_BIP143 = new SigHashType({ variant: SigHashTypeVariant.BIP143, inputType: SigHashTypeInputs.ANYONECANPAY, outputType: SigHashTypeOutputs.ALL, }); /** NONE|BIP143 */ exports.NONE_BIP143 = new SigHashType({ variant: SigHashTypeVariant.BIP143, inputType: SigHashTypeInputs.FIXED, outputType: SigHashTypeOutputs.NONE, }); /** NONE|ANYONECANPAY|BIP143 */ exports.NONE_ANYONECANPAY_BIP143 = new SigHashType({ variant: SigHashTypeVariant.BIP143, inputType: SigHashTypeInputs.ANYONECANPAY, outputType: SigHashTypeOutputs.NONE, }); /** SINGLE|BIP143 */ exports.SINGLE_BIP143 = new SigHashType({ variant: SigHashTypeVariant.BIP143, inputType: SigHashTypeInputs.FIXED, outputType: SigHashTypeOutputs.SINGLE, }); /** SINGLE|ANYONECANPAY|BIP143 */ exports.SINGLE_ANYONECANPAY_BIP143 = new SigHashType({ variant: SigHashTypeVariant.BIP143, inputType: SigHashTypeInputs.ANYONECANPAY, outputType: SigHashTypeOutputs.SINGLE, }); /** ALL|LEGACY */ exports.ALL_LEGACY = new SigHashType({ variant: SigHashTypeVariant.LEGACY, inputType: SigHashTypeInputs.FIXED, outputType: SigHashTypeOutputs.ALL, }); /** ALL|ANYONECANPAY|LEGACY */ exports.ALL_ANYONECANPAY_LEGACY = new SigHashType({ variant: SigHashTypeVariant.LEGACY, inputType: SigHashTypeInputs.ANYONECANPAY, outputType: SigHashTypeOutputs.ALL, }); /** NONE|LEGACY */ exports.NONE_LEGACY = new SigHashType({ variant: SigHashTypeVariant.LEGACY, inputType: SigHashTypeInputs.FIXED, outputType: SigHashTypeOutputs.NONE, }); /** NONE|ANYONECANPAY|LEGACY */ exports.NONE_ANYONECANPAY_LEGACY = new SigHashType({ variant: SigHashTypeVariant.LEGACY, inputType: SigHashTypeInputs.ANYONECANPAY, outputType: SigHashTypeOutputs.NONE, }); /** SINGLE|LEGACY */ exports.SINGLE_LEGACY = new SigHashType({ variant: SigHashTypeVariant.LEGACY, inputType: SigHashTypeInputs.FIXED, outputType: SigHashTypeOutputs.SINGLE, }); /** SINGLE|ANYONECANPAY|LEGACY */ exports.SINGLE_ANYONECANPAY_LEGACY = new SigHashType({ variant: SigHashTypeVariant.LEGACY, inputType: SigHashTypeInputs.ANYONECANPAY, outputType: SigHashTypeOutputs.SINGLE, }); /** List of BIP143 sighashes (FORKID) */ exports.SIG_HASH_TYPES_BIP143 = [ exports.ALL_BIP143, exports.ALL_ANYONECANPAY_BIP143, exports.NONE_BIP143, exports.NONE_ANYONECANPAY_BIP143, exports.SINGLE_BIP143, exports.SINGLE_ANYONECANPAY_BIP143, ]; /** List of legacy sighashes (OG Bitcoin signature) */ exports.SIG_HASH_TYPES_LEGACY = [ exports.ALL_LEGACY, exports.ALL_ANYONECANPAY_LEGACY, exports.NONE_LEGACY, exports.NONE_ANYONECANPAY_LEGACY, exports.SINGLE_LEGACY, exports.SINGLE_ANYONECANPAY_LEGACY, ]; //# sourceMappingURL=sigHashType.js.map