utxo-descriptors 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/chains.ts","../src/checksum.ts","../src/base58.ts","../src/key-expression.ts","../src/traverse.ts","../src/multipath.ts","../src/tokenizer.ts","../src/parse.ts","../src/bech32.ts","../src/weights.ts"],"names":["decoded","CHECKSUM_LENGTH","fail","GENERATOR","polymod"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Chain parameters as data, not code. `addr()` output weight only needs the\n * base58 version bytes (bech32 addresses carry no chain-specific information\n * relevant to weight). Add a chain by constructing a new `ChainParams`\n * object; nothing else in this package needs to change.\n */\nexport interface ChainParams {\n readonly name: string;\n readonly bech32Hrp: string;\n readonly base58PubKeyHash: number;\n readonly base58ScriptHash: number;\n}\n\nexport const BITCOIN: ChainParams = {\n name: \"bitcoin\",\n bech32Hrp: \"bc\",\n base58PubKeyHash: 0x00,\n base58ScriptHash: 0x05,\n};\n\nexport const BITCOIN_TESTNET: ChainParams = {\n name: \"bitcoin-testnet\",\n bech32Hrp: \"tb\",\n base58PubKeyHash: 0x6f,\n base58ScriptHash: 0xc4,\n};\n\nexport const LITECOIN: ChainParams = {\n name: \"litecoin\",\n bech32Hrp: \"ltc\",\n base58PubKeyHash: 0x30,\n base58ScriptHash: 0x32,\n};\n\nexport const LITECOIN_TESTNET: ChainParams = {\n name: \"litecoin-testnet\",\n bech32Hrp: \"tltc\",\n base58PubKeyHash: 0x6f,\n base58ScriptHash: 0x3a,\n};\n","/**\n * BIP-380 descriptor checksum: a BCH code over a 95-character alphabet split\n * into 3 groups of 32/32/31, using the same 32-character output alphabet as\n * bech32. See https://github.com/bitcoin/bips/blob/master/bip-0380.mediawiki.\n */\nconst INPUT_CHARSET =\n \"0123456789()[],'/*abcdefgh@:$%{}IJKLMNOPQRSTUVWXYZ&+-.;<=>?!^_|~ijklmnopqrstuvwxyzABCDEFGH`#\\\"\\\\ \";\nconst CHECKSUM_CHARSET = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\";\nconst GENERATOR = [0xf5dee51989n, 0xa9fdca3312n, 0x1bab10e32dn, 0x3706b1677an, 0x644d626ffdn];\nconst CHECKSUM_LENGTH = 8;\nconst GROUP_SIZE = 3;\nconst GROUP_BITS = 5;\nconst GROUP_MASK = 0x7ffffffffn;\nconst TOP_SHIFT = 35n;\nconst SYMBOL_MASK = 31;\n\nfunction polymod(symbols: readonly number[]): bigint {\n let checksum = 1n;\n\n for (const symbol of symbols) {\n const top = checksum >> TOP_SHIFT;\n\n checksum = ((checksum & GROUP_MASK) << 5n) ^ BigInt(symbol);\n\n for (let bit = 0; bit < GENERATOR.length; bit += 1) {\n const generatorValue = GENERATOR[bit];\n\n if (generatorValue !== undefined && ((top >> BigInt(bit)) & 1n) === 1n) {\n checksum ^= generatorValue;\n }\n }\n }\n\n return checksum;\n}\n\n/** Returns undefined when `text` contains a character outside INPUT_CHARSET. */\nfunction expand(text: string): number[] | undefined {\n const symbols: number[] = [];\n\n let groupAccumulator = 0;\n let groupCount = 0;\n\n for (const char of text) {\n const value = INPUT_CHARSET.indexOf(char);\n\n if (value === -1) {\n return undefined;\n }\n\n symbols.push(value & SYMBOL_MASK);\n groupAccumulator = groupAccumulator * GROUP_SIZE + (value >> GROUP_BITS);\n groupCount += 1;\n\n if (groupCount === GROUP_SIZE) {\n symbols.push(groupAccumulator);\n groupAccumulator = 0;\n groupCount = 0;\n }\n }\n\n if (groupCount > 0) {\n symbols.push(groupAccumulator);\n }\n\n return symbols;\n}\n\n/** Computes the 8-character checksum for a descriptor with no `#` suffix. */\nexport function checksumCreate(script: string): string | undefined {\n const symbols = expand(script);\n\n if (symbols === undefined) {\n return undefined;\n }\n\n const checksum = polymod([...symbols, 0, 0, 0, 0, 0, 0, 0, 0]) ^ 1n;\n\n let result = \"\";\n\n for (let index = 0; index < CHECKSUM_LENGTH; index += 1) {\n const shift = BigInt(GROUP_BITS * (CHECKSUM_LENGTH - 1 - index));\n const symbolIndex = Number((checksum >> shift) & BigInt(SYMBOL_MASK));\n\n // Safe by construction: SYMBOL_MASK (31) bounds symbolIndex to\n // CHECKSUM_CHARSET's 32 characters.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n result += CHECKSUM_CHARSET[symbolIndex]!;\n }\n\n return result;\n}\n\n/** Verifies an 8-character checksum against the script it was computed from. */\nexport function checksumVerify(script: string, checksum: string): boolean {\n if (checksum.length !== CHECKSUM_LENGTH) {\n return false;\n }\n\n const scriptSymbols = expand(script);\n\n if (scriptSymbols === undefined) {\n return false;\n }\n\n const checksumSymbols: number[] = [];\n\n for (const char of checksum) {\n const value = CHECKSUM_CHARSET.indexOf(char);\n\n if (value === -1) {\n return false;\n }\n\n checksumSymbols.push(value);\n }\n\n return polymod([...scriptSymbols, ...checksumSymbols]) === 1n;\n}\n\nexport function hasValidCharset(text: string): boolean {\n return expand(text) !== undefined;\n}\n","const ALPHABET = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nconst BASE = 58n;\nconst BYTE_MAX_PLUS_ONE = 256n;\nconst CHAR_TO_VALUE = new Map<string, bigint>(\n ALPHABET.split(\"\").map((char, index) => [char, BigInt(index)]),\n);\n\n/**\n * Decodes base58 text into raw bytes without verifying (or removing) any\n * trailing checksum. This package never needs SHA256, so callers that need\n * checksum verification must bring their own; see the README for the exact\n * limitation this implies for `addr()` base58 addresses.\n */\nexport function base58Decode(text: string): Uint8Array | undefined {\n if (text.length === 0) {\n return undefined;\n }\n\n let value = 0n;\n\n for (const char of text) {\n const digit = CHAR_TO_VALUE.get(char);\n\n if (digit === undefined) {\n return undefined;\n }\n\n value = value * BASE + digit;\n }\n\n const bytes: number[] = [];\n\n while (value > 0n) {\n bytes.unshift(Number(value % BYTE_MAX_PLUS_ONE));\n value /= BYTE_MAX_PLUS_ONE;\n }\n\n for (const char of text) {\n if (char !== \"1\") {\n break;\n }\n\n bytes.unshift(0);\n }\n\n return Uint8Array.from(bytes);\n}\n","import { base58Decode } from \"./base58\";\nimport type { KeyExpression, KeyMaterialKind, KeyOrigin, PathElement, PathStep } from \"./types\";\n\nconst MAX_INDEX = 2147483647;\nconst FINGERPRINT_PATTERN = /^[0-9a-fA-F]{8}$/;\nconst STEP_PATTERN = /^([0-9]+)(h|')?$/;\nconst EXTENDED_KEY_BYTES = 82;\nconst WIF_UNCOMPRESSED_BYTES = 37;\nconst WIF_COMPRESSED_BYTES = 38;\nconst XPUB_VERSIONS: Readonly<Record<string, number>> = {\n xpub: 0x0488b21e,\n xprv: 0x0488ade4,\n tpub: 0x043587cf,\n tprv: 0x04358394,\n};\n\nexport interface KeyExpressionFailure {\n readonly ok: false;\n readonly message: string;\n}\n\nexport interface KeyExpressionSuccess {\n readonly ok: true;\n readonly key: KeyExpression;\n}\n\nexport type KeyExpressionResult = KeyExpressionSuccess | KeyExpressionFailure;\n\nfunction fail(message: string): KeyExpressionFailure {\n return { ok: false, message };\n}\n\nfunction parseStep(segment: string): PathStep | undefined {\n const match = STEP_PATTERN.exec(segment);\n\n if (match === null) {\n return undefined;\n }\n\n const [, digits, marker] = match;\n const index = Number(digits);\n\n if (!Number.isSafeInteger(index) || index > MAX_INDEX) {\n return undefined;\n }\n\n return { index, hardened: marker !== undefined };\n}\n\nfunction parseOrigin(bracketed: string): KeyOrigin | undefined {\n const segments = bracketed.split(\"/\");\n const [fingerprint, ...pathSegments] = segments;\n\n if (fingerprint === undefined || !FINGERPRINT_PATTERN.test(fingerprint)) {\n return undefined;\n }\n\n const path: PathStep[] = [];\n\n for (const segment of pathSegments) {\n const step = parseStep(segment);\n\n if (step === undefined) {\n return undefined;\n }\n\n path.push(step);\n }\n\n return { fingerprint: fingerprint.toLowerCase(), path };\n}\n\ninterface OriginSplit {\n readonly origin?: KeyOrigin;\n readonly remainder: string;\n}\n\nfunction splitOrigin(text: string): OriginSplit | KeyExpressionFailure {\n if (!text.startsWith(\"[\")) {\n return { remainder: text };\n }\n\n const closeIndex = text.indexOf(\"]\");\n\n if (closeIndex === -1) {\n return fail(\"unterminated key origin: missing ']'\");\n }\n\n const origin = parseOrigin(text.slice(1, closeIndex));\n\n if (origin === undefined) {\n return fail(\n \"invalid key origin: expected an 8-character hex fingerprint and /NUM or /NUMh steps\",\n );\n }\n\n const remainder = text.slice(closeIndex + 1);\n\n if (remainder.startsWith(\"[\")) {\n return fail(\"a key expression may only carry one key origin\");\n }\n\n if (remainder.length === 0) {\n return fail(\"key origin is not followed by a key\");\n }\n\n return { origin, remainder };\n}\n\nfunction parseTrailingPath(\n text: string,\n): { readonly path: PathElement[]; readonly isRanged: boolean } | undefined {\n if (text.length === 0) {\n return { path: [], isRanged: false };\n }\n\n const segments = text.slice(1).split(\"/\");\n const path: PathElement[] = [];\n\n for (const [index, segment] of segments.entries()) {\n const isLast = index === segments.length - 1;\n\n if (isLast && /^\\*(h|')?$/.test(segment)) {\n return { path, isRanged: true };\n }\n\n if (segment.startsWith(\"<\") && segment.endsWith(\">\")) {\n const values = segment\n .slice(1, -1)\n .split(\";\")\n .map((part) => parseStep(part));\n\n if (values.length < 2 || values.some((value) => value === undefined)) {\n return undefined;\n }\n\n const resolved = values as PathStep[];\n const seen = new Set<string>();\n\n for (const value of resolved) {\n const key = `${String(value.index)}:${String(value.hardened)}`;\n\n if (seen.has(key)) {\n return undefined;\n }\n\n seen.add(key);\n }\n\n path.push({ kind: \"multipath\", values: resolved });\n\n continue;\n }\n\n const step = parseStep(segment);\n\n if (step === undefined) {\n return undefined;\n }\n\n path.push({ kind: \"step\", ...step });\n }\n\n return { path, isRanged: false };\n}\n\nfunction classifyKeyMaterial(keyBody: string): KeyMaterialKind | undefined {\n if (/^(02|03)[0-9a-fA-F]{64}$/.test(keyBody)) {\n return \"hex-compressed\";\n }\n\n if (/^04[0-9a-fA-F]{128}$/.test(keyBody)) {\n return \"hex-uncompressed\";\n }\n\n if (/^[0-9a-fA-F]{64}$/.test(keyBody)) {\n return \"hex-xonly\";\n }\n\n const extendedPrefix = keyBody.slice(0, 4);\n\n if (extendedPrefix in XPUB_VERSIONS) {\n const decoded = base58Decode(keyBody);\n const expectedVersion = XPUB_VERSIONS[extendedPrefix];\n\n if (decoded?.length === EXTENDED_KEY_BYTES && expectedVersion !== undefined) {\n // Safe by construction: decoded.length === EXTENDED_KEY_BYTES (82)\n // guarantees indices 0 through 3 exist.\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n const version = (decoded[0]! << 24) | (decoded[1]! << 16) | (decoded[2]! << 8) | decoded[3]!;\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n\n if (version >>> 0 === expectedVersion >>> 0) {\n return extendedPrefix === \"xprv\" || extendedPrefix === \"tprv\" ? \"xprv\" : \"xpub\";\n }\n }\n\n return undefined;\n }\n\n const decoded = base58Decode(keyBody);\n\n if (decoded?.length === WIF_COMPRESSED_BYTES) {\n return \"wif-compressed\";\n }\n\n if (decoded?.length === WIF_UNCOMPRESSED_BYTES) {\n return \"wif-uncompressed\";\n }\n\n return undefined;\n}\n\nexport interface KeyExpressionOptions {\n /** Bare 64-hex x-only keys (BIP-386) are only valid directly inside tr(). */\n readonly allowXOnly: boolean;\n}\n\nexport function parseKeyExpression(\n raw: string,\n options: KeyExpressionOptions,\n): KeyExpressionResult {\n const split = splitOrigin(raw);\n\n if (\"ok\" in split) {\n return split;\n }\n\n const { origin, remainder } = split;\n const slashIndex = remainder.indexOf(\"/\");\n const keyBody = slashIndex === -1 ? remainder : remainder.slice(0, slashIndex);\n const trailingText = slashIndex === -1 ? \"\" : remainder.slice(slashIndex);\n const kind = classifyKeyMaterial(keyBody);\n\n if (kind === undefined) {\n return fail(`unrecognized key material: ${keyBody}`);\n }\n\n if (kind === \"hex-xonly\" && !options.allowXOnly) {\n return fail(\"bare x-only (64 hex character) keys are only valid inside tr()\");\n }\n\n if (kind !== \"xpub\" && kind !== \"xprv\" && trailingText.length > 0) {\n return fail(\"a derivation path is only allowed after an extended (xpub/xprv) key\");\n }\n\n const trailing = parseTrailingPath(trailingText);\n\n if (trailing === undefined) {\n return fail(`invalid derivation path: ${trailingText}`);\n }\n\n const key: KeyExpression = {\n raw,\n kind,\n ...(origin !== undefined ? { origin } : {}),\n path: trailing.path,\n isRanged: trailing.isRanged,\n };\n\n return { ok: true, key };\n}\n","import type { KeyExpression, ScriptNode, TapTree } from \"./types\";\n\nexport function forEachKey(node: ScriptNode, visit: (key: KeyExpression) => void): void {\n switch (node.kind) {\n case \"pk\":\n case \"pkh\":\n case \"wpkh\":\n case \"combo\":\n visit(node.key);\n\n break;\n case \"sh\":\n case \"wsh\":\n forEachKey(node.inner, visit);\n\n break;\n case \"multi\":\n node.keys.forEach(visit);\n\n break;\n case \"raw\":\n case \"addr\":\n break;\n case \"tr\":\n visit(node.internalKey);\n\n if (node.tree !== undefined) {\n forEachKeyInTree(node.tree, visit);\n }\n\n break;\n }\n}\n\nfunction forEachKeyInTree(tree: TapTree, visit: (key: KeyExpression) => void): void {\n if (tree.kind === \"leaf\") {\n visit(tree.script.key);\n\n return;\n }\n\n forEachKeyInTree(tree.left, visit);\n forEachKeyInTree(tree.right, visit);\n}\n\nexport function anyKeyRanged(node: ScriptNode): boolean {\n let ranged = false;\n\n forEachKey(node, (key) => {\n if (key.isRanged) {\n ranged = true;\n }\n });\n\n return ranged;\n}\n\nexport interface TapLeafWithDepth {\n readonly key: KeyExpression;\n readonly depth: number;\n}\n\n/** Depth is the number of sibling hashes needed in the control block. */\nexport function collectTapLeaves(tree: TapTree, depth = 0): TapLeafWithDepth[] {\n if (tree.kind === \"leaf\") {\n return [{ key: tree.script.key, depth }];\n }\n\n return [...collectTapLeaves(tree.left, depth + 1), ...collectTapLeaves(tree.right, depth + 1)];\n}\n","import { forEachKey } from \"./traverse\";\nimport type { KeyExpression, ScriptNode, TapLeafScript, TapTree } from \"./types\";\n\nexport interface MultipathFailure {\n readonly ok: false;\n readonly message: string;\n}\n\nexport interface MultipathSuccess {\n readonly ok: true;\n /** One descriptor per BIP-389 tuple position; length 1 when no multipath is present. */\n readonly descriptors: readonly ScriptNode[];\n}\n\nexport type MultipathResult = MultipathSuccess | MultipathFailure;\n\n/**\n * `raw()` and `addr()` carry no keys and, per the grammar enforced in\n * `parse.ts`, can only ever appear as an entire top-level descriptor, never\n * nested under `sh()`/`wsh()`/`tr()`. `expandMultipath` only calls\n * `mapKeys()` once it has already found a multipath key somewhere in the\n * tree, which a keyless `raw()`/`addr()` descriptor can never do, so this\n * narrower type documents (and enforces) that invariant instead of a dead\n * switch case that could never run.\n */\ntype KeyedScriptNode = Exclude<ScriptNode, { readonly kind: \"raw\" | \"addr\" }>;\n\nfunction mapKeys(\n node: KeyedScriptNode,\n fn: (key: KeyExpression) => KeyExpression,\n): KeyedScriptNode {\n switch (node.kind) {\n case \"pk\":\n case \"pkh\":\n case \"wpkh\":\n case \"combo\":\n return { ...node, key: fn(node.key) };\n case \"sh\":\n case \"wsh\":\n return { ...node, inner: mapKeys(node.inner as KeyedScriptNode, fn) };\n case \"multi\":\n return { ...node, keys: node.keys.map(fn) };\n case \"tr\":\n return {\n ...node,\n internalKey: fn(node.internalKey),\n ...(node.tree !== undefined ? { tree: mapTapTree(node.tree, fn) } : {}),\n };\n }\n}\n\nfunction mapTapTree(tree: TapTree, fn: (key: KeyExpression) => KeyExpression): TapTree {\n if (tree.kind === \"leaf\") {\n const leaf: TapLeafScript = { kind: \"pk\", key: fn(tree.script.key) };\n\n return { kind: \"leaf\", script: leaf };\n }\n\n return { kind: \"branch\", left: mapTapTree(tree.left, fn), right: mapTapTree(tree.right, fn) };\n}\n\nfunction replaceMultipathAt(key: KeyExpression, index: number): KeyExpression {\n const elementIndex = key.path.findIndex((element) => element.kind === \"multipath\");\n\n if (elementIndex === -1) {\n return key;\n }\n\n const path = key.path.map((element, position) => {\n if (position !== elementIndex || element.kind !== \"multipath\") {\n return element;\n }\n\n // Safe by construction: expandMultipath only calls this for indices\n // within every multipath element's validated, equal tuple length.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const value = element.values[index]!;\n\n return { kind: \"step\" as const, ...value };\n });\n\n return { ...key, path };\n}\n\n/**\n * Expands BIP-389 multipath key expressions (e.g. `<0;1>`) into one\n * descriptor per tuple position. Every multipath element in a descriptor\n * must share the same tuple length; duplicate values within one tuple are\n * rejected during parsing, not here.\n */\nexport function expandMultipath(script: ScriptNode): MultipathResult {\n const lengths = new Set<number>();\n\n forEachKey(script, (key) => {\n for (const element of key.path) {\n if (element.kind === \"multipath\") {\n lengths.add(element.values.length);\n }\n }\n });\n\n if (lengths.size === 0) {\n return { ok: true, descriptors: [script] };\n }\n\n if (lengths.size > 1) {\n return {\n ok: false,\n message: \"every multipath element in a descriptor must have the same number of values\",\n };\n }\n\n // Safe by construction: lengths.size === 1 was just checked above.\n const [length] = [...lengths] as [number];\n const descriptors: ScriptNode[] = [];\n\n for (let index = 0; index < length; index += 1) {\n descriptors.push(mapKeys(script as KeyedScriptNode, (key) => replaceMultipathAt(key, index)));\n }\n\n return { ok: true, descriptors };\n}\n","import { hasValidCharset } from \"./checksum\";\n\nexport type TokenKind = \"lparen\" | \"rparen\" | \"comma\" | \"lbrace\" | \"rbrace\" | \"atom\";\n\n/**\n * A lexical token. `atom` tokens capture everything between structural\n * delimiters as one unit: function names, numbers, hex, WIF/xpub/xprv key\n * material, key origins, and multipath specifiers never contain `(`, `)`,\n * `,`, `{`, or `}`, so this greedy grouping is unambiguous without regex.\n */\nexport interface Token {\n readonly kind: TokenKind;\n readonly text: string;\n readonly position: number;\n}\n\nexport interface TokenizeSuccess {\n readonly ok: true;\n readonly tokens: readonly Token[];\n}\n\nexport interface TokenizeFailure {\n readonly ok: false;\n readonly position: number;\n}\n\nexport type TokenizeResult = TokenizeSuccess | TokenizeFailure;\n\nconst STRUCTURAL: Readonly<Record<string, TokenKind>> = {\n \"(\": \"lparen\",\n \")\": \"rparen\",\n \",\": \"comma\",\n \"{\": \"lbrace\",\n \"}\": \"rbrace\",\n};\n\nexport function tokenize(text: string): TokenizeResult {\n const tokens: Token[] = [];\n\n let index = 0;\n\n while (index < text.length) {\n // Safe by construction: bounded by the `index < text.length` guard.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const char = text[index]!;\n const structuralKind = STRUCTURAL[char];\n\n if (structuralKind !== undefined) {\n tokens.push({ kind: structuralKind, text: char, position: index });\n index += 1;\n\n continue;\n }\n\n const start = index;\n\n let atom = \"\";\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n while (index < text.length && STRUCTURAL[text[index]!] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const atomChar = text[index]!;\n\n if (!hasValidCharset(atomChar)) {\n return { ok: false, position: index };\n }\n\n atom += atomChar;\n index += 1;\n }\n\n tokens.push({ kind: \"atom\", text: atom, position: start });\n }\n\n return { ok: true, tokens };\n}\n","import { checksumVerify } from \"./checksum\";\nimport { parseKeyExpression } from \"./key-expression\";\nimport type { Token, TokenKind } from \"./tokenizer\";\nimport { tokenize } from \"./tokenizer\";\nimport { anyKeyRanged } from \"./traverse\";\nimport type {\n KeyExpression,\n ParsedDescriptor,\n ParseFailure,\n ParseFailureReason,\n ParseResult,\n ScriptNode,\n TapLeafScript,\n TapTree,\n} from \"./types\";\n\nconst CHECKSUM_LENGTH = 8;\nconst HEX_PAIR = 2;\n\ntype Context = { readonly place: \"top\" } | { readonly place: \"sh\" } | { readonly place: \"wsh\" };\n\nfunction keyLimit(context: Context): number {\n if (context.place === \"top\") {\n return 3;\n }\n\n if (context.place === \"sh\") {\n return 15;\n }\n\n return 20;\n}\n\nfunction requireCompressed(context: Context): boolean {\n return context.place === \"wsh\";\n}\n\nfunction isCompressedCapable(key: KeyExpression): boolean {\n return (\n key.kind === \"hex-compressed\" ||\n key.kind === \"wif-compressed\" ||\n key.kind === \"xpub\" ||\n key.kind === \"xprv\"\n );\n}\n\nclass Cursor {\n private position = 0;\n\n constructor(private readonly tokens: readonly Token[]) {}\n\n peek(): Token | undefined {\n return this.tokens[this.position];\n }\n\n advance(): Token | undefined {\n const token = this.tokens[this.position];\n\n this.position += 1;\n\n return token;\n }\n\n atEnd(): boolean {\n return this.position >= this.tokens.length;\n }\n}\n\nfunction fail(reason: ParseFailureReason, message: string, position?: number): ParseFailure {\n return { ok: false, reason, message, ...(position !== undefined ? { position } : {}) };\n}\n\ntype NodeResult = { readonly ok: true; readonly node: ScriptNode } | ParseFailure;\ntype KeyResult = { readonly ok: true; readonly key: KeyExpression } | ParseFailure;\ntype TreeResult = { readonly ok: true; readonly tree: TapTree } | ParseFailure;\n\ntype TokenResult = { readonly ok: true; readonly token: Token } | ParseFailure;\n\nfunction expectKind(cursor: Cursor, kind: TokenKind, what: string): TokenResult {\n const token = cursor.advance();\n\n if (token === undefined) {\n return fail(\"unexpected-token\", `expected ${what} but reached the end of the descriptor`);\n }\n\n if (token.kind !== kind) {\n return fail(\"unexpected-token\", `expected ${what}`, token.position);\n }\n\n return { ok: true, token };\n}\n\nfunction isFailure(value: { readonly ok: boolean }): value is ParseFailure {\n return !value.ok;\n}\n\nfunction parseKey(cursor: Cursor, allowXOnly: boolean): KeyResult {\n const token = cursor.advance();\n\n if (token === undefined) {\n return fail(\n \"unexpected-token\",\n \"expected a key expression but reached the end of the descriptor\",\n );\n }\n\n if (token.kind !== \"atom\") {\n return fail(\"unexpected-token\", \"expected a key expression\", token.position);\n }\n\n const result = parseKeyExpression(token.text, { allowXOnly });\n\n if (!result.ok) {\n return fail(\"invalid-key-expression\", result.message, token.position);\n }\n\n return { ok: true, key: result.key };\n}\n\nfunction parseNumber(cursor: Cursor): { readonly ok: true; readonly value: number } | ParseFailure {\n const token = cursor.advance();\n\n if (token === undefined) {\n return fail(\"unexpected-token\", \"expected a number but reached the end of the descriptor\");\n }\n\n if (\n token.kind !== \"atom\" ||\n !/^[0-9]+$/.test(token.text) ||\n !Number.isSafeInteger(Number(token.text))\n ) {\n return fail(\"unexpected-token\", \"expected a number\", token.position);\n }\n\n return { ok: true, value: Number(token.text) };\n}\n\nfunction parseSingleKeyNode(\n cursor: Cursor,\n kind: \"pk\" | \"pkh\" | \"wpkh\",\n context: Context,\n position: number,\n): NodeResult {\n const keyResult = parseKey(cursor, false);\n\n if (isFailure(keyResult)) {\n return keyResult;\n }\n\n if ((kind === \"wpkh\" || requireCompressed(context)) && !isCompressedCapable(keyResult.key)) {\n return fail(\"invalid-key-expression\", `${kind}() requires a compressed key`, position);\n }\n\n const closeResult = expectKind(cursor, \"rparen\", `')' to close ${kind}(...)`);\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n return { ok: true, node: { kind, key: keyResult.key } };\n}\n\nfunction parseMultiNode(\n cursor: Cursor,\n sorted: boolean,\n context: Context,\n position: number,\n): NodeResult {\n const thresholdResult = parseNumber(cursor);\n\n if (isFailure(thresholdResult)) {\n return thresholdResult;\n }\n\n const keys: KeyExpression[] = [];\n\n for (;;) {\n const comma = expectKind(cursor, \"comma\", \"',' before a key in multi(...)\");\n\n if (isFailure(comma)) {\n return comma;\n }\n\n const keyResult = parseKey(cursor, false);\n\n if (isFailure(keyResult)) {\n return keyResult;\n }\n\n if (requireCompressed(context) && !isCompressedCapable(keyResult.key)) {\n return fail(\"invalid-key-expression\", \"keys inside wsh() must be compressed\", position);\n }\n\n keys.push(keyResult.key);\n\n if (cursor.peek()?.kind !== \"comma\") {\n break;\n }\n }\n\n const closeResult = expectKind(cursor, \"rparen\", \"')' to close multi(...)\");\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n const limit = keyLimit(context);\n\n if (keys.length > limit) {\n return fail(\n \"key-count-exceeded\",\n `at most ${String(limit)} keys are allowed in this context`,\n position,\n );\n }\n\n if (thresholdResult.value < 1 || thresholdResult.value > keys.length) {\n return fail(\"invalid-context\", \"threshold must be between 1 and the number of keys\", position);\n }\n\n return { ok: true, node: { kind: \"multi\", threshold: thresholdResult.value, keys, sorted } };\n}\n\nfunction parseTapLeaf(cursor: Cursor): TreeResult {\n const nameToken = cursor.advance();\n\n if (nameToken === undefined) {\n return fail(\n \"unexpected-token\",\n \"expected a tapscript leaf but reached the end of the descriptor\",\n );\n }\n\n if (nameToken.kind !== \"atom\" || nameToken.text !== \"pk\") {\n return fail(\n \"unsupported\",\n \"tapscript leaves are limited to pk(KEY) in this version; other miniscript fragments are not yet supported\",\n nameToken.position,\n );\n }\n\n const lparen = expectKind(cursor, \"lparen\", \"'(' after pk\");\n\n if (isFailure(lparen)) {\n return lparen;\n }\n\n const keyResult = parseKey(cursor, true);\n\n if (isFailure(keyResult)) {\n return keyResult;\n }\n\n const closeResult = expectKind(cursor, \"rparen\", \"')' to close pk(...)\");\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n const leaf: TapLeafScript = { kind: \"pk\", key: keyResult.key };\n\n return { ok: true, tree: { kind: \"leaf\", script: leaf } };\n}\n\nfunction parseTapTree(cursor: Cursor): TreeResult {\n if (cursor.peek()?.kind === \"lbrace\") {\n cursor.advance();\n\n const leftResult = parseTapTree(cursor);\n\n if (isFailure(leftResult)) {\n return leftResult;\n }\n\n const comma = expectKind(cursor, \"comma\", \"',' inside a tapscript tree branch\");\n\n if (isFailure(comma)) {\n return comma;\n }\n\n const rightResult = parseTapTree(cursor);\n\n if (isFailure(rightResult)) {\n return rightResult;\n }\n\n const closeResult = expectKind(cursor, \"rbrace\", \"'}' to close a tapscript tree branch\");\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n return { ok: true, tree: { kind: \"branch\", left: leftResult.tree, right: rightResult.tree } };\n }\n\n return parseTapLeaf(cursor);\n}\n\nfunction parseTr(cursor: Cursor): NodeResult {\n const keyResult = parseKey(cursor, true);\n\n if (isFailure(keyResult)) {\n return keyResult;\n }\n\n if (cursor.peek()?.kind === \"rparen\") {\n cursor.advance();\n\n return { ok: true, node: { kind: \"tr\", internalKey: keyResult.key } };\n }\n\n const comma = expectKind(cursor, \"comma\", \"',' before the tapscript tree in tr(...)\");\n\n if (isFailure(comma)) {\n return comma;\n }\n\n const treeResult = parseTapTree(cursor);\n\n if (isFailure(treeResult)) {\n return treeResult;\n }\n\n const closeResult = expectKind(cursor, \"rparen\", \"')' to close tr(...)\");\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n return { ok: true, node: { kind: \"tr\", internalKey: keyResult.key, tree: treeResult.tree } };\n}\n\nfunction parseRaw(cursor: Cursor, position: number): NodeResult {\n const token = cursor.advance();\n\n if (token === undefined) {\n return fail(\"unexpected-token\", \"expected hex data in raw(...)\", position);\n }\n\n if (\n token.kind !== \"atom\" ||\n !/^[0-9a-fA-F]+$/.test(token.text) ||\n token.text.length % HEX_PAIR !== 0\n ) {\n return fail(\"invalid-context\", \"raw() requires an even-length hex string\", token.position);\n }\n\n const closeResult = expectKind(cursor, \"rparen\", \"')' to close raw(...)\");\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n return { ok: true, node: { kind: \"raw\", hex: token.text.toLowerCase() } };\n}\n\nfunction parseAddr(cursor: Cursor, position: number): NodeResult {\n const token = cursor.advance();\n\n if (token?.kind !== \"atom\") {\n return fail(\"unexpected-token\", \"expected an address in addr(...)\", position);\n }\n\n const closeResult = expectKind(cursor, \"rparen\", \"')' to close addr(...)\");\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n return { ok: true, node: { kind: \"addr\", address: token.text } };\n}\n\nfunction parseScript(cursor: Cursor, context: Context): NodeResult {\n const nameToken = cursor.advance();\n\n if (nameToken === undefined) {\n return fail(\n \"unexpected-token\",\n \"expected a script expression but reached the end of the descriptor\",\n );\n }\n\n if (nameToken.kind !== \"atom\") {\n return fail(\"unexpected-token\", \"expected a function name\", nameToken.position);\n }\n\n const name = nameToken.text;\n const position = nameToken.position;\n const lparen = expectKind(cursor, \"lparen\", `'(' after ${name}`);\n\n if (isFailure(lparen)) {\n return lparen;\n }\n\n switch (name) {\n case \"pk\":\n case \"pkh\":\n return parseSingleKeyNode(cursor, name, context, position);\n case \"wpkh\": {\n if (context.place === \"wsh\") {\n return fail(\"invalid-context\", \"wpkh() is not allowed inside wsh()\", position);\n }\n\n return parseSingleKeyNode(cursor, \"wpkh\", context, position);\n }\n\n case \"sh\": {\n if (context.place !== \"top\") {\n return fail(\"invalid-context\", \"sh() is only allowed at the top level\", position);\n }\n\n const innerResult = parseScript(cursor, { place: \"sh\" });\n\n if (isFailure(innerResult)) {\n return innerResult;\n }\n\n const closeResult = expectKind(cursor, \"rparen\", \"')' to close sh(...)\");\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n return { ok: true, node: { kind: \"sh\", inner: innerResult.node } };\n }\n\n case \"wsh\": {\n if (context.place === \"wsh\") {\n return fail(\"invalid-context\", \"wsh() cannot be nested inside wsh()\", position);\n }\n\n const innerResult = parseScript(cursor, { place: \"wsh\" });\n\n if (isFailure(innerResult)) {\n return innerResult;\n }\n\n const closeResult = expectKind(cursor, \"rparen\", \"')' to close wsh(...)\");\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n return { ok: true, node: { kind: \"wsh\", inner: innerResult.node } };\n }\n\n case \"multi\":\n case \"sortedmulti\":\n return parseMultiNode(cursor, name === \"sortedmulti\", context, position);\n case \"combo\": {\n if (context.place !== \"top\") {\n return fail(\"invalid-context\", \"combo() is only allowed at the top level\", position);\n }\n\n const keyResult = parseKey(cursor, false);\n\n if (isFailure(keyResult)) {\n return keyResult;\n }\n\n const closeResult = expectKind(cursor, \"rparen\", \"')' to close combo(...)\");\n\n if (isFailure(closeResult)) {\n return closeResult;\n }\n\n return { ok: true, node: { kind: \"combo\", key: keyResult.key } };\n }\n\n case \"raw\": {\n if (context.place !== \"top\") {\n return fail(\"invalid-context\", \"raw() is only allowed at the top level\", position);\n }\n\n return parseRaw(cursor, position);\n }\n\n case \"addr\": {\n if (context.place !== \"top\") {\n return fail(\"invalid-context\", \"addr() is only allowed at the top level\", position);\n }\n\n return parseAddr(cursor, position);\n }\n\n case \"tr\": {\n if (context.place !== \"top\") {\n return fail(\"invalid-context\", \"tr() is only allowed at the top level\", position);\n }\n\n return parseTr(cursor);\n }\n\n case \"musig\":\n return fail(\"unsupported\", \"musig() (BIP-390) is not implemented\", position);\n case \"sp\":\n return fail(\"unsupported\", \"sp() (BIP-392, silent payments) is not implemented\", position);\n default:\n return fail(\"unknown-function\", `unknown script expression: ${name}`, position);\n }\n}\n\n/**\n * Parses a BIP-380 descriptor string into an AST, without deriving any keys\n * or scriptPubKeys. See the README for exactly which fragments are\n * supported in this version.\n */\nexport function parseDescriptor(text: string): ParseResult {\n const hashIndex = text.indexOf(\"#\");\n const scriptText = hashIndex === -1 ? text : text.slice(0, hashIndex);\n const tokenizeResult = tokenize(scriptText);\n\n if (!tokenizeResult.ok) {\n return fail(\n \"invalid-character\",\n \"the descriptor contains a character outside the allowed charset\",\n tokenizeResult.position,\n );\n }\n\n if (hashIndex !== -1) {\n const checksumText = text.slice(hashIndex + 1);\n\n if (checksumText.length !== CHECKSUM_LENGTH || !checksumVerify(scriptText, checksumText)) {\n return fail(\"invalid-checksum\", \"the descriptor checksum does not match its script\");\n }\n }\n\n const cursor = new Cursor(tokenizeResult.tokens);\n const scriptResult = parseScript(cursor, { place: \"top\" });\n\n if (isFailure(scriptResult)) {\n return scriptResult;\n }\n\n if (!cursor.atEnd()) {\n return fail(\n \"unexpected-token\",\n \"unexpected trailing content after the descriptor\",\n cursor.peek()?.position,\n );\n }\n\n const descriptor: ParsedDescriptor = {\n script: scriptResult.node,\n ...(hashIndex !== -1 ? { checksum: text.slice(hashIndex + 1) } : {}),\n isRanged: anyKeyRanged(scriptResult.node),\n };\n\n return { ok: true, descriptor };\n}\n","const CHARSET = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\";\nconst BECH32_CONST = 1;\nconst BECH32M_CONST = 0x2bc830a3;\nconst GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nconst CHECKSUM_LENGTH = 6;\nconst MIN_HRP_LENGTH = 1;\n\nfunction polymod(values: readonly number[]): number {\n let checksum = 1;\n\n for (const value of values) {\n const top = checksum >>> 25;\n\n checksum = ((checksum & 0x1ffffff) << 5) ^ value;\n\n for (let bit = 0; bit < GENERATOR.length; bit += 1) {\n const generatorValue = GENERATOR[bit];\n\n if (generatorValue !== undefined && ((top >>> bit) & 1) === 1) {\n checksum ^= generatorValue;\n }\n }\n }\n\n return checksum >>> 0;\n}\n\nfunction hrpExpand(hrp: string): number[] {\n const high: number[] = [];\n const low: number[] = [];\n\n for (const char of hrp) {\n // Safe by construction: `char` comes from iterating a string, so it is\n // always a non-empty code point.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const code = char.codePointAt(0)!;\n\n high.push(code >> 5);\n low.push(code & 31);\n }\n\n return [...high, 0, ...low];\n}\n\n/** Exported for direct unit testing of its boundaries; not part of the public barrel. */\nexport function convertBits(\n data: readonly number[],\n fromBits: number,\n toBits: number,\n pad: boolean,\n): number[] | undefined {\n let accumulator = 0;\n let bits = 0;\n\n const result: number[] = [];\n const maxValue = (1 << toBits) - 1;\n\n for (const value of data) {\n if (value < 0 || value >>> fromBits !== 0) {\n return undefined;\n }\n\n accumulator = (accumulator << fromBits) | value;\n bits += fromBits;\n\n while (bits >= toBits) {\n bits -= toBits;\n result.push((accumulator >>> bits) & maxValue);\n }\n }\n\n if (pad) {\n if (bits > 0) {\n result.push((accumulator << (toBits - bits)) & maxValue);\n }\n } else if (bits >= fromBits || ((accumulator << (toBits - bits)) & maxValue) !== 0) {\n return undefined;\n }\n\n return result;\n}\n\nexport interface DecodedSegwitAddress {\n readonly hrp: string;\n readonly witnessVersion: number;\n readonly program: Uint8Array;\n}\n\nexport function bech32Decode(address: string): DecodedSegwitAddress | undefined {\n if (address !== address.toLowerCase() && address !== address.toUpperCase()) {\n return undefined;\n }\n\n const lowered = address.toLowerCase();\n const separatorIndex = lowered.lastIndexOf(\"1\");\n\n if (separatorIndex < MIN_HRP_LENGTH || lowered.length - separatorIndex - 1 < CHECKSUM_LENGTH) {\n return undefined;\n }\n\n const hrp = lowered.slice(0, separatorIndex);\n const dataPart = lowered.slice(separatorIndex + 1);\n const values: number[] = [];\n\n for (const char of dataPart) {\n const value = CHARSET.indexOf(char);\n\n if (value === -1) {\n return undefined;\n }\n\n values.push(value);\n }\n\n const checksum = polymod([...hrpExpand(hrp), ...values]);\n\n if (checksum !== BECH32_CONST && checksum !== BECH32M_CONST) {\n return undefined;\n }\n\n const words = values.slice(0, values.length - CHECKSUM_LENGTH);\n const [witnessVersion, ...programWords] = words;\n\n if (witnessVersion === undefined) {\n return undefined;\n }\n\n const isBech32m = checksum === BECH32M_CONST;\n\n if ((witnessVersion === 0) === isBech32m) {\n return undefined;\n }\n\n const program = convertBits(programWords, 5, 8, false);\n\n if (program === undefined || program.length < 2 || program.length > 40) {\n return undefined;\n }\n\n return { hrp, witnessVersion, program: Uint8Array.from(program) };\n}\n","import { base58Decode } from \"./base58\";\nimport { bech32Decode } from \"./bech32\";\nimport type { ChainParams } from \"./chains\";\nimport { BITCOIN } from \"./chains\";\nimport { collectTapLeaves } from \"./traverse\";\nimport type {\n KeyMaterialKind,\n ScriptNode,\n WeightFailure,\n WeightFailureReason,\n WeightResult,\n} from \"./types\";\n\n/** Conservative single-key ECDSA signature bytes, matching utxo-coinselect's p2pk/p2pkh/p2wpkh constants. */\nconst ECDSA_SINGLE_SIG_BYTES = 72;\n/** Conservative multisig ECDSA signature bytes, matching utxo-coinselect's MultisigWeight default. */\nconst ECDSA_MULTISIG_SIG_BYTES = 73;\n/** Schnorr signature bytes for a Taproot key-path spend under SIGHASH_DEFAULT (no trailing sighash byte). */\nconst SCHNORR_KEYPATH_SIG_BYTES = 64;\n/** Schnorr signature bytes assumed for a Taproot script-path spend, matching utxo-coinselect's P2TR_SCRIPT default. */\nconst SCHNORR_SCRIPTPATH_SIG_BYTES = 65;\nconst COMPRESSED_PUBKEY_BYTES = 33;\nconst UNCOMPRESSED_PUBKEY_BYTES = 65;\nconst XONLY_PUBKEY_BYTES = 32;\nconst P2PKH_SCRIPT_BYTES = 25;\nconst P2WPKH_SCRIPT_BYTES = 22;\nconst P2SH_SCRIPT_BYTES = 23;\nconst P2WSH_SCRIPT_BYTES = 34;\nconst P2TR_SCRIPT_BYTES = 34;\nconst BASE58_ADDRESS_BYTES = 25;\nconst LEGACY_TX_OVERHEAD_BYTES = 40;\nconst VOUT_OVERHEAD_BYTES = 8;\nconst WEIGHT_SCALE = 4;\nconst PUSHDATA_OP_MAX = 0x4c;\nconst PUSHDATA_UINT8_MAX = 0xff;\nconst PUSHDATA_UINT16_MAX = 0xffff;\nconst COMPACT_SIZE_UINT16_MIN = 253;\nconst COMPACT_SIZE_UINT16_MAX = 0xffff;\nconst COMPACT_SIZE_UINT32_MAX = 0xffff_ffff;\n\nfunction weightFail(reason: WeightFailureReason, message: string): WeightFailure {\n return { ok: false, reason, message };\n}\n\n/** Exported for direct unit testing of its boundaries; not part of the public barrel. */\nexport function compactSizeBytes(value: number): number {\n if (value < COMPACT_SIZE_UINT16_MIN) {\n return 1;\n }\n\n if (value <= COMPACT_SIZE_UINT16_MAX) {\n return 3;\n }\n\n if (value <= COMPACT_SIZE_UINT32_MAX) {\n return 5;\n }\n\n return 9;\n}\n\n/** Exported for direct unit testing of its boundaries; not part of the public barrel. */\nexport function pushDataPrefixBytes(length: number): number {\n if (length < PUSHDATA_OP_MAX) {\n return 1;\n }\n\n if (length <= PUSHDATA_UINT8_MAX) {\n return 2;\n }\n\n if (length <= PUSHDATA_UINT16_MAX) {\n return 3;\n }\n\n return 5;\n}\n\nfunction keyMaterialBytes(kind: KeyMaterialKind): number {\n switch (kind) {\n case \"hex-compressed\":\n case \"wif-compressed\":\n case \"xpub\":\n case \"xprv\":\n return COMPRESSED_PUBKEY_BYTES;\n case \"hex-uncompressed\":\n case \"wif-uncompressed\":\n return UNCOMPRESSED_PUBKEY_BYTES;\n case \"hex-xonly\":\n return XONLY_PUBKEY_BYTES;\n }\n}\n\ntype SimpleOutputNode = Extract<\n ScriptNode,\n { readonly kind: \"pk\" | \"pkh\" | \"wpkh\" | \"sh\" | \"wsh\" | \"tr\" | \"multi\" }\n>;\n\n/** Byte length of the scriptPubKey these fragments would produce if used directly as an output. */\nfunction simpleOutputScriptBytes(node: SimpleOutputNode): number {\n switch (node.kind) {\n case \"pk\":\n return keyMaterialBytes(node.key.kind) + 2;\n case \"pkh\":\n return P2PKH_SCRIPT_BYTES;\n case \"wpkh\":\n return P2WPKH_SCRIPT_BYTES;\n case \"sh\":\n return P2SH_SCRIPT_BYTES;\n case \"wsh\":\n return P2WSH_SCRIPT_BYTES;\n case \"tr\":\n return P2TR_SCRIPT_BYTES;\n case \"multi\": {\n const perKey = node.keys.reduce((sum, key) => {\n const bytes = keyMaterialBytes(key.kind);\n\n return sum + pushDataPrefixBytes(bytes) + bytes;\n }, 0);\n\n return 1 + perKey + 2;\n }\n }\n}\n\ninterface Cost {\n readonly scriptSig: number;\n readonly witness: number;\n}\n\ntype LeafInputNode = Extract<ScriptNode, { readonly kind: \"pk\" | \"pkh\" | \"wpkh\" | \"multi\" }>;\n\nfunction leafInputCost(node: LeafInputNode): Cost {\n switch (node.kind) {\n case \"pk\": {\n const scriptSig = pushDataPrefixBytes(ECDSA_SINGLE_SIG_BYTES) + ECDSA_SINGLE_SIG_BYTES;\n\n return { scriptSig, witness: 0 };\n }\n\n case \"pkh\": {\n const keyBytes = keyMaterialBytes(node.key.kind);\n const scriptSig =\n pushDataPrefixBytes(ECDSA_SINGLE_SIG_BYTES) +\n ECDSA_SINGLE_SIG_BYTES +\n pushDataPrefixBytes(keyBytes) +\n keyBytes;\n\n return { scriptSig, witness: 0 };\n }\n\n case \"wpkh\": {\n const keyBytes = keyMaterialBytes(node.key.kind);\n const items = 2;\n const witness =\n compactSizeBytes(items) +\n compactSizeBytes(ECDSA_SINGLE_SIG_BYTES) +\n ECDSA_SINGLE_SIG_BYTES +\n compactSizeBytes(keyBytes) +\n keyBytes;\n\n return { scriptSig: 0, witness };\n }\n\n case \"multi\": {\n const sigCost = pushDataPrefixBytes(ECDSA_MULTISIG_SIG_BYTES) + ECDSA_MULTISIG_SIG_BYTES;\n\n return { scriptSig: 1 + node.threshold * sigCost, witness: 0 };\n }\n }\n}\n\ntype WitnessScriptNode = Extract<ScriptNode, { readonly kind: \"pk\" | \"pkh\" | \"multi\" }>;\n\n/** Complete P2WSH witness bytes (item count, satisfaction items, and the witness script itself). */\nfunction segwitWitnessBytes(node: WitnessScriptNode): number {\n switch (node.kind) {\n case \"pk\": {\n const scriptBytes = simpleOutputScriptBytes(node);\n const items = 2;\n\n return (\n compactSizeBytes(items) +\n compactSizeBytes(ECDSA_SINGLE_SIG_BYTES) +\n ECDSA_SINGLE_SIG_BYTES +\n compactSizeBytes(scriptBytes) +\n scriptBytes\n );\n }\n\n case \"pkh\": {\n const keyBytes = keyMaterialBytes(node.key.kind);\n const items = 3;\n\n return (\n compactSizeBytes(items) +\n compactSizeBytes(ECDSA_SINGLE_SIG_BYTES) +\n ECDSA_SINGLE_SIG_BYTES +\n compactSizeBytes(keyBytes) +\n keyBytes +\n compactSizeBytes(P2PKH_SCRIPT_BYTES) +\n P2PKH_SCRIPT_BYTES\n );\n }\n\n case \"multi\": {\n const scriptBytes = simpleOutputScriptBytes(node);\n const sigCost = compactSizeBytes(ECDSA_MULTISIG_SIG_BYTES) + ECDSA_MULTISIG_SIG_BYTES;\n const items = node.threshold + 2;\n\n return (\n compactSizeBytes(items) +\n compactSizeBytes(0) +\n node.threshold * sigCost +\n compactSizeBytes(scriptBytes) +\n scriptBytes\n );\n }\n }\n}\n\nfunction computeTrCost(node: Extract<ScriptNode, { readonly kind: \"tr\" }>): Cost {\n const keyPathWitness =\n compactSizeBytes(1) + compactSizeBytes(SCHNORR_KEYPATH_SIG_BYTES) + SCHNORR_KEYPATH_SIG_BYTES;\n\n if (node.tree === undefined) {\n return { scriptSig: 0, witness: keyPathWitness };\n }\n\n const leafWitnesses = collectTapLeaves(node.tree).map(({ depth }) => {\n const leafScriptBytes = 1 + XONLY_PUBKEY_BYTES + 1;\n const controlBlockBytes = 1 + XONLY_PUBKEY_BYTES + XONLY_PUBKEY_BYTES * depth;\n const items = 3;\n\n return (\n compactSizeBytes(items) +\n compactSizeBytes(SCHNORR_SCRIPTPATH_SIG_BYTES) +\n SCHNORR_SCRIPTPATH_SIG_BYTES +\n compactSizeBytes(leafScriptBytes) +\n leafScriptBytes +\n compactSizeBytes(controlBlockBytes) +\n controlBlockBytes\n );\n });\n\n return { scriptSig: 0, witness: Math.max(keyPathWitness, ...leafWitnesses) };\n}\n\ntype CostResult = ({ readonly ok: true } & Cost) | WeightFailure;\n\nfunction computeInputCost(node: ScriptNode): CostResult {\n switch (node.kind) {\n case \"pk\":\n case \"pkh\":\n case \"wpkh\":\n case \"multi\":\n return { ok: true, ...leafInputCost(node) };\n case \"sh\": {\n const { inner } = node;\n\n if (inner.kind === \"wpkh\") {\n const redeemBytes = simpleOutputScriptBytes(inner);\n\n return {\n ok: true,\n scriptSig: pushDataPrefixBytes(redeemBytes) + redeemBytes,\n witness: leafInputCost(inner).witness,\n };\n }\n\n if (inner.kind === \"wsh\") {\n const { inner: innerInner } = inner;\n\n if (innerInner.kind !== \"pk\" && innerInner.kind !== \"pkh\" && innerInner.kind !== \"multi\") {\n return weightFail(\n \"unsupported\",\n `sh(wsh(${innerInner.kind}(...))) is not a supported nesting`,\n );\n }\n\n const redeemBytes = P2WSH_SCRIPT_BYTES;\n\n return {\n ok: true,\n scriptSig: pushDataPrefixBytes(redeemBytes) + redeemBytes,\n witness: segwitWitnessBytes(innerInner),\n };\n }\n\n if (inner.kind === \"pk\" || inner.kind === \"pkh\" || inner.kind === \"multi\") {\n const redeemBytes = simpleOutputScriptBytes(inner);\n\n return {\n ok: true,\n scriptSig:\n leafInputCost(inner).scriptSig + pushDataPrefixBytes(redeemBytes) + redeemBytes,\n witness: 0,\n };\n }\n\n return weightFail(\"unsupported\", `sh(${inner.kind}(...)) is not a supported nesting`);\n }\n\n case \"wsh\": {\n const { inner } = node;\n\n if (inner.kind === \"pk\" || inner.kind === \"pkh\" || inner.kind === \"multi\") {\n return { ok: true, scriptSig: 0, witness: segwitWitnessBytes(inner) };\n }\n\n return weightFail(\"unsupported\", `wsh(${inner.kind}(...)) is not a supported nesting`);\n }\n\n case \"tr\":\n return { ok: true, ...computeTrCost(node) };\n case \"combo\":\n return weightFail(\n \"ambiguous-script-type\",\n \"combo() represents multiple candidate script types; describe the specific script you intend to spend instead\",\n );\n case \"raw\":\n return weightFail(\n \"opaque-script\",\n \"raw() has no known spending script, so its input weight cannot be determined\",\n );\n case \"addr\":\n return weightFail(\n \"opaque-script\",\n \"addr() has no known spending script, so its input weight cannot be determined\",\n );\n }\n}\n\nexport interface WeightOptions {\n /** Only used to interpret `addr()` base58 version bytes. Defaults to Bitcoin mainnet. */\n readonly chain?: ChainParams;\n}\n\nfunction decodeAddressScriptBytes(\n address: string,\n chain: ChainParams,\n): { readonly ok: true; readonly value: number } | WeightFailure {\n const segwit = bech32Decode(address);\n\n if (segwit !== undefined) {\n return { ok: true, value: 2 + segwit.program.length };\n }\n\n const decoded = base58Decode(address);\n\n if (decoded?.length === BASE58_ADDRESS_BYTES) {\n const version = decoded[0];\n\n if (version === chain.base58PubKeyHash) {\n return { ok: true, value: P2PKH_SCRIPT_BYTES };\n }\n\n if (version === chain.base58ScriptHash) {\n return { ok: true, value: P2SH_SCRIPT_BYTES };\n }\n }\n\n return weightFail(\"unsupported\", `unrecognized address for chain '${chain.name}': ${address}`);\n}\n\ntype ScriptBytesResult = { readonly ok: true; readonly value: number } | WeightFailure;\n\nfunction computeOutputScriptBytes(node: ScriptNode, options: WeightOptions): ScriptBytesResult {\n switch (node.kind) {\n case \"pk\":\n case \"pkh\":\n case \"wpkh\":\n case \"sh\":\n case \"wsh\":\n case \"tr\":\n case \"multi\":\n return { ok: true, value: simpleOutputScriptBytes(node) };\n case \"combo\":\n return weightFail(\n \"ambiguous-script-type\",\n \"combo() represents multiple candidate scriptPubKeys; describe the specific script you intend to create instead\",\n );\n case \"raw\":\n if (node.hex.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(node.hex)) {\n return weightFail(\"unsupported\", \"raw() requires an even-length hex string\");\n }\n\n return { ok: true, value: node.hex.length / 2 };\n case \"addr\":\n return decodeAddressScriptBytes(node.address, options.chain ?? BITCOIN);\n }\n}\n\n/** Return the maximum absolute input weight in weight units, under segwit transaction serialization. */\nexport function inputWeight(node: ScriptNode): WeightResult {\n const cost = computeInputCost(node);\n\n if (!cost.ok) {\n return cost;\n }\n\n const baseBytes = LEGACY_TX_OVERHEAD_BYTES + compactSizeBytes(cost.scriptSig) + cost.scriptSig;\n\n return { ok: true, weight: baseBytes * WEIGHT_SCALE + cost.witness };\n}\n\n/** Return the serialized output weight in weight units. */\nexport function outputWeight(node: ScriptNode, options: WeightOptions = {}): WeightResult {\n const scriptBytesResult = computeOutputScriptBytes(node, options);\n\n if (!scriptBytesResult.ok) {\n return scriptBytesResult;\n }\n\n const weight =\n (VOUT_OVERHEAD_BYTES + compactSizeBytes(scriptBytesResult.value) + scriptBytesResult.value) *\n WEIGHT_SCALE;\n\n return { ok: true, weight };\n}\n\nexport interface DescribedMultisig {\n readonly type: \"p2sh-multisig\" | \"p2wsh-multisig\" | \"p2sh-p2wsh-multisig\";\n readonly m: number;\n readonly n: number;\n}\n\nexport interface DescribedRawInput {\n readonly type: \"raw\";\n readonly scriptSigBytes: number;\n readonly witnessBytes: number;\n}\n\nexport type DescribedInput =\n \"p2pk\" | \"p2pkh\" | \"p2wpkh\" | \"p2sh-p2wpkh\" | \"p2tr\" | DescribedMultisig | DescribedRawInput;\n\nexport type DescribeInputResult =\n { readonly ok: true; readonly description: DescribedInput } | WeightFailure;\n\n/**\n * Maps a descriptor fragment to a value structurally assignable to\n * `utxo-coinselect`'s `InputType`, without either package depending on the\n * other. Fails with `opaque-script` for `addr()`/`raw()` (spending script\n * unknown) and `ambiguous-script-type` for `combo()` (multiple candidate\n * scripts). Every other supported fragment always succeeds, falling back to\n * an exact `{ type: \"raw\", ... }` shape when there is no named catalog entry.\n */\nexport function describeInput(node: ScriptNode): DescribeInputResult {\n const cost = computeInputCost(node);\n\n if (!cost.ok) {\n return cost;\n }\n\n if (node.kind === \"pk\") {\n return { ok: true, description: \"p2pk\" };\n }\n\n if (node.kind === \"pkh\") {\n return { ok: true, description: \"p2pkh\" };\n }\n\n if (node.kind === \"wpkh\") {\n return { ok: true, description: \"p2wpkh\" };\n }\n\n if (node.kind === \"tr\" && node.tree === undefined) {\n return { ok: true, description: \"p2tr\" };\n }\n\n if (node.kind === \"sh\" && node.inner.kind === \"wpkh\") {\n return { ok: true, description: \"p2sh-p2wpkh\" };\n }\n\n if (node.kind === \"sh\" && node.inner.kind === \"multi\") {\n return {\n ok: true,\n description: { type: \"p2sh-multisig\", m: node.inner.threshold, n: node.inner.keys.length },\n };\n }\n\n if (node.kind === \"wsh\" && node.inner.kind === \"multi\") {\n return {\n ok: true,\n description: { type: \"p2wsh-multisig\", m: node.inner.threshold, n: node.inner.keys.length },\n };\n }\n\n if (node.kind === \"sh\" && node.inner.kind === \"wsh\" && node.inner.inner.kind === \"multi\") {\n return {\n ok: true,\n description: {\n type: \"p2sh-p2wsh-multisig\",\n m: node.inner.inner.threshold,\n n: node.inner.inner.keys.length,\n },\n };\n }\n\n return {\n ok: true,\n description: { type: \"raw\", scriptSigBytes: cost.scriptSig, witnessBytes: cost.witness },\n };\n}\n\nexport interface DescribedRawOutput {\n readonly type: \"raw\";\n readonly scriptPubKeyBytes: number;\n}\n\nexport type DescribedOutput =\n \"p2pk\" | \"p2pkh\" | \"p2sh\" | \"p2wpkh\" | \"p2wsh\" | \"p2tr\" | DescribedRawOutput;\n\nexport type DescribeOutputResult =\n { readonly ok: true; readonly description: DescribedOutput } | WeightFailure;\n\n/** Maps a descriptor fragment to a value structurally assignable to `utxo-coinselect`'s `OutputType`. */\nexport function describeOutput(\n node: ScriptNode,\n options: WeightOptions = {},\n): DescribeOutputResult {\n const scriptBytesResult = computeOutputScriptBytes(node, options);\n\n if (!scriptBytesResult.ok) {\n return scriptBytesResult;\n }\n\n // computeOutputScriptBytes already failed above for combo(), so every kind\n // reaching this switch other than combo is representable here.\n const resolvedNode = node as Exclude<ScriptNode, { readonly kind: \"combo\" }>;\n\n switch (resolvedNode.kind) {\n case \"pk\":\n return { ok: true, description: \"p2pk\" };\n case \"pkh\":\n return { ok: true, description: \"p2pkh\" };\n case \"wpkh\":\n return { ok: true, description: \"p2wpkh\" };\n case \"sh\":\n return { ok: true, description: \"p2sh\" };\n case \"wsh\":\n return { ok: true, description: \"p2wsh\" };\n case \"tr\":\n return { ok: true, description: \"p2tr\" };\n case \"multi\":\n case \"raw\":\n case \"addr\":\n return { ok: true, description: { type: \"raw\", scriptPubKeyBytes: scriptBytesResult.value } };\n }\n}\n"]}
@@ -0,0 +1,54 @@
1
+ export { B as BITCOIN, a as BITCOIN_TESTNET, C as ChainParams, D as DescribeInputResult, b as DescribeOutputResult, c as DescribedInput, d as DescribedMultisig, e as DescribedOutput, f as DescribedRawInput, g as DescribedRawOutput, L as LITECOIN, h as LITECOIN_TESTNET, W as WeightOptions, i as describeInput, j as describeOutput, k as inputWeight, o as outputWeight } from './weights-9_pPEdMA.cjs';
2
+ import { K as KeyExpression, S as ScriptNode, T as TapTree } from './types-Dr-JC_LD.cjs';
3
+ export { a as KeyMaterialKind, b as KeyOrigin, M as MultipathElement, P as ParseFailure, c as ParseFailureReason, d as ParseResult, e as ParsedDescriptor, f as PathElement, g as PathStep, h as TapLeafScript, W as WeightFailure, i as WeightFailureReason, j as WeightResult } from './types-Dr-JC_LD.cjs';
4
+ export { parseDescriptor } from './parse.cjs';
5
+
6
+ /** Computes the 8-character checksum for a descriptor with no `#` suffix. */
7
+ declare function checksumCreate(script: string): string | undefined;
8
+ /** Verifies an 8-character checksum against the script it was computed from. */
9
+ declare function checksumVerify(script: string, checksum: string): boolean;
10
+ declare function hasValidCharset(text: string): boolean;
11
+
12
+ interface KeyExpressionFailure {
13
+ readonly ok: false;
14
+ readonly message: string;
15
+ }
16
+ interface KeyExpressionSuccess {
17
+ readonly ok: true;
18
+ readonly key: KeyExpression;
19
+ }
20
+ type KeyExpressionResult = KeyExpressionSuccess | KeyExpressionFailure;
21
+ interface KeyExpressionOptions {
22
+ /** Bare 64-hex x-only keys (BIP-386) are only valid directly inside tr(). */
23
+ readonly allowXOnly: boolean;
24
+ }
25
+ declare function parseKeyExpression(raw: string, options: KeyExpressionOptions): KeyExpressionResult;
26
+
27
+ interface MultipathFailure {
28
+ readonly ok: false;
29
+ readonly message: string;
30
+ }
31
+ interface MultipathSuccess {
32
+ readonly ok: true;
33
+ /** One descriptor per BIP-389 tuple position; length 1 when no multipath is present. */
34
+ readonly descriptors: readonly ScriptNode[];
35
+ }
36
+ type MultipathResult = MultipathSuccess | MultipathFailure;
37
+ /**
38
+ * Expands BIP-389 multipath key expressions (e.g. `<0;1>`) into one
39
+ * descriptor per tuple position. Every multipath element in a descriptor
40
+ * must share the same tuple length; duplicate values within one tuple are
41
+ * rejected during parsing, not here.
42
+ */
43
+ declare function expandMultipath(script: ScriptNode): MultipathResult;
44
+
45
+ declare function forEachKey(node: ScriptNode, visit: (key: KeyExpression) => void): void;
46
+ declare function anyKeyRanged(node: ScriptNode): boolean;
47
+ interface TapLeafWithDepth {
48
+ readonly key: KeyExpression;
49
+ readonly depth: number;
50
+ }
51
+ /** Depth is the number of sibling hashes needed in the control block. */
52
+ declare function collectTapLeaves(tree: TapTree, depth?: number): TapLeafWithDepth[];
53
+
54
+ export { KeyExpression, type KeyExpressionOptions, type KeyExpressionResult, type MultipathResult, ScriptNode, type TapLeafWithDepth, TapTree, anyKeyRanged, checksumCreate, checksumVerify, collectTapLeaves, expandMultipath, forEachKey, hasValidCharset, parseKeyExpression };
@@ -0,0 +1,54 @@
1
+ export { B as BITCOIN, a as BITCOIN_TESTNET, C as ChainParams, D as DescribeInputResult, b as DescribeOutputResult, c as DescribedInput, d as DescribedMultisig, e as DescribedOutput, f as DescribedRawInput, g as DescribedRawOutput, L as LITECOIN, h as LITECOIN_TESTNET, W as WeightOptions, i as describeInput, j as describeOutput, k as inputWeight, o as outputWeight } from './weights-B0KrRWLe.js';
2
+ import { K as KeyExpression, S as ScriptNode, T as TapTree } from './types-Dr-JC_LD.js';
3
+ export { a as KeyMaterialKind, b as KeyOrigin, M as MultipathElement, P as ParseFailure, c as ParseFailureReason, d as ParseResult, e as ParsedDescriptor, f as PathElement, g as PathStep, h as TapLeafScript, W as WeightFailure, i as WeightFailureReason, j as WeightResult } from './types-Dr-JC_LD.js';
4
+ export { parseDescriptor } from './parse.js';
5
+
6
+ /** Computes the 8-character checksum for a descriptor with no `#` suffix. */
7
+ declare function checksumCreate(script: string): string | undefined;
8
+ /** Verifies an 8-character checksum against the script it was computed from. */
9
+ declare function checksumVerify(script: string, checksum: string): boolean;
10
+ declare function hasValidCharset(text: string): boolean;
11
+
12
+ interface KeyExpressionFailure {
13
+ readonly ok: false;
14
+ readonly message: string;
15
+ }
16
+ interface KeyExpressionSuccess {
17
+ readonly ok: true;
18
+ readonly key: KeyExpression;
19
+ }
20
+ type KeyExpressionResult = KeyExpressionSuccess | KeyExpressionFailure;
21
+ interface KeyExpressionOptions {
22
+ /** Bare 64-hex x-only keys (BIP-386) are only valid directly inside tr(). */
23
+ readonly allowXOnly: boolean;
24
+ }
25
+ declare function parseKeyExpression(raw: string, options: KeyExpressionOptions): KeyExpressionResult;
26
+
27
+ interface MultipathFailure {
28
+ readonly ok: false;
29
+ readonly message: string;
30
+ }
31
+ interface MultipathSuccess {
32
+ readonly ok: true;
33
+ /** One descriptor per BIP-389 tuple position; length 1 when no multipath is present. */
34
+ readonly descriptors: readonly ScriptNode[];
35
+ }
36
+ type MultipathResult = MultipathSuccess | MultipathFailure;
37
+ /**
38
+ * Expands BIP-389 multipath key expressions (e.g. `<0;1>`) into one
39
+ * descriptor per tuple position. Every multipath element in a descriptor
40
+ * must share the same tuple length; duplicate values within one tuple are
41
+ * rejected during parsing, not here.
42
+ */
43
+ declare function expandMultipath(script: ScriptNode): MultipathResult;
44
+
45
+ declare function forEachKey(node: ScriptNode, visit: (key: KeyExpression) => void): void;
46
+ declare function anyKeyRanged(node: ScriptNode): boolean;
47
+ interface TapLeafWithDepth {
48
+ readonly key: KeyExpression;
49
+ readonly depth: number;
50
+ }
51
+ /** Depth is the number of sibling hashes needed in the control block. */
52
+ declare function collectTapLeaves(tree: TapTree, depth?: number): TapLeafWithDepth[];
53
+
54
+ export { KeyExpression, type KeyExpressionOptions, type KeyExpressionResult, type MultipathResult, ScriptNode, type TapLeafWithDepth, TapTree, anyKeyRanged, checksumCreate, checksumVerify, collectTapLeaves, expandMultipath, forEachKey, hasValidCharset, parseKeyExpression };