@secondlayer/stacks 0.1.0 → 0.2.1

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.
Files changed (93) hide show
  1. package/dist/shared/stacks-2ar4prfz.cjs +328 -0
  2. package/dist/shared/stacks-2ar4prfz.cjs.map +11 -0
  3. package/dist/shared/stacks-61rvzkz1.cjs.map +1 -1
  4. package/dist/shared/{stacks-d1fmkv3p.js → stacks-9avax1yf.js} +2 -2
  5. package/dist/shared/{stacks-ph4a6322.js → stacks-9mdk86wp.js} +16 -18
  6. package/dist/shared/{stacks-ph4a6322.js.map → stacks-9mdk86wp.js.map} +2 -2
  7. package/dist/shared/stacks-an5k8n4t.cjs.map +2 -2
  8. package/dist/shared/stacks-dr5en54r.cjs +119 -0
  9. package/dist/shared/stacks-dr5en54r.cjs.map +10 -0
  10. package/dist/shared/{stacks-b008c3w8.cjs → stacks-fedzr2ka.js} +134 -2
  11. package/dist/shared/stacks-fedzr2ka.js.map +13 -0
  12. package/dist/shared/{stacks-j2cy7qtt.js → stacks-ky14tdf6.cjs} +109 -24
  13. package/dist/shared/stacks-ky14tdf6.cjs.map +13 -0
  14. package/dist/shared/stacks-mrk6tkkh.cjs +41 -0
  15. package/dist/shared/{stacks-2gdt3aqj.cjs.map → stacks-mrk6tkkh.cjs.map} +1 -1
  16. package/dist/shared/{stacks-1ddg6mbv.js → stacks-qcx67vqa.js} +3 -3
  17. package/dist/shared/stacks-qcx67vqa.js.map +10 -0
  18. package/dist/shared/stacks-qyt8m5v0.js +282 -0
  19. package/dist/shared/stacks-qyt8m5v0.js.map +11 -0
  20. package/dist/shared/{stacks-hfem9dck.cjs → stacks-vbke9mqw.cjs} +328 -87
  21. package/dist/shared/stacks-vbke9mqw.cjs.map +15 -0
  22. package/dist/shared/{stacks-md6e5ta0.js → stacks-vd9jcp0b.js} +13 -17
  23. package/dist/shared/{stacks-md6e5ta0.js.map → stacks-vd9jcp0b.js.map} +3 -3
  24. package/dist/shared/stacks-vdfag81a.cjs.map +2 -2
  25. package/dist/shared/{stacks-xtz0n62y.js → stacks-vyb9rx8q.js} +341 -106
  26. package/dist/shared/stacks-vyb9rx8q.js.map +15 -0
  27. package/dist/shared/{stacks-m2dc5xwg.js → stacks-wrb1es85.js} +7 -11
  28. package/dist/shared/{stacks-m2dc5xwg.js.map → stacks-wrb1es85.js.map} +3 -3
  29. package/dist/shared/stacks-yfveb68e.js +121 -0
  30. package/dist/shared/stacks-yfveb68e.js.map +10 -0
  31. package/dist/src/accounts/index.js +1 -2
  32. package/dist/src/accounts/index.js.map +2 -2
  33. package/dist/src/actions/index.d.cts +3 -5
  34. package/dist/src/actions/index.d.ts +3 -5
  35. package/dist/src/actions/index.js +8 -11
  36. package/dist/src/actions/index.js.map +1 -1
  37. package/dist/src/bns/index.cjs +13 -13
  38. package/dist/src/bns/index.cjs.map +3 -3
  39. package/dist/src/bns/index.js +22 -25
  40. package/dist/src/bns/index.js.map +3 -3
  41. package/dist/src/chains/index.js +1 -2
  42. package/dist/src/chains/index.js.map +1 -1
  43. package/dist/src/clarity/index.cjs +1 -326
  44. package/dist/src/clarity/index.cjs.map +3 -5
  45. package/dist/src/clarity/index.js +18 -272
  46. package/dist/src/clarity/index.js.map +3 -5
  47. package/dist/src/connect/index.cjs +19 -9
  48. package/dist/src/connect/index.cjs.map +2 -2
  49. package/dist/src/connect/walletconnect/index.cjs +19 -9
  50. package/dist/src/connect/walletconnect/index.cjs.map +4 -4
  51. package/dist/src/connect/walletconnect/index.js +1 -1
  52. package/dist/src/connect/walletconnect/index.js.map +4 -4
  53. package/dist/src/index.cjs +1 -2
  54. package/dist/src/index.cjs.map +5 -5
  55. package/dist/src/index.js +9 -16
  56. package/dist/src/index.js.map +5 -5
  57. package/dist/src/postconditions/index.cjs +1 -117
  58. package/dist/src/postconditions/index.cjs.map +3 -4
  59. package/dist/src/postconditions/index.js +5 -119
  60. package/dist/src/postconditions/index.js.map +3 -4
  61. package/dist/src/pox/index.cjs +9 -9
  62. package/dist/src/pox/index.cjs.map +4 -4
  63. package/dist/src/pox/index.js +17 -20
  64. package/dist/src/pox/index.js.map +4 -4
  65. package/dist/src/stackingdao/index.cjs +13 -13
  66. package/dist/src/stackingdao/index.cjs.map +3 -3
  67. package/dist/src/stackingdao/index.js +21 -24
  68. package/dist/src/stackingdao/index.js.map +3 -3
  69. package/dist/src/subscriptions/index.js +1 -2
  70. package/dist/src/subscriptions/index.js.map +1 -1
  71. package/dist/src/transactions/index.js +18 -22
  72. package/dist/src/transactions/index.js.map +1 -1
  73. package/dist/src/utils/index.cjs.map +2 -2
  74. package/dist/src/utils/index.js +4 -5
  75. package/dist/src/utils/index.js.map +3 -3
  76. package/package.json +1 -1
  77. package/dist/shared/stacks-1aqm7c2h.cjs +0 -110
  78. package/dist/shared/stacks-1aqm7c2h.cjs.map +0 -11
  79. package/dist/shared/stacks-1ddg6mbv.js.map +0 -10
  80. package/dist/shared/stacks-2gdt3aqj.cjs +0 -44
  81. package/dist/shared/stacks-8yykgdww.js +0 -125
  82. package/dist/shared/stacks-8yykgdww.js.map +0 -11
  83. package/dist/shared/stacks-b008c3w8.cjs.map +0 -11
  84. package/dist/shared/stacks-hfem9dck.cjs.map +0 -13
  85. package/dist/shared/stacks-j2cy7qtt.js.map +0 -11
  86. package/dist/shared/stacks-njvyj3ab.js +0 -23
  87. package/dist/shared/stacks-njvyj3ab.js.map +0 -9
  88. package/dist/shared/stacks-pz73cn97.js +0 -285
  89. package/dist/shared/stacks-pz73cn97.js.map +0 -11
  90. package/dist/shared/stacks-xtz0n62y.js.map +0 -13
  91. package/dist/shared/stacks-zyv9qqme.cjs +0 -249
  92. package/dist/shared/stacks-zyv9qqme.cjs.map +0 -11
  93. /package/dist/shared/{stacks-d1fmkv3p.js.map → stacks-9avax1yf.js.map} +0 -0
