{
  "version": 3,
  "sources": ["../src/bitcoin/serialize.ts", "../src/bitcoin/address.ts"],
  "sourcesContent": [
    "import { concatBytes } from \"../utils/encoding.ts\";\nimport { sha256 } from \"../utils/hash.ts\";\n\n/**\n * Bitcoin double-SHA256: `sha256(sha256(bytes))`. This is the hash Bitcoin uses\n * for txids, block headers, and merkle nodes — NOT the same as the Stacks\n * `txidFromBytes` (which uses sha512_256), so it lives here, not in `utils/hash`.\n */\nexport function doubleSha256(bytes: Uint8Array): Uint8Array {\n\treturn sha256(sha256(bytes));\n}\n\n/**\n * Reverse a byte array. Bitcoin hashes are computed and stored in *internal*\n * (little-endian) order but *displayed* big-endian, so the two differ by a\n * reversal. The SIP-044 built-ins consume internal order; only reverse for\n * display / when matching an explorer value.\n */\nexport function reverseBytes(bytes: Uint8Array): Uint8Array {\n\tconst out = new Uint8Array(bytes.length);\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tout[i] = bytes[bytes.length - 1 - i] as number;\n\t}\n\treturn out;\n}\n\n/**\n * A little-endian, varint-aware byte reader for Bitcoin serialization. The\n * shared `utils/BytesReader` is big-endian only; Bitcoin tx fields are\n * little-endian with compact-size (varint) length prefixes.\n */\nexport class BtcReader {\n\tprivate readonly data: Uint8Array;\n\tprivate readonly view: DataView;\n\tpublic offset = 0;\n\n\tconstructor(data: Uint8Array) {\n\t\tthis.data = data;\n\t\tthis.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\t}\n\n\tget length(): number {\n\t\treturn this.data.length;\n\t}\n\n\treadUInt8(): number {\n\t\tconst v = this.view.getUint8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn v;\n\t}\n\n\t/** Read the next byte without advancing. */\n\tpeekUInt8(): number {\n\t\treturn this.view.getUint8(this.offset);\n\t}\n\n\treadUInt32LE(): number {\n\t\tconst v = this.view.getUint32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn v;\n\t}\n\n\treadUInt64LE(): bigint {\n\t\tconst v = this.view.getBigUint64(this.offset, true);\n\t\tthis.offset += 8;\n\t\treturn v;\n\t}\n\n\treadBytes(n: number): Uint8Array {\n\t\tif (this.offset + n > this.data.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Bitcoin tx underflow: need ${n} bytes at offset ${this.offset}, have ${this.data.length}`,\n\t\t\t);\n\t\t}\n\t\tconst slice = this.data.slice(this.offset, this.offset + n);\n\t\tthis.offset += n;\n\t\treturn slice;\n\t}\n\n\t/** Read a Bitcoin compact-size unsigned integer (varint). */\n\treadVarInt(): number {\n\t\tconst first = this.readUInt8();\n\t\tif (first < 0xfd) return first;\n\t\tif (first === 0xfd) {\n\t\t\tconst v = this.view.getUint16(this.offset, true);\n\t\t\tthis.offset += 2;\n\t\t\treturn v;\n\t\t}\n\t\tif (first === 0xfe) {\n\t\t\treturn this.readUInt32LE();\n\t\t}\n\t\tconst big = this.readUInt64LE();\n\t\tif (big > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\tthrow new Error(\"Bitcoin varint exceeds safe integer range\");\n\t\t}\n\t\treturn Number(big);\n\t}\n}\n\nexport interface BitcoinTxInput {\n\t/** Previous output txid, in serialized (internal) byte order. */\n\tprevTxid: Uint8Array;\n\tvout: number;\n\tscriptSig: Uint8Array;\n\tsequence: number;\n}\n\nexport interface BitcoinTxOutput {\n\t/** Output value in satoshis. */\n\tvalue: bigint;\n\tscriptPubKey: Uint8Array;\n}\n\nexport interface ParsedBitcoinTx {\n\tversion: number;\n\thasWitness: boolean;\n\tinputs: BitcoinTxInput[];\n\toutputs: BitcoinTxOutput[];\n\tlocktime: number;\n\t/**\n\t * The legacy txid as the raw double-SHA256 in *internal* byte order — ready\n\t * to pass as the leaf to `verify-merkle-proof`. Witness data is excluded\n\t * (the txid is computed over the legacy serialization), so this is stable for\n\t * both legacy and SegWit txs. Use `reverseBytes` for the displayed form.\n\t */\n\ttxidInternal: Uint8Array;\n}\n\ninterface ScanResult {\n\tversion: number;\n\thasWitness: boolean;\n\tinputs: BitcoinTxInput[];\n\toutputs: BitcoinTxOutput[];\n\tlocktime: number;\n\t/** The legacy (witness-stripped) serialization — what the txid is hashed over. */\n\tlegacy: Uint8Array;\n}\n\n/**\n * Single-pass scan of a raw Bitcoin tx. Captures the inputs/outputs slice and\n * reassembles the legacy serialization so both `parseBitcoinTx` and\n * `stripWitness` share one parser (and one set of foot-guns).\n */\nfunction scanTx(rawTx: Uint8Array): ScanResult {\n\tconst r = new BtcReader(rawTx);\n\tconst version = r.readUInt32LE();\n\n\t// SegWit marker (0x00) + flag (0x01) sit immediately after the version. A\n\t// legacy tx can never have a zero input count, so 0x00 here is unambiguous.\n\tlet hasWitness = false;\n\tif (r.peekUInt8() === 0x00) {\n\t\tr.readUInt8(); // marker\n\t\tconst flag = r.readUInt8();\n\t\tif (flag !== 0x01) {\n\t\t\tthrow new Error(`Unexpected SegWit flag 0x${flag.toString(16)}`);\n\t\t}\n\t\thasWitness = true;\n\t}\n\n\tconst bodyStart = r.offset;\n\tconst inputCount = r.readVarInt();\n\tconst inputs: BitcoinTxInput[] = [];\n\tfor (let i = 0; i < inputCount; i++) {\n\t\tconst prevTxid = r.readBytes(32);\n\t\tconst vout = r.readUInt32LE();\n\t\tconst scriptSig = r.readBytes(r.readVarInt());\n\t\tconst sequence = r.readUInt32LE();\n\t\tinputs.push({ prevTxid, vout, scriptSig, sequence });\n\t}\n\n\tconst outputCount = r.readVarInt();\n\tconst outputs: BitcoinTxOutput[] = [];\n\tfor (let i = 0; i < outputCount; i++) {\n\t\tconst value = r.readUInt64LE();\n\t\tconst scriptPubKey = r.readBytes(r.readVarInt());\n\t\toutputs.push({ value, scriptPubKey });\n\t}\n\tconst bodyEnd = r.offset;\n\n\tif (hasWitness) {\n\t\tfor (let i = 0; i < inputCount; i++) {\n\t\t\tconst itemCount = r.readVarInt();\n\t\t\tfor (let j = 0; j < itemCount; j++) {\n\t\t\t\tr.readBytes(r.readVarInt());\n\t\t\t}\n\t\t}\n\t}\n\n\tconst locktime = r.readUInt32LE();\n\n\tconst legacy = concatBytes(\n\t\trawTx.slice(0, 4),\n\t\trawTx.slice(bodyStart, bodyEnd),\n\t\trawTx.slice(r.offset - 4, r.offset),\n\t);\n\n\treturn { version, hasWitness, inputs, outputs, locktime, legacy };\n}\n\n/** Parse a serialized Bitcoin tx (legacy or SegWit) into its fields + txid. */\nexport function parseBitcoinTx(rawTx: Uint8Array): ParsedBitcoinTx {\n\tconst s = scanTx(rawTx);\n\treturn {\n\t\tversion: s.version,\n\t\thasWitness: s.hasWitness,\n\t\tinputs: s.inputs,\n\t\toutputs: s.outputs,\n\t\tlocktime: s.locktime,\n\t\ttxidInternal: doubleSha256(s.legacy),\n\t};\n}\n\n/**\n * Return the legacy (witness-stripped) serialization of a tx. For a legacy tx\n * this is the input unchanged; for a SegWit tx the marker, flag, and witness\n * stack are removed. This is the byte string the txid is hashed over.\n */\nexport function stripWitness(rawTx: Uint8Array): Uint8Array {\n\treturn scanTx(rawTx).legacy;\n}\n\n/**\n * Compute a tx's id from its raw serialization. Internal byte order by default\n * (the merkle leaf / built-in input); pass `{ display: true }` for the\n * explorer-style big-endian form.\n */\nexport function bitcoinTxid(\n\trawTx: Uint8Array,\n\t{ display = false }: { display?: boolean } = {},\n): Uint8Array {\n\tconst txid = doubleSha256(scanTx(rawTx).legacy);\n\treturn display ? reverseBytes(txid) : txid;\n}\n\nexport interface BlockHeader {\n\tversion: number;\n\t/** Previous block hash, internal byte order. */\n\tprevBlock: Uint8Array;\n\t/** Merkle root, internal byte order — pairs with `verify-merkle-proof`. */\n\tmerkleRoot: Uint8Array;\n\ttimestamp: number;\n\tbits: number;\n\tnonce: number;\n}\n\n/** Parse an 80-byte Bitcoin block header into its fields (hashes internal order). */\nexport function parseBlockHeader(header: Uint8Array): BlockHeader {\n\tif (header.length !== 80) {\n\t\tthrow new Error(\n\t\t\t`Bitcoin block header must be 80 bytes, got ${header.length}`,\n\t\t);\n\t}\n\tconst r = new BtcReader(header);\n\tconst version = r.readUInt32LE();\n\tconst prevBlock = r.readBytes(32);\n\tconst merkleRoot = r.readBytes(32);\n\tconst timestamp = r.readUInt32LE();\n\tconst bits = r.readUInt32LE();\n\tconst nonce = r.readUInt32LE();\n\treturn { version, prevBlock, merkleRoot, timestamp, bits, nonce };\n}\n\n/**\n * Hash an 80-byte block header (double-SHA256). Internal byte order by default;\n * `{ display: true }` for the explorer-style block hash.\n */\nexport function blockHash(\n\theader: Uint8Array,\n\t{ display = false }: { display?: boolean } = {},\n): Uint8Array {\n\tconst hash = doubleSha256(header);\n\treturn display ? reverseBytes(hash) : hash;\n}\n",
    "import { schnorr, secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { base58, bech32, bech32m } from \"@scure/base\";\nimport { concatBytes, hexToBytes } from \"../utils/encoding.ts\";\nimport { hash160 } from \"../utils/hash.ts\";\nimport type { ParsedOutputScript } from \"./codec.ts\";\nimport type { BitcoinNetwork } from \"./constants.ts\";\nimport { doubleSha256 } from \"./serialize.ts\";\n\n/** Address-encoding parameters (base58 version bytes + bech32 hrp) per network. */\nexport const BITCOIN_NETWORK_PARAMS = {\n\tmainnet: { p2pkh: 0x00, p2sh: 0x05, hrp: \"bc\" },\n\ttestnet: { p2pkh: 0x6f, p2sh: 0xc4, hrp: \"tb\" },\n\tregtest: { p2pkh: 0x6f, p2sh: 0xc4, hrp: \"bcrt\" },\n} as const;\n\nconst NETWORK_PARAMS = BITCOIN_NETWORK_PARAMS;\n\n/** Base58Check-encode a versioned 20-byte payload (legacy P2PKH / P2SH).\n *  The one encoder for the package; pox5 and sbtc address code import it. */\nexport function base58CheckEncode(\n\tversion: number,\n\tpayload: Uint8Array,\n): string {\n\tconst data = concatBytes(Uint8Array.of(version), payload);\n\tconst checksum = doubleSha256(data).slice(0, 4);\n\treturn base58.encode(concatBytes(data, checksum));\n}\n\n/**\n * Render a parsed output script as a Bitcoin address for the given network.\n * Returns `undefined` for scripts without a standard address (OP_RETURN, P2PK,\n * unknown). Address encoding is network-dependent, which is why this is separate\n * from the pure `parseOutputScript` decoder.\n */\nexport function formatBitcoinAddress(\n\tparsed: ParsedOutputScript,\n\tnetwork: BitcoinNetwork = \"mainnet\",\n): string | undefined {\n\tconst params = NETWORK_PARAMS[network];\n\tconst hash = parsed.hash;\n\tif (!hash) return undefined;\n\tswitch (parsed.type) {\n\t\tcase \"p2pkh\":\n\t\t\treturn base58CheckEncode(params.p2pkh, hash);\n\t\tcase \"p2sh\":\n\t\t\treturn base58CheckEncode(params.p2sh, hash);\n\t\tcase \"p2wpkh\":\n\t\tcase \"p2wsh\":\n\t\t\treturn bech32.encode(params.hrp, [0, ...bech32.toWords(hash)]);\n\t\tcase \"p2tr\":\n\t\t\treturn bech32m.encode(params.hrp, [1, ...bech32m.toWords(hash)]);\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction toPubkeyBytes(publicKey: Uint8Array | string): Uint8Array {\n\treturn typeof publicKey === \"string\" ? hexToBytes(publicKey) : publicKey;\n}\n\n/**\n * BIP341 key-path tweak: lift the x-only internal key to a point, add\n * `tapTweakHash(P)·G` (no script tree), and return the x-only output key.\n */\nexport function taprootTweakPubkey(xonly: Uint8Array): Uint8Array {\n\tif (xonly.length !== 32)\n\t\tthrow new Error(`Expected 32-byte x-only pubkey, got ${xonly.length}`);\n\tconst tweak = schnorr.utils.taggedHash(\"TapTweak\", xonly);\n\tconst t = BigInt(\n\t\t`0x${Array.from(tweak, (b) => b.toString(16).padStart(2, \"0\")).join(\"\")}`,\n\t);\n\tif (t >= secp256k1.Point.Fn.ORDER)\n\t\tthrow new Error(\"Invalid tap tweak (exceeds curve order)\");\n\tconst internal = secp256k1.Point.fromBytes(\n\t\tconcatBytes(Uint8Array.of(0x02), xonly),\n\t);\n\tconst output = internal.add(secp256k1.Point.BASE.multiply(t));\n\treturn output.toBytes(true).slice(1);\n}\n\n/**\n * Derive the native-segwit (P2WPKH, bech32 v0) address for a compressed\n * public key.\n */\nexport function publicKeyToP2wpkhAddress(\n\tpublicKey: Uint8Array | string,\n\tnetwork: BitcoinNetwork = \"mainnet\",\n): string {\n\tconst pubkey = toPubkeyBytes(publicKey);\n\tif (pubkey.length !== 33)\n\t\tthrow new Error(`Expected 33-byte compressed pubkey, got ${pubkey.length}`);\n\tconst params = NETWORK_PARAMS[network];\n\treturn bech32.encode(params.hrp, [0, ...bech32.toWords(hash160(pubkey))]);\n}\n\n/**\n * Derive the taproot (P2TR, bech32m v1) address for a public key — BIP341\n * key-path spend, no script tree. Accepts a 33-byte compressed key (the\n * parity byte is dropped) or a 32-byte x-only key.\n */\nexport function publicKeyToP2trAddress(\n\tpublicKey: Uint8Array | string,\n\tnetwork: BitcoinNetwork = \"mainnet\",\n): string {\n\tconst pubkey = toPubkeyBytes(publicKey);\n\tconst xonly =\n\t\tpubkey.length === 33\n\t\t\t? pubkey.slice(1)\n\t\t\t: pubkey.length === 32\n\t\t\t\t? pubkey\n\t\t\t\t: undefined;\n\tif (!xonly)\n\t\tthrow new Error(\n\t\t\t`Expected 33-byte compressed or 32-byte x-only pubkey, got ${pubkey.length}`,\n\t\t);\n\tconst params = NETWORK_PARAMS[network];\n\tconst outputKey = taprootTweakPubkey(xonly);\n\treturn bech32m.encode(params.hrp, [1, ...bech32m.toWords(outputKey)]);\n}\n"
  ],
  "mappings": "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",
  "debugId": "1DF872A8095B935464756E2164756E21",
  "names": []
}