@ecash/lib
Version:
Library for eCash transaction building
164 lines • 6.61 kB
JavaScript
"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