@@ -4,10 +4,10 @@
4
4
  "sourcesContent": [
5
5
  "import type { AbiContract } from \"../clarity/abi/contract.ts\";\n\nconst withdrawTuple = {\n tuple: [\n { name: \"stx-fee-amount\", type: \"uint128\" },\n { name: \"stx-user-amount\", type: \"uint128\" },\n ],\n} as const;\n\nexport const STACKING_DAO_CORE_ABI = {\n functions: [\n // Public — deposit STX, receive stSTX\n {\n name: \"deposit\",\n access: \"public\",\n args: [\n { name: \"reserve\", type: \"trait_reference\" },\n { name: \"commission-contract\", type: \"trait_reference\" },\n { name: \"staking-contract\", type: \"trait_reference\" },\n { name: \"direct-helpers\", type: \"trait_reference\" },\n { name: \"stx-amount\", type: \"uint128\" },\n { name: \"referrer\", type: { optional: \"principal\" } },\n { name: \"pool\", type: { optional: \"principal\" } },\n ],\n outputs: { response: { ok: \"uint128\", error: \"uint128\" } },\n },\n // Public — initiate withdrawal (burn stSTX, get NFT receipt)\n {\n name: \"init-withdraw\",\n access: \"public\",\n args: [\n { name: \"reserve\", type: \"trait_reference\" },\n { name: \"direct-helpers\", type: \"trait_reference\" },\n { name: \"ststx-amount\", type: \"uint128\" },\n ],\n outputs: { response: { ok: \"uint128\", error: \"uint128\" } },\n },\n // Public — finalize withdrawal (burn NFT, receive STX)\n {\n name: \"withdraw\",\n access: \"public\",\n args: [\n { name: \"reserve\", type: \"trait_reference\" },\n { name: \"commission-contract\", type: \"trait_reference\" },\n { name: \"staking-contract\", type: \"trait_reference\" },\n { name: \"nft-id\", type: \"uint128\" },\n ],\n outputs: { response: { ok: withdrawTuple, error: \"uint128\" } },\n },\n // Public — withdraw idle STX (instant, no NFT)\n {\n name: \"withdraw-idle\",\n access: \"public\",\n args: [\n { name: \"reserve\", type: \"trait_reference\" },\n { name: \"direct-helpers\", type: \"trait_reference\" },\n { name: \"commission-contract\", type: \"trait_reference\" },\n { name: \"staking-contract\", type: \"trait_reference\" },\n { name: \"ststx-amount\", type: \"uint128\" },\n ],\n outputs: { response: { ok: withdrawTuple, error: \"uint128\" } },\n },\n // Read-only — fees (direct values, no response wrapper)\n {\n name: \"get-stack-fee\",\n access: \"read-only\",\n args: [],\n outputs: \"uint128\",\n },\n {\n name: \"get-unstack-fee\",\n access: \"read-only\",\n args: [],\n outputs: \"uint128\",\n },\n {\n name: \"get-withdraw-idle-fee\",\n access: \"read-only\",\n args: [],\n outputs: \"uint128\",\n },\n // Read-only — shutdown state (direct bool, no response wrapper)\n {\n name: \"get-shutdown-deposits\",\n access: \"read-only\",\n args: [],\n outputs: \"bool\",\n },\n ],\n} as const satisfies AbiContract;\n\nexport const DATA_CORE_V1_ABI = {\n functions: [\n {\n name: \"get-withdrawals-by-nft\",\n access: \"read-only\",\n args: [{ name: \"nft-id\", type: \"uint128\" }],\n outputs: {\n tuple: [\n { name: \"ststx-amount\", type: \"uint128\" },\n { name: \"stx-amount\", type: \"uint128\" },\n { name: \"unlock-burn-height\", type: \"uint128\" },\n ],\n },\n },\n ],\n} as const satisfies AbiContract;\n\nexport const DATA_CORE_V3_ABI = {\n functions: [\n {\n name: \"get-stx-per-ststx-helper\",\n access: \"read-only\",\n args: [{ name: \"stx-amount\", type: \"uint128\" }],\n outputs: \"uint128\",\n },\n ],\n} as const satisfies AbiContract;\n\nexport const RESERVE_V1_ABI = {\n functions: [\n {\n name: \"get-total-stx\",\n access: \"read-only\",\n args: [],\n outputs: { response: { ok: \"uint128\", error: \"none\" } },\n },\n ],\n} as const satisfies AbiContract;\n",
6
6
  "const DEPLOYER: string = \"SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG\";\n\nexport const STACKINGDAO_CONTRACTS: {\n readonly core: { readonly address: string; readonly name: string };\n readonly ststxToken: { readonly address: string; readonly name: string };\n readonly withdrawNft: { readonly address: string; readonly name: string };\n readonly reserve: { readonly address: string; readonly name: string };\n readonly dataCore: { readonly address: string; readonly name: string };\n readonly dataCoreV1: { readonly address: string; readonly name: string };\n} = {\n core: { address: DEPLOYER, name: \"stacking-dao-core-v6\" },\n ststxToken: { address: DEPLOYER, name: \"ststx-token\" },\n withdrawNft: { address: DEPLOYER, name: \"ststx-withdraw-nft-v2\" },\n reserve: { address: DEPLOYER, name: \"reserve-v1\" },\n dataCore: { address: DEPLOYER, name: \"data-core-v3\" },\n dataCoreV1: { address: DEPLOYER, name: \"data-core-v1\" },\n} as const;\n\n/** Trait contracts auto-passed to core functions — users never need these. */\nexport const TRAIT_CONTRACTS: {\n readonly reserve: string;\n readonly commission: string;\n readonly directHelpers: string;\n readonly staking: string;\n} = {\n reserve: `${DEPLOYER}.reserve-v1`,\n commission: `${DEPLOYER}.commission-v2`,\n directHelpers: `${DEPLOYER}.direct-helpers-v4`,\n staking: `${DEPLOYER}.staking-v0`,\n} as const;\n",
7
- "import type { Client } from \"../clients/types.ts\";\nimport { getContract } from \"../actions/getContract.ts\";\nimport { SIP010_ABI } from \"../clarity/abi/standards.ts\";\nimport {\n STACKING_DAO_CORE_ABI,\n DATA_CORE_V1_ABI,\n DATA_CORE_V3_ABI,\n RESERVE_V1_ABI,\n} from \"./abi.ts\";\nimport { STACKINGDAO_CONTRACTS, TRAIT_CONTRACTS } from \"./constants.ts\";\nimport { Pc } from \"../postconditions/index.ts\";\nimport type {\n DepositParams,\n InitWithdrawParams,\n WithdrawParams,\n WithdrawIdleParams,\n ExchangeRateInfo,\n WithdrawalInfo,\n FeeInfo,\n} from \"./types.ts\";\n\nfunction assertMainnet(client: Client) {\n if (!client.chain) {\n throw new Error(\"Client must have a chain configured\");\n }\n if (client.chain.network !== \"mainnet\") {\n throw new Error(\"StackingDAO is only available on mainnet\");\n }\n}\n\nfunction getCoreContract(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.core;\n return getContract({ client, address: c.address, name: c.name, abi: STACKING_DAO_CORE_ABI });\n}\n\nfunction getStstxToken(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.ststxToken;\n return getContract({ client, address: c.address, name: c.name, abi: SIP010_ABI });\n}\n\nfunction getDataCoreV1(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.dataCoreV1;\n return getContract({ client, address: c.address, name: c.name, abi: DATA_CORE_V1_ABI });\n}\n\nfunction getDataCoreV3(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.dataCore;\n return getContract({ client, address: c.address, name: c.name, abi: DATA_CORE_V3_ABI });\n}\n\nfunction getReserveContract(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.reserve;\n return getContract({ client, address: c.address, name: c.name, abi: RESERVE_V1_ABI });\n}\n\nconst traits = {\n reserve: TRAIT_CONTRACTS.reserve,\n commissionContract: TRAIT_CONTRACTS.commission,\n stakingContract: TRAIT_CONTRACTS.staking,\n directHelpers: TRAIT_CONTRACTS.directHelpers,\n};\n\n// ── User Actions ──\n\nexport async function deposit(client: Client, params: DepositParams): Promise<string> {\n const core = getCoreContract(client);\n return core.call.deposit(\n {\n ...traits,\n stxAmount: params.amount,\n referrer: params.referrer ?? null,\n pool: params.pool ?? null,\n },\n {\n postConditions: [\n Pc.principal(client.account!.address).willSendEq(params.amount).ustx(),\n ],\n },\n );\n}\n\nexport async function initWithdraw(client: Client, params: InitWithdrawParams): Promise<string> {\n const core = getCoreContract(client);\n const ststx = STACKINGDAO_CONTRACTS.ststxToken;\n return core.call[\"init-withdraw\"](\n {\n reserve: traits.reserve,\n directHelpers: traits.directHelpers,\n ststxAmount: params.ststxAmount,\n },\n {\n postConditions: [\n Pc.principal(client.account!.address)\n .willSendEq(params.ststxAmount)\n .ft(`${ststx.address}.${ststx.name}`, \"ststx\"),\n ],\n },\n );\n}\n\nexport async function withdraw(client: Client, params: WithdrawParams): Promise<string> {\n const core = getCoreContract(client);\n return core.call.withdraw({\n reserve: traits.reserve,\n commissionContract: traits.commissionContract,\n stakingContract: traits.stakingContract,\n nftId: params.nftId,\n });\n}\n\nexport async function withdrawIdle(client: Client, params: WithdrawIdleParams): Promise<string> {\n const core = getCoreContract(client);\n const ststx = STACKINGDAO_CONTRACTS.ststxToken;\n return core.call[\"withdraw-idle\"](\n {\n reserve: traits.reserve,\n directHelpers: traits.directHelpers,\n commissionContract: traits.commissionContract,\n stakingContract: traits.stakingContract,\n ststxAmount: params.ststxAmount,\n },\n {\n postConditions: [\n Pc.principal(client.account!.address)\n .willSendEq(params.ststxAmount)\n .ft(`${ststx.address}.${ststx.name}`, \"ststx\"),\n ],\n },\n );\n}\n\n// ── Read-only Queries ──\n\nexport async function getStSTXBalance(client: Client, address: string): Promise<bigint> {\n const token = getStstxToken(client);\n return (await token.read[\"get-balance\"]({ account: address })) as bigint;\n}\n\nexport async function getExchangeRate(client: Client): Promise<ExchangeRateInfo> {\n const reserve = getReserveContract(client);\n const dataV3 = getDataCoreV3(client);\n\n const [totalStx, ststxSupply] = await Promise.all([\n reserve.read[\"get-total-stx\"]({}) as Promise<bigint>,\n getTotalSupply(client),\n ]);\n\n const stxPerStstx = (await dataV3.read[\"get-stx-per-ststx-helper\"]({\n stxAmount: totalStx,\n })) as bigint;\n\n return { stxPerStstx, ststxSupply, totalStx };\n}\n\nexport async function getTotalSupply(client: Client): Promise<bigint> {\n const token = getStstxToken(client);\n return (await token.read[\"get-total-supply\"]({})) as bigint;\n}\n\nexport async function getWithdrawalInfo(\n client: Client,\n nftId: bigint,\n): Promise<WithdrawalInfo> {\n const dataV1 = getDataCoreV1(client);\n return (await dataV1.read[\"get-withdrawals-by-nft\"]({\n nftId,\n })) as WithdrawalInfo;\n}\n\nexport async function getFees(client: Client): Promise<FeeInfo> {\n const core = getCoreContract(client);\n const [stackFee, unstackFee, withdrawIdleFee] = await Promise.all([\n core.read[\"get-stack-fee\"]({}) as Promise<bigint>,\n core.read[\"get-unstack-fee\"]({}) as Promise<bigint>,\n core.read[\"get-withdraw-idle-fee\"]({}) as Promise<bigint>,\n ]);\n return { stackFee, unstackFee, withdrawIdleFee };\n}\n\nexport async function getReserveBalance(client: Client): Promise<bigint> {\n const reserve = getReserveContract(client);\n return (await reserve.read[\"get-total-stx\"]({})) as bigint;\n}\n\nexport async function getShutdownDeposits(client: Client): Promise<boolean> {\n const core = getCoreContract(client);\n return (await core.read[\"get-shutdown-deposits\"]({})) as boolean;\n}\n",
7
+ "import type { Client } from \"../clients/types.ts\";\nimport { getContract } from \"../actions/getContract.ts\";\nimport { SIP010_ABI } from \"../clarity/abi/standards.ts\";\nimport {\n STACKING_DAO_CORE_ABI,\n DATA_CORE_V1_ABI,\n DATA_CORE_V3_ABI,\n RESERVE_V1_ABI,\n} from \"./abi.ts\";\nimport { STACKINGDAO_CONTRACTS, TRAIT_CONTRACTS } from \"./constants.ts\";\nimport { Pc } from \"../postconditions/index.ts\";\nimport type {\n DepositParams,\n InitWithdrawParams,\n WithdrawParams,\n WithdrawIdleParams,\n ExchangeRateInfo,\n WithdrawalInfo,\n FeeInfo,\n} from \"./types.ts\";\n\nfunction assertMainnet(client: Client) {\n if (!client.chain) {\n throw new Error(\"Client must have a chain configured\");\n }\n if (client.chain.network !== \"mainnet\") {\n throw new Error(\"StackingDAO is only available on mainnet\");\n }\n}\n\nfunction getCoreContract(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.core;\n return getContract({ client, address: c.address, name: c.name, abi: STACKING_DAO_CORE_ABI });\n}\n\nfunction getStstxToken(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.ststxToken;\n return getContract({ client, address: c.address, name: c.name, abi: SIP010_ABI });\n}\n\nfunction getDataCoreV1(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.dataCoreV1;\n return getContract({ client, address: c.address, name: c.name, abi: DATA_CORE_V1_ABI });\n}\n\nfunction getDataCoreV3(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.dataCore;\n return getContract({ client, address: c.address, name: c.name, abi: DATA_CORE_V3_ABI });\n}\n\nfunction getReserveContract(client: Client) {\n assertMainnet(client);\n const c = STACKINGDAO_CONTRACTS.reserve;\n return getContract({ client, address: c.address, name: c.name, abi: RESERVE_V1_ABI });\n}\n\nconst traits = {\n reserve: TRAIT_CONTRACTS.reserve,\n commissionContract: TRAIT_CONTRACTS.commission,\n stakingContract: TRAIT_CONTRACTS.staking,\n directHelpers: TRAIT_CONTRACTS.directHelpers,\n};\n\n// ── User Actions ──\n\nexport async function deposit(client: Client, params: DepositParams): Promise<string> {\n const core = getCoreContract(client);\n return core.call.deposit(\n {\n ...traits,\n stxAmount: params.amount,\n referrer: params.referrer ?? null,\n pool: params.pool ?? null,\n },\n {\n postConditions: [\n Pc.principal(client.account!.address).willSendEq(params.amount).ustx(),\n ],\n },\n );\n}\n\nexport async function initWithdraw(client: Client, params: InitWithdrawParams): Promise<string> {\n const core = getCoreContract(client);\n const ststx = STACKINGDAO_CONTRACTS.ststxToken;\n return core.call.initWithdraw(\n {\n reserve: traits.reserve,\n directHelpers: traits.directHelpers,\n ststxAmount: params.ststxAmount,\n },\n {\n postConditions: [\n Pc.principal(client.account!.address)\n .willSendEq(params.ststxAmount)\n .ft(`${ststx.address}.${ststx.name}`, \"ststx\"),\n ],\n },\n );\n}\n\nexport async function withdraw(client: Client, params: WithdrawParams): Promise<string> {\n const core = getCoreContract(client);\n return core.call.withdraw({\n reserve: traits.reserve,\n commissionContract: traits.commissionContract,\n stakingContract: traits.stakingContract,\n nftId: params.nftId,\n });\n}\n\nexport async function withdrawIdle(client: Client, params: WithdrawIdleParams): Promise<string> {\n const core = getCoreContract(client);\n const ststx = STACKINGDAO_CONTRACTS.ststxToken;\n return core.call.withdrawIdle(\n {\n reserve: traits.reserve,\n directHelpers: traits.directHelpers,\n commissionContract: traits.commissionContract,\n stakingContract: traits.stakingContract,\n ststxAmount: params.ststxAmount,\n },\n {\n postConditions: [\n Pc.principal(client.account!.address)\n .willSendEq(params.ststxAmount)\n .ft(`${ststx.address}.${ststx.name}`, \"ststx\"),\n ],\n },\n );\n}\n\n// ── Read-only Queries ──\n\nexport async function getStSTXBalance(client: Client, address: string): Promise<bigint> {\n const token = getStstxToken(client);\n return (await token.read.getBalance({ account: address })) as bigint;\n}\n\nexport async function getExchangeRate(client: Client): Promise<ExchangeRateInfo> {\n const reserve = getReserveContract(client);\n const dataV3 = getDataCoreV3(client);\n\n const [totalStx, ststxSupply] = await Promise.all([\n reserve.read.getTotalStx({}) as Promise<bigint>,\n getTotalSupply(client),\n ]);\n\n const stxPerStstx = (await dataV3.read.getStxPerStstxHelper({\n stxAmount: totalStx,\n })) as bigint;\n\n return { stxPerStstx, ststxSupply, totalStx };\n}\n\nexport async function getTotalSupply(client: Client): Promise<bigint> {\n const token = getStstxToken(client);\n return (await token.read.getTotalSupply({})) as bigint;\n}\n\nexport async function getWithdrawalInfo(\n client: Client,\n nftId: bigint,\n): Promise<WithdrawalInfo> {\n const dataV1 = getDataCoreV1(client);\n return (await dataV1.read.getWithdrawalsByNft({\n nftId,\n })) as WithdrawalInfo;\n}\n\nexport async function getFees(client: Client): Promise<FeeInfo> {\n const core = getCoreContract(client);\n const [stackFee, unstackFee, withdrawIdleFee] = await Promise.all([\n core.read.getStackFee({}) as Promise<bigint>,\n core.read.getUnstackFee({}) as Promise<bigint>,\n core.read.getWithdrawIdleFee({}) as Promise<bigint>,\n ]);\n return { stackFee, unstackFee, withdrawIdleFee };\n}\n\nexport async function getReserveBalance(client: Client): Promise<bigint> {\n const reserve = getReserveContract(client);\n return (await reserve.read.getTotalStx({})) as bigint;\n}\n\nexport async function getShutdownDeposits(client: Client): Promise<boolean> {\n const core = getCoreContract(client);\n return (await core.read.getShutdownDeposits({})) as boolean;\n}\n",
8
8
  "import type { Client } from \"../clients/types.ts\";\nimport {\n deposit,\n initWithdraw,\n withdraw,\n withdrawIdle,\n getStSTXBalance,\n getExchangeRate,\n getTotalSupply,\n getWithdrawalInfo,\n getFees,\n getReserveBalance,\n getShutdownDeposits,\n} from \"./actions.ts\";\nimport type {\n DepositParams,\n InitWithdrawParams,\n WithdrawParams,\n WithdrawIdleParams,\n ExchangeRateInfo,\n WithdrawalInfo,\n FeeInfo,\n} from \"./types.ts\";\n\nexport type {\n DepositParams,\n InitWithdrawParams,\n WithdrawParams,\n WithdrawIdleParams,\n ExchangeRateInfo,\n WithdrawalInfo,\n FeeInfo,\n};\n/** Actions provided by the StackingDAO extension. */\nexport type StackingDaoActions = {\n stackingDao: {\n deposit: (params: DepositParams) => Promise<string>;\n initWithdraw: (params: InitWithdrawParams) => Promise<string>;\n withdraw: (params: WithdrawParams) => Promise<string>;\n withdrawIdle: (params: WithdrawIdleParams) => Promise<string>;\n getStSTXBalance: (address: string) => Promise<bigint>;\n getExchangeRate: () => Promise<ExchangeRateInfo>;\n getTotalSupply: () => Promise<bigint>;\n getWithdrawalInfo: (nftId: bigint) => Promise<WithdrawalInfo>;\n getFees: () => Promise<FeeInfo>;\n getReserveBalance: () => Promise<bigint>;\n getShutdownDeposits: () => Promise<boolean>;\n };\n};\n\nexport { STACKINGDAO_CONTRACTS, TRAIT_CONTRACTS } from \"./constants.ts\";\n\n/**\n * StackingDAO liquid staking extension.\n * Deposit STX → receive stSTX. Auto-compounding stacking rewards.\n *\n * @example\n * import { createWalletClient, http, mainnet } from \"stacks\";\n * import { stackingDao } from \"stacks/stackingdao\";\n *\n * const client = createWalletClient({ ... }).extend(stackingDao());\n *\n * // Deposit STX for stSTX\n * await client.stackingDao.deposit({ amount: 100_000_000_000n });\n *\n * // Check exchange rate\n * const rate = await client.stackingDao.getExchangeRate();\n */\nexport function stackingDao(): (client: Client) => StackingDaoActions {\n return (client: Client) => ({\n stackingDao: {\n /** Deposit STX, receive stSTX. */\n deposit: (params: DepositParams) => deposit(client, params),\n\n /** Initiate withdrawal — burns stSTX, mints NFT receipt. */\n initWithdraw: (params: InitWithdrawParams) => initWithdraw(client, params),\n\n /** Finalize withdrawal — burns NFT, receive STX. */\n withdraw: (params: WithdrawParams) => withdraw(client, params),\n\n /** Withdraw idle STX instantly (burns stSTX). */\n withdrawIdle: (params: WithdrawIdleParams) => withdrawIdle(client, params),\n\n /** Get stSTX balance for an address. */\n getStSTXBalance: (address: string) => getStSTXBalance(client, address),\n\n /** Get current STX/stSTX exchange rate info. */\n getExchangeRate: () => getExchangeRate(client),\n\n /** Get total stSTX supply. */\n getTotalSupply: () => getTotalSupply(client),\n\n /** Get withdrawal NFT info by ID. Returns tuple with amounts and unlock height. */\n getWithdrawalInfo: (nftId: bigint) => getWithdrawalInfo(client, nftId),\n\n /** Get current fee rates. */\n getFees: () => getFees(client),\n\n /** Get total STX in reserve. */\n getReserveBalance: () => getReserveBalance(client),\n\n /** Check if deposits are shut down. */\n getShutdownDeposits: () => getShutdownDeposits(client),\n },\n });\n}\n"
9
9
  ],
10
- "mappings": "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",
11
- "debugId": "34330AF3E5D512EB64756E2164756E21",
10
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAEA,IAAM,gBAAgB;AAAA,EACpB,OAAO;AAAA,IACL,EAAE,MAAM,kBAAkB,MAAM,UAAU;AAAA,IAC1C,EAAE,MAAM,mBAAmB,MAAM,UAAU;AAAA,EAC7C;AACF;AAEO,IAAM,wBAAwB;AAAA,EACnC,WAAW;AAAA,IAET;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,kBAAkB;AAAA,QAC3C,EAAE,MAAM,uBAAuB,MAAM,kBAAkB;AAAA,QACvD,EAAE,MAAM,oBAAoB,MAAM,kBAAkB;AAAA,QACpD,EAAE,MAAM,kBAAkB,MAAM,kBAAkB;AAAA,QAClD,EAAE,MAAM,cAAc,MAAM,UAAU;AAAA,QACtC,EAAE,MAAM,YAAY,MAAM,EAAE,UAAU,YAAY,EAAE;AAAA,QACpD,EAAE,MAAM,QAAQ,MAAM,EAAE,UAAU,YAAY,EAAE;AAAA,MAClD;AAAA,MACA,SAAS,EAAE,UAAU,EAAE,IAAI,WAAW,OAAO,UAAU,EAAE;AAAA,IAC3D;AAAA,IAEA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,kBAAkB;AAAA,QAC3C,EAAE,MAAM,kBAAkB,MAAM,kBAAkB;AAAA,QAClD,EAAE,MAAM,gBAAgB,MAAM,UAAU;AAAA,MAC1C;AAAA,MACA,SAAS,EAAE,UAAU,EAAE,IAAI,WAAW,OAAO,UAAU,EAAE;AAAA,IAC3D;AAAA,IAEA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,kBAAkB;AAAA,QAC3C,EAAE,MAAM,uBAAuB,MAAM,kBAAkB;AAAA,QACvD,EAAE,MAAM,oBAAoB,MAAM,kBAAkB;AAAA,QACpD,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,MACpC;AAAA,MACA,SAAS,EAAE,UAAU,EAAE,IAAI,eAAe,OAAO,UAAU,EAAE;AAAA,IAC/D;AAAA,IAEA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,kBAAkB;AAAA,QAC3C,EAAE,MAAM,kBAAkB,MAAM,kBAAkB;AAAA,QAClD,EAAE,MAAM,uBAAuB,MAAM,kBAAkB;AAAA,QACvD,EAAE,MAAM,oBAAoB,MAAM,kBAAkB;AAAA,QACpD,EAAE,MAAM,gBAAgB,MAAM,UAAU;AAAA,MAC1C;AAAA,MACA,SAAS,EAAE,UAAU,EAAE,IAAI,eAAe,OAAO,UAAU,EAAE;AAAA,IAC/D;AAAA,IAEA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,CAAC;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,CAAC;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,CAAC;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IAEA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,CAAC;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB;AAAA,EAC9B,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,CAAC,EAAE,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,MAC1C,SAAS;AAAA,QACP,OAAO;AAAA,UACL,EAAE,MAAM,gBAAgB,MAAM,UAAU;AAAA,UACxC,EAAE,MAAM,cAAc,MAAM,UAAU;AAAA,UACtC,EAAE,MAAM,sBAAsB,MAAM,UAAU;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,mBAAmB;AAAA,EAC9B,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,CAAC,EAAE,MAAM,cAAc,MAAM,UAAU,CAAC;AAAA,MAC9C,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,IAAM,iBAAiB;AAAA,EAC5B,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,CAAC;AAAA,MACP,SAAS,EAAE,UAAU,EAAE,IAAI,WAAW,OAAO,OAAO,EAAE;AAAA,IACxD;AAAA,EACF;AACF;;;AChIA,IAAM,WAAmB;AAElB,IAAM,wBAOT;AAAA,EACF,MAAM,EAAE,SAAS,UAAU,MAAM,uBAAuB;AAAA,EACxD,YAAY,EAAE,SAAS,UAAU,MAAM,cAAc;AAAA,EACrD,aAAa,EAAE,SAAS,UAAU,MAAM,wBAAwB;AAAA,EAChE,SAAS,EAAE,SAAS,UAAU,MAAM,aAAa;AAAA,EACjD,UAAU,EAAE,SAAS,UAAU,MAAM,eAAe;AAAA,EACpD,YAAY,EAAE,SAAS,UAAU,MAAM,eAAe;AACxD;AAGO,IAAM,kBAKT;AAAA,EACF,SAAS,GAAG;AAAA,EACZ,YAAY,GAAG;AAAA,EACf,eAAe,GAAG;AAAA,EAClB,SAAS,GAAG;AACd;;;ACRA,SAAS,aAAa,CAAC,QAAgB;AAAA,EACrC,IAAI,CAAC,OAAO,OAAO;AAAA,IACjB,MAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AAAA,EACA,IAAI,OAAO,MAAM,YAAY,WAAW;AAAA,IACtC,MAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAAA;AAGF,SAAS,eAAe,CAAC,QAAgB;AAAA,EACvC,cAAc,MAAM;AAAA,EACpB,MAAM,IAAI,sBAAsB;AAAA,EAChC,OAAO,YAAY,EAAE,QAAQ,SAAS,EAAE,SAAS,MAAM,EAAE,MAAM,KAAK,sBAAsB,CAAC;AAAA;AAG7F,SAAS,aAAa,CAAC,QAAgB;AAAA,EACrC,cAAc,MAAM;AAAA,EACpB,MAAM,IAAI,sBAAsB;AAAA,EAChC,OAAO,YAAY,EAAE,QAAQ,SAAS,EAAE,SAAS,MAAM,EAAE,MAAM,KAAK,WAAW,CAAC;AAAA;AAGlF,SAAS,aAAa,CAAC,QAAgB;AAAA,EACrC,cAAc,MAAM;AAAA,EACpB,MAAM,IAAI,sBAAsB;AAAA,EAChC,OAAO,YAAY,EAAE,QAAQ,SAAS,EAAE,SAAS,MAAM,EAAE,MAAM,KAAK,iBAAiB,CAAC;AAAA;AAGxF,SAAS,aAAa,CAAC,QAAgB;AAAA,EACrC,cAAc,MAAM;AAAA,EACpB,MAAM,IAAI,sBAAsB;AAAA,EAChC,OAAO,YAAY,EAAE,QAAQ,SAAS,EAAE,SAAS,MAAM,EAAE,MAAM,KAAK,iBAAiB,CAAC;AAAA;AAGxF,SAAS,kBAAkB,CAAC,QAAgB;AAAA,EAC1C,cAAc,MAAM;AAAA,EACpB,MAAM,IAAI,sBAAsB;AAAA,EAChC,OAAO,YAAY,EAAE,QAAQ,SAAS,EAAE,SAAS,MAAM,EAAE,MAAM,KAAK,eAAe,CAAC;AAAA;AAGtF,IAAM,SAAS;AAAA,EACb,SAAS,gBAAgB;AAAA,EACzB,oBAAoB,gBAAgB;AAAA,EACpC,iBAAiB,gBAAgB;AAAA,EACjC,eAAe,gBAAgB;AACjC;AAIA,eAAsB,OAAO,CAAC,QAAgB,QAAwC;AAAA,EACpF,MAAM,OAAO,gBAAgB,MAAM;AAAA,EACnC,OAAO,KAAK,KAAK,QACf;AAAA,OACK;AAAA,IACH,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO,YAAY;AAAA,IAC7B,MAAM,OAAO,QAAQ;AAAA,EACvB,GACA;AAAA,IACE,gBAAgB;AAAA,MACd,GAAG,UAAU,OAAO,QAAS,OAAO,EAAE,WAAW,OAAO,MAAM,EAAE,KAAK;AAAA,IACvE;AAAA,EACF,CACF;AAAA;AAGF,eAAsB,YAAY,CAAC,QAAgB,QAA6C;AAAA,EAC9F,MAAM,OAAO,gBAAgB,MAAM;AAAA,EACnC,MAAM,QAAQ,sBAAsB;AAAA,EACpC,OAAO,KAAK,KAAK,aACf;AAAA,IACE,SAAS,OAAO;AAAA,IAChB,eAAe,OAAO;AAAA,IACtB,aAAa,OAAO;AAAA,EACtB,GACA;AAAA,IACE,gBAAgB;AAAA,MACd,GAAG,UAAU,OAAO,QAAS,OAAO,EACjC,WAAW,OAAO,WAAW,EAC7B,GAAG,GAAG,MAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,IACjD;AAAA,EACF,CACF;AAAA;AAGF,eAAsB,QAAQ,CAAC,QAAgB,QAAyC;AAAA,EACtF,MAAM,OAAO,gBAAgB,MAAM;AAAA,EACnC,OAAO,KAAK,KAAK,SAAS;AAAA,IACxB,SAAS,OAAO;AAAA,IAChB,oBAAoB,OAAO;AAAA,IAC3B,iBAAiB,OAAO;AAAA,IACxB,OAAO,OAAO;AAAA,EAChB,CAAC;AAAA;AAGH,eAAsB,YAAY,CAAC,QAAgB,QAA6C;AAAA,EAC9F,MAAM,OAAO,gBAAgB,MAAM;AAAA,EACnC,MAAM,QAAQ,sBAAsB;AAAA,EACpC,OAAO,KAAK,KAAK,aACf;AAAA,IACE,SAAS,OAAO;AAAA,IAChB,eAAe,OAAO;AAAA,IACtB,oBAAoB,OAAO;AAAA,IAC3B,iBAAiB,OAAO;AAAA,IACxB,aAAa,OAAO;AAAA,EACtB,GACA;AAAA,IACE,gBAAgB;AAAA,MACd,GAAG,UAAU,OAAO,QAAS,OAAO,EACjC,WAAW,OAAO,WAAW,EAC7B,GAAG,GAAG,MAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,IACjD;AAAA,EACF,CACF;AAAA;AAKF,eAAsB,eAAe,CAAC,QAAgB,SAAkC;AAAA,EACtF,MAAM,QAAQ,cAAc,MAAM;AAAA,EAClC,OAAQ,MAAM,MAAM,KAAK,WAAW,EAAE,SAAS,QAAQ,CAAC;AAAA;AAG1D,eAAsB,eAAe,CAAC,QAA2C;AAAA,EAC/E,MAAM,UAAU,mBAAmB,MAAM;AAAA,EACzC,MAAM,SAAS,cAAc,MAAM;AAAA,EAEnC,OAAO,UAAU,eAAe,MAAM,QAAQ,IAAI;AAAA,IAChD,QAAQ,KAAK,YAAY,CAAC,CAAC;AAAA,IAC3B,eAAe,MAAM;AAAA,EACvB,CAAC;AAAA,EAED,MAAM,cAAe,MAAM,OAAO,KAAK,qBAAqB;AAAA,IAC1D,WAAW;AAAA,EACb,CAAC;AAAA,EAED,OAAO,EAAE,aAAa,aAAa,SAAS;AAAA;AAG9C,eAAsB,cAAc,CAAC,QAAiC;AAAA,EACpE,MAAM,QAAQ,cAAc,MAAM;AAAA,EAClC,OAAQ,MAAM,MAAM,KAAK,eAAe,CAAC,CAAC;AAAA;AAG5C,eAAsB,iBAAiB,CACrC,QACA,OACyB;AAAA,EACzB,MAAM,SAAS,cAAc,MAAM;AAAA,EACnC,OAAQ,MAAM,OAAO,KAAK,oBAAoB;AAAA,IAC5C;AAAA,EACF,CAAC;AAAA;AAGH,eAAsB,OAAO,CAAC,QAAkC;AAAA,EAC9D,MAAM,OAAO,gBAAgB,MAAM;AAAA,EACnC,OAAO,UAAU,YAAY,mBAAmB,MAAM,QAAQ,IAAI;AAAA,IAChE,KAAK,KAAK,YAAY,CAAC,CAAC;AAAA,IACxB,KAAK,KAAK,cAAc,CAAC,CAAC;AAAA,IAC1B,KAAK,KAAK,mBAAmB,CAAC,CAAC;AAAA,EACjC,CAAC;AAAA,EACD,OAAO,EAAE,UAAU,YAAY,gBAAgB;AAAA;AAGjD,eAAsB,iBAAiB,CAAC,QAAiC;AAAA,EACvE,MAAM,UAAU,mBAAmB,MAAM;AAAA,EACzC,OAAQ,MAAM,QAAQ,KAAK,YAAY,CAAC,CAAC;AAAA;AAG3C,eAAsB,mBAAmB,CAAC,QAAkC;AAAA,EAC1E,MAAM,OAAO,gBAAgB,MAAM;AAAA,EACnC,OAAQ,MAAM,KAAK,KAAK,oBAAoB,CAAC,CAAC;AAAA;;;AC3HzC,SAAS,WAAW,GAA2C;AAAA,EACpE,OAAO,CAAC,YAAoB;AAAA,IAC1B,aAAa;AAAA,MAEX,SAAS,CAAC,WAA0B,QAAQ,QAAQ,MAAM;AAAA,MAG1D,cAAc,CAAC,WAA+B,aAAa,QAAQ,MAAM;AAAA,MAGzE,UAAU,CAAC,WAA2B,SAAS,QAAQ,MAAM;AAAA,MAG7D,cAAc,CAAC,WAA+B,aAAa,QAAQ,MAAM;AAAA,MAGzE,iBAAiB,CAAC,YAAoB,gBAAgB,QAAQ,OAAO;AAAA,MAGrE,iBAAiB,MAAM,gBAAgB,MAAM;AAAA,MAG7C,gBAAgB,MAAM,eAAe,MAAM;AAAA,MAG3C,mBAAmB,CAAC,UAAkB,kBAAkB,QAAQ,KAAK;AAAA,MAGrE,SAAS,MAAM,QAAQ,MAAM;AAAA,MAG7B,mBAAmB,MAAM,kBAAkB,MAAM;AAAA,MAGjD,qBAAqB,MAAM,oBAAoB,MAAM;AAAA,IACvD;AAAA,EACF;AAAA;",
11
+ "debugId": "1F0C69CD922D490A64756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -7,7 +7,6 @@ import {
7
7
  watchTransaction
8
8
  } from "../../shared/stacks-y3dh7hv1.js";
9
9
  import"../../shared/stacks-709tra19.js";
10
- import"../../shared/stacks-njvyj3ab.js";
11
10
  export {
12
11
  watchTransaction,
13
12
  watchNftEvent,
@@ -17,5 +16,5 @@ export {
17
16
  watchAddress
18
17
  };
19
18
 
20
- //# debugId=2F0BAF3010C3FA8F64756E2164756E21
19
+ //# debugId=91B227963F3C537164756E2164756E21
21
20
  //# sourceMappingURL=index.js.map
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "2F0BAF3010C3FA8F64756E2164756E21",
7
+ "debugId": "91B227963F3C537164756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -1,24 +1,6 @@
1
1
  import {
2
2
  deserializeTransaction
3
- } from "../../shared/stacks-ph4a6322.js";
4
- import {
5
- buildContractCall,
6
- buildContractDeploy,
7
- buildTokenTransfer,
8
- getOriginSigHash,
9
- getTransactionId,
10
- signBegin,
11
- signSponsor,
12
- signSponsorWithAccount,
13
- signTransaction,
14
- signTransactionWithAccount
15
- } from "../../shared/stacks-pz73cn97.js";
16
- import"../../shared/stacks-j2cy7qtt.js";
17
- import"../../shared/stacks-8yykgdww.js";
18
- import"../../shared/stacks-bycy6t9k.js";
19
- import"../../shared/stacks-gjvbq6w7.js";
20
- import"../../shared/stacks-nqytwfcc.js";
21
- import"../../shared/stacks-njvyj3ab.js";
3
+ } from "../../shared/stacks-9mdk86wp.js";
22
4
  import {
23
5
  AddressHashMode,
24
6
  AnchorMode,
@@ -39,12 +21,17 @@ import {
39
21
  RECOVERABLE_ECDSA_SIG_LENGTH_BYTES,
40
22
  TenureChangeCause,
41
23
  VRF_PROOF_BYTES_LENGTH,
24
+ buildContractCall,
25
+ buildContractDeploy,
26
+ buildTokenTransfer,
42
27
  combineMultiSigSignatures,
43
28
  createMultiSigSpendingCondition,
44
29
  createSingleSigSpendingCondition,
45
30
  createSponsoredAuth,
46
31
  createStandardAuth,
47
32
  finalizeMultiSig,
33
+ getOriginSigHash,
34
+ getTransactionId,
48
35
  isNonSequential,
49
36
  makeMultiSigAddress,
50
37
  nextSignature,
@@ -53,9 +40,18 @@ import {
53
40
  serializeTransactionHex,
54
41
  sigHashPostSign,
55
42
  sigHashPreSign,
43
+ signBegin,
56
44
  signMultiSig,
57
- signMultiSigWithAccount
58
- } from "../../shared/stacks-xtz0n62y.js";
45
+ signMultiSigWithAccount,
46
+ signSponsor,
47
+ signSponsorWithAccount,
48
+ signTransaction,
49
+ signTransactionWithAccount
50
+ } from "../../shared/stacks-vyb9rx8q.js";
51
+ import"../../shared/stacks-fedzr2ka.js";
52
+ import"../../shared/stacks-bycy6t9k.js";
53
+ import"../../shared/stacks-gjvbq6w7.js";
54
+ import"../../shared/stacks-nqytwfcc.js";
59
55
  export {
60
56
  signTransactionWithAccount,
61
57
  signTransaction,
@@ -105,5 +101,5 @@ export {
105
101
  AddressHashMode
106
102
  };
107
103
 
108
- //# debugId=F2E8FDA8941F446964756E2164756E21
104
+ //# debugId=8E720CF20EB56C3064756E2164756E21
109
105
  //# sourceMappingURL=index.js.map
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "F2E8FDA8941F446964756E2164756E21",
7
+ "debugId": "8E720CF20EB56C3064756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/utils/signature.ts", "../src/utils/keys.ts"],
4
4
  "sourcesContent": [
5
- "import { Signature as NobleSignature, verify, Point } from \"@noble/secp256k1\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, hexToBytes, concatBytes, utf8ToBytes } from \"./encoding.ts\";\nimport { hash160, hashP2PKH } from \"./hash.ts\";\nimport { c32address } from \"./address.ts\";\nimport { AddressVersion } from \"./constants.ts\";\n\nexport interface RecoverableSignature {\n /** Recovery id (0–3) */\n recovery: number;\n /** 32-byte r value as hex */\n r: string;\n /** 32-byte s value as hex */\n s: string;\n}\n\n// --- Format conversion ---\n\n/**\n * Parse a 65-byte VRS hex signature into components.\n * VRS format: recovery (1 byte) + r (32 bytes) + s (32 bytes)\n */\nexport function parseSignature(hex: string): RecoverableSignature {\n const clean = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n if (clean.length !== 130) {\n throw new Error(`Invalid signature length: expected 130 hex chars, got ${clean.length}`);\n }\n return {\n recovery: parseInt(clean.slice(0, 2), 16),\n r: clean.slice(2, 66),\n s: clean.slice(66, 130),\n };\n}\n\n/**\n * Serialize a recoverable signature to 65-byte VRS hex (130 chars).\n */\nexport function serializeSignature(sig: RecoverableSignature): string {\n const v = sig.recovery.toString(16).padStart(2, \"0\");\n return v + sig.r + sig.s;\n}\n\n/** Convert VRS hex to RSV hex: r+s (128 chars) + recovery (2 chars). */\nexport function signatureVrsToRsv(vrs: string): string {\n const clean = vrs.startsWith(\"0x\") ? vrs.slice(2) : vrs;\n return clean.slice(2) + clean.slice(0, 2);\n}\n\n/** Convert RSV hex to VRS hex: recovery (2 chars) + r+s (128 chars). */\nexport function signatureRsvToVrs(rsv: string): string {\n const clean = rsv.startsWith(\"0x\") ? rsv.slice(2) : rsv;\n return clean.slice(-2) + clean.slice(0, -2);\n}\n\n// --- Recovery ---\n\n/**\n * Recover a public key from a message hash and VRS signature.\n * @returns hex-encoded public key (33 bytes compressed, or 65 bytes uncompressed)\n */\nexport function recoverPublicKey(\n hash: Uint8Array | string,\n signature: string,\n compressed = true\n): string {\n const parsed = parseSignature(signature);\n const rs = parsed.r + parsed.s;\n const sig = NobleSignature.fromCompact(rs).addRecoveryBit(parsed.recovery);\n const msgHash = typeof hash === \"string\" ? hexToBytes(hash) : hash;\n const point = sig.recoverPublicKey(msgHash);\n return point.toHex(compressed);\n}\n\n/**\n * Recover a Stacks address from a message hash and VRS signature.\n * @param addressVersion defaults to MainnetSingleSig (22)\n */\nexport function recoverAddress(\n hash: Uint8Array | string,\n signature: string,\n addressVersion: number = AddressVersion.MainnetSingleSig\n): string {\n const pubkey = recoverPublicKey(hash, signature, true);\n const pubkeyHash = hashP2PKH(hexToBytes(pubkey));\n return c32address(addressVersion, pubkeyHash);\n}\n\n// --- Verification ---\n\n/**\n * Verify an ECDSA signature against a message hash and public key.\n * Accepts compact (64-byte) signature as hex or Uint8Array.\n */\nexport function verifySignature(\n hash: Uint8Array | string,\n signature: string | Uint8Array,\n publicKey: string | Uint8Array\n): boolean {\n return verify(signature, hash, publicKey, { lowS: false });\n}\n\n/** Bitcoin-style varint encoding for message length prefix. */\nfunction encodeVarint(n: number): Uint8Array {\n if (n < 0xfd) return new Uint8Array([n]);\n if (n <= 0xffff) {\n const buf = new Uint8Array(3);\n buf[0] = 0xfd;\n buf[1] = n & 0xff;\n buf[2] = (n >> 8) & 0xff;\n return buf;\n }\n const buf = new Uint8Array(5);\n buf[0] = 0xfe;\n buf[1] = n & 0xff;\n buf[2] = (n >> 8) & 0xff;\n buf[3] = (n >> 16) & 0xff;\n buf[4] = (n >> 24) & 0xff;\n return buf;\n}\n\nconst STACKS_MESSAGE_PREFIX = \"\\x17Stacks Signed Message:\\n\";\nconst LEGACY_MESSAGE_PREFIX = \"\\x18Stacks Message Signing:\\n\";\n\n/** Hash a message with the Stacks structured message prefix. */\nfunction hashMessage(message: string | Uint8Array, prefix: string): Uint8Array {\n const messageBytes = typeof message === \"string\" ? utf8ToBytes(message) : message;\n const prefixBytes = utf8ToBytes(prefix);\n const lengthBytes = encodeVarint(messageBytes.length);\n return sha256(concatBytes(prefixBytes, lengthBytes, messageBytes));\n}\n\n/**\n * Verify a signed Stacks message.\n * Parses a VRS signature, extracts r+s for verification.\n * Falls back to legacy prefix if standard prefix fails.\n */\nexport function verifyMessageSignature(\n message: string | Uint8Array,\n signature: string,\n publicKey: string\n): boolean {\n const parsed = parseSignature(signature);\n const compactSig = parsed.r + parsed.s;\n\n const msgHash = hashMessage(message, STACKS_MESSAGE_PREFIX);\n if (verify(compactSig, msgHash, publicKey, { lowS: false })) return true;\n\n // Fallback to legacy prefix\n if (typeof message === \"string\") {\n const legacyHash = hashMessage(message, LEGACY_MESSAGE_PREFIX);\n if (verify(compactSig, legacyHash, publicKey, { lowS: false })) return true;\n }\n\n return false;\n}\n",
5
+ "import { Signature as NobleSignature, verify } from \"@noble/secp256k1\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { hexToBytes, concatBytes, utf8ToBytes } from \"./encoding.ts\";\nimport { hashP2PKH } from \"./hash.ts\";\nimport { c32address } from \"./address.ts\";\nimport { AddressVersion } from \"./constants.ts\";\n\nexport interface RecoverableSignature {\n /** Recovery id (0–3) */\n recovery: number;\n /** 32-byte r value as hex */\n r: string;\n /** 32-byte s value as hex */\n s: string;\n}\n\n// --- Format conversion ---\n\n/**\n * Parse a 65-byte VRS hex signature into components.\n * VRS format: recovery (1 byte) + r (32 bytes) + s (32 bytes)\n */\nexport function parseSignature(hex: string): RecoverableSignature {\n const clean = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n if (clean.length !== 130) {\n throw new Error(`Invalid signature length: expected 130 hex chars, got ${clean.length}`);\n }\n return {\n recovery: parseInt(clean.slice(0, 2), 16),\n r: clean.slice(2, 66),\n s: clean.slice(66, 130),\n };\n}\n\n/**\n * Serialize a recoverable signature to 65-byte VRS hex (130 chars).\n */\nexport function serializeSignature(sig: RecoverableSignature): string {\n const v = sig.recovery.toString(16).padStart(2, \"0\");\n return v + sig.r + sig.s;\n}\n\n/** Convert VRS hex to RSV hex: r+s (128 chars) + recovery (2 chars). */\nexport function signatureVrsToRsv(vrs: string): string {\n const clean = vrs.startsWith(\"0x\") ? vrs.slice(2) : vrs;\n return clean.slice(2) + clean.slice(0, 2);\n}\n\n/** Convert RSV hex to VRS hex: recovery (2 chars) + r+s (128 chars). */\nexport function signatureRsvToVrs(rsv: string): string {\n const clean = rsv.startsWith(\"0x\") ? rsv.slice(2) : rsv;\n return clean.slice(-2) + clean.slice(0, -2);\n}\n\n// --- Recovery ---\n\n/**\n * Recover a public key from a message hash and VRS signature.\n * @returns hex-encoded public key (33 bytes compressed, or 65 bytes uncompressed)\n */\nexport function recoverPublicKey(\n hash: Uint8Array | string,\n signature: string,\n compressed = true\n): string {\n const parsed = parseSignature(signature);\n const rs = parsed.r + parsed.s;\n const sig = NobleSignature.fromCompact(rs).addRecoveryBit(parsed.recovery);\n const msgHash = typeof hash === \"string\" ? hexToBytes(hash) : hash;\n const point = sig.recoverPublicKey(msgHash);\n return point.toHex(compressed);\n}\n\n/**\n * Recover a Stacks address from a message hash and VRS signature.\n * @param addressVersion defaults to MainnetSingleSig (22)\n */\nexport function recoverAddress(\n hash: Uint8Array | string,\n signature: string,\n addressVersion: number = AddressVersion.MainnetSingleSig\n): string {\n const pubkey = recoverPublicKey(hash, signature, true);\n const pubkeyHash = hashP2PKH(hexToBytes(pubkey));\n return c32address(addressVersion, pubkeyHash);\n}\n\n// --- Verification ---\n\n/**\n * Verify an ECDSA signature against a message hash and public key.\n * Accepts compact (64-byte) signature as hex or Uint8Array.\n */\nexport function verifySignature(\n hash: Uint8Array | string,\n signature: string | Uint8Array,\n publicKey: string | Uint8Array\n): boolean {\n return verify(signature, hash, publicKey, { lowS: false });\n}\n\n/** Bitcoin-style varint encoding for message length prefix. */\nfunction encodeVarint(n: number): Uint8Array {\n if (n < 0xfd) return new Uint8Array([n]);\n if (n <= 0xffff) {\n const buf = new Uint8Array(3);\n buf[0] = 0xfd;\n buf[1] = n & 0xff;\n buf[2] = (n >> 8) & 0xff;\n return buf;\n }\n const buf = new Uint8Array(5);\n buf[0] = 0xfe;\n buf[1] = n & 0xff;\n buf[2] = (n >> 8) & 0xff;\n buf[3] = (n >> 16) & 0xff;\n buf[4] = (n >> 24) & 0xff;\n return buf;\n}\n\nconst STACKS_MESSAGE_PREFIX = \"\\x17Stacks Signed Message:\\n\";\nconst LEGACY_MESSAGE_PREFIX = \"\\x18Stacks Message Signing:\\n\";\n\n/** Hash a message with the Stacks structured message prefix. */\nfunction hashMessage(message: string | Uint8Array, prefix: string): Uint8Array {\n const messageBytes = typeof message === \"string\" ? utf8ToBytes(message) : message;\n const prefixBytes = utf8ToBytes(prefix);\n const lengthBytes = encodeVarint(messageBytes.length);\n return sha256(concatBytes(prefixBytes, lengthBytes, messageBytes));\n}\n\n/**\n * Verify a signed Stacks message.\n * Parses a VRS signature, extracts r+s for verification.\n * Falls back to legacy prefix if standard prefix fails.\n */\nexport function verifyMessageSignature(\n message: string | Uint8Array,\n signature: string,\n publicKey: string\n): boolean {\n const parsed = parseSignature(signature);\n const compactSig = parsed.r + parsed.s;\n\n const msgHash = hashMessage(message, STACKS_MESSAGE_PREFIX);\n if (verify(compactSig, msgHash, publicKey, { lowS: false })) return true;\n\n // Fallback to legacy prefix\n if (typeof message === \"string\") {\n const legacyHash = hashMessage(message, LEGACY_MESSAGE_PREFIX);\n if (verify(compactSig, legacyHash, publicKey, { lowS: false })) return true;\n }\n\n return false;\n}\n",
6
6
  "import { Point, etc } from \"@noble/secp256k1\";\nimport { bytesToHex, hexToBytes } from \"./encoding.ts\";\n\n/** Compress a public key to 33 bytes (hex). */\nexport function compressPublicKey(publicKey: string | Uint8Array): string {\n const hex = typeof publicKey === \"string\" ? publicKey : bytesToHex(publicKey);\n return Point.fromHex(hex).toHex(true);\n}\n\n/** Uncompress a public key to 65 bytes (hex). */\nexport function uncompressPublicKey(publicKey: string | Uint8Array): string {\n const hex = typeof publicKey === \"string\" ? publicKey : bytesToHex(publicKey);\n return Point.fromHex(hex).toHex(false);\n}\n\n/** Check if a public key is in compressed format (starts with 0x02 or 0x03). */\nexport function isCompressedPublicKey(publicKey: string | Uint8Array): boolean {\n const bytes = typeof publicKey === \"string\" ? hexToBytes(publicKey) : publicKey;\n return bytes.length === 33 && (bytes[0] === 0x02 || bytes[0] === 0x03);\n}\n\n/** Generate cryptographically secure random bytes. Defaults to 32 bytes. */\nexport function randomBytes(length?: number): Uint8Array {\n return etc.randomBytes(length ?? 32);\n}\n"
7
7
  ],
8
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA2D,IAA3D;AACuB,IAAvB;AAqBO,SAAS,cAAc,CAAC,KAAmC;AAAA,EAChE,MAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,EACpD,IAAI,MAAM,WAAW,KAAK;AAAA,IACxB,MAAM,IAAI,MAAM,yDAAyD,MAAM,QAAQ;AAAA,EACzF;AAAA,EACA,OAAO;AAAA,IACL,UAAU,SAAS,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,IACxC,GAAG,MAAM,MAAM,GAAG,EAAE;AAAA,IACpB,GAAG,MAAM,MAAM,IAAI,GAAG;AAAA,EACxB;AAAA;AAMK,SAAS,kBAAkB,CAAC,KAAmC;AAAA,EACpE,MAAM,IAAI,IAAI,SAAS,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,EACnD,OAAO,IAAI,IAAI,IAAI,IAAI;AAAA;AAIlB,SAAS,iBAAiB,CAAC,KAAqB;AAAA,EACrD,MAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,EACpD,OAAO,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA;AAInC,SAAS,iBAAiB,CAAC,KAAqB;AAAA,EACrD,MAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,EACpD,OAAO,MAAM,MAAM,EAAE,IAAI,MAAM,MAAM,GAAG,EAAE;AAAA;AASrC,SAAS,gBAAgB,CAC9B,MACA,WACA,aAAa,MACL;AAAA,EACR,MAAM,SAAS,eAAe,SAAS;AAAA,EACvC,MAAM,KAAK,OAAO,IAAI,OAAO;AAAA,EAC7B,MAAM,MAAM,2BAAe,YAAY,EAAE,EAAE,eAAe,OAAO,QAAQ;AAAA,EACzE,MAAM,UAAU,OAAO,SAAS,WAAW,WAAW,IAAI,IAAI;AAAA,EAC9D,MAAM,QAAQ,IAAI,iBAAiB,OAAO;AAAA,EAC1C,OAAO,MAAM,MAAM,UAAU;AAAA;AAOxB,SAAS,cAAc,CAC5B,MACA,WACA,iBAAyB,eAAe,kBAChC;AAAA,EACR,MAAM,SAAS,iBAAiB,MAAM,WAAW,IAAI;AAAA,EACrD,MAAM,aAAa,UAAU,WAAW,MAAM,CAAC;AAAA,EAC/C,OAAO,WAAW,gBAAgB,UAAU;AAAA;AASvC,SAAS,eAAe,CAC7B,MACA,WACA,WACS;AAAA,EACT,OAAO,wBAAO,WAAW,MAAM,WAAW,EAAE,MAAM,MAAM,CAAC;AAAA;AAI3D,SAAS,YAAY,CAAC,GAAuB;AAAA,EAC3C,IAAI,IAAI;AAAA,IAAM,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC;AAAA,EACvC,IAAI,KAAK,OAAQ;AAAA,IACf,MAAM,OAAM,IAAI,WAAW,CAAC;AAAA,IAC5B,KAAI,KAAK;AAAA,IACT,KAAI,KAAK,IAAI;AAAA,IACb,KAAI,KAAM,KAAK,IAAK;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,MAAM,IAAI,WAAW,CAAC;AAAA,EAC5B,IAAI,KAAK;AAAA,EACT,IAAI,KAAK,IAAI;AAAA,EACb,IAAI,KAAM,KAAK,IAAK;AAAA,EACpB,IAAI,KAAM,KAAK,KAAM;AAAA,EACrB,IAAI,KAAM,KAAK,KAAM;AAAA,EACrB,OAAO;AAAA;AAGT,IAAM,wBAAwB;AAAA;AAC9B,IAAM,wBAAwB;AAAA;AAG9B,SAAS,WAAW,CAAC,SAA8B,QAA4B;AAAA,EAC7E,MAAM,eAAe,OAAO,YAAY,WAAW,YAAY,OAAO,IAAI;AAAA,EAC1E,MAAM,cAAc,YAAY,MAAM;AAAA,EACtC,MAAM,cAAc,aAAa,aAAa,MAAM;AAAA,EACpD,OAAO,oBAAO,YAAY,aAAa,aAAa,YAAY,CAAC;AAAA;AAQ5D,SAAS,sBAAsB,CACpC,SACA,WACA,WACS;AAAA,EACT,MAAM,SAAS,eAAe,SAAS;AAAA,EACvC,MAAM,aAAa,OAAO,IAAI,OAAO;AAAA,EAErC,MAAM,UAAU,YAAY,SAAS,qBAAqB;AAAA,EAC1D,IAAI,wBAAO,YAAY,SAAS,WAAW,EAAE,MAAM,MAAM,CAAC;AAAA,IAAG,OAAO;AAAA,EAGpE,IAAI,OAAO,YAAY,UAAU;AAAA,IAC/B,MAAM,aAAa,YAAY,SAAS,qBAAqB;AAAA,IAC7D,IAAI,wBAAO,YAAY,YAAY,WAAW,EAAE,MAAM,MAAM,CAAC;AAAA,MAAG,OAAO;AAAA,EACzE;AAAA,EAEA,OAAO;AAAA;;ACzJkB,IAA3B;AAIO,SAAS,iBAAiB,CAAC,WAAwC;AAAA,EACxE,MAAM,MAAM,OAAO,cAAc,WAAW,YAAY,WAAW,SAAS;AAAA,EAC5E,OAAO,wBAAM,QAAQ,GAAG,EAAE,MAAM,IAAI;AAAA;AAI/B,SAAS,mBAAmB,CAAC,WAAwC;AAAA,EAC1E,MAAM,MAAM,OAAO,cAAc,WAAW,YAAY,WAAW,SAAS;AAAA,EAC5E,OAAO,wBAAM,QAAQ,GAAG,EAAE,MAAM,KAAK;AAAA;AAIhC,SAAS,qBAAqB,CAAC,WAAyC;AAAA,EAC7E,MAAM,QAAQ,OAAO,cAAc,WAAW,WAAW,SAAS,IAAI;AAAA,EACtE,OAAO,MAAM,WAAW,OAAO,MAAM,OAAO,KAAQ,MAAM,OAAO;AAAA;AAI5D,SAAS,WAAW,CAAC,QAA6B;AAAA,EACvD,OAAO,sBAAI,YAAY,UAAU,EAAE;AAAA;",
8
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAoD,IAApD;AACuB,IAAvB;AAqBO,SAAS,cAAc,CAAC,KAAmC;AAAA,EAChE,MAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,EACpD,IAAI,MAAM,WAAW,KAAK;AAAA,IACxB,MAAM,IAAI,MAAM,yDAAyD,MAAM,QAAQ;AAAA,EACzF;AAAA,EACA,OAAO;AAAA,IACL,UAAU,SAAS,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,IACxC,GAAG,MAAM,MAAM,GAAG,EAAE;AAAA,IACpB,GAAG,MAAM,MAAM,IAAI,GAAG;AAAA,EACxB;AAAA;AAMK,SAAS,kBAAkB,CAAC,KAAmC;AAAA,EACpE,MAAM,IAAI,IAAI,SAAS,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,EACnD,OAAO,IAAI,IAAI,IAAI,IAAI;AAAA;AAIlB,SAAS,iBAAiB,CAAC,KAAqB;AAAA,EACrD,MAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,EACpD,OAAO,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA;AAInC,SAAS,iBAAiB,CAAC,KAAqB;AAAA,EACrD,MAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,EACpD,OAAO,MAAM,MAAM,EAAE,IAAI,MAAM,MAAM,GAAG,EAAE;AAAA;AASrC,SAAS,gBAAgB,CAC9B,MACA,WACA,aAAa,MACL;AAAA,EACR,MAAM,SAAS,eAAe,SAAS;AAAA,EACvC,MAAM,KAAK,OAAO,IAAI,OAAO;AAAA,EAC7B,MAAM,MAAM,2BAAe,YAAY,EAAE,EAAE,eAAe,OAAO,QAAQ;AAAA,EACzE,MAAM,UAAU,OAAO,SAAS,WAAW,WAAW,IAAI,IAAI;AAAA,EAC9D,MAAM,QAAQ,IAAI,iBAAiB,OAAO;AAAA,EAC1C,OAAO,MAAM,MAAM,UAAU;AAAA;AAOxB,SAAS,cAAc,CAC5B,MACA,WACA,iBAAyB,eAAe,kBAChC;AAAA,EACR,MAAM,SAAS,iBAAiB,MAAM,WAAW,IAAI;AAAA,EACrD,MAAM,aAAa,UAAU,WAAW,MAAM,CAAC;AAAA,EAC/C,OAAO,WAAW,gBAAgB,UAAU;AAAA;AASvC,SAAS,eAAe,CAC7B,MACA,WACA,WACS;AAAA,EACT,OAAO,wBAAO,WAAW,MAAM,WAAW,EAAE,MAAM,MAAM,CAAC;AAAA;AAI3D,SAAS,YAAY,CAAC,GAAuB;AAAA,EAC3C,IAAI,IAAI;AAAA,IAAM,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC;AAAA,EACvC,IAAI,KAAK,OAAQ;AAAA,IACf,MAAM,OAAM,IAAI,WAAW,CAAC;AAAA,IAC5B,KAAI,KAAK;AAAA,IACT,KAAI,KAAK,IAAI;AAAA,IACb,KAAI,KAAM,KAAK,IAAK;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,MAAM,IAAI,WAAW,CAAC;AAAA,EAC5B,IAAI,KAAK;AAAA,EACT,IAAI,KAAK,IAAI;AAAA,EACb,IAAI,KAAM,KAAK,IAAK;AAAA,EACpB,IAAI,KAAM,KAAK,KAAM;AAAA,EACrB,IAAI,KAAM,KAAK,KAAM;AAAA,EACrB,OAAO;AAAA;AAGT,IAAM,wBAAwB;AAAA;AAC9B,IAAM,wBAAwB;AAAA;AAG9B,SAAS,WAAW,CAAC,SAA8B,QAA4B;AAAA,EAC7E,MAAM,eAAe,OAAO,YAAY,WAAW,YAAY,OAAO,IAAI;AAAA,EAC1E,MAAM,cAAc,YAAY,MAAM;AAAA,EACtC,MAAM,cAAc,aAAa,aAAa,MAAM;AAAA,EACpD,OAAO,oBAAO,YAAY,aAAa,aAAa,YAAY,CAAC;AAAA;AAQ5D,SAAS,sBAAsB,CACpC,SACA,WACA,WACS;AAAA,EACT,MAAM,SAAS,eAAe,SAAS;AAAA,EACvC,MAAM,aAAa,OAAO,IAAI,OAAO;AAAA,EAErC,MAAM,UAAU,YAAY,SAAS,qBAAqB;AAAA,EAC1D,IAAI,wBAAO,YAAY,SAAS,WAAW,EAAE,MAAM,MAAM,CAAC;AAAA,IAAG,OAAO;AAAA,EAGpE,IAAI,OAAO,YAAY,UAAU;AAAA,IAC/B,MAAM,aAAa,YAAY,SAAS,qBAAqB;AAAA,IAC7D,IAAI,wBAAO,YAAY,YAAY,WAAW,EAAE,MAAM,MAAM,CAAC;AAAA,MAAG,OAAO;AAAA,EACzE;AAAA,EAEA,OAAO;AAAA;;ACzJkB,IAA3B;AAIO,SAAS,iBAAiB,CAAC,WAAwC;AAAA,EACxE,MAAM,MAAM,OAAO,cAAc,WAAW,YAAY,WAAW,SAAS;AAAA,EAC5E,OAAO,wBAAM,QAAQ,GAAG,EAAE,MAAM,IAAI;AAAA;AAI/B,SAAS,mBAAmB,CAAC,WAAwC;AAAA,EAC1E,MAAM,MAAM,OAAO,cAAc,WAAW,YAAY,WAAW,SAAS;AAAA,EAC5E,OAAO,wBAAM,QAAQ,GAAG,EAAE,MAAM,KAAK;AAAA;AAIhC,SAAS,qBAAqB,CAAC,WAAyC;AAAA,EAC7E,MAAM,QAAQ,OAAO,cAAc,WAAW,WAAW,SAAS,IAAI;AAAA,EACtE,OAAO,MAAM,WAAW,OAAO,MAAM,OAAO,KAAQ,MAAM,OAAO;AAAA;AAI5D,SAAS,WAAW,CAAC,QAA6B;AAAA,EACvD,OAAO,sBAAI,YAAY,UAAU,EAAE;AAAA;",
9
9
  "debugId": "F1D67D47267AF34764756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -55,7 +55,6 @@ import {
55
55
  writeUInt32BE,
56
56
  writeUInt8
57
57
  } from "../../shared/stacks-nqytwfcc.js";
58
- import"../../shared/stacks-njvyj3ab.js";
59
58
  // src/utils/signature.ts
60
59
  import { Signature as NobleSignature, verify } from "@noble/secp256k1";
61
60
  import { sha256 as sha2562 } from "@noble/hashes/sha2.js";
@@ -140,14 +139,14 @@ function verifyMessageSignature(message, signature, publicKey) {
140
139
  return false;
141
140
  }
142
141
  // src/utils/keys.ts
143
- import { Point as Point2, etc } from "@noble/secp256k1";
142
+ import { Point, etc } from "@noble/secp256k1";
144
143
  function compressPublicKey(publicKey) {
145
144
  const hex = typeof publicKey === "string" ? publicKey : bytesToHex(publicKey);
146
- return Point2.fromHex(hex).toHex(true);
145
+ return Point.fromHex(hex).toHex(true);
147
146
  }
148
147
  function uncompressPublicKey(publicKey) {
149
148
  const hex = typeof publicKey === "string" ? publicKey : bytesToHex(publicKey);
150
- return Point2.fromHex(hex).toHex(false);
149
+ return Point.fromHex(hex).toHex(false);
151
150
  }
152
151
  function isCompressedPublicKey(publicKey) {
153
152
  const bytes = typeof publicKey === "string" ? hexToBytes(publicKey) : publicKey;
@@ -218,5 +217,5 @@ export {
218
217
  AddressVersion
219
218
  };
220
219
 
221
- //# debugId=5ED999593A751F3B64756E2164756E21
220
+ //# debugId=9AA6CFA890CEF05564756E2164756E21
222
221
  //# sourceMappingURL=index.js.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/utils/signature.ts", "../src/utils/keys.ts"],
4
4
  "sourcesContent": [
5
- "import { Signature as NobleSignature, verify, Point } from \"@noble/secp256k1\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, hexToBytes, concatBytes, utf8ToBytes } from \"./encoding.ts\";\nimport { hash160, hashP2PKH } from \"./hash.ts\";\nimport { c32address } from \"./address.ts\";\nimport { AddressVersion } from \"./constants.ts\";\n\nexport interface RecoverableSignature {\n /** Recovery id (0–3) */\n recovery: number;\n /** 32-byte r value as hex */\n r: string;\n /** 32-byte s value as hex */\n s: string;\n}\n\n// --- Format conversion ---\n\n/**\n * Parse a 65-byte VRS hex signature into components.\n * VRS format: recovery (1 byte) + r (32 bytes) + s (32 bytes)\n */\nexport function parseSignature(hex: string): RecoverableSignature {\n const clean = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n if (clean.length !== 130) {\n throw new Error(`Invalid signature length: expected 130 hex chars, got ${clean.length}`);\n }\n return {\n recovery: parseInt(clean.slice(0, 2), 16),\n r: clean.slice(2, 66),\n s: clean.slice(66, 130),\n };\n}\n\n/**\n * Serialize a recoverable signature to 65-byte VRS hex (130 chars).\n */\nexport function serializeSignature(sig: RecoverableSignature): string {\n const v = sig.recovery.toString(16).padStart(2, \"0\");\n return v + sig.r + sig.s;\n}\n\n/** Convert VRS hex to RSV hex: r+s (128 chars) + recovery (2 chars). */\nexport function signatureVrsToRsv(vrs: string): string {\n const clean = vrs.startsWith(\"0x\") ? vrs.slice(2) : vrs;\n return clean.slice(2) + clean.slice(0, 2);\n}\n\n/** Convert RSV hex to VRS hex: recovery (2 chars) + r+s (128 chars). */\nexport function signatureRsvToVrs(rsv: string): string {\n const clean = rsv.startsWith(\"0x\") ? rsv.slice(2) : rsv;\n return clean.slice(-2) + clean.slice(0, -2);\n}\n\n// --- Recovery ---\n\n/**\n * Recover a public key from a message hash and VRS signature.\n * @returns hex-encoded public key (33 bytes compressed, or 65 bytes uncompressed)\n */\nexport function recoverPublicKey(\n hash: Uint8Array | string,\n signature: string,\n compressed = true\n): string {\n const parsed = parseSignature(signature);\n const rs = parsed.r + parsed.s;\n const sig = NobleSignature.fromCompact(rs).addRecoveryBit(parsed.recovery);\n const msgHash = typeof hash === \"string\" ? hexToBytes(hash) : hash;\n const point = sig.recoverPublicKey(msgHash);\n return point.toHex(compressed);\n}\n\n/**\n * Recover a Stacks address from a message hash and VRS signature.\n * @param addressVersion defaults to MainnetSingleSig (22)\n */\nexport function recoverAddress(\n hash: Uint8Array | string,\n signature: string,\n addressVersion: number = AddressVersion.MainnetSingleSig\n): string {\n const pubkey = recoverPublicKey(hash, signature, true);\n const pubkeyHash = hashP2PKH(hexToBytes(pubkey));\n return c32address(addressVersion, pubkeyHash);\n}\n\n// --- Verification ---\n\n/**\n * Verify an ECDSA signature against a message hash and public key.\n * Accepts compact (64-byte) signature as hex or Uint8Array.\n */\nexport function verifySignature(\n hash: Uint8Array | string,\n signature: string | Uint8Array,\n publicKey: string | Uint8Array\n): boolean {\n return verify(signature, hash, publicKey, { lowS: false });\n}\n\n/** Bitcoin-style varint encoding for message length prefix. */\nfunction encodeVarint(n: number): Uint8Array {\n if (n < 0xfd) return new Uint8Array([n]);\n if (n <= 0xffff) {\n const buf = new Uint8Array(3);\n buf[0] = 0xfd;\n buf[1] = n & 0xff;\n buf[2] = (n >> 8) & 0xff;\n return buf;\n }\n const buf = new Uint8Array(5);\n buf[0] = 0xfe;\n buf[1] = n & 0xff;\n buf[2] = (n >> 8) & 0xff;\n buf[3] = (n >> 16) & 0xff;\n buf[4] = (n >> 24) & 0xff;\n return buf;\n}\n\nconst STACKS_MESSAGE_PREFIX = \"\\x17Stacks Signed Message:\\n\";\nconst LEGACY_MESSAGE_PREFIX = \"\\x18Stacks Message Signing:\\n\";\n\n/** Hash a message with the Stacks structured message prefix. */\nfunction hashMessage(message: string | Uint8Array, prefix: string): Uint8Array {\n const messageBytes = typeof message === \"string\" ? utf8ToBytes(message) : message;\n const prefixBytes = utf8ToBytes(prefix);\n const lengthBytes = encodeVarint(messageBytes.length);\n return sha256(concatBytes(prefixBytes, lengthBytes, messageBytes));\n}\n\n/**\n * Verify a signed Stacks message.\n * Parses a VRS signature, extracts r+s for verification.\n * Falls back to legacy prefix if standard prefix fails.\n */\nexport function verifyMessageSignature(\n message: string | Uint8Array,\n signature: string,\n publicKey: string\n): boolean {\n const parsed = parseSignature(signature);\n const compactSig = parsed.r + parsed.s;\n\n const msgHash = hashMessage(message, STACKS_MESSAGE_PREFIX);\n if (verify(compactSig, msgHash, publicKey, { lowS: false })) return true;\n\n // Fallback to legacy prefix\n if (typeof message === \"string\") {\n const legacyHash = hashMessage(message, LEGACY_MESSAGE_PREFIX);\n if (verify(compactSig, legacyHash, publicKey, { lowS: false })) return true;\n }\n\n return false;\n}\n",
5
+ "import { Signature as NobleSignature, verify } from \"@noble/secp256k1\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { hexToBytes, concatBytes, utf8ToBytes } from \"./encoding.ts\";\nimport { hashP2PKH } from \"./hash.ts\";\nimport { c32address } from \"./address.ts\";\nimport { AddressVersion } from \"./constants.ts\";\n\nexport interface RecoverableSignature {\n /** Recovery id (0–3) */\n recovery: number;\n /** 32-byte r value as hex */\n r: string;\n /** 32-byte s value as hex */\n s: string;\n}\n\n// --- Format conversion ---\n\n/**\n * Parse a 65-byte VRS hex signature into components.\n * VRS format: recovery (1 byte) + r (32 bytes) + s (32 bytes)\n */\nexport function parseSignature(hex: string): RecoverableSignature {\n const clean = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n if (clean.length !== 130) {\n throw new Error(`Invalid signature length: expected 130 hex chars, got ${clean.length}`);\n }\n return {\n recovery: parseInt(clean.slice(0, 2), 16),\n r: clean.slice(2, 66),\n s: clean.slice(66, 130),\n };\n}\n\n/**\n * Serialize a recoverable signature to 65-byte VRS hex (130 chars).\n */\nexport function serializeSignature(sig: RecoverableSignature): string {\n const v = sig.recovery.toString(16).padStart(2, \"0\");\n return v + sig.r + sig.s;\n}\n\n/** Convert VRS hex to RSV hex: r+s (128 chars) + recovery (2 chars). */\nexport function signatureVrsToRsv(vrs: string): string {\n const clean = vrs.startsWith(\"0x\") ? vrs.slice(2) : vrs;\n return clean.slice(2) + clean.slice(0, 2);\n}\n\n/** Convert RSV hex to VRS hex: recovery (2 chars) + r+s (128 chars). */\nexport function signatureRsvToVrs(rsv: string): string {\n const clean = rsv.startsWith(\"0x\") ? rsv.slice(2) : rsv;\n return clean.slice(-2) + clean.slice(0, -2);\n}\n\n// --- Recovery ---\n\n/**\n * Recover a public key from a message hash and VRS signature.\n * @returns hex-encoded public key (33 bytes compressed, or 65 bytes uncompressed)\n */\nexport function recoverPublicKey(\n hash: Uint8Array | string,\n signature: string,\n compressed = true\n): string {\n const parsed = parseSignature(signature);\n const rs = parsed.r + parsed.s;\n const sig = NobleSignature.fromCompact(rs).addRecoveryBit(parsed.recovery);\n const msgHash = typeof hash === \"string\" ? hexToBytes(hash) : hash;\n const point = sig.recoverPublicKey(msgHash);\n return point.toHex(compressed);\n}\n\n/**\n * Recover a Stacks address from a message hash and VRS signature.\n * @param addressVersion defaults to MainnetSingleSig (22)\n */\nexport function recoverAddress(\n hash: Uint8Array | string,\n signature: string,\n addressVersion: number = AddressVersion.MainnetSingleSig\n): string {\n const pubkey = recoverPublicKey(hash, signature, true);\n const pubkeyHash = hashP2PKH(hexToBytes(pubkey));\n return c32address(addressVersion, pubkeyHash);\n}\n\n// --- Verification ---\n\n/**\n * Verify an ECDSA signature against a message hash and public key.\n * Accepts compact (64-byte) signature as hex or Uint8Array.\n */\nexport function verifySignature(\n hash: Uint8Array | string,\n signature: string | Uint8Array,\n publicKey: string | Uint8Array\n): boolean {\n return verify(signature, hash, publicKey, { lowS: false });\n}\n\n/** Bitcoin-style varint encoding for message length prefix. */\nfunction encodeVarint(n: number): Uint8Array {\n if (n < 0xfd) return new Uint8Array([n]);\n if (n <= 0xffff) {\n const buf = new Uint8Array(3);\n buf[0] = 0xfd;\n buf[1] = n & 0xff;\n buf[2] = (n >> 8) & 0xff;\n return buf;\n }\n const buf = new Uint8Array(5);\n buf[0] = 0xfe;\n buf[1] = n & 0xff;\n buf[2] = (n >> 8) & 0xff;\n buf[3] = (n >> 16) & 0xff;\n buf[4] = (n >> 24) & 0xff;\n return buf;\n}\n\nconst STACKS_MESSAGE_PREFIX = \"\\x17Stacks Signed Message:\\n\";\nconst LEGACY_MESSAGE_PREFIX = \"\\x18Stacks Message Signing:\\n\";\n\n/** Hash a message with the Stacks structured message prefix. */\nfunction hashMessage(message: string | Uint8Array, prefix: string): Uint8Array {\n const messageBytes = typeof message === \"string\" ? utf8ToBytes(message) : message;\n const prefixBytes = utf8ToBytes(prefix);\n const lengthBytes = encodeVarint(messageBytes.length);\n return sha256(concatBytes(prefixBytes, lengthBytes, messageBytes));\n}\n\n/**\n * Verify a signed Stacks message.\n * Parses a VRS signature, extracts r+s for verification.\n * Falls back to legacy prefix if standard prefix fails.\n */\nexport function verifyMessageSignature(\n message: string | Uint8Array,\n signature: string,\n publicKey: string\n): boolean {\n const parsed = parseSignature(signature);\n const compactSig = parsed.r + parsed.s;\n\n const msgHash = hashMessage(message, STACKS_MESSAGE_PREFIX);\n if (verify(compactSig, msgHash, publicKey, { lowS: false })) return true;\n\n // Fallback to legacy prefix\n if (typeof message === \"string\") {\n const legacyHash = hashMessage(message, LEGACY_MESSAGE_PREFIX);\n if (verify(compactSig, legacyHash, publicKey, { lowS: false })) return true;\n }\n\n return false;\n}\n",
6
6
  "import { Point, etc } from \"@noble/secp256k1\";\nimport { bytesToHex, hexToBytes } from \"./encoding.ts\";\n\n/** Compress a public key to 33 bytes (hex). */\nexport function compressPublicKey(publicKey: string | Uint8Array): string {\n const hex = typeof publicKey === \"string\" ? publicKey : bytesToHex(publicKey);\n return Point.fromHex(hex).toHex(true);\n}\n\n/** Uncompress a public key to 65 bytes (hex). */\nexport function uncompressPublicKey(publicKey: string | Uint8Array): string {\n const hex = typeof publicKey === \"string\" ? publicKey : bytesToHex(publicKey);\n return Point.fromHex(hex).toHex(false);\n}\n\n/** Check if a public key is in compressed format (starts with 0x02 or 0x03). */\nexport function isCompressedPublicKey(publicKey: string | Uint8Array): boolean {\n const bytes = typeof publicKey === \"string\" ? hexToBytes(publicKey) : publicKey;\n return bytes.length === 33 && (bytes[0] === 0x02 || bytes[0] === 0x03);\n}\n\n/** Generate cryptographically secure random bytes. Defaults to 32 bytes. */\nexport function randomBytes(length?: number): Uint8Array {\n return etc.randomBytes(length ?? 32);\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "5ED999593A751F3B64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "9AA6CFA890CEF05564756E2164756E21",
10
10
  "names": []
11
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@secondlayer/stacks",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "A viem-style SDK for the Stacks blockchain",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.cjs",
@@ -1,110 +0,0 @@
1
- // src/clarity/types.ts
2
- var ClarityWireType = {
3
- int: 0,
4
- uint: 1,
5
- buffer: 2,
6
- true: 3,
7
- false: 4,
8
- address: 5,
9
- contract: 6,
10
- ok: 7,
11
- err: 8,
12
- none: 9,
13
- some: 10,
14
- list: 11,
15
- tuple: 12,
16
- ascii: 13,
17
- utf8: 14
18
- };
19
- var wireTypeToClarity = Object.fromEntries(Object.entries(ClarityWireType).map(([k, v]) => [v, k]));
20
- function clarityTypeFromByte(byte) {
21
- const type = wireTypeToClarity[byte];
22
- if (!type)
23
- throw new Error(`Unknown clarity wire type: ${byte}`);
24
- return type;
25
- }
26
-
27
- // src/clarity/serialize.ts
28
- var CLARITY_INT_SIZE = 128n;
29
- var CLARITY_INT_BYTE_SIZE = 16;
30
- function typeIdByte(type) {
31
- return ClarityWireType[type];
32
- }
33
- function withTypeId(type, bytes) {
34
- return concatBytes(new Uint8Array([typeIdByte(type)]), bytes);
35
- }
36
- function serializeAddress(c32Address) {
37
- const [version, hash160] = c32addressDecode(c32Address);
38
- return concatBytes(new Uint8Array([version]), hexToBytes(hash160));
39
- }
40
- function serializeLPString(str, prefixBytes = 1) {
41
- const content = utf8ToBytes(str);
42
- const lengthPrefix = hexToBytes(intToHex(content.byteLength, prefixBytes));
43
- return concatBytes(lengthPrefix, content);
44
- }
45
- function serializeCVBytes(value) {
46
- switch (value.type) {
47
- case "true":
48
- case "false":
49
- return new Uint8Array([typeIdByte(value.type)]);
50
- case "int": {
51
- const bytes = bigIntToBytes(toTwos(BigInt(value.value), CLARITY_INT_SIZE), CLARITY_INT_BYTE_SIZE);
52
- return withTypeId(value.type, bytes);
53
- }
54
- case "uint": {
55
- const bytes = bigIntToBytes(BigInt(value.value), CLARITY_INT_BYTE_SIZE);
56
- return withTypeId(value.type, bytes);
57
- }
58
- case "buffer": {
59
- const bufBytes = hexToBytes(value.value);
60
- return withTypeId(value.type, concatBytes(writeUInt32BE(bufBytes.length), bufBytes));
61
- }
62
- case "none":
63
- return new Uint8Array([typeIdByte(value.type)]);
64
- case "some":
65
- return withTypeId(value.type, serializeCVBytes(value.value));
66
- case "ok":
67
- case "err":
68
- return withTypeId(value.type, serializeCVBytes(value.value));
69
- case "address":
70
- return withTypeId(value.type, serializeAddress(value.value));
71
- case "contract": {
72
- const [addr, name] = value.value.split(".");
73
- if (!addr || !name)
74
- throw new Error(`Invalid contract principal: ${value.value}`);
75
- return withTypeId(value.type, concatBytes(serializeAddress(addr), serializeLPString(name)));
76
- }
77
- case "list": {
78
- const parts = [writeUInt32BE(value.value.length)];
79
- for (const item of value.value) {
80
- parts.push(serializeCVBytes(item));
81
- }
82
- return withTypeId(value.type, concatBytes(...parts));
83
- }
84
- case "tuple": {
85
- const keys = Object.keys(value.value).sort((a, b) => a.localeCompare(b));
86
- const parts = [writeUInt32BE(keys.length)];
87
- for (const key of keys) {
88
- parts.push(serializeLPString(key));
89
- parts.push(serializeCVBytes(value.value[key]));
90
- }
91
- return withTypeId(value.type, concatBytes(...parts));
92
- }
93
- case "ascii": {
94
- const strBytes = asciiToBytes(value.value);
95
- return withTypeId(value.type, concatBytes(writeUInt32BE(strBytes.length), strBytes));
96
- }
97
- case "utf8": {
98
- const strBytes = utf8ToBytes(value.value);
99
- return withTypeId(value.type, concatBytes(writeUInt32BE(strBytes.length), strBytes));
100
- }
101
- default:
102
- throw new Error(`Cannot serialize unknown clarity type`);
103
- }
104
- }
105
- function serializeCV(value) {
106
- return bytesToHex(serializeCVBytes(value));
107
- }
108
-
109
- //# debugId=2B3A693ED24B1BAF64756E2164756E21
110
- //# sourceMappingURL=stacks-1aqm7c2h.cjs.map
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/clarity/types.ts", "../src/clarity/serialize.ts"],
4
- "sourcesContent": [
5
- "export type ClarityType =\n | \"int\"\n | \"uint\"\n | \"buffer\"\n | \"true\"\n | \"false\"\n | \"address\"\n | \"contract\"\n | \"ok\"\n | \"err\"\n | \"none\"\n | \"some\"\n | \"list\"\n | \"tuple\"\n | \"ascii\"\n | \"utf8\";\n\n/** Wire type IDs matching the Stacks binary format (SIP-005) */\nexport const ClarityWireType = {\n int: 0x00,\n uint: 0x01,\n buffer: 0x02,\n true: 0x03,\n false: 0x04,\n address: 0x05,\n contract: 0x06,\n ok: 0x07,\n err: 0x08,\n none: 0x09,\n some: 0x0a,\n list: 0x0b,\n tuple: 0x0c,\n ascii: 0x0d,\n utf8: 0x0e,\n} as const satisfies Record<ClarityType, number>;\n\n/** Reverse lookup: wire byte → ClarityType string */\nconst wireTypeToClarity = Object.fromEntries(\n Object.entries(ClarityWireType).map(([k, v]) => [v, k])\n) as Record<number, ClarityType>;\n\nexport function clarityTypeFromByte(byte: number): ClarityType {\n const type = wireTypeToClarity[byte];\n if (!type) throw new Error(`Unknown clarity wire type: ${byte}`);\n return type;\n}\n\n// CV types\n\nexport type IntCV = { readonly type: \"int\"; readonly value: bigint };\nexport type UIntCV = { readonly type: \"uint\"; readonly value: bigint };\nexport type BooleanCV = TrueCV | FalseCV;\nexport type TrueCV = { readonly type: \"true\" };\nexport type FalseCV = { readonly type: \"false\" };\nexport type BufferCV = { readonly type: \"buffer\"; readonly value: string }; // hex\nexport type NoneCV = { readonly type: \"none\" };\nexport type SomeCV = {\n readonly type: \"some\";\n readonly value: ClarityValue;\n};\nexport type OptionalCV = NoneCV | SomeCV;\nexport type ResponseOkCV = {\n readonly type: \"ok\";\n readonly value: ClarityValue;\n};\nexport type ResponseErrorCV = {\n readonly type: \"err\";\n readonly value: ClarityValue;\n};\nexport type ResponseCV = ResponseOkCV | ResponseErrorCV;\nexport type StandardPrincipalCV = {\n readonly type: \"address\";\n readonly value: string;\n};\nexport type ContractPrincipalCV = {\n readonly type: \"contract\";\n readonly value: string; // \"address.name\"\n};\nexport type PrincipalCV = StandardPrincipalCV | ContractPrincipalCV;\nexport type ListCV = {\n type: \"list\";\n value: ClarityValue[];\n};\nexport type TupleData = {\n [key: string]: ClarityValue;\n};\nexport type TupleCV = {\n type: \"tuple\";\n value: TupleData;\n};\nexport type StringAsciiCV = {\n readonly type: \"ascii\";\n readonly value: string;\n};\nexport type StringUtf8CV = {\n readonly type: \"utf8\";\n readonly value: string;\n};\n\nexport type ClarityValue =\n | IntCV\n | UIntCV\n | BooleanCV\n | BufferCV\n | NoneCV\n | SomeCV\n | ResponseOkCV\n | ResponseErrorCV\n | StandardPrincipalCV\n | ContractPrincipalCV\n | ListCV\n | TupleCV\n | StringAsciiCV\n | StringUtf8CV;\n",
6
- "import {\n bytesToHex,\n hexToBytes,\n concatBytes,\n bigIntToBytes,\n toTwos,\n asciiToBytes,\n utf8ToBytes,\n writeUInt32BE,\n intToHex,\n} from \"../utils/encoding.ts\";\nimport { c32addressDecode } from \"../utils/c32.ts\";\nimport { ClarityWireType, type ClarityValue, type ClarityType } from \"./types.ts\";\n\nconst CLARITY_INT_SIZE = 128n;\nconst CLARITY_INT_BYTE_SIZE = 16;\n\nfunction typeIdByte(type: ClarityType): number {\n return ClarityWireType[type];\n}\n\nfunction withTypeId(type: ClarityType, bytes: Uint8Array): Uint8Array {\n return concatBytes(new Uint8Array([typeIdByte(type)]), bytes);\n}\n\nfunction serializeAddress(c32Address: string): Uint8Array {\n const [version, hash160] = c32addressDecode(c32Address);\n return concatBytes(new Uint8Array([version]), hexToBytes(hash160));\n}\n\nfunction serializeLPString(str: string, prefixBytes = 1): Uint8Array {\n const content = utf8ToBytes(str);\n const lengthPrefix = hexToBytes(intToHex(content.byteLength, prefixBytes));\n return concatBytes(lengthPrefix, content);\n}\n\nexport function serializeCVBytes(value: ClarityValue): Uint8Array {\n switch (value.type) {\n case \"true\":\n case \"false\":\n return new Uint8Array([typeIdByte(value.type)]);\n\n case \"int\": {\n const bytes = bigIntToBytes(\n toTwos(BigInt(value.value), CLARITY_INT_SIZE),\n CLARITY_INT_BYTE_SIZE\n );\n return withTypeId(value.type, bytes);\n }\n\n case \"uint\": {\n const bytes = bigIntToBytes(BigInt(value.value), CLARITY_INT_BYTE_SIZE);\n return withTypeId(value.type, bytes);\n }\n\n case \"buffer\": {\n const bufBytes = hexToBytes(value.value);\n return withTypeId(\n value.type,\n concatBytes(writeUInt32BE(bufBytes.length), bufBytes)\n );\n }\n\n case \"none\":\n return new Uint8Array([typeIdByte(value.type)]);\n\n case \"some\":\n return withTypeId(value.type, serializeCVBytes(value.value));\n\n case \"ok\":\n case \"err\":\n return withTypeId(value.type, serializeCVBytes(value.value));\n\n case \"address\":\n return withTypeId(value.type, serializeAddress(value.value));\n\n case \"contract\": {\n const [addr, name] = value.value.split(\".\");\n if (!addr || !name) throw new Error(`Invalid contract principal: ${value.value}`);\n return withTypeId(\n value.type,\n concatBytes(serializeAddress(addr), serializeLPString(name))\n );\n }\n\n case \"list\": {\n const parts: Uint8Array[] = [writeUInt32BE(value.value.length)];\n for (const item of value.value) {\n parts.push(serializeCVBytes(item));\n }\n return withTypeId(value.type, concatBytes(...parts));\n }\n\n case \"tuple\": {\n const keys = Object.keys(value.value).sort((a, b) => a.localeCompare(b));\n const parts: Uint8Array[] = [writeUInt32BE(keys.length)];\n for (const key of keys) {\n parts.push(serializeLPString(key));\n parts.push(serializeCVBytes(value.value[key]!));\n }\n return withTypeId(value.type, concatBytes(...parts));\n }\n\n case \"ascii\": {\n const strBytes = asciiToBytes(value.value);\n return withTypeId(\n value.type,\n concatBytes(writeUInt32BE(strBytes.length), strBytes)\n );\n }\n\n case \"utf8\": {\n const strBytes = utf8ToBytes(value.value);\n return withTypeId(\n value.type,\n concatBytes(writeUInt32BE(strBytes.length), strBytes)\n );\n }\n\n default:\n throw new Error(`Cannot serialize unknown clarity type`);\n }\n}\n\nexport function serializeCV(value: ClarityValue): string {\n return bytesToHex(serializeCVBytes(value));\n}\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "2B3A693ED24B1BAF64756E2164756E21",
10
- "names": []
11
- }
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/actions/getContract.ts"],
4
- "sourcesContent": [
5
- "import type { Client } from \"../clients/types.ts\";\nimport type {\n AbiContract,\n AbiFunction,\n AbiMap,\n AbiType,\n ExtractReadOnlyFunctions,\n ExtractPublicFunctions,\n ExtractFunctionArgs,\n ExtractFunctionOutput,\n ExtractMapNames,\n ExtractMapKey,\n ExtractMapValue,\n} from \"../clarity/abi/index.ts\";\nimport { toCamelCase } from \"../clarity/abi/utils.ts\";\nimport { jsToClarityValue, clarityValueToJSUntyped } from \"../clarity/bridge.ts\";\nimport { readContract } from \"./public/readContract.ts\";\nimport { callContract } from \"./wallet/callContract.ts\";\nimport { getMapEntry } from \"./public/getMapEntry.ts\";\nimport type { ClarityValue } from \"../clarity/types.ts\";\nimport type { PostCondition } from \"../postconditions/types.ts\";\nimport type { IntegerType } from \"../utils/encoding.ts\";\n\n// --- Type helpers for unwrapping response types ---\n\n/** Unwrap `(response ok err)` → just the `ok` branch type */\ntype UnwrapResponse<T> = T extends { ok: infer O } | { err: any } ? O : T;\n\ntype ReadMethodReturn<\n C extends AbiContract,\n N extends ExtractReadOnlyFunctions<C>,\n> = UnwrapResponse<ExtractFunctionOutput<C, N>>;\n\n// --- Public type for the contract instance ---\n\ntype ReadMethods<C extends AbiContract> = {\n [N in ExtractReadOnlyFunctions<C> as ToCamelCaseName<N>]: (\n args: ExtractFunctionArgs<C, N>,\n ) => Promise<ReadMethodReturn<C, N>>;\n};\n\ntype CallMethods<C extends AbiContract> = {\n [N in ExtractPublicFunctions<C> as ToCamelCaseName<N>]: (\n args: ExtractFunctionArgs<C, N>,\n options?: ContractCallOptions,\n ) => Promise<string>;\n};\n\ntype MapMethods<C extends AbiContract> = {\n [N in ExtractMapNames<C> as ToCamelCaseName<N>]: (\n key: ExtractMapKey<C, N>,\n ) => Promise<ExtractMapValue<C, N> | null>;\n};\n\ntype ToCamelCaseName<S extends string> = S extends string\n ? ReturnType<typeof toCamelCase> extends string\n ? S\n : S\n : S;\n\nexport type ContractCallOptions = {\n fee?: IntegerType;\n nonce?: IntegerType;\n postConditionMode?: \"allow\" | \"deny\";\n postConditions?: PostCondition[];\n};\n\nexport type ContractInstance<C extends AbiContract> = {\n read: ReadMethods<C>;\n call: CallMethods<C>;\n maps: MapMethods<C>;\n};\n\nexport type GetContractParams<C extends AbiContract> = {\n client: Client;\n address: string;\n name: string;\n abi: C;\n};\n\nexport function getContract<const TAbi extends AbiContract>(\n params: GetContractParams<TAbi>,\n): ContractInstance<TAbi> {\n const { client, address, name: contractName, abi } = params;\n const contractId = `${address}.${contractName}`;\n\n // Index functions/maps by name for fast lookup\n const fnByName = new Map<string, AbiFunction>();\n for (const fn of abi.functions) {\n fnByName.set(fn.name, fn as AbiFunction);\n }\n\n const mapByName = new Map<string, AbiMap>();\n if (abi.maps) {\n for (const m of abi.maps) {\n mapByName.set(m.name, m as AbiMap);\n }\n }\n\n // Build kebab→camel reverse map for function/map names\n const camelToKebab = new Map<string, string>();\n for (const fn of abi.functions) {\n camelToKebab.set(toCamelCase(fn.name), fn.name);\n }\n if (abi.maps) {\n for (const m of abi.maps) {\n camelToKebab.set(toCamelCase(m.name), m.name);\n }\n }\n\n const read = new Proxy({} as ReadMethods<TAbi>, {\n get(_target, prop: string) {\n const fnName = camelToKebab.get(prop) ?? prop;\n const fn = fnByName.get(fnName);\n if (!fn || fn.access !== \"read-only\") return undefined;\n\n return async (args: Record<string, unknown>) => {\n const clarityArgs = buildFunctionArgs(fn, args);\n const result = await readContract(client, {\n contract: contractId,\n functionName: fn.name,\n args: clarityArgs,\n });\n\n const jsValue = clarityValueToJSUntyped(fn.outputs as AbiType, result);\n\n // Auto-unwrap: if output is response type, unwrap ok / throw on err\n if (isResponseOutput(fn.outputs as AbiType)) {\n const resp = jsValue as { ok?: unknown; err?: unknown };\n if (\"ok\" in resp) return resp.ok;\n throw new ContractResponseError(\n `${contractId}::${fn.name} returned (err ${formatErrValue(resp.err)})`,\n resp.err,\n );\n }\n\n return jsValue;\n };\n },\n });\n\n const call = new Proxy({} as CallMethods<TAbi>, {\n get(_target, prop: string) {\n const fnName = camelToKebab.get(prop) ?? prop;\n const fn = fnByName.get(fnName);\n if (!fn || fn.access !== \"public\") return undefined;\n\n return async (\n args: Record<string, unknown>,\n options?: ContractCallOptions,\n ) => {\n const clarityArgs = buildFunctionArgs(fn, args);\n return callContract(client, {\n contract: contractId,\n functionName: fn.name,\n functionArgs: clarityArgs,\n ...options,\n });\n };\n },\n });\n\n const maps = new Proxy({} as MapMethods<TAbi>, {\n get(_target, prop: string) {\n const mapName = camelToKebab.get(prop) ?? prop;\n const map = mapByName.get(mapName);\n if (!map) return undefined;\n\n return async (key: unknown) => {\n const clarityKey = jsToClarityValue(map.key as AbiType, key);\n const result = await getMapEntry(client, {\n contract: contractId,\n mapName: map.name,\n key: clarityKey,\n });\n\n // Map entries come back as (optional ...). If none, return null.\n if (result.type === \"none\") return null;\n if (result.type === \"some\") {\n return clarityValueToJSUntyped(map.value as AbiType, result.value);\n }\n // Direct value (shouldn't normally happen, but handle gracefully)\n return clarityValueToJSUntyped(map.value as AbiType, result);\n };\n },\n });\n\n return { read, call, maps };\n}\n\n// --- Helpers ---\n\nfunction buildFunctionArgs(\n fn: AbiFunction,\n args: Record<string, unknown>,\n): ClarityValue[] {\n return fn.args.map((arg) => {\n const camelKey = toCamelCase(arg.name);\n const hasOriginal = arg.name in args;\n const hasCamel = camelKey in args;\n const value = hasOriginal ? args[arg.name] : hasCamel ? args[camelKey] : undefined;\n if (value === undefined) throw new Error(`Missing argument: ${arg.name}`);\n return jsToClarityValue(arg.type as AbiType, value);\n });\n}\n\nfunction isResponseOutput(type: AbiType): boolean {\n return typeof type === \"object\" && type !== null && \"response\" in type;\n}\n\nfunction formatErrValue(value: unknown): string {\n if (typeof value === \"bigint\") return value.toString();\n if (typeof value === \"string\") return `\"${value}\"`;\n return String(value);\n}\n\nexport class ContractResponseError extends Error {\n override name = \"ContractResponseError\";\n constructor(\n message: string,\n public readonly errorValue: unknown,\n ) {\n super(message);\n }\n}\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "C71C39F2B8094B6864756E2164756E21",
9
- "names": []
10
- }
@@ -1,44 +0,0 @@
1
- var import_node_module = require("node:module");
2
- var __create = Object.create;
3
- var __getProtoOf = Object.getPrototypeOf;
4
- var __defProp = Object.defineProperty;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __toESM = (mod, isNodeMode, target) => {
9
- target = mod != null ? __create(__getProtoOf(mod)) : {};
10
- const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
11
- for (let key of __getOwnPropNames(mod))
12
- if (!__hasOwnProp.call(to, key))
13
- __defProp(to, key, {
14
- get: () => mod[key],
15
- enumerable: true
16
- });
17
- return to;
18
- };
19
- var __moduleCache = /* @__PURE__ */ new WeakMap;
20
- var __toCommonJS = (from) => {
21
- var entry = __moduleCache.get(from), desc;
22
- if (entry)
23
- return entry;
24
- entry = __defProp({}, "__esModule", { value: true });
25
- if (from && typeof from === "object" || typeof from === "function")
26
- __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
27
- get: () => from[key],
28
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
29
- }));
30
- __moduleCache.set(from, entry);
31
- return entry;
32
- };
33
- var __export = (target, all) => {
34
- for (var name in all)
35
- __defProp(target, name, {
36
- get: all[name],
37
- enumerable: true,
38
- configurable: true,
39
- set: (newValue) => all[name] = () => newValue
40
- });
41
- };
42
-
43
- //# debugId=F7091C0D7381DD9264756E2164756E21
44
- //# sourceMappingURL=stacks-2gdt3aqj.cjs.map