@secondlayer/stacks 6.4.1 → 6.5.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.
- package/dist/shared/{stacks-esm-ss9ap75h.js → stacks-esm-47b3bb9e.js} +2 -2
- package/dist/shared/stacks-esm-51sysw9g.js +7 -0
- package/dist/shared/stacks-esm-51sysw9g.js.map +10 -0
- package/dist/shared/{stacks-esm-z0rq3ejt.js → stacks-esm-fb1gh99a.js} +4 -7
- package/dist/shared/{stacks-esm-z0rq3ejt.js.map → stacks-esm-fb1gh99a.js.map} +4 -5
- package/dist/shared/{stacks-esm-e2qhfgke.js → stacks-esm-ph2fd7hg.js} +8 -4
- package/dist/shared/{stacks-esm-e2qhfgke.js.map → stacks-esm-ph2fd7hg.js.map} +3 -3
- package/dist/shared/stacks-esm-zvpv6a06.js +28 -0
- package/dist/shared/stacks-esm-zvpv6a06.js.map +10 -0
- package/dist/src/accounts/index.cjs +7 -3
- package/dist/src/accounts/index.cjs.map +3 -3
- package/dist/src/accounts/index.js +1 -1
- package/dist/src/bitcoin/index.cjs +7 -3
- package/dist/src/bitcoin/index.cjs.map +3 -3
- package/dist/src/bitcoin/index.d.cts +6 -5
- package/dist/src/bitcoin/index.d.ts +6 -5
- package/dist/src/bitcoin/index.js +12 -23
- package/dist/src/bitcoin/index.js.map +3 -4
- package/dist/src/pox/index.cjs +7 -3
- package/dist/src/pox/index.cjs.map +3 -3
- package/dist/src/pox/index.js +2 -2
- package/dist/src/pox5/index.cjs +7 -3
- package/dist/src/pox5/index.cjs.map +3 -3
- package/dist/src/pox5/index.js +7 -5
- package/dist/src/pox5/index.js.map +2 -2
- package/dist/src/sbtc/index.cjs +173 -15
- package/dist/src/sbtc/index.cjs.map +10 -7
- package/dist/src/sbtc/index.d.cts +117 -5
- package/dist/src/sbtc/index.d.ts +117 -5
- package/dist/src/sbtc/index.js +152 -9
- package/dist/src/sbtc/index.js.map +7 -6
- package/package.json +1 -1
- /package/dist/shared/{stacks-esm-ss9ap75h.js.map → stacks-esm-47b3bb9e.js.map} +0 -0
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/sbtc/abi.ts", "../src/sbtc/constants.ts", "../src/sbtc/actions.ts", "../src/sbtc/utils.ts", "../src/sbtc/index.ts"],
|
|
3
|
+
"sources": ["../src/sbtc/abi.ts", "../src/sbtc/constants.ts", "../src/sbtc/peg.ts", "../src/sbtc/actions.ts", "../src/sbtc/utils.ts", "../src/sbtc/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type { AbiContract } from \"../clarity/abi/contract.ts\";\n\n/**\n * Minimal read-only ABI for `sbtc-token`.\n *\n * Only covers the SIP-010 fungible-token getters needed for supply / balance\n * queries. Public mutating functions are intentionally omitted; the data plane\n * doesn't sign sBTC token transfers itself, and the dataset captures\n * mutation effects through SIP-005 token events on the indexer side.\n */\nexport const SBTC_TOKEN_ABI = {\n\tfunctions: [\n\t\t{\n\t\t\tname: \"get-name\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: {\n\t\t\t\tresponse: { ok: { \"string-ascii\": { length: 32 } }, error: \"none\" },\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"get-symbol\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: {\n\t\t\t\tresponse: { ok: { \"string-ascii\": { length: 10 } }, error: \"none\" },\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"get-decimals\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"none\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"get-total-supply\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"none\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"get-balance\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [{ name: \"owner\", type: \"principal\" }],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"none\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"get-token-uri\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: {\n\t\t\t\tresponse: {\n\t\t\t\t\tok: { optional: { \"string-utf8\": { length: 256 } } },\n\t\t\t\t\terror: \"none\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n} as const satisfies AbiContract;\n\n/**\n * Minimal read-only ABI for `sbtc-registry`.\n *\n *
|
|
5
|
+
"import type { AbiContract } from \"../clarity/abi/contract.ts\";\n\n/**\n * Minimal read-only ABI for `sbtc-token`.\n *\n * Only covers the SIP-010 fungible-token getters needed for supply / balance\n * queries. Public mutating functions are intentionally omitted; the data plane\n * doesn't sign sBTC token transfers itself, and the dataset captures\n * mutation effects through SIP-005 token events on the indexer side.\n */\nexport const SBTC_TOKEN_ABI = {\n\tfunctions: [\n\t\t{\n\t\t\tname: \"get-name\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: {\n\t\t\t\tresponse: { ok: { \"string-ascii\": { length: 32 } }, error: \"none\" },\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"get-symbol\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: {\n\t\t\t\tresponse: { ok: { \"string-ascii\": { length: 10 } }, error: \"none\" },\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"get-decimals\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"none\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"get-total-supply\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"none\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"get-balance\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [{ name: \"owner\", type: \"principal\" }],\n\t\t\toutputs: { response: { ok: \"uint128\", error: \"none\" } },\n\t\t},\n\t\t{\n\t\t\tname: \"get-token-uri\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: {\n\t\t\t\tresponse: {\n\t\t\t\t\tok: { optional: { \"string-utf8\": { length: 256 } } },\n\t\t\t\t\terror: \"none\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n} as const satisfies AbiContract;\n\n/**\n * Minimal read-only ABI for `sbtc-registry`.\n *\n * The current signer-set getters — the inputs to deriving the signers' peg\n * address (v1: the aggregate pubkey; v2: the signer set and threshold).\n * Verified against the deployed mainnet contract interface.\n */\nexport const SBTC_REGISTRY_ABI = {\n\tfunctions: [\n\t\t{\n\t\t\tname: \"get-current-aggregate-pubkey\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: { buff: { length: 33 } },\n\t\t},\n\t\t{\n\t\t\tname: \"get-current-signer-data\",\n\t\t\taccess: \"read-only\",\n\t\t\targs: [],\n\t\t\toutputs: {\n\t\t\t\ttuple: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"current-aggregate-pubkey\",\n\t\t\t\t\t\ttype: { buff: { length: 33 } },\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"current-signature-threshold\", type: \"uint128\" },\n\t\t\t\t\t{ name: \"current-signer-principal\", type: \"principal\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"current-signer-set\",\n\t\t\t\t\t\ttype: { list: { type: { buff: { length: 33 } }, length: 128 } },\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t],\n} as const satisfies AbiContract;\n",
|
|
6
6
|
"/**\n * sBTC mainnet contract identifiers.\n *\n * The protocol uses three contracts:\n * - `sbtc-token` — SIP-010 fungible token with mint/burn/transfer SIP-005 events.\n * - `sbtc-deposit` — entry point for deposit completion calls (no print events).\n * - `sbtc-registry` — emits all protocol-state print events (deposits, withdrawals,\n * signer-set rotations, governance).\n *\n * Verified against the deployed contracts via Hiro's\n * `/v2/contracts/interface/...` endpoint (both networks, 2026-08-12).\n */\nexport const SBTC_CONTRACTS = {\n\tmainnet: {\n\t\taddress: \"SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4\",\n\t\ttoken: \"sbtc-token\",\n\t\tdeposit: \"sbtc-deposit\",\n\t\tregistry: \"sbtc-registry\",\n\t},\n\ttestnet: {\n\t\t// The testnet reset retired `SN3R84XZYA63QS28932XQF3G1J8R9PC3W76P9CSQS`,\n\t\t// which this pointed at until 2026-08-12 — every testnet call resolved to\n\t\t// a contract that 404s. This deployment carries the live signer set.\n\t\taddress: \"SN3VMHXEN64ZZF71JQ5VESXDWTR301XTTXGF4J8F1\",\n\t\ttoken: \"sbtc-token\",\n\t\tdeposit: \"sbtc-deposit\",\n\t\tregistry: \"sbtc-registry\",\n\t},\n} as const;\n\nexport type SbtcNetwork = keyof typeof SBTC_CONTRACTS;\n\n/** Asset identifier for `sbtc-token` (mainnet). */\nexport const SBTC_ASSET_IDENTIFIER_MAINNET: string = `${SBTC_CONTRACTS.mainnet.address}.${SBTC_CONTRACTS.mainnet.token}::sbtc-token`;\n\n/** Asset identifier for `sbtc-token` (testnet). */\nexport const SBTC_ASSET_IDENTIFIER_TESTNET: string = `${SBTC_CONTRACTS.testnet.address}.${SBTC_CONTRACTS.testnet.token}::sbtc-token`;\n\n/** All print-event topic strings emitted by `sbtc-registry`. */\nexport const SBTC_EVENT_TOPICS = [\n\t\"completed-deposit\",\n\t\"withdrawal-create\",\n\t\"withdrawal-accept\",\n\t\"withdrawal-reject\",\n\t\"key-rotation\",\n\t\"update-protocol-contract\",\n] as const;\n\nexport type SbtcEventTopic = (typeof SBTC_EVENT_TOPICS)[number];\n\n/** Bitcoin address version bytes used in BTC recipient tuples. Same byte map as PoX. */\nexport const SBTC_BTC_ADDRESS_VERSION = {\n\tp2pkh: 0x00,\n\tp2sh: 0x01,\n\tp2sh_p2wpkh: 0x02,\n\tp2sh_p2wsh: 0x03,\n\tp2wpkh: 0x04,\n\tp2wsh: 0x05,\n\tp2tr: 0x06,\n} as const;\n\n/** Number of decimal places in the sBTC fungible token (matches BTC). */\nexport const SBTC_DECIMALS = 8;\n\n/** Smallest unit of sBTC, denominated in satoshis. */\nexport const SBTC_UNIT_NAME = \"satoshis\" as const;\n\n/**\n * Resolve the qualified contract identifier for a given protocol contract.\n *\n * @example\n * sbtcContractId(\"mainnet\", \"registry\")\n * // => \"SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-registry\"\n */\nexport function sbtcContractId(\n\tnetwork: SbtcNetwork,\n\tcontract: \"token\" | \"deposit\" | \"registry\",\n): string {\n\tconst cfg = SBTC_CONTRACTS[network];\n\treturn `${cfg.address}.${cfg[contract]}`;\n}\n",
|
|
7
|
-
"import {
|
|
7
|
+
"import { schnorr } from \"@noble/curves/secp256k1.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bech32m } from \"@scure/base\";\nimport { HDKey } from \"@scure/bip32\";\nimport {\n\tBITCOIN_NETWORK_PARAMS,\n\ttaprootTweakPubkey,\n} from \"../bitcoin/address.ts\";\nimport type { BitcoinNetwork } from \"../bitcoin/constants.ts\";\nimport { BaseError } from \"../errors/base.ts\";\nimport { bytesToHex, concatBytes, hexToBytes } from \"../utils/encoding.ts\";\n\n/**\n * Bitcoin height at which mainnet sBTC signers start locking the peg UTXO to\n * the v2 script (`MAINNET_V2_SIGNING_BLOCK_HEIGHT` in the sBTC signer). From\n * this height the next sweep pays the v2 output; until that sweep confirms,\n * the peg funds still sit at the v1 address.\n */\nexport const SBTC_V2_SIGNING_BURN_HEIGHT_MAINNET = 972_295;\n\n/** Most signer keys a v2 peg script may hold (`sbtc::MAX_SIGNERS`). */\nconst MAX_SIGNERS = 16;\n\n/**\n * Unspendable internal key of v2 peg outputs: the `/0/0` child of the\n * BIP341 NUMS point with an all-zero chain code (`V2_NUMS_X_COORDINATE`).\n */\nexport const SBTC_V2_INTERNAL_KEY: Uint8Array = hexToBytes(\n\t\"4a30b2e461b280c0b13a03799096ab1256589153fc4b9c8cead16dc0b6420697\",\n);\n\nconst CHAIN_CODE_DOMAIN = new TextEncoder().encode(\"sbtc/signer/chain-code/v1\");\n\nconst OP_CHECKSIG = 0xac;\nconst OP_CHECKSIGADD = 0xba;\nconst OP_NUMEQUAL = 0x9c;\nconst OP_PUSHNUM_BASE = 0x50; // OP_1 = 0x51 … OP_16 = 0x60\nconst TAPSCRIPT_LEAF_VERSION = 0xc0;\n\n/**\n * The registry's aggregate-key field holds the v2 marker `0xFF || block hash`\n * instead of a public key. There is no aggregate key to derive an address\n * from: the v2 peg is derived from the signer set and threshold.\n */\nexport class SbtcV2MarkerError extends BaseError {\n\toverride name = \"SbtcV2MarkerError\";\n}\n\n/**\n * Check a registry aggregate key and return it. A key is 33 bytes starting\n * with `0x02`/`0x03`. Throws {@link SbtcV2MarkerError} on the v2 marker\n * (`0xFF` prefix) and a plain `Error` on anything else.\n */\nexport function assertRegistryAggregateKey(key: Uint8Array): Uint8Array {\n\tif (key.length === 33 && key[0] === 0xff) {\n\t\tthrow new SbtcV2MarkerError(\n\t\t\t\"sbtc-registry aggregate key is the v2 marker (0xFF || block hash), not a public key\",\n\t\t\t{\n\t\t\t\tdetails:\n\t\t\t\t\t\"Derive the v2 peg from the signer set: getSignersAddress(client, { version: 'v2' }).\",\n\t\t\t},\n\t\t);\n\t}\n\tif (key.length !== 33 || (key[0] !== 0x02 && key[0] !== 0x03)) {\n\t\tthrow new Error(\n\t\t\t`sbtc-registry aggregate key is not a compressed public key (${key.length} bytes, prefix 0x${(key[0] ?? 0).toString(16).padStart(2, \"0\")})`,\n\t\t);\n\t}\n\treturn key;\n}\n\n/**\n * The x-only Bitcoin signing key of one registry signer: the unhardened\n * `/0/0` BIP32 child of its 33-byte public key, with chain code\n * `SHA256(\"sbtc/signer/chain-code/v1\" || pubkey)`.\n */\nexport function deriveSbtcSigningKey(\n\tregistryPublicKey: Uint8Array,\n): Uint8Array {\n\tif (\n\t\tregistryPublicKey.length !== 33 ||\n\t\t(registryPublicKey[0] !== 0x02 && registryPublicKey[0] !== 0x03)\n\t) {\n\t\tthrow new Error(\"sBTC signer key must be a 33-byte compressed public key\");\n\t}\n\tconst master = new HDKey({\n\t\tpublicKey: registryPublicKey,\n\t\tchainCode: sha256(concatBytes(CHAIN_CODE_DOMAIN, registryPublicKey)),\n\t});\n\tconst child = master.deriveChild(0).deriveChild(0).publicKey;\n\tif (!child) throw new Error(\"BIP32 derivation returned no public key\");\n\treturn child.slice(1);\n}\n\nfunction compareBytes(a: Uint8Array, b: Uint8Array): number {\n\tfor (let i = 0; i < a.length; i++) {\n\t\tconst d = (a[i] as number) - (b[i] as number);\n\t\tif (d !== 0) return d;\n\t}\n\treturn a.length - b.length;\n}\n\nfunction compactSize(n: number): Uint8Array {\n\tif (n < 0xfd) return Uint8Array.of(n);\n\tif (n <= 0xffff) return Uint8Array.of(0xfd, n & 0xff, n >> 8);\n\tthrow new Error(\"tapscript too long\");\n}\n\n/** A v2 sBTC peg output: the `multi_a` leaf, its scriptPubKey and address. */\nexport interface SbtcV2PegOutput {\n\t/** Sorted x-only signing keys in the script. */\n\tsigningKeys: Uint8Array[];\n\tsignaturesRequired: number;\n\t/** `<k1> CHECKSIG <k2> CHECKSIGADD … <m> NUMEQUAL`. */\n\tsigningScript: Uint8Array;\n\t/** `OP_1 <32-byte output key>`. */\n\tscriptPubKey: Uint8Array;\n\taddress: string;\n}\n\n/**\n * Derive the v2 peg output from the registry signer set and threshold:\n * `tr(NUMS_V2, multi_a(m, signer_1/0/0, …))` with the derived keys x-only and\n * sorted. Mirrors `SignerKeySet::derive` + `script_pubkey` in the sBTC signer.\n */\nexport function deriveSbtcV2PegOutput(\n\tsignerPublicKeys: readonly Uint8Array[],\n\tsignaturesRequired: number,\n\tnetwork: BitcoinNetwork = \"mainnet\",\n): SbtcV2PegOutput {\n\tconst unique = new Map<string, Uint8Array>();\n\tfor (const key of signerPublicKeys.map(deriveSbtcSigningKey)) {\n\t\tunique.set(bytesToHex(key), key);\n\t}\n\tconst signingKeys = [...unique.values()].sort(compareBytes);\n\tif (signingKeys.length > MAX_SIGNERS) {\n\t\tthrow new Error(\n\t\t\t`sBTC v2 peg holds at most ${MAX_SIGNERS} signer keys, got ${signingKeys.length}`,\n\t\t);\n\t}\n\tif (\n\t\t!Number.isInteger(signaturesRequired) ||\n\t\tsignaturesRequired < 1 ||\n\t\tsignaturesRequired > signingKeys.length\n\t) {\n\t\tthrow new Error(\n\t\t\t`sBTC v2 threshold must be between 1 and ${signingKeys.length}, got ${signaturesRequired}`,\n\t\t);\n\t}\n\n\tconst signingScript = concatBytes(\n\t\t...signingKeys.map((key, i) =>\n\t\t\tconcatBytes(\n\t\t\t\tUint8Array.of(0x20),\n\t\t\t\tkey,\n\t\t\t\tUint8Array.of(i === 0 ? OP_CHECKSIG : OP_CHECKSIGADD),\n\t\t\t),\n\t\t),\n\t\tUint8Array.of(OP_PUSHNUM_BASE + signaturesRequired, OP_NUMEQUAL),\n\t);\n\tconst leafHash = schnorr.utils.taggedHash(\n\t\t\"TapLeaf\",\n\t\tUint8Array.of(TAPSCRIPT_LEAF_VERSION),\n\t\tcompactSize(signingScript.length),\n\t\tsigningScript,\n\t);\n\tconst outputKey = taprootTweakPubkey(SBTC_V2_INTERNAL_KEY, leafHash);\n\treturn {\n\t\tsigningKeys,\n\t\tsignaturesRequired,\n\t\tsigningScript,\n\t\tscriptPubKey: concatBytes(Uint8Array.of(0x51, 0x20), outputKey),\n\t\taddress: bech32m.encode(BITCOIN_NETWORK_PARAMS[network].hrp, [\n\t\t\t1,\n\t\t\t...bech32m.toWords(outputKey),\n\t\t]),\n\t};\n}\n",
|
|
8
|
+
"import { getContract, resolveNetworkContract } from \"../actions/getContract.ts\";\nimport { getBurnBlockHeight } from \"../bitcoin/activation.ts\";\nimport { publicKeyToP2trAddress } from \"../bitcoin/address.ts\";\nimport type { BitcoinNetwork } from \"../bitcoin/constants.ts\";\nimport type { Client } from \"../clients/types.ts\";\nimport { SBTC_REGISTRY_ABI, SBTC_TOKEN_ABI } from \"./abi.ts\";\nimport { SBTC_CONTRACTS } from \"./constants.ts\";\nimport {\n\tSBTC_V2_SIGNING_BURN_HEIGHT_MAINNET,\n\tassertRegistryAggregateKey,\n\tderiveSbtcV2PegOutput,\n} from \"./peg.ts\";\n\nfunction getTokenContract(client: Client) {\n\tconst contract = resolveNetworkContract(client, SBTC_CONTRACTS);\n\treturn getContract({\n\t\tclient,\n\t\taddress: contract.address,\n\t\tname: contract.token,\n\t\tabi: SBTC_TOKEN_ABI,\n\t});\n}\n\nfunction getRegistryContract(client: Client) {\n\tconst contract = resolveNetworkContract(client, SBTC_CONTRACTS);\n\treturn getContract({\n\t\tclient,\n\t\taddress: contract.address,\n\t\tname: contract.registry,\n\t\tabi: SBTC_REGISTRY_ABI,\n\t});\n}\n\n/** Bitcoin network for the client's chain — devnet/mocknet map to regtest. */\nfunction bitcoinNetworkFromChain(client: Client): BitcoinNetwork {\n\tconst chain = client.chain;\n\tif (!chain) throw new Error(\"Client must have a chain configured\");\n\tif (chain.network === \"mainnet\") return \"mainnet\";\n\t// Devnet/mocknet run against bitcoind regtest (network magic \"id\").\n\treturn chain.magicBytes === \"id\" ? \"regtest\" : \"testnet\";\n}\n\n/** Total sBTC supply, in satoshis. */\nexport async function getTotalSupply(client: Client): Promise<bigint> {\n\tconst token = getTokenContract(client);\n\treturn (await token.read.getTotalSupply({})) as bigint;\n}\n\n/** sBTC balance of a Stacks principal, in satoshis. */\nexport async function getBalance(\n\tclient: Client,\n\towner: string,\n): Promise<bigint> {\n\tconst token = getTokenContract(client);\n\treturn (await token.read.getBalance({ owner })) as bigint;\n}\n\n/** Token name (`sBTC` for the canonical mainnet token). */\nexport async function getName(client: Client): Promise<string> {\n\tconst token = getTokenContract(client);\n\treturn (await token.read.getName({})) as string;\n}\n\n/** Token symbol. */\nexport async function getSymbol(client: Client): Promise<string> {\n\tconst token = getTokenContract(client);\n\treturn (await token.read.getSymbol({})) as string;\n}\n\n/** Number of decimals reported by `sbtc-token` (8 — matches BTC). */\nexport async function getDecimals(client: Client): Promise<bigint> {\n\tconst token = getTokenContract(client);\n\treturn (await token.read.getDecimals({})) as bigint;\n}\n\n/** Optional metadata URI returned by the token contract. */\nexport async function getTokenUri(client: Client): Promise<string | null> {\n\tconst token = getTokenContract(client);\n\treturn (await token.read.getTokenUri({})) as string | null;\n}\n\n/** The registry's current signer set (`get-current-signer-data`). */\nexport interface SbtcSignerSet {\n\t/** 33-byte compressed signer public keys. */\n\tsignerPublicKeys: Uint8Array[];\n\t/** Signatures needed to spend the peg UTXO. */\n\tsignaturesRequired: number;\n\t/**\n\t * Raw aggregate-key field: a 33-byte public key while DKG runs, or the v2\n\t * marker `0xFF || block hash` once DKG is disabled. Not checked here.\n\t */\n\taggregatePubkey: Uint8Array;\n\tsignerPrincipal: string;\n}\n\n/** Read the current signer set and threshold from `sbtc-registry`. */\nexport async function getSignerSet(client: Client): Promise<SbtcSignerSet> {\n\tconst registry = getRegistryContract(client);\n\tconst data = (await registry.read.getCurrentSignerData({})) as {\n\t\tcurrentAggregatePubkey: Uint8Array;\n\t\tcurrentSignatureThreshold: bigint;\n\t\tcurrentSignerPrincipal: string;\n\t\tcurrentSignerSet: Uint8Array[];\n\t};\n\treturn {\n\t\tsignerPublicKeys: data.currentSignerSet,\n\t\tsignaturesRequired: Number(data.currentSignatureThreshold),\n\t\taggregatePubkey: data.currentAggregatePubkey,\n\t\tsignerPrincipal: data.currentSignerPrincipal,\n\t};\n}\n\n/**\n * Current signer-set aggregate public key (33-byte compressed), read from\n * `sbtc-registry`. Throws {@link SbtcV2MarkerError} once the registry holds\n * the v2 marker (`0xFF || block hash`) instead of a key.\n */\nexport async function getSignersPublicKey(client: Client): Promise<Uint8Array> {\n\tconst registry = getRegistryContract(client);\n\tconst pubkey = (await registry.read.getCurrentAggregatePubkey(\n\t\t{},\n\t)) as Uint8Array;\n\tif (!pubkey || pubkey.length !== 33 || pubkey.every((b) => b === 0)) {\n\t\tthrow new Error(\n\t\t\t\"sbtc-registry returned no aggregate pubkey (signer set not yet rotated in on this network)\",\n\t\t);\n\t}\n\treturn assertRegistryAggregateKey(pubkey);\n}\n\n/** Options for {@link getSignersAddress}. */\nexport interface SbtcPegAddressOptions {\n\t/**\n\t * Peg script format. Leave it out to pick the format the signers lock to\n\t * at `burnBlockHeight`.\n\t */\n\tversion?: \"v1\" | \"v2\";\n\t/** Bitcoin height to resolve the format at. Defaults to the node's burn tip. */\n\tburnBlockHeight?: number;\n\t/**\n\t * Height at which the signers switch to v2. Defaults to\n\t * {@link SBTC_V2_SIGNING_BURN_HEIGHT_MAINNET} on mainnet; required on other\n\t * networks unless `version` is given.\n\t */\n\tv2ActivationBurnHeight?: number;\n}\n\n/**\n * The sBTC peg address: where the signers lock the peg UTXO (sweeps pay it).\n * Users do not deposit here; deposits use their own P2TR deposit script.\n *\n * - v1 (before {@link SBTC_V2_SIGNING_BURN_HEIGHT_MAINNET}): key-path\n * `p2tr(aggregate pubkey)`.\n * - v2 (from that height): `tr(NUMS_V2, multi_a(threshold, signer/0/0, …))`\n * derived from the registry signer set; the aggregate key is not used.\n *\n * With no options it returns the current format at the node's burn tip. From\n * the activation height until the first v2 sweep confirms, funds still sit at\n * the v1 address; follow the sweep chain to find the live UTXO.\n * Network-aware: `bc1p…` / `tb1p…` / `bcrt1p…` from the client's chain.\n */\nexport async function getSignersAddress(\n\tclient: Client,\n\toptions: SbtcPegAddressOptions = {},\n): Promise<string> {\n\tconst network = bitcoinNetworkFromChain(client);\n\tconst version = options.version ?? (await pegVersionAt(client, options));\n\tif (version === \"v1\") {\n\t\tconst pubkey = await getSignersPublicKey(client);\n\t\treturn publicKeyToP2trAddress(pubkey, network);\n\t}\n\tconst { signerPublicKeys, signaturesRequired } = await getSignerSet(client);\n\treturn deriveSbtcV2PegOutput(signerPublicKeys, signaturesRequired, network)\n\t\t.address;\n}\n\nasync function pegVersionAt(\n\tclient: Client,\n\toptions: SbtcPegAddressOptions,\n): Promise<\"v1\" | \"v2\"> {\n\tconst activation =\n\t\toptions.v2ActivationBurnHeight ??\n\t\t(client.chain?.network === \"mainnet\"\n\t\t\t? SBTC_V2_SIGNING_BURN_HEIGHT_MAINNET\n\t\t\t: undefined);\n\tif (activation == null) {\n\t\tthrow new Error(\n\t\t\t`sBTC v2 signing has no fixed activation height on ${client.chain?.network ?? \"this network\"}; pass { version } or { v2ActivationBurnHeight }`,\n\t\t);\n\t}\n\tconst height = options.burnBlockHeight ?? (await getBurnBlockHeight(client));\n\treturn height >= activation ? \"v2\" : \"v1\";\n}\n",
|
|
8
9
|
"import type { BitcoinNetwork } from \"../bitcoin/constants.ts\";\nimport { stringifyBtcAddress } from \"../pox5/btcAddress.ts\";\nimport { bytesToHex, hexToBytes } from \"../utils/encoding.ts\";\nimport type { SbtcBtcRecipient } from \"./types.ts\";\n\n/**\n * Format a `(buff 1) + (buff 32)` BTC recipient tuple into a canonical\n * Bitcoin address string. Defaults to mainnet encoding; pass `network`\n * for testnet/regtest version bytes and hrp.\n *\n * Used to decode the `recipient` field of `withdrawal-create` events\n * into a human-readable address. The sBTC version bytes are the SIP-005\n * PoX bytes, so this is `stringifyBtcAddress` from `pox5` under an\n * sBTC-shaped name; unknown versions and hash lengths throw there.\n */\nexport function formatBtcAddress(\n\trecipient: SbtcBtcRecipient,\n\tnetwork: BitcoinNetwork = \"mainnet\",\n): string {\n\treturn stringifyBtcAddress(recipient, network);\n}\n\n/**\n * Validate that a buffer is a 32-byte Bitcoin transaction id.\n * Throws if the buffer is the wrong length.\n */\nexport function validateBitcoinTxid(buf: Uint8Array): void {\n\tif (buf.length !== 32) {\n\t\tthrow new Error(`Bitcoin txid must be 32 bytes, got ${buf.length}`);\n\t}\n}\n\n/**\n * Hex-encode a Bitcoin txid for storage / display. Throws if the input is\n * not 32 bytes.\n */\nexport function bitcoinTxidToHex(buf: Uint8Array): string {\n\tvalidateBitcoinTxid(buf);\n\treturn bytesToHex(buf);\n}\n\n/**\n * Parse a hex string back into a 32-byte txid. Mirrors `bitcoinTxidToHex`.\n */\nexport function bitcoinTxidFromHex(hex: string): Uint8Array {\n\tconst buf = hexToBytes(hex);\n\tvalidateBitcoinTxid(buf);\n\treturn buf;\n}\n\n/**\n * Convert satoshis (BigInt) to a decimal-string sBTC amount.\n *\n * sBTC has 8 decimals (matching BTC). 100_000_000 sats = 1 sBTC.\n */\nexport function satsToSbtc(sats: bigint): string {\n\tconst sign = sats < 0n ? \"-\" : \"\";\n\tconst abs = sats < 0n ? -sats : sats;\n\tconst whole = abs / 100_000_000n;\n\tconst frac = abs % 100_000_000n;\n\tif (frac === 0n) return `${sign}${whole}`;\n\tconst fracStr = frac.toString().padStart(8, \"0\").replace(/0+$/, \"\");\n\treturn `${sign}${whole}.${fracStr}`;\n}\n\n/**\n * Parse a decimal-string sBTC amount into satoshis. Inverse of\n * {@link satsToSbtc}.\n */\nexport function sbtcToSats(amount: string): bigint {\n\tconst trimmed = amount.trim();\n\tif (!/^-?\\d+(?:\\.\\d+)?$/.test(trimmed)) {\n\t\tthrow new Error(`Invalid sBTC amount: ${amount}`);\n\t}\n\tconst negative = trimmed.startsWith(\"-\");\n\tconst body = negative ? trimmed.slice(1) : trimmed;\n\tconst dotIndex = body.indexOf(\".\");\n\tconst whole = dotIndex < 0 ? body : body.slice(0, dotIndex);\n\tconst frac = dotIndex < 0 ? \"\" : body.slice(dotIndex + 1);\n\tif (frac.length > 8) {\n\t\tthrow new Error(`sBTC amount has more than 8 decimal places: ${amount}`);\n\t}\n\tconst padded = frac.padEnd(8, \"0\");\n\tconst sats = BigInt(whole) * 100_000_000n + BigInt(padded);\n\treturn negative ? -sats : sats;\n}\n",
|
|
9
|
-
"import type { Client } from \"../clients/types.ts\";\nimport {\n\tgetBalance,\n\tgetDecimals,\n\tgetName,\n\tgetSignersAddress,\n\tgetSignersPublicKey,\n\tgetSymbol,\n\tgetTokenUri,\n\tgetTotalSupply,\n} from \"./actions.ts\";\n\nexport type {\n\tCompletedDepositEvent,\n\tKeyRotationEvent,\n\tSbtcBtcRecipient,\n\tSbtcEventByTopic,\n\tSbtcRegistryEvent,\n\tSbtcTokenBurnEvent,\n\tSbtcTokenEvent,\n\tSbtcTokenMintEvent,\n\tSbtcTokenTransferEvent,\n\tUpdateProtocolContractEvent,\n\tWithdrawalAcceptEvent,\n\tWithdrawalCreateEvent,\n\tWithdrawalRejectEvent,\n} from \"./types.ts\";\n\nexport {\n\tSBTC_ASSET_IDENTIFIER_MAINNET,\n\tSBTC_ASSET_IDENTIFIER_TESTNET,\n\tSBTC_BTC_ADDRESS_VERSION,\n\tSBTC_CONTRACTS,\n\tSBTC_DECIMALS,\n\tSBTC_EVENT_TOPICS,\n\tSBTC_UNIT_NAME,\n\tsbtcContractId,\n} from \"./constants.ts\";\nexport type { SbtcEventTopic, SbtcNetwork } from \"./constants.ts\";\nexport {\n\tbitcoinTxidFromHex,\n\tbitcoinTxidToHex,\n\tformatBtcAddress,\n\tsatsToSbtc,\n\tsbtcToSats,\n\tvalidateBitcoinTxid,\n} from \"./utils.ts\";\nexport { SBTC_TOKEN_ABI } from \"./abi.ts\";\n\n/** Actions provided by the sBTC extension. */\nexport type SbtcActions = {\n\tsbtc: {\n\t\tgetTotalSupply: () => Promise<bigint>;\n\t\tgetBalance: (owner: string) => Promise<bigint>;\n\t\tgetName: () => Promise<string>;\n\t\tgetSymbol: () => Promise<string>;\n\t\tgetDecimals: () => Promise<bigint>;\n\t\tgetTokenUri: () => Promise<string | null>;\n\t\t/** Current signer-set aggregate pubkey (33B compressed) from `sbtc-registry
|
|
10
|
+
"import type { Client } from \"../clients/types.ts\";\nimport {\n\ttype SbtcPegAddressOptions,\n\ttype SbtcSignerSet,\n\tgetBalance,\n\tgetDecimals,\n\tgetName,\n\tgetSignerSet,\n\tgetSignersAddress,\n\tgetSignersPublicKey,\n\tgetSymbol,\n\tgetTokenUri,\n\tgetTotalSupply,\n} from \"./actions.ts\";\n\nexport type { SbtcPegAddressOptions, SbtcSignerSet } from \"./actions.ts\";\nexport {\n\tassertRegistryAggregateKey,\n\tderiveSbtcSigningKey,\n\tderiveSbtcV2PegOutput,\n\tSBTC_V2_INTERNAL_KEY,\n\tSBTC_V2_SIGNING_BURN_HEIGHT_MAINNET,\n\tSbtcV2MarkerError,\n\ttype SbtcV2PegOutput,\n} from \"./peg.ts\";\n\nexport type {\n\tCompletedDepositEvent,\n\tKeyRotationEvent,\n\tSbtcBtcRecipient,\n\tSbtcEventByTopic,\n\tSbtcRegistryEvent,\n\tSbtcTokenBurnEvent,\n\tSbtcTokenEvent,\n\tSbtcTokenMintEvent,\n\tSbtcTokenTransferEvent,\n\tUpdateProtocolContractEvent,\n\tWithdrawalAcceptEvent,\n\tWithdrawalCreateEvent,\n\tWithdrawalRejectEvent,\n} from \"./types.ts\";\n\nexport {\n\tSBTC_ASSET_IDENTIFIER_MAINNET,\n\tSBTC_ASSET_IDENTIFIER_TESTNET,\n\tSBTC_BTC_ADDRESS_VERSION,\n\tSBTC_CONTRACTS,\n\tSBTC_DECIMALS,\n\tSBTC_EVENT_TOPICS,\n\tSBTC_UNIT_NAME,\n\tsbtcContractId,\n} from \"./constants.ts\";\nexport type { SbtcEventTopic, SbtcNetwork } from \"./constants.ts\";\nexport {\n\tbitcoinTxidFromHex,\n\tbitcoinTxidToHex,\n\tformatBtcAddress,\n\tsatsToSbtc,\n\tsbtcToSats,\n\tvalidateBitcoinTxid,\n} from \"./utils.ts\";\nexport { SBTC_TOKEN_ABI } from \"./abi.ts\";\n\n/** Actions provided by the sBTC extension. */\nexport type SbtcActions = {\n\tsbtc: {\n\t\tgetTotalSupply: () => Promise<bigint>;\n\t\tgetBalance: (owner: string) => Promise<bigint>;\n\t\tgetName: () => Promise<string>;\n\t\tgetSymbol: () => Promise<string>;\n\t\tgetDecimals: () => Promise<bigint>;\n\t\tgetTokenUri: () => Promise<string | null>;\n\t\t/** Current signer set and threshold from `sbtc-registry`. */\n\t\tgetSignerSet: () => Promise<SbtcSignerSet>;\n\t\t/**\n\t\t * Current signer-set aggregate pubkey (33B compressed) from `sbtc-registry`.\n\t\t * Throws `SbtcV2MarkerError` once the registry holds the v2 marker.\n\t\t */\n\t\tgetSignersPublicKey: () => Promise<Uint8Array>;\n\t\t/**\n\t\t * Signers' peg address (v1 aggregate key or v2 `multi_a`, by Bitcoin\n\t\t * height), network-aware from `client.chain`.\n\t\t */\n\t\tgetSignersAddress: (options?: SbtcPegAddressOptions) => Promise<string>;\n\t};\n};\n\n/**\n * sBTC extension for the Stacks client.\n *\n * @example\n * import { createWalletClient, http, mainnet } from \"stacks\";\n * import { sbtc } from \"stacks/sbtc\";\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: http(),\n * }).extend(sbtc());\n *\n * const supply = await client.sbtc.getTotalSupply();\n * const balance = await client.sbtc.getBalance(\"SP1...\");\n */\nexport function sbtc(): (client: Client) => SbtcActions {\n\treturn (client: Client) => ({\n\t\tsbtc: {\n\t\t\tgetTotalSupply: () => getTotalSupply(client),\n\t\t\tgetBalance: (owner: string) => getBalance(client, owner),\n\t\t\tgetName: () => getName(client),\n\t\t\tgetSymbol: () => getSymbol(client),\n\t\t\tgetDecimals: () => getDecimals(client),\n\t\t\tgetTokenUri: () => getTokenUri(client),\n\t\t\tgetSignerSet: () => getSignerSet(client),\n\t\t\tgetSignersPublicKey: () => getSignersPublicKey(client),\n\t\t\tgetSignersAddress: (options?: SbtcPegAddressOptions) =>\n\t\t\t\tgetSignersAddress(client, options),\n\t\t},\n\t});\n}\n"
|
|
10
11
|
],
|
|
11
|
-
"mappings": "
|
|
12
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "4D1E6BA701859ED164756E2164756E21",
|
|
13
14
|
"names": []
|
|
14
15
|
}
|
package/package.json
CHANGED
|
File without changes
|