@secondlayer/stacks 0.0.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.
- package/README.md +92 -0
- package/dist/shared/stacks-02actsrx.cjs +17 -0
- package/dist/shared/stacks-02actsrx.cjs.map +10 -0
- package/dist/shared/stacks-1aqm7c2h.cjs +110 -0
- package/dist/shared/stacks-1aqm7c2h.cjs.map +11 -0
- package/dist/shared/stacks-24h5k94q.cjs +74 -0
- package/dist/shared/stacks-24h5k94q.cjs.map +11 -0
- package/dist/shared/stacks-2ar4prfz.cjs +328 -0
- package/dist/shared/stacks-2ar4prfz.cjs.map +11 -0
- package/dist/shared/stacks-4py5pm0r.cjs +237 -0
- package/dist/shared/stacks-4py5pm0r.cjs.map +10 -0
- package/dist/shared/stacks-5tprhns9.cjs +54 -0
- package/dist/shared/stacks-5tprhns9.cjs.map +11 -0
- package/dist/shared/stacks-61rvzkz1.cjs +132 -0
- package/dist/shared/stacks-61rvzkz1.cjs.map +17 -0
- package/dist/shared/stacks-709tra19.js +30 -0
- package/dist/shared/stacks-709tra19.js.map +10 -0
- package/dist/shared/stacks-74k8cxgb.cjs +567 -0
- package/dist/shared/stacks-74k8cxgb.cjs.map +13 -0
- package/dist/shared/stacks-8m9byk2j.js +7 -0
- package/dist/shared/stacks-8m9byk2j.js.map +9 -0
- package/dist/shared/stacks-8yykgdww.js +125 -0
- package/dist/shared/stacks-8yykgdww.js.map +11 -0
- package/dist/shared/stacks-9g0jhab3.cjs +40 -0
- package/dist/shared/stacks-9g0jhab3.cjs.map +10 -0
- package/dist/shared/stacks-an5k8n4t.cjs +291 -0
- package/dist/shared/stacks-an5k8n4t.cjs.map +23 -0
- package/dist/shared/stacks-b008c3w8.cjs +214 -0
- package/dist/shared/stacks-b008c3w8.cjs.map +11 -0
- package/dist/shared/stacks-bnvfmt7y.cjs +31 -0
- package/dist/shared/stacks-bnvfmt7y.cjs.map +9 -0
- package/dist/shared/stacks-bycy6t9k.js +22 -0
- package/dist/shared/stacks-bycy6t9k.js.map +10 -0
- package/dist/shared/stacks-d1fmkv3p.js +258 -0
- package/dist/shared/stacks-d1fmkv3p.js.map +13 -0
- package/dist/shared/stacks-dr5en54r.cjs +119 -0
- package/dist/shared/stacks-dr5en54r.cjs.map +10 -0
- package/dist/shared/stacks-dxhntr76.js +278 -0
- package/dist/shared/stacks-dxhntr76.js.map +10 -0
- package/dist/shared/stacks-evnzth1q.cjs +35 -0
- package/dist/shared/stacks-evnzth1q.cjs.map +10 -0
- package/dist/shared/stacks-f3tk2k5s.js +27 -0
- package/dist/shared/stacks-f3tk2k5s.js.map +9 -0
- package/dist/shared/stacks-f7wdrzs3.js +285 -0
- package/dist/shared/stacks-f7wdrzs3.js.map +11 -0
- package/dist/shared/stacks-fcaefc5b.cjs +16 -0
- package/dist/shared/stacks-fcaefc5b.cjs.map +10 -0
- package/dist/shared/stacks-g9mcjcqg.cjs +3 -0
- package/dist/shared/stacks-g9mcjcqg.cjs.map +9 -0
- package/dist/shared/stacks-gck1sq7h.cjs +28 -0
- package/dist/shared/stacks-gck1sq7h.cjs.map +10 -0
- package/dist/shared/stacks-gjvbq6w7.js +46 -0
- package/dist/shared/stacks-gjvbq6w7.js.map +10 -0
- package/dist/shared/stacks-j2cy7qtt.js +237 -0
- package/dist/shared/stacks-j2cy7qtt.js.map +11 -0
- package/dist/shared/stacks-k08tgzyp.cjs +232 -0
- package/dist/shared/stacks-k08tgzyp.cjs.map +13 -0
- package/dist/shared/stacks-k2p5tv6x.js +37 -0
- package/dist/shared/stacks-k2p5tv6x.js.map +10 -0
- package/dist/shared/stacks-k58k970n.js +234 -0
- package/dist/shared/stacks-k58k970n.js.map +10 -0
- package/dist/shared/stacks-n2g56wgg.js +338 -0
- package/dist/shared/stacks-n2g56wgg.js.map +23 -0
- package/dist/shared/stacks-nqytwfcc.js +243 -0
- package/dist/shared/stacks-nqytwfcc.js.map +11 -0
- package/dist/shared/stacks-qcae5852.js +19 -0
- package/dist/shared/stacks-qcae5852.js.map +10 -0
- package/dist/shared/stacks-qt8ehebn.js +76 -0
- package/dist/shared/stacks-qt8ehebn.js.map +11 -0
- package/dist/shared/stacks-qvg7c24g.cjs +232 -0
- package/dist/shared/stacks-qvg7c24g.cjs.map +10 -0
- package/dist/shared/stacks-r1t6g3c3.cjs +241 -0
- package/dist/shared/stacks-r1t6g3c3.cjs.map +11 -0
- package/dist/shared/stacks-tjxmrssa.js +282 -0
- package/dist/shared/stacks-tjxmrssa.js.map +11 -0
- package/dist/shared/stacks-v9jqcpd4.js +18 -0
- package/dist/shared/stacks-v9jqcpd4.js.map +10 -0
- package/dist/shared/stacks-vdfag81a.cjs +121 -0
- package/dist/shared/stacks-vdfag81a.cjs.map +10 -0
- package/dist/shared/stacks-vdfs3e5v.js +134 -0
- package/dist/shared/stacks-vdfs3e5v.js.map +10 -0
- package/dist/shared/stacks-y3dh7hv1.js +60 -0
- package/dist/shared/stacks-y3dh7hv1.js.map +11 -0
- package/dist/shared/stacks-ya3x01yd.cjs +16 -0
- package/dist/shared/stacks-ya3x01yd.cjs.map +10 -0
- package/dist/shared/stacks-yfgsm6ap.js +599 -0
- package/dist/shared/stacks-yfgsm6ap.js.map +13 -0
- package/dist/shared/stacks-yfveb68e.js +121 -0
- package/dist/shared/stacks-yfveb68e.js.map +10 -0
- package/dist/shared/stacks-zm0b3tgy.js +160 -0
- package/dist/shared/stacks-zm0b3tgy.js.map +17 -0
- package/dist/shared/stacks-zyv9qqme.cjs +249 -0
- package/dist/shared/stacks-zyv9qqme.cjs.map +11 -0
- package/dist/src/accounts/index.cjs +90 -0
- package/dist/src/accounts/index.cjs.map +12 -0
- package/dist/src/accounts/index.d.cts +47 -0
- package/dist/src/accounts/index.d.ts +47 -0
- package/dist/src/accounts/index.js +104 -0
- package/dist/src/accounts/index.js.map +12 -0
- package/dist/src/actions/index.cjs +36 -0
- package/dist/src/actions/index.cjs.map +9 -0
- package/dist/src/actions/index.d.cts +886 -0
- package/dist/src/actions/index.d.ts +886 -0
- package/dist/src/actions/index.js +81 -0
- package/dist/src/actions/index.js.map +9 -0
- package/dist/src/bns/index.cjs +590 -0
- package/dist/src/bns/index.cjs.map +15 -0
- package/dist/src/bns/index.d.cts +241 -0
- package/dist/src/bns/index.d.ts +241 -0
- package/dist/src/bns/index.js +611 -0
- package/dist/src/bns/index.js.map +15 -0
- package/dist/src/chains/index.cjs +13 -0
- package/dist/src/chains/index.cjs.map +9 -0
- package/dist/src/chains/index.d.cts +53 -0
- package/dist/src/chains/index.d.ts +53 -0
- package/dist/src/chains/index.js +18 -0
- package/dist/src/chains/index.js.map +9 -0
- package/dist/src/clarity/index.cjs +3 -0
- package/dist/src/clarity/index.cjs.map +9 -0
- package/dist/src/clarity/index.d.cts +821 -0
- package/dist/src/clarity/index.d.ts +821 -0
- package/dist/src/clarity/index.js +145 -0
- package/dist/src/clarity/index.js.map +9 -0
- package/dist/src/connect/index.cjs +480 -0
- package/dist/src/connect/index.cjs.map +19 -0
- package/dist/src/connect/index.d.cts +110 -0
- package/dist/src/connect/index.d.ts +110 -0
- package/dist/src/connect/index.js +448 -0
- package/dist/src/connect/index.js.map +19 -0
- package/dist/src/connect/walletconnect/index.cjs +1322 -0
- package/dist/src/connect/walletconnect/index.cjs.map +18 -0
- package/dist/src/connect/walletconnect/index.d.cts +132 -0
- package/dist/src/connect/walletconnect/index.d.ts +132 -0
- package/dist/src/connect/walletconnect/index.js +1290 -0
- package/dist/src/connect/walletconnect/index.js.map +18 -0
- package/dist/src/index.cjs +557 -0
- package/dist/src/index.cjs.map +21 -0
- package/dist/src/index.d.cts +847 -0
- package/dist/src/index.d.ts +847 -0
- package/dist/src/index.js +629 -0
- package/dist/src/index.js.map +21 -0
- package/dist/src/postconditions/index.cjs +3 -0
- package/dist/src/postconditions/index.cjs.map +9 -0
- package/dist/src/postconditions/index.d.cts +91 -0
- package/dist/src/postconditions/index.d.ts +91 -0
- package/dist/src/postconditions/index.js +12 -0
- package/dist/src/postconditions/index.js.map +9 -0
- package/dist/src/pox/index.cjs +860 -0
- package/dist/src/pox/index.cjs.map +15 -0
- package/dist/src/pox/index.d.cts +244 -0
- package/dist/src/pox/index.d.ts +244 -0
- package/dist/src/pox/index.js +877 -0
- package/dist/src/pox/index.js.map +15 -0
- package/dist/src/stackingdao/index.cjs +300 -0
- package/dist/src/stackingdao/index.cjs.map +13 -0
- package/dist/src/stackingdao/index.d.cts +179 -0
- package/dist/src/stackingdao/index.d.ts +179 -0
- package/dist/src/stackingdao/index.js +318 -0
- package/dist/src/stackingdao/index.js.map +13 -0
- package/dist/src/subscriptions/index.cjs +14 -0
- package/dist/src/subscriptions/index.cjs.map +9 -0
- package/dist/src/subscriptions/index.d.cts +250 -0
- package/dist/src/subscriptions/index.d.ts +250 -0
- package/dist/src/subscriptions/index.js +21 -0
- package/dist/src/subscriptions/index.js.map +9 -0
- package/dist/src/transactions/index.cjs +50 -0
- package/dist/src/transactions/index.cjs.map +9 -0
- package/dist/src/transactions/index.d.cts +412 -0
- package/dist/src/transactions/index.d.ts +412 -0
- package/dist/src/transactions/index.js +101 -0
- package/dist/src/transactions/index.js.map +9 -0
- package/dist/src/utils/index.cjs +168 -0
- package/dist/src/utils/index.cjs.map +11 -0
- package/dist/src/utils/index.d.cts +140 -0
- package/dist/src/utils/index.d.ts +140 -0
- package/dist/src/utils/index.js +222 -0
- package/dist/src/utils/index.js.map +11 -0
- package/package.json +105 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/actions/public/getBalance.ts", "../src/actions/public/getAccountInfo.ts", "../src/actions/public/getBlock.ts", "../src/actions/public/getBlockHeight.ts", "../src/actions/public/getContractAbi.ts", "../src/actions/public/multicall.ts", "../src/errors/simulation.ts", "../src/actions/public/simulateCall.ts", "../src/actions/public/simulateTransaction.ts", "../src/actions/wallet/signTransaction.ts", "../src/actions/wallet/transferStx.ts", "../src/actions/wallet/deployContract.ts", "../src/actions/wallet/signMessage.ts", "../src/actions/wallet/sponsorTransaction.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { Client } from \"../../clients/types.ts\";\n\nexport type GetBalanceParams = {\n address: string;\n};\n\nexport async function getBalance(\n client: Client,\n params: GetBalanceParams\n): Promise<bigint> {\n const data = await client.request(`/v2/accounts/${params.address}`, {\n method: \"GET\",\n });\n return BigInt(data.balance);\n}\n",
|
|
6
|
+
"import type { Client } from \"../../clients/types.ts\";\n\nexport type GetAccountInfoParams = {\n address: string;\n};\n\nexport type AccountInfo = {\n balance: bigint;\n nonce: bigint;\n balanceProof: string;\n nonceProof: string;\n};\n\nexport async function getAccountInfo(\n client: Client,\n params: GetAccountInfoParams\n): Promise<AccountInfo> {\n const data = await client.request(\n `/v2/accounts/${params.address}?proof=1`,\n { method: \"GET\" }\n );\n return {\n balance: BigInt(data.balance),\n nonce: BigInt(data.nonce),\n balanceProof: data.balance_proof ?? \"\",\n nonceProof: data.nonce_proof ?? \"\",\n };\n}\n",
|
|
7
|
+
"import type { Client } from \"../../clients/types.ts\";\n\nexport type GetBlockParams = {\n height?: number;\n hash?: string;\n};\n\nexport async function getBlock(client: Client, params?: GetBlockParams): Promise<any> {\n if (params?.hash) {\n return client.request(`/extended/v2/blocks/${params.hash}`, { method: \"GET\" });\n }\n if (params?.height !== undefined) {\n return client.request(`/extended/v2/blocks/${params.height}`, { method: \"GET\" });\n }\n // Latest block\n return client.request(\"/extended/v2/blocks?limit=1\", { method: \"GET\" });\n}\n",
|
|
8
|
+
"import type { Client } from \"../../clients/types.ts\";\n\nexport async function getBlockHeight(client: Client): Promise<number> {\n const data = await client.request(\"/v2/info\", { method: \"GET\" });\n return data.stacks_tip_height;\n}\n",
|
|
9
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport { parseContractId } from \"../../utils/address.ts\";\n\nexport type GetContractAbiParams = {\n contract: string; // \"address.name\"\n};\n\nexport async function getContractAbi(\n client: Client,\n params: GetContractAbiParams\n): Promise<any> {\n const [address, name] = parseContractId(params.contract);\n return client.request(`/v2/contracts/interface/${address}/${name}`, {\n method: \"GET\",\n });\n}\n",
|
|
10
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport { readContract } from \"./readContract.ts\";\n\nexport type MulticallCall = {\n contract: string;\n functionName: string;\n args?: ClarityValue[];\n sender?: string;\n};\n\nexport type MulticallParams<TAllowFailure extends boolean = true> = {\n calls: readonly MulticallCall[];\n allowFailure?: TAllowFailure;\n};\n\nexport type MulticallSuccessResult = { status: \"success\"; result: ClarityValue };\nexport type MulticallFailureResult = { status: \"failure\"; error: Error };\n\nexport type MulticallResult<T extends boolean> = T extends true\n ? (MulticallSuccessResult | MulticallFailureResult)[]\n : ClarityValue[];\n\nexport async function multicall<TAllowFailure extends boolean = true>(\n client: Client,\n params: MulticallParams<TAllowFailure>\n): Promise<MulticallResult<TAllowFailure>> {\n const { calls, allowFailure = true } = params;\n\n if (allowFailure) {\n const settled = await Promise.allSettled(\n calls.map((call) => readContract(client, call))\n );\n return settled.map((r) =>\n r.status === \"fulfilled\"\n ? { status: \"success\" as const, result: r.value }\n : { status: \"failure\" as const, error: r.reason instanceof Error ? r.reason : new Error(String(r.reason)) }\n ) as MulticallResult<TAllowFailure>;\n }\n\n const results = await Promise.all(\n calls.map((call) => readContract(client, call))\n );\n return results as MulticallResult<TAllowFailure>;\n}\n",
|
|
11
|
+
"import { BaseError } from \"./base.ts\";\n\nexport class SimulationError extends BaseError {\n override name = \"SimulationError\";\n writesDetected: boolean;\n\n constructor(\n message: string,\n options: { writesDetected: boolean; details?: string }\n ) {\n super(message, { details: options.details });\n this.writesDetected = options.writesDetected;\n }\n}\n",
|
|
12
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport { serializeCVBytes } from \"../../clarity/serialize.ts\";\nimport { deserializeCVBytes } from \"../../clarity/deserialize.ts\";\nimport { bytesToHex, with0x } from \"../../utils/encoding.ts\";\nimport { parseContractId } from \"../../utils/address.ts\";\nimport { SimulationError } from \"../../errors/simulation.ts\";\n\nexport type SimulateCallParams = {\n contract: string;\n functionName: string;\n args?: ClarityValue[];\n sender?: string;\n tip?: string;\n};\n\nexport type SimulateCallSuccess = { success: true; result: ClarityValue };\nexport type SimulateCallFailure = { success: false; error: SimulationError };\nexport type SimulateCallResult = SimulateCallSuccess | SimulateCallFailure;\n\nexport async function simulateCall(\n client: Client,\n params: SimulateCallParams\n): Promise<SimulateCallResult> {\n const [address, name] = parseContractId(params.contract);\n const sender = params.sender ?? address;\n\n const serializedArgs = (params.args ?? []).map((arg) =>\n with0x(bytesToHex(serializeCVBytes(arg)))\n );\n\n let path = `/v2/contracts/call-read/${address}/${name}/${params.functionName}`;\n if (params.tip) {\n path += `?tip=${params.tip}`;\n }\n\n const data = await client.request(path, {\n method: \"POST\",\n body: {\n sender,\n arguments: serializedArgs,\n },\n });\n\n if (data.okay) {\n return { success: true, result: deserializeCVBytes(data.result) };\n }\n\n const cause: string = data.cause ?? \"Simulation failed\";\n const writesDetected =\n cause.includes(\"NotReadOnly\") || cause.includes(\"CostBalanceExceeded\");\n\n return {\n success: false,\n error: new SimulationError(\n writesDetected\n ? \"Function mutates state and cannot be simulated\"\n : \"Simulation failed\",\n { writesDetected, details: cause }\n ),\n };\n}\n",
|
|
13
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport type { StacksTransaction } from \"../../transactions/types.ts\";\nimport { PayloadType, AddressHashMode } from \"../../transactions/types.ts\";\nimport { c32address } from \"../../utils/address.ts\";\nimport { simulateCall, type SimulateCallResult } from \"./simulateCall.ts\";\nimport { estimateFee, type FeeEstimation } from \"./estimateFee.ts\";\n\nexport type SimulateTransactionParams = {\n transaction: StacksTransaction;\n sender?: string;\n tip?: string;\n};\n\nexport type SimulateContractCallResult = {\n type: \"contract-call\";\n execution: SimulateCallResult;\n fees: FeeEstimation[];\n};\n\nexport type SimulateTransferResult = {\n type: \"token-transfer\";\n fees: FeeEstimation[];\n};\n\nexport type SimulateDeployResult = {\n type: \"contract-deploy\";\n fees: FeeEstimation[];\n};\n\nexport type SimulateTransactionResult =\n | SimulateContractCallResult\n | SimulateTransferResult\n | SimulateDeployResult;\n\nfunction isMultiSig(hashMode: number): boolean {\n return (\n hashMode === AddressHashMode.P2SH ||\n hashMode === AddressHashMode.P2WSH ||\n hashMode === AddressHashMode.P2SH_NonSequential ||\n hashMode === AddressHashMode.P2WSH_P2SH_NonSequential\n );\n}\n\nfunction extractSender(tx: StacksTransaction, client: Client): string {\n const { hashMode, signer } = tx.auth.spendingCondition;\n const chain = client.chain;\n const version = isMultiSig(hashMode)\n ? chain?.addressVersion.multiSig ?? 20\n : chain?.addressVersion.singleSig ?? 22;\n return c32address(version, signer);\n}\n\nexport async function simulateTransaction(\n client: Client,\n params: SimulateTransactionParams,\n): Promise<SimulateTransactionResult> {\n const { transaction, tip } = params;\n const { payload } = transaction;\n\n if (payload.payloadType === PayloadType.ContractCall) {\n const sender = params.sender ?? extractSender(transaction, client);\n const contract = `${payload.contractAddress}.${payload.contractName}`;\n\n const [execution, fees] = await Promise.all([\n simulateCall(client, {\n contract,\n functionName: payload.functionName,\n args: payload.functionArgs,\n sender,\n tip,\n }),\n estimateFee(client, { transaction }),\n ]);\n\n return { type: \"contract-call\", execution, fees };\n }\n\n const fees = await estimateFee(client, { transaction });\n\n if (\n payload.payloadType === PayloadType.SmartContract ||\n payload.payloadType === PayloadType.VersionedSmartContract\n ) {\n return { type: \"contract-deploy\", fees };\n }\n\n return { type: \"token-transfer\", fees };\n}\n",
|
|
14
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport { signTransactionWithAccount } from \"../../transactions/signer.ts\";\nimport { signMultiSigWithAccount } from \"../../transactions/multisig.ts\";\nimport { serializeTransactionHex } from \"../../transactions/wire/serialize.ts\";\nimport { deserializeTransaction } from \"../../transactions/wire/deserialize.ts\";\nimport type { StacksTransaction } from \"../../transactions/types.ts\";\nimport { isProviderAccount } from \"./utils.ts\";\n\nexport type SignTransactionParams = {\n transaction: StacksTransaction;\n /** Public keys for multi-sig signing (auto-detected from _multisig metadata if omitted) */\n signers?: string[];\n};\n\n/** Sign a transaction using the client's account */\nexport async function signTransactionAction(\n client: Client,\n params: SignTransactionParams\n): Promise<StacksTransaction> {\n const account = client.account;\n if (!account) throw new Error(\"Account required\");\n\n // Provider: send hex to wallet, get signed hex back\n if (isProviderAccount(account)) {\n const hex = serializeTransactionHex(params.transaction);\n const result = await account.provider.request(\"stx_signTransaction\", {\n transaction: hex,\n });\n return deserializeTransaction(result.transaction);\n }\n\n // Multi-sig: auto-detect from fields or _multisig metadata\n const condition = params.transaction.auth.spendingCondition;\n if (\"fields\" in condition) {\n const publicKeys = params.signers ?? (params.transaction as any)._multisig?.publicKeys;\n if (!publicKeys) throw new Error(\"Multi-sig signing requires signers (publicKeys)\");\n return signMultiSigWithAccount(params.transaction, account, publicKeys);\n }\n\n // Local/Custom: sign with account\n return signTransactionWithAccount(params.transaction, account);\n}\n",
|
|
15
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport type { PostCondition } from \"../../postconditions/types.ts\";\nimport type { IntegerType } from \"../../utils/encoding.ts\";\nimport { buildTokenTransfer } from \"../../transactions/build.ts\";\nimport { signTransactionWithAccount } from \"../../transactions/signer.ts\";\nimport { sendTransaction } from \"./sendTransaction.ts\";\nimport { getNonce } from \"../public/getNonce.ts\";\nimport { estimateFee } from \"../public/estimateFee.ts\";\nimport { isProviderAccount } from \"./utils.ts\";\n\nexport type TransferStxParams = {\n to: string;\n amount: IntegerType;\n memo?: string;\n fee?: IntegerType;\n nonce?: IntegerType;\n postConditionMode?: \"allow\" | \"deny\";\n postConditions?: PostCondition[];\n};\n\n/** Build, sign, and broadcast an STX transfer */\nexport async function transferStx(\n client: Client,\n params: TransferStxParams\n): Promise<string> {\n const account = client.account;\n if (!account) throw new Error(\"Account required\");\n\n // Provider: delegate to wallet\n if (isProviderAccount(account)) {\n const result = await account.provider.request(\"stx_transferStx\", {\n recipient: params.to,\n amount: String(params.amount),\n memo: params.memo,\n });\n return result.txid;\n }\n\n // Local/Custom: build → sign → broadcast\n const nonce =\n params.nonce ?? await getNonce(client, { address: account.address });\n\n const unsigned = buildTokenTransfer({\n recipient: params.to,\n amount: params.amount,\n memo: params.memo,\n fee: params.fee ?? 0n,\n nonce,\n publicKey: account.publicKey,\n chain: client.chain,\n postConditionMode: params.postConditionMode,\n postConditions: params.postConditions,\n });\n\n if (params.fee === undefined) {\n const estimates = await estimateFee(client, { transaction: unsigned });\n const mid = estimates[1] ?? estimates[0];\n if (mid) {\n (unsigned.auth.spendingCondition as any).fee = BigInt(mid.fee);\n }\n }\n\n const signed = await signTransactionWithAccount(unsigned, account);\n const result = await sendTransaction(client, { transaction: signed });\n return result.txid;\n}\n",
|
|
16
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport type { ClarityVersion } from \"../../transactions/types.ts\";\nimport type { PostCondition } from \"../../postconditions/types.ts\";\nimport type { IntegerType } from \"../../utils/encoding.ts\";\nimport { buildContractDeploy } from \"../../transactions/build.ts\";\nimport { signTransactionWithAccount } from \"../../transactions/signer.ts\";\nimport { sendTransaction } from \"./sendTransaction.ts\";\nimport { getNonce } from \"../public/getNonce.ts\";\nimport { estimateFee } from \"../public/estimateFee.ts\";\nimport { isProviderAccount } from \"./utils.ts\";\n\nexport type DeployContractParams = {\n contractName: string;\n codeBody: string;\n clarityVersion?: ClarityVersion;\n fee?: IntegerType;\n nonce?: IntegerType;\n postConditionMode?: \"allow\" | \"deny\";\n postConditions?: PostCondition[];\n};\n\n/** Build, sign, and broadcast a contract deploy */\nexport async function deployContract(\n client: Client,\n params: DeployContractParams\n): Promise<string> {\n const account = client.account;\n if (!account) throw new Error(\"Account required\");\n\n // Provider: delegate to wallet\n if (isProviderAccount(account)) {\n const result = await account.provider.request(\"stx_deployContract\", {\n contractName: params.contractName,\n codeBody: params.codeBody,\n clarityVersion: params.clarityVersion,\n });\n return result.txid;\n }\n\n // Local/Custom: build → sign → broadcast\n const nonce =\n params.nonce ?? await getNonce(client, { address: account.address });\n\n const unsigned = buildContractDeploy({\n contractName: params.contractName,\n codeBody: params.codeBody,\n clarityVersion: params.clarityVersion,\n fee: params.fee ?? 0n,\n nonce,\n publicKey: account.publicKey,\n chain: client.chain,\n postConditionMode: params.postConditionMode,\n postConditions: params.postConditions,\n });\n\n if (params.fee === undefined) {\n const estimates = await estimateFee(client, { transaction: unsigned });\n const mid = estimates[1] ?? estimates[0];\n if (mid) {\n (unsigned.auth.spendingCondition as any).fee = BigInt(mid.fee);\n }\n }\n\n const signed = await signTransactionWithAccount(unsigned, account);\n const result = await sendTransaction(client, { transaction: signed });\n return result.txid;\n}\n",
|
|
17
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport { Cl } from \"../../clarity/values.ts\";\nimport { serializeCVBytes } from \"../../clarity/serialize.ts\";\nimport { concatBytes, bytesToHex } from \"../../utils/encoding.ts\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { isProviderAccount } from \"./utils.ts\";\n\nexport type SignMessageParams = {\n message: string | ClarityValue;\n domain?: {\n name: string;\n version: string;\n chainId: number;\n };\n};\n\nconst SIP018_PREFIX = new Uint8Array([0x53, 0x49, 0x50, 0x30, 0x31, 0x38]); // \"SIP018\"\n\n/** Sign a structured message per SIP-018 */\nexport async function signMessage(\n client: Client,\n params: SignMessageParams\n): Promise<string> {\n const account = client.account;\n if (!account) throw new Error(\"Account required\");\n\n // Provider: delegate to wallet\n if (isProviderAccount(account)) {\n const method = params.domain\n ? \"stx_signStructuredMessage\"\n : \"stx_signMessage\";\n const result = await account.provider.request(method, {\n message: params.message,\n domain: params.domain,\n });\n return result.signature;\n }\n\n // Local/Custom: sign locally\n const cv =\n typeof params.message === \"string\"\n ? Cl.stringAscii(params.message)\n : params.message;\n\n const serializedMsg = serializeCVBytes(cv);\n\n let hash: Uint8Array;\n\n if (params.domain) {\n const domainCV = Cl.tuple({\n name: Cl.stringAscii(params.domain.name),\n version: Cl.stringAscii(params.domain.version),\n \"chain-id\": Cl.uint(params.domain.chainId),\n });\n const serializedDomain = serializeCVBytes(domainCV);\n hash = sha256(concatBytes(SIP018_PREFIX, serializedDomain, serializedMsg));\n } else {\n hash = sha256(serializedMsg);\n }\n\n const sigBytes = await account.sign(hash);\n return bytesToHex(sigBytes);\n}\n",
|
|
18
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport type { IntegerType } from \"../../utils/encoding.ts\";\nimport { intToBigInt } from \"../../utils/encoding.ts\";\nimport {\n AuthType,\n type StacksTransaction,\n type SponsoredAuthorization,\n type SingleSigSpendingCondition,\n} from \"../../transactions/types.ts\";\nimport { createSingleSigSpendingCondition } from \"../../transactions/authorization.ts\";\nimport { signSponsorWithAccount } from \"../../transactions/signer.ts\";\nimport { getNonce } from \"../public/getNonce.ts\";\nimport { estimateFee } from \"../public/estimateFee.ts\";\nimport { isProviderAccount } from \"./utils.ts\";\n\nexport type SponsorTransactionParams = {\n transaction: StacksTransaction;\n fee?: IntegerType;\n nonce?: IntegerType;\n};\n\n/** Sponsor a transaction: set sponsor spending condition, sign as sponsor */\nexport async function sponsorTransaction(\n client: Client,\n params: SponsorTransactionParams\n): Promise<StacksTransaction> {\n const { transaction } = params;\n\n if (transaction.auth.authType !== AuthType.Sponsored) {\n throw new Error(\"Transaction must have sponsored authorization\");\n }\n\n const account = client.account;\n if (!account) throw new Error(\"Account required\");\n if (isProviderAccount(account)) {\n throw new Error(\"Provider accounts cannot sponsor transactions\");\n }\n\n // Resolve sponsor nonce\n const nonce = params.nonce != null\n ? intToBigInt(params.nonce)\n : await getNonce(client, { address: account.address });\n\n // Resolve sponsor fee\n let fee: bigint;\n if (params.fee != null) {\n fee = intToBigInt(params.fee);\n } else {\n const estimates = await estimateFee(client, { transaction });\n const mid = estimates[1] ?? estimates[0];\n fee = mid ? BigInt(mid.fee) : 0n;\n }\n\n // Create sponsor spending condition\n const sponsorCondition = createSingleSigSpendingCondition(\n account.publicKey,\n nonce,\n fee\n );\n\n // Set sponsor spending condition on the tx\n const auth = transaction.auth as SponsoredAuthorization;\n const sponsored: StacksTransaction = {\n ...transaction,\n auth: {\n ...auth,\n sponsorSpendingCondition: sponsorCondition,\n },\n };\n\n // Sign as sponsor\n return signSponsorWithAccount(sponsored, account);\n}\n"
|
|
19
|
+
],
|
|
20
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,eAAsB,UAAU,CAC9B,QACA,QACiB;AAAA,EACjB,MAAM,OAAO,MAAM,OAAO,QAAQ,gBAAgB,OAAO,WAAW;AAAA,IAClE,QAAQ;AAAA,EACV,CAAC;AAAA,EACD,OAAO,OAAO,KAAK,OAAO;AAAA;;;ACA5B,eAAsB,cAAc,CAClC,QACA,QACsB;AAAA,EACtB,MAAM,OAAO,MAAM,OAAO,QACxB,gBAAgB,OAAO,mBACvB,EAAE,QAAQ,MAAM,CAClB;AAAA,EACA,OAAO;AAAA,IACL,SAAS,OAAO,KAAK,OAAO;AAAA,IAC5B,OAAO,OAAO,KAAK,KAAK;AAAA,IACxB,cAAc,KAAK,iBAAiB;AAAA,IACpC,YAAY,KAAK,eAAe;AAAA,EAClC;AAAA;;;ACnBF,eAAsB,QAAQ,CAAC,QAAgB,QAAuC;AAAA,EACpF,IAAI,QAAQ,MAAM;AAAA,IAChB,OAAO,OAAO,QAAQ,uBAAuB,OAAO,QAAQ,EAAE,QAAQ,MAAM,CAAC;AAAA,EAC/E;AAAA,EACA,IAAI,QAAQ,WAAW,WAAW;AAAA,IAChC,OAAO,OAAO,QAAQ,uBAAuB,OAAO,UAAU,EAAE,QAAQ,MAAM,CAAC;AAAA,EACjF;AAAA,EAEA,OAAO,OAAO,QAAQ,+BAA+B,EAAE,QAAQ,MAAM,CAAC;AAAA;;;ACbxE,eAAsB,cAAc,CAAC,QAAiC;AAAA,EACpE,MAAM,OAAO,MAAM,OAAO,QAAQ,YAAY,EAAE,QAAQ,MAAM,CAAC;AAAA,EAC/D,OAAO,KAAK;AAAA;;;ACGd,eAAsB,cAAc,CAClC,QACA,QACc;AAAA,EACd,OAAO,SAAS,QAAQ,gBAAgB,OAAO,QAAQ;AAAA,EACvD,OAAO,OAAO,QAAQ,2BAA2B,WAAW,QAAQ;AAAA,IAClE,QAAQ;AAAA,EACV,CAAC;AAAA;;;ACSH,eAAsB,SAA+C,CACnE,QACA,QACyC;AAAA,EACzC,QAAQ,OAAO,eAAe,SAAS;AAAA,EAEvC,IAAI,cAAc;AAAA,IAChB,MAAM,UAAU,MAAM,QAAQ,WAC5B,MAAM,IAAI,CAAC,SAAS,aAAa,QAAQ,IAAI,CAAC,CAChD;AAAA,IACA,OAAO,QAAQ,IAAI,CAAC,MAClB,EAAE,WAAW,cACT,EAAE,QAAQ,WAAoB,QAAQ,EAAE,MAAM,IAC9C,EAAE,QAAQ,WAAoB,OAAO,EAAE,kBAAkB,QAAQ,EAAE,SAAS,IAAI,MAAM,OAAO,EAAE,MAAM,CAAC,EAAE,CAC9G;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,MAAM,QAAQ,IAC5B,MAAM,IAAI,CAAC,SAAS,aAAa,QAAQ,IAAI,CAAC,CAChD;AAAA,EACA,OAAO;AAAA;;;ACzCF,MAAM,wBAAwB,UAAU;AAAA,EACpC,OAAO;AAAA,EAChB;AAAA,EAEA,WAAW,CACT,SACA,SACA;AAAA,IACA,MAAM,SAAS,EAAE,SAAS,QAAQ,QAAQ,CAAC;AAAA,IAC3C,KAAK,iBAAiB,QAAQ;AAAA;AAElC;;;ACOA,eAAsB,YAAY,CAChC,QACA,QAC6B;AAAA,EAC7B,OAAO,SAAS,QAAQ,gBAAgB,OAAO,QAAQ;AAAA,EACvD,MAAM,SAAS,OAAO,UAAU;AAAA,EAEhC,MAAM,kBAAkB,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,QAC9C,OAAO,WAAW,iBAAiB,GAAG,CAAC,CAAC,CAC1C;AAAA,EAEA,IAAI,OAAO,2BAA2B,WAAW,QAAQ,OAAO;AAAA,EAChE,IAAI,OAAO,KAAK;AAAA,IACd,QAAQ,QAAQ,OAAO;AAAA,EACzB;AAAA,EAEA,MAAM,OAAO,MAAM,OAAO,QAAQ,MAAM;AAAA,IACtC,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AAAA,EAED,IAAI,KAAK,MAAM;AAAA,IACb,OAAO,EAAE,SAAS,MAAM,QAAQ,mBAAmB,KAAK,MAAM,EAAE;AAAA,EAClE;AAAA,EAEA,MAAM,QAAgB,KAAK,SAAS;AAAA,EACpC,MAAM,iBACJ,MAAM,SAAS,aAAa,KAAK,MAAM,SAAS,qBAAqB;AAAA,EAEvE,OAAO;AAAA,IACL,SAAS;AAAA,IACT,OAAO,IAAI,gBACT,iBACI,mDACA,qBACJ,EAAE,gBAAgB,SAAS,MAAM,CACnC;AAAA,EACF;AAAA;;;AC1BF,SAAS,UAAU,CAAC,UAA2B;AAAA,EAC7C,OACE,aAAa,gBAAgB,QAC7B,aAAa,gBAAgB,SAC7B,aAAa,gBAAgB,sBAC7B,aAAa,gBAAgB;AAAA;AAIjC,SAAS,aAAa,CAAC,IAAuB,QAAwB;AAAA,EACpE,QAAQ,UAAU,WAAW,GAAG,KAAK;AAAA,EACrC,MAAM,QAAQ,OAAO;AAAA,EACrB,MAAM,UAAU,WAAW,QAAQ,IAC/B,OAAO,eAAe,YAAY,KAClC,OAAO,eAAe,aAAa;AAAA,EACvC,OAAO,WAAW,SAAS,MAAM;AAAA;AAGnC,eAAsB,mBAAmB,CACvC,QACA,QACoC;AAAA,EACpC,QAAQ,aAAa,QAAQ;AAAA,EAC7B,QAAQ,YAAY;AAAA,EAEpB,IAAI,QAAQ,gBAAgB,YAAY,cAAc;AAAA,IACpD,MAAM,SAAS,OAAO,UAAU,cAAc,aAAa,MAAM;AAAA,IACjE,MAAM,WAAW,GAAG,QAAQ,mBAAmB,QAAQ;AAAA,IAEvD,OAAO,WAAW,SAAQ,MAAM,QAAQ,IAAI;AAAA,MAC1C,aAAa,QAAQ;AAAA,QACnB;AAAA,QACA,cAAc,QAAQ;AAAA,QACtB,MAAM,QAAQ;AAAA,QACd;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD,YAAY,QAAQ,EAAE,YAAY,CAAC;AAAA,IACrC,CAAC;AAAA,IAED,OAAO,EAAE,MAAM,iBAAiB,WAAW,YAAK;AAAA,EAClD;AAAA,EAEA,MAAM,OAAO,MAAM,YAAY,QAAQ,EAAE,YAAY,CAAC;AAAA,EAEtD,IACE,QAAQ,gBAAgB,YAAY,iBACpC,QAAQ,gBAAgB,YAAY,wBACpC;AAAA,IACA,OAAO,EAAE,MAAM,mBAAmB,KAAK;AAAA,EACzC;AAAA,EAEA,OAAO,EAAE,MAAM,kBAAkB,KAAK;AAAA;;;ACvExC,eAAsB,qBAAqB,CACzC,QACA,QAC4B;AAAA,EAC5B,MAAM,UAAU,OAAO;AAAA,EACvB,IAAI,CAAC;AAAA,IAAS,MAAM,IAAI,MAAM,kBAAkB;AAAA,EAGhD,IAAI,kBAAkB,OAAO,GAAG;AAAA,IAC9B,MAAM,MAAM,wBAAwB,OAAO,WAAW;AAAA,IACtD,MAAM,SAAS,MAAM,QAAQ,SAAS,QAAQ,uBAAuB;AAAA,MACnE,aAAa;AAAA,IACf,CAAC;AAAA,IACD,OAAO,uBAAuB,OAAO,WAAW;AAAA,EAClD;AAAA,EAGA,MAAM,YAAY,OAAO,YAAY,KAAK;AAAA,EAC1C,IAAI,YAAY,WAAW;AAAA,IACzB,MAAM,aAAa,OAAO,WAAY,OAAO,YAAoB,WAAW;AAAA,IAC5E,IAAI,CAAC;AAAA,MAAY,MAAM,IAAI,MAAM,iDAAiD;AAAA,IAClF,OAAO,wBAAwB,OAAO,aAAa,SAAS,UAAU;AAAA,EACxE;AAAA,EAGA,OAAO,2BAA2B,OAAO,aAAa,OAAO;AAAA;;;ACnB/D,eAAsB,WAAW,CAC/B,QACA,QACiB;AAAA,EACjB,MAAM,UAAU,OAAO;AAAA,EACvB,IAAI,CAAC;AAAA,IAAS,MAAM,IAAI,MAAM,kBAAkB;AAAA,EAGhD,IAAI,kBAAkB,OAAO,GAAG;AAAA,IAC9B,MAAM,UAAS,MAAM,QAAQ,SAAS,QAAQ,mBAAmB;AAAA,MAC/D,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO,OAAO,MAAM;AAAA,MAC5B,MAAM,OAAO;AAAA,IACf,CAAC;AAAA,IACD,OAAO,QAAO;AAAA,EAChB;AAAA,EAGA,MAAM,QACJ,OAAO,SAAS,MAAM,SAAS,QAAQ,EAAE,SAAS,QAAQ,QAAQ,CAAC;AAAA,EAErE,MAAM,WAAW,mBAAmB;AAAA,IAClC,WAAW,OAAO;AAAA,IAClB,QAAQ,OAAO;AAAA,IACf,MAAM,OAAO;AAAA,IACb,KAAK,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,WAAW,QAAQ;AAAA,IACnB,OAAO,OAAO;AAAA,IACd,mBAAmB,OAAO;AAAA,IAC1B,gBAAgB,OAAO;AAAA,EACzB,CAAC;AAAA,EAED,IAAI,OAAO,QAAQ,WAAW;AAAA,IAC5B,MAAM,YAAY,MAAM,YAAY,QAAQ,EAAE,aAAa,SAAS,CAAC;AAAA,IACrE,MAAM,MAAM,UAAU,MAAM,UAAU;AAAA,IACtC,IAAI,KAAK;AAAA,MACN,SAAS,KAAK,kBAA0B,MAAM,OAAO,IAAI,GAAG;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAM,2BAA2B,UAAU,OAAO;AAAA,EACjE,MAAM,SAAS,MAAM,gBAAgB,QAAQ,EAAE,aAAa,OAAO,CAAC;AAAA,EACpE,OAAO,OAAO;AAAA;;;AC1ChB,eAAsB,cAAc,CAClC,QACA,QACiB;AAAA,EACjB,MAAM,UAAU,OAAO;AAAA,EACvB,IAAI,CAAC;AAAA,IAAS,MAAM,IAAI,MAAM,kBAAkB;AAAA,EAGhD,IAAI,kBAAkB,OAAO,GAAG;AAAA,IAC9B,MAAM,UAAS,MAAM,QAAQ,SAAS,QAAQ,sBAAsB;AAAA,MAClE,cAAc,OAAO;AAAA,MACrB,UAAU,OAAO;AAAA,MACjB,gBAAgB,OAAO;AAAA,IACzB,CAAC;AAAA,IACD,OAAO,QAAO;AAAA,EAChB;AAAA,EAGA,MAAM,QACJ,OAAO,SAAS,MAAM,SAAS,QAAQ,EAAE,SAAS,QAAQ,QAAQ,CAAC;AAAA,EAErE,MAAM,WAAW,oBAAoB;AAAA,IACnC,cAAc,OAAO;AAAA,IACrB,UAAU,OAAO;AAAA,IACjB,gBAAgB,OAAO;AAAA,IACvB,KAAK,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,WAAW,QAAQ;AAAA,IACnB,OAAO,OAAO;AAAA,IACd,mBAAmB,OAAO;AAAA,IAC1B,gBAAgB,OAAO;AAAA,EACzB,CAAC;AAAA,EAED,IAAI,OAAO,QAAQ,WAAW;AAAA,IAC5B,MAAM,YAAY,MAAM,YAAY,QAAQ,EAAE,aAAa,SAAS,CAAC;AAAA,IACrE,MAAM,MAAM,UAAU,MAAM,UAAU;AAAA,IACtC,IAAI,KAAK;AAAA,MACN,SAAS,KAAK,kBAA0B,MAAM,OAAO,IAAI,GAAG;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAM,2BAA2B,UAAU,OAAO;AAAA,EACjE,MAAM,SAAS,MAAM,gBAAgB,QAAQ,EAAE,aAAa,OAAO,CAAC;AAAA,EACpE,OAAO,OAAO;AAAA;;;AC5DhB;AAYA,IAAM,gBAAgB,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,EAAI,CAAC;AAGzE,eAAsB,WAAW,CAC/B,QACA,QACiB;AAAA,EACjB,MAAM,UAAU,OAAO;AAAA,EACvB,IAAI,CAAC;AAAA,IAAS,MAAM,IAAI,MAAM,kBAAkB;AAAA,EAGhD,IAAI,kBAAkB,OAAO,GAAG;AAAA,IAC9B,MAAM,SAAS,OAAO,SAClB,8BACA;AAAA,IACJ,MAAM,SAAS,MAAM,QAAQ,SAAS,QAAQ,QAAQ;AAAA,MACpD,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,IACjB,CAAC;AAAA,IACD,OAAO,OAAO;AAAA,EAChB;AAAA,EAGA,MAAM,KACJ,OAAO,OAAO,YAAY,WACtB,GAAG,YAAY,OAAO,OAAO,IAC7B,OAAO;AAAA,EAEb,MAAM,gBAAgB,iBAAiB,EAAE;AAAA,EAEzC,IAAI;AAAA,EAEJ,IAAI,OAAO,QAAQ;AAAA,IACjB,MAAM,WAAW,GAAG,MAAM;AAAA,MACxB,MAAM,GAAG,YAAY,OAAO,OAAO,IAAI;AAAA,MACvC,SAAS,GAAG,YAAY,OAAO,OAAO,OAAO;AAAA,MAC7C,YAAY,GAAG,KAAK,OAAO,OAAO,OAAO;AAAA,IAC3C,CAAC;AAAA,IACD,MAAM,mBAAmB,iBAAiB,QAAQ;AAAA,IAClD,OAAO,OAAO,YAAY,eAAe,kBAAkB,aAAa,CAAC;AAAA,EAC3E,EAAO;AAAA,IACL,OAAO,OAAO,aAAa;AAAA;AAAA,EAG7B,MAAM,WAAW,MAAM,QAAQ,KAAK,IAAI;AAAA,EACxC,OAAO,WAAW,QAAQ;AAAA;;;ACxC5B,eAAsB,kBAAkB,CACtC,QACA,QAC4B;AAAA,EAC5B,QAAQ,gBAAgB;AAAA,EAExB,IAAI,YAAY,KAAK,aAAa,SAAS,WAAW;AAAA,IACpD,MAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAAA,EAEA,MAAM,UAAU,OAAO;AAAA,EACvB,IAAI,CAAC;AAAA,IAAS,MAAM,IAAI,MAAM,kBAAkB;AAAA,EAChD,IAAI,kBAAkB,OAAO,GAAG;AAAA,IAC9B,MAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAAA,EAGA,MAAM,QAAQ,OAAO,SAAS,OAC1B,YAAY,OAAO,KAAK,IACxB,MAAM,SAAS,QAAQ,EAAE,SAAS,QAAQ,QAAQ,CAAC;AAAA,EAGvD,IAAI;AAAA,EACJ,IAAI,OAAO,OAAO,MAAM;AAAA,IACtB,MAAM,YAAY,OAAO,GAAG;AAAA,EAC9B,EAAO;AAAA,IACL,MAAM,YAAY,MAAM,YAAY,QAAQ,EAAE,YAAY,CAAC;AAAA,IAC3D,MAAM,MAAM,UAAU,MAAM,UAAU;AAAA,IACtC,MAAM,MAAM,OAAO,IAAI,GAAG,IAAI;AAAA;AAAA,EAIhC,MAAM,mBAAmB,iCACvB,QAAQ,WACR,OACA,GACF;AAAA,EAGA,MAAM,OAAO,YAAY;AAAA,EACzB,MAAM,YAA+B;AAAA,OAChC;AAAA,IACH,MAAM;AAAA,SACD;AAAA,MACH,0BAA0B;AAAA,IAC5B;AAAA,EACF;AAAA,EAGA,OAAO,uBAAuB,WAAW,OAAO;AAAA;",
|
|
21
|
+
"debugId": "A1189E78FB52287464756E2164756E21",
|
|
22
|
+
"names": []
|
|
23
|
+
}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
// src/utils/encoding.ts
|
|
2
|
+
var hexes = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
|
|
3
|
+
function bytesToHex(bytes) {
|
|
4
|
+
let hex = "";
|
|
5
|
+
for (const b of bytes) {
|
|
6
|
+
hex += hexes[b];
|
|
7
|
+
}
|
|
8
|
+
return hex;
|
|
9
|
+
}
|
|
10
|
+
function hexToBytes(hex) {
|
|
11
|
+
hex = without0x(hex);
|
|
12
|
+
if (hex.length % 2)
|
|
13
|
+
hex = `0${hex}`;
|
|
14
|
+
const array = new Uint8Array(hex.length / 2);
|
|
15
|
+
for (let i = 0;i < array.length; i++) {
|
|
16
|
+
const j = i * 2;
|
|
17
|
+
const byte = Number.parseInt(hex.slice(j, j + 2), 16);
|
|
18
|
+
if (Number.isNaN(byte) || byte < 0)
|
|
19
|
+
throw new Error("Invalid byte sequence");
|
|
20
|
+
array[i] = byte;
|
|
21
|
+
}
|
|
22
|
+
return array;
|
|
23
|
+
}
|
|
24
|
+
function with0x(value) {
|
|
25
|
+
return /^0x/i.test(value) ? value : `0x${value}`;
|
|
26
|
+
}
|
|
27
|
+
function without0x(value) {
|
|
28
|
+
return /^0x/i.test(value) ? value.slice(2) : value;
|
|
29
|
+
}
|
|
30
|
+
function utf8ToBytes(str) {
|
|
31
|
+
return new TextEncoder().encode(str);
|
|
32
|
+
}
|
|
33
|
+
function bytesToUtf8(bytes) {
|
|
34
|
+
return new TextDecoder().decode(bytes);
|
|
35
|
+
}
|
|
36
|
+
function asciiToBytes(str) {
|
|
37
|
+
const bytes = new Uint8Array(str.length);
|
|
38
|
+
for (let i = 0;i < str.length; i++) {
|
|
39
|
+
bytes[i] = str.charCodeAt(i) & 255;
|
|
40
|
+
}
|
|
41
|
+
return bytes;
|
|
42
|
+
}
|
|
43
|
+
function bytesToAscii(bytes) {
|
|
44
|
+
return String.fromCharCode(...bytes);
|
|
45
|
+
}
|
|
46
|
+
function concatBytes(...arrays) {
|
|
47
|
+
if (arrays.length === 1)
|
|
48
|
+
return arrays[0];
|
|
49
|
+
const length = arrays.reduce((a, arr) => a + arr.length, 0);
|
|
50
|
+
const result = new Uint8Array(length);
|
|
51
|
+
let pad = 0;
|
|
52
|
+
for (const arr of arrays) {
|
|
53
|
+
result.set(arr, pad);
|
|
54
|
+
pad += arr.length;
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
function intToBigInt(value) {
|
|
59
|
+
if (typeof value === "bigint")
|
|
60
|
+
return value;
|
|
61
|
+
if (typeof value === "string")
|
|
62
|
+
return BigInt(value);
|
|
63
|
+
if (typeof value === "number") {
|
|
64
|
+
if (!Number.isInteger(value))
|
|
65
|
+
throw new RangeError("Values of type 'number' must be an integer.");
|
|
66
|
+
if (value > Number.MAX_SAFE_INTEGER)
|
|
67
|
+
throw new RangeError(`Values of type 'number' must be <= ${Number.MAX_SAFE_INTEGER}. Use BigInt instead.`);
|
|
68
|
+
return BigInt(value);
|
|
69
|
+
}
|
|
70
|
+
if (value instanceof Uint8Array)
|
|
71
|
+
return BigInt(`0x${bytesToHex(value)}`);
|
|
72
|
+
throw new TypeError("Must be a number, bigint, string, or Uint8Array.");
|
|
73
|
+
}
|
|
74
|
+
function intToBytes(value, byteLength) {
|
|
75
|
+
return bigIntToBytes(intToBigInt(value), byteLength);
|
|
76
|
+
}
|
|
77
|
+
function bigIntToBytes(value, length = 16) {
|
|
78
|
+
const hex = value.toString(16).padStart(length * 2, "0");
|
|
79
|
+
return hexToBytes(hex);
|
|
80
|
+
}
|
|
81
|
+
function intToHex(integer, byteLength = 8) {
|
|
82
|
+
const value = typeof integer === "bigint" ? integer : intToBigInt(integer);
|
|
83
|
+
return value.toString(16).padStart(byteLength * 2, "0");
|
|
84
|
+
}
|
|
85
|
+
function toTwos(value, width) {
|
|
86
|
+
const limit = BigInt(1) << width - BigInt(1);
|
|
87
|
+
if (value < -limit || value > limit - BigInt(1)) {
|
|
88
|
+
throw new Error(`Unable to represent integer in width: ${width}`);
|
|
89
|
+
}
|
|
90
|
+
if (value >= BigInt(0))
|
|
91
|
+
return value;
|
|
92
|
+
return value + (BigInt(1) << width);
|
|
93
|
+
}
|
|
94
|
+
function fromTwos(value, width) {
|
|
95
|
+
if (value & BigInt(1) << width - BigInt(1)) {
|
|
96
|
+
return value - (BigInt(1) << width);
|
|
97
|
+
}
|
|
98
|
+
return value;
|
|
99
|
+
}
|
|
100
|
+
function bytesToTwosBigInt(bytes) {
|
|
101
|
+
return fromTwos(BigInt(`0x${bytesToHex(bytes)}`), BigInt(bytes.byteLength * 8));
|
|
102
|
+
}
|
|
103
|
+
function writeUInt32BE(value) {
|
|
104
|
+
const buf = new Uint8Array(4);
|
|
105
|
+
buf[0] = value >>> 24 & 255;
|
|
106
|
+
buf[1] = value >>> 16 & 255;
|
|
107
|
+
buf[2] = value >>> 8 & 255;
|
|
108
|
+
buf[3] = value & 255;
|
|
109
|
+
return buf;
|
|
110
|
+
}
|
|
111
|
+
function readUInt32BE(bytes, offset = 0) {
|
|
112
|
+
return (bytes[offset] << 24 | bytes[offset + 1] << 16 | bytes[offset + 2] << 8 | bytes[offset + 3]) >>> 0;
|
|
113
|
+
}
|
|
114
|
+
function writeUInt16BE(value) {
|
|
115
|
+
const buf = new Uint8Array(2);
|
|
116
|
+
buf[0] = value >>> 8 & 255;
|
|
117
|
+
buf[1] = value & 255;
|
|
118
|
+
return buf;
|
|
119
|
+
}
|
|
120
|
+
function readUInt16BE(bytes, offset = 0) {
|
|
121
|
+
return (bytes[offset] << 8 | bytes[offset + 1]) >>> 0;
|
|
122
|
+
}
|
|
123
|
+
function writeUInt8(value) {
|
|
124
|
+
return new Uint8Array([value & 255]);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// src/utils/c32.ts
|
|
128
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
129
|
+
var C32 = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
130
|
+
var HEX = "0123456789abcdef";
|
|
131
|
+
function c32normalize(input) {
|
|
132
|
+
return input.toUpperCase().replace(/O/g, "0").replace(/L|I/g, "1");
|
|
133
|
+
}
|
|
134
|
+
function c32encode(inputHex) {
|
|
135
|
+
if (inputHex.length % 2 !== 0)
|
|
136
|
+
inputHex = `0${inputHex}`;
|
|
137
|
+
inputHex = inputHex.toLowerCase();
|
|
138
|
+
const res = [];
|
|
139
|
+
let carry = 0;
|
|
140
|
+
for (let i = inputHex.length - 1;i >= 0; i--) {
|
|
141
|
+
if (carry < 4) {
|
|
142
|
+
const currentCode = HEX.indexOf(inputHex[i]) >> carry;
|
|
143
|
+
const nextCode = i !== 0 ? HEX.indexOf(inputHex[i - 1]) : 0;
|
|
144
|
+
const nextBits = 1 + carry;
|
|
145
|
+
const nextLowBits = nextCode % (1 << nextBits) << 5 - nextBits;
|
|
146
|
+
res.unshift(C32[currentCode + nextLowBits]);
|
|
147
|
+
carry = nextBits;
|
|
148
|
+
} else {
|
|
149
|
+
carry = 0;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
let leadingZeros = 0;
|
|
153
|
+
while (leadingZeros < res.length && res[leadingZeros] === "0")
|
|
154
|
+
leadingZeros++;
|
|
155
|
+
const stripped = res.slice(leadingZeros);
|
|
156
|
+
const bytes = hexToBytes(inputHex);
|
|
157
|
+
let zeroBytesCount = 0;
|
|
158
|
+
while (zeroBytesCount < bytes.length && bytes[zeroBytesCount] === 0)
|
|
159
|
+
zeroBytesCount++;
|
|
160
|
+
const prefix = Array(zeroBytesCount).fill(C32[0]);
|
|
161
|
+
return [...prefix, ...stripped].join("");
|
|
162
|
+
}
|
|
163
|
+
function c32decode(c32input) {
|
|
164
|
+
c32input = c32normalize(c32input);
|
|
165
|
+
if (!c32input.match(`^[${C32}]*$`))
|
|
166
|
+
throw new Error("Not a c32-encoded string");
|
|
167
|
+
const zeroPrefix = c32input.match(`^${C32[0]}*`);
|
|
168
|
+
const numLeadingZeroBytes = zeroPrefix ? zeroPrefix[0].length : 0;
|
|
169
|
+
const res = [];
|
|
170
|
+
let carry = 0;
|
|
171
|
+
let carryBits = 0;
|
|
172
|
+
for (let i = c32input.length - 1;i >= 0; i--) {
|
|
173
|
+
if (carryBits === 4) {
|
|
174
|
+
res.unshift(HEX[carry]);
|
|
175
|
+
carryBits = 0;
|
|
176
|
+
carry = 0;
|
|
177
|
+
}
|
|
178
|
+
const currentValue = (C32.indexOf(c32input[i]) << carryBits) + carry;
|
|
179
|
+
res.unshift(HEX[currentValue % 16]);
|
|
180
|
+
carryBits += 1;
|
|
181
|
+
carry = currentValue >> 4;
|
|
182
|
+
if (carry > 1 << carryBits)
|
|
183
|
+
throw new Error("Panic error in c32 decoding");
|
|
184
|
+
}
|
|
185
|
+
res.unshift(HEX[carry]);
|
|
186
|
+
if (res.length % 2 === 1)
|
|
187
|
+
res.unshift("0");
|
|
188
|
+
let hexLeadingZeros = 0;
|
|
189
|
+
while (hexLeadingZeros < res.length && res[hexLeadingZeros] === "0")
|
|
190
|
+
hexLeadingZeros++;
|
|
191
|
+
let hexStr = res.slice(hexLeadingZeros - hexLeadingZeros % 2).join("");
|
|
192
|
+
for (let i = 0;i < numLeadingZeroBytes; i++)
|
|
193
|
+
hexStr = `00${hexStr}`;
|
|
194
|
+
return hexStr;
|
|
195
|
+
}
|
|
196
|
+
function c32checksum(dataHex) {
|
|
197
|
+
return bytesToHex(sha256(sha256(hexToBytes(dataHex))).slice(0, 4));
|
|
198
|
+
}
|
|
199
|
+
function c32checkEncode(version, data) {
|
|
200
|
+
if (version < 0 || version >= 32)
|
|
201
|
+
throw new Error("Invalid version (must be between 0 and 31)");
|
|
202
|
+
if (!data.match(/^[0-9a-fA-F]*$/))
|
|
203
|
+
throw new Error("Invalid data (not a hex string)");
|
|
204
|
+
data = data.toLowerCase();
|
|
205
|
+
if (data.length % 2 !== 0)
|
|
206
|
+
data = `0${data}`;
|
|
207
|
+
let versionHex = version.toString(16);
|
|
208
|
+
if (versionHex.length === 1)
|
|
209
|
+
versionHex = `0${versionHex}`;
|
|
210
|
+
const checksumHex = c32checksum(`${versionHex}${data}`);
|
|
211
|
+
return `${C32[version]}${c32encode(`${data}${checksumHex}`)}`;
|
|
212
|
+
}
|
|
213
|
+
function c32checkDecode(c32data) {
|
|
214
|
+
c32data = c32normalize(c32data);
|
|
215
|
+
const dataHex = c32decode(c32data.slice(1));
|
|
216
|
+
const version = C32.indexOf(c32data[0]);
|
|
217
|
+
const checksum = dataHex.slice(-8);
|
|
218
|
+
let versionHex = version.toString(16);
|
|
219
|
+
if (versionHex.length === 1)
|
|
220
|
+
versionHex = `0${versionHex}`;
|
|
221
|
+
if (c32checksum(`${versionHex}${dataHex.substring(0, dataHex.length - 8)}`) !== checksum) {
|
|
222
|
+
throw new Error("Invalid c32check string: checksum mismatch");
|
|
223
|
+
}
|
|
224
|
+
return [version, dataHex.substring(0, dataHex.length - 8)];
|
|
225
|
+
}
|
|
226
|
+
function c32address(version, hash160hex) {
|
|
227
|
+
if (!hash160hex.match(/^[0-9a-fA-F]{40}$/)) {
|
|
228
|
+
throw new Error("Invalid argument: not a hash160 hex string");
|
|
229
|
+
}
|
|
230
|
+
return `S${c32checkEncode(version, hash160hex)}`;
|
|
231
|
+
}
|
|
232
|
+
function c32addressDecode(c32addr) {
|
|
233
|
+
if (c32addr.length <= 5)
|
|
234
|
+
throw new Error("Invalid c32 address: invalid length");
|
|
235
|
+
if (c32addr[0] !== "S")
|
|
236
|
+
throw new Error('Invalid c32 address: must start with "S"');
|
|
237
|
+
return c32checkDecode(c32addr.slice(1));
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export { bytesToHex, hexToBytes, with0x, without0x, utf8ToBytes, bytesToUtf8, asciiToBytes, bytesToAscii, concatBytes, intToBigInt, intToBytes, bigIntToBytes, intToHex, toTwos, fromTwos, bytesToTwosBigInt, writeUInt32BE, readUInt32BE, writeUInt16BE, readUInt16BE, writeUInt8, c32address, c32addressDecode };
|
|
241
|
+
|
|
242
|
+
//# debugId=AA001B4C9FEE084964756E2164756E21
|
|
243
|
+
//# sourceMappingURL=stacks-nqytwfcc.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/encoding.ts", "../src/utils/c32.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"const hexes = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\nexport function bytesToHex(bytes: Uint8Array): string {\n let hex = \"\";\n for (const b of bytes) {\n hex += hexes[b];\n }\n return hex;\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n hex = without0x(hex);\n if (hex.length % 2) hex = `0${hex}`;\n\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const byte = Number.parseInt(hex.slice(j, j + 2), 16);\n if (Number.isNaN(byte) || byte < 0) throw new Error(\"Invalid byte sequence\");\n array[i] = byte;\n }\n return array;\n}\n\nexport function with0x(value: string): string {\n return /^0x/i.test(value) ? value : `0x${value}`;\n}\n\nexport function without0x(value: string): string {\n return /^0x/i.test(value) ? value.slice(2) : value;\n}\n\nexport function utf8ToBytes(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\nexport function bytesToUtf8(bytes: Uint8Array): string {\n return new TextDecoder().decode(bytes);\n}\n\nexport function asciiToBytes(str: string): Uint8Array {\n const bytes = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i) & 0xff;\n }\n return bytes;\n}\n\nexport function bytesToAscii(bytes: Uint8Array): string {\n return String.fromCharCode(...bytes);\n}\n\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n if (arrays.length === 1) return arrays[0]!;\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n let pad = 0;\n for (const arr of arrays) {\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\n\nexport type IntegerType = number | string | bigint | Uint8Array;\n\nexport function intToBigInt(value: IntegerType): bigint {\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"string\") return BigInt(value);\n if (typeof value === \"number\") {\n if (!Number.isInteger(value))\n throw new RangeError(\"Values of type 'number' must be an integer.\");\n if (value > Number.MAX_SAFE_INTEGER)\n throw new RangeError(\n `Values of type 'number' must be <= ${Number.MAX_SAFE_INTEGER}. Use BigInt instead.`\n );\n return BigInt(value);\n }\n if (value instanceof Uint8Array) return BigInt(`0x${bytesToHex(value)}`);\n throw new TypeError(\"Must be a number, bigint, string, or Uint8Array.\");\n}\n\nexport function intToBytes(value: IntegerType, byteLength: number): Uint8Array {\n return bigIntToBytes(intToBigInt(value), byteLength);\n}\n\nexport function bigIntToBytes(value: bigint, length: number = 16): Uint8Array {\n const hex = value.toString(16).padStart(length * 2, \"0\");\n return hexToBytes(hex);\n}\n\nexport function intToHex(integer: IntegerType, byteLength = 8): string {\n const value = typeof integer === \"bigint\" ? integer : intToBigInt(integer);\n return value.toString(16).padStart(byteLength * 2, \"0\");\n}\n\nexport function toTwos(value: bigint, width: bigint): bigint {\n const limit = BigInt(1) << (width - BigInt(1));\n if (value < -limit || value > limit - BigInt(1)) {\n throw new Error(`Unable to represent integer in width: ${width}`);\n }\n if (value >= BigInt(0)) return value;\n return value + (BigInt(1) << width);\n}\n\nexport function fromTwos(value: bigint, width: bigint): bigint {\n if (value & (BigInt(1) << (width - BigInt(1)))) {\n return value - (BigInt(1) << width);\n }\n return value;\n}\n\nexport function bytesToTwosBigInt(bytes: Uint8Array): bigint {\n return fromTwos(BigInt(`0x${bytesToHex(bytes)}`), BigInt(bytes.byteLength * 8));\n}\n\nexport function writeUInt32BE(value: number): Uint8Array {\n const buf = new Uint8Array(4);\n buf[0] = (value >>> 24) & 0xff;\n buf[1] = (value >>> 16) & 0xff;\n buf[2] = (value >>> 8) & 0xff;\n buf[3] = value & 0xff;\n return buf;\n}\n\nexport function readUInt32BE(bytes: Uint8Array, offset = 0): number {\n return (\n ((bytes[offset]! << 24) |\n (bytes[offset + 1]! << 16) |\n (bytes[offset + 2]! << 8) |\n bytes[offset + 3]!) >>>\n 0\n );\n}\n\nexport function writeUInt16BE(value: number): Uint8Array {\n const buf = new Uint8Array(2);\n buf[0] = (value >>> 8) & 0xff;\n buf[1] = value & 0xff;\n return buf;\n}\n\nexport function readUInt16BE(bytes: Uint8Array, offset = 0): number {\n return ((bytes[offset]! << 8) | bytes[offset + 1]!) >>> 0;\n}\n\nexport function writeUInt8(value: number): Uint8Array {\n return new Uint8Array([value & 0xff]);\n}\n",
|
|
6
|
+
"import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, hexToBytes } from \"./encoding.ts\";\n\nconst C32 = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nconst HEX = \"0123456789abcdef\";\n\nfunction c32normalize(input: string): string {\n return input.toUpperCase().replace(/O/g, \"0\").replace(/L|I/g, \"1\");\n}\n\nfunction c32encode(inputHex: string): string {\n if (inputHex.length % 2 !== 0) inputHex = `0${inputHex}`;\n inputHex = inputHex.toLowerCase();\n\n const res: string[] = [];\n let carry = 0;\n for (let i = inputHex.length - 1; i >= 0; i--) {\n if (carry < 4) {\n const currentCode = HEX.indexOf(inputHex[i]!) >> carry;\n const nextCode = i !== 0 ? HEX.indexOf(inputHex[i - 1]!) : 0;\n const nextBits = 1 + carry;\n const nextLowBits = (nextCode % (1 << nextBits)) << (5 - nextBits);\n res.unshift(C32[currentCode + nextLowBits]!);\n carry = nextBits;\n } else {\n carry = 0;\n }\n }\n\n // Strip leading c32 zeros\n let leadingZeros = 0;\n while (leadingZeros < res.length && res[leadingZeros] === \"0\") leadingZeros++;\n const stripped = res.slice(leadingZeros);\n\n // Preserve leading zero bytes from hex\n const bytes = hexToBytes(inputHex);\n let zeroBytesCount = 0;\n while (zeroBytesCount < bytes.length && bytes[zeroBytesCount] === 0) zeroBytesCount++;\n const prefix = Array(zeroBytesCount).fill(C32[0]) as string[];\n\n return [...prefix, ...stripped].join(\"\");\n}\n\nfunction c32decode(c32input: string): string {\n c32input = c32normalize(c32input);\n if (!c32input.match(`^[${C32}]*$`)) throw new Error(\"Not a c32-encoded string\");\n\n const zeroPrefix = c32input.match(`^${C32[0]}*`);\n const numLeadingZeroBytes = zeroPrefix ? zeroPrefix[0]!.length : 0;\n\n const res: string[] = [];\n let carry = 0;\n let carryBits = 0;\n for (let i = c32input.length - 1; i >= 0; i--) {\n if (carryBits === 4) {\n res.unshift(HEX[carry]!);\n carryBits = 0;\n carry = 0;\n }\n const currentValue = (C32.indexOf(c32input[i]!) << carryBits) + carry;\n res.unshift(HEX[currentValue % 16]!);\n carryBits += 1;\n carry = currentValue >> 4;\n if (carry > 1 << carryBits) throw new Error(\"Panic error in c32 decoding\");\n }\n res.unshift(HEX[carry]!);\n\n if (res.length % 2 === 1) res.unshift(\"0\");\n\n // Strip leading hex zeros\n let hexLeadingZeros = 0;\n while (hexLeadingZeros < res.length && res[hexLeadingZeros] === \"0\") hexLeadingZeros++;\n let hexStr = res.slice(hexLeadingZeros - (hexLeadingZeros % 2)).join(\"\");\n\n for (let i = 0; i < numLeadingZeroBytes; i++) hexStr = `00${hexStr}`;\n\n return hexStr;\n}\n\nfunction c32checksum(dataHex: string): string {\n return bytesToHex(sha256(sha256(hexToBytes(dataHex))).slice(0, 4));\n}\n\nfunction c32checkEncode(version: number, data: string): string {\n if (version < 0 || version >= 32) throw new Error(\"Invalid version (must be between 0 and 31)\");\n if (!data.match(/^[0-9a-fA-F]*$/)) throw new Error(\"Invalid data (not a hex string)\");\n\n data = data.toLowerCase();\n if (data.length % 2 !== 0) data = `0${data}`;\n\n let versionHex = version.toString(16);\n if (versionHex.length === 1) versionHex = `0${versionHex}`;\n\n const checksumHex = c32checksum(`${versionHex}${data}`);\n return `${C32[version]}${c32encode(`${data}${checksumHex}`)}`;\n}\n\nfunction c32checkDecode(c32data: string): [number, string] {\n c32data = c32normalize(c32data);\n const dataHex = c32decode(c32data.slice(1));\n const version = C32.indexOf(c32data[0]!);\n const checksum = dataHex.slice(-8);\n\n let versionHex = version.toString(16);\n if (versionHex.length === 1) versionHex = `0${versionHex}`;\n\n if (c32checksum(`${versionHex}${dataHex.substring(0, dataHex.length - 8)}`) !== checksum) {\n throw new Error(\"Invalid c32check string: checksum mismatch\");\n }\n\n return [version, dataHex.substring(0, dataHex.length - 8)];\n}\n\nexport function c32address(version: number, hash160hex: string): string {\n if (!hash160hex.match(/^[0-9a-fA-F]{40}$/)) {\n throw new Error(\"Invalid argument: not a hash160 hex string\");\n }\n return `S${c32checkEncode(version, hash160hex)}`;\n}\n\nexport function c32addressDecode(c32addr: string): [number, string] {\n if (c32addr.length <= 5) throw new Error(\"Invalid c32 address: invalid length\");\n if (c32addr[0] !== \"S\") throw new Error('Invalid c32 address: must start with \"S\"');\n return c32checkDecode(c32addr.slice(1));\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": ";AAAA,IAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAE5E,SAAS,UAAU,CAAC,OAA2B;AAAA,EACpD,IAAI,MAAM;AAAA,EACV,WAAW,KAAK,OAAO;AAAA,IACrB,OAAO,MAAM;AAAA,EACf;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,UAAU,CAAC,KAAyB;AAAA,EAClD,MAAM,UAAU,GAAG;AAAA,EACnB,IAAI,IAAI,SAAS;AAAA,IAAG,MAAM,IAAI;AAAA,EAE9B,MAAM,QAAQ,IAAI,WAAW,IAAI,SAAS,CAAC;AAAA,EAC3C,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,IACrC,MAAM,IAAI,IAAI;AAAA,IACd,MAAM,OAAO,OAAO,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AAAA,IACpD,IAAI,OAAO,MAAM,IAAI,KAAK,OAAO;AAAA,MAAG,MAAM,IAAI,MAAM,uBAAuB;AAAA,IAC3E,MAAM,KAAK;AAAA,EACb;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,MAAM,CAAC,OAAuB;AAAA,EAC5C,OAAO,OAAO,KAAK,KAAK,IAAI,QAAQ,KAAK;AAAA;AAGpC,SAAS,SAAS,CAAC,OAAuB;AAAA,EAC/C,OAAO,OAAO,KAAK,KAAK,IAAI,MAAM,MAAM,CAAC,IAAI;AAAA;AAGxC,SAAS,WAAW,CAAC,KAAyB;AAAA,EACnD,OAAO,IAAI,YAAY,EAAE,OAAO,GAAG;AAAA;AAG9B,SAAS,WAAW,CAAC,OAA2B;AAAA,EACrD,OAAO,IAAI,YAAY,EAAE,OAAO,KAAK;AAAA;AAGhC,SAAS,YAAY,CAAC,KAAyB;AAAA,EACpD,MAAM,QAAQ,IAAI,WAAW,IAAI,MAAM;AAAA,EACvC,SAAS,IAAI,EAAG,IAAI,IAAI,QAAQ,KAAK;AAAA,IACnC,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI;AAAA,EACjC;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,YAAY,CAAC,OAA2B;AAAA,EACtD,OAAO,OAAO,aAAa,GAAG,KAAK;AAAA;AAG9B,SAAS,WAAW,IAAI,QAAkC;AAAA,EAC/D,IAAI,OAAO,WAAW;AAAA,IAAG,OAAO,OAAO;AAAA,EACvC,MAAM,SAAS,OAAO,OAAO,CAAC,GAAG,QAAQ,IAAI,IAAI,QAAQ,CAAC;AAAA,EAC1D,MAAM,SAAS,IAAI,WAAW,MAAM;AAAA,EACpC,IAAI,MAAM;AAAA,EACV,WAAW,OAAO,QAAQ;AAAA,IACxB,OAAO,IAAI,KAAK,GAAG;AAAA,IACnB,OAAO,IAAI;AAAA,EACb;AAAA,EACA,OAAO;AAAA;AAKF,SAAS,WAAW,CAAC,OAA4B;AAAA,EACtD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,OAAO,KAAK;AAAA,EAClD,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,IAAI,CAAC,OAAO,UAAU,KAAK;AAAA,MACzB,MAAM,IAAI,WAAW,6CAA6C;AAAA,IACpE,IAAI,QAAQ,OAAO;AAAA,MACjB,MAAM,IAAI,WACR,sCAAsC,OAAO,uCAC/C;AAAA,IACF,OAAO,OAAO,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,iBAAiB;AAAA,IAAY,OAAO,OAAO,KAAK,WAAW,KAAK,GAAG;AAAA,EACvE,MAAM,IAAI,UAAU,kDAAkD;AAAA;AAGjE,SAAS,UAAU,CAAC,OAAoB,YAAgC;AAAA,EAC7E,OAAO,cAAc,YAAY,KAAK,GAAG,UAAU;AAAA;AAG9C,SAAS,aAAa,CAAC,OAAe,SAAiB,IAAgB;AAAA,EAC5E,MAAM,MAAM,MAAM,SAAS,EAAE,EAAE,SAAS,SAAS,GAAG,GAAG;AAAA,EACvD,OAAO,WAAW,GAAG;AAAA;AAGhB,SAAS,QAAQ,CAAC,SAAsB,aAAa,GAAW;AAAA,EACrE,MAAM,QAAQ,OAAO,YAAY,WAAW,UAAU,YAAY,OAAO;AAAA,EACzE,OAAO,MAAM,SAAS,EAAE,EAAE,SAAS,aAAa,GAAG,GAAG;AAAA;AAGjD,SAAS,MAAM,CAAC,OAAe,OAAuB;AAAA,EAC3D,MAAM,QAAQ,OAAO,CAAC,KAAM,QAAQ,OAAO,CAAC;AAAA,EAC5C,IAAI,QAAQ,CAAC,SAAS,QAAQ,QAAQ,OAAO,CAAC,GAAG;AAAA,IAC/C,MAAM,IAAI,MAAM,yCAAyC,OAAO;AAAA,EAClE;AAAA,EACA,IAAI,SAAS,OAAO,CAAC;AAAA,IAAG,OAAO;AAAA,EAC/B,OAAO,SAAS,OAAO,CAAC,KAAK;AAAA;AAGxB,SAAS,QAAQ,CAAC,OAAe,OAAuB;AAAA,EAC7D,IAAI,QAAS,OAAO,CAAC,KAAM,QAAQ,OAAO,CAAC,GAAK;AAAA,IAC9C,OAAO,SAAS,OAAO,CAAC,KAAK;AAAA,EAC/B;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,iBAAiB,CAAC,OAA2B;AAAA,EAC3D,OAAO,SAAS,OAAO,KAAK,WAAW,KAAK,GAAG,GAAG,OAAO,MAAM,aAAa,CAAC,CAAC;AAAA;AAGzE,SAAS,aAAa,CAAC,OAA2B;AAAA,EACvD,MAAM,MAAM,IAAI,WAAW,CAAC;AAAA,EAC5B,IAAI,KAAM,UAAU,KAAM;AAAA,EAC1B,IAAI,KAAM,UAAU,KAAM;AAAA,EAC1B,IAAI,KAAM,UAAU,IAAK;AAAA,EACzB,IAAI,KAAK,QAAQ;AAAA,EACjB,OAAO;AAAA;AAGF,SAAS,YAAY,CAAC,OAAmB,SAAS,GAAW;AAAA,EAClE,QACI,MAAM,WAAY,KACjB,MAAM,SAAS,MAAO,KACtB,MAAM,SAAS,MAAO,IACvB,MAAM,SAAS,QACjB;AAAA;AAIG,SAAS,aAAa,CAAC,OAA2B;AAAA,EACvD,MAAM,MAAM,IAAI,WAAW,CAAC;AAAA,EAC5B,IAAI,KAAM,UAAU,IAAK;AAAA,EACzB,IAAI,KAAK,QAAQ;AAAA,EACjB,OAAO;AAAA;AAGF,SAAS,YAAY,CAAC,OAAmB,SAAS,GAAW;AAAA,EAClE,QAAS,MAAM,WAAY,IAAK,MAAM,SAAS,QAAS;AAAA;AAGnD,SAAS,UAAU,CAAC,OAA2B;AAAA,EACpD,OAAO,IAAI,WAAW,CAAC,QAAQ,GAAI,CAAC;AAAA;;;ACnJtC;AAGA,IAAM,MAAM;AACZ,IAAM,MAAM;AAEZ,SAAS,YAAY,CAAC,OAAuB;AAAA,EAC3C,OAAO,MAAM,YAAY,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,QAAQ,GAAG;AAAA;AAGnE,SAAS,SAAS,CAAC,UAA0B;AAAA,EAC3C,IAAI,SAAS,SAAS,MAAM;AAAA,IAAG,WAAW,IAAI;AAAA,EAC9C,WAAW,SAAS,YAAY;AAAA,EAEhC,MAAM,MAAgB,CAAC;AAAA,EACvB,IAAI,QAAQ;AAAA,EACZ,SAAS,IAAI,SAAS,SAAS,EAAG,KAAK,GAAG,KAAK;AAAA,IAC7C,IAAI,QAAQ,GAAG;AAAA,MACb,MAAM,cAAc,IAAI,QAAQ,SAAS,EAAG,KAAK;AAAA,MACjD,MAAM,WAAW,MAAM,IAAI,IAAI,QAAQ,SAAS,IAAI,EAAG,IAAI;AAAA,MAC3D,MAAM,WAAW,IAAI;AAAA,MACrB,MAAM,cAAe,YAAY,KAAK,aAAe,IAAI;AAAA,MACzD,IAAI,QAAQ,IAAI,cAAc,YAAa;AAAA,MAC3C,QAAQ;AAAA,IACV,EAAO;AAAA,MACL,QAAQ;AAAA;AAAA,EAEZ;AAAA,EAGA,IAAI,eAAe;AAAA,EACnB,OAAO,eAAe,IAAI,UAAU,IAAI,kBAAkB;AAAA,IAAK;AAAA,EAC/D,MAAM,WAAW,IAAI,MAAM,YAAY;AAAA,EAGvC,MAAM,QAAQ,WAAW,QAAQ;AAAA,EACjC,IAAI,iBAAiB;AAAA,EACrB,OAAO,iBAAiB,MAAM,UAAU,MAAM,oBAAoB;AAAA,IAAG;AAAA,EACrE,MAAM,SAAS,MAAM,cAAc,EAAE,KAAK,IAAI,EAAE;AAAA,EAEhD,OAAO,CAAC,GAAG,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE;AAAA;AAGzC,SAAS,SAAS,CAAC,UAA0B;AAAA,EAC3C,WAAW,aAAa,QAAQ;AAAA,EAChC,IAAI,CAAC,SAAS,MAAM,KAAK,QAAQ;AAAA,IAAG,MAAM,IAAI,MAAM,0BAA0B;AAAA,EAE9E,MAAM,aAAa,SAAS,MAAM,IAAI,IAAI,KAAK;AAAA,EAC/C,MAAM,sBAAsB,aAAa,WAAW,GAAI,SAAS;AAAA,EAEjE,MAAM,MAAgB,CAAC;AAAA,EACvB,IAAI,QAAQ;AAAA,EACZ,IAAI,YAAY;AAAA,EAChB,SAAS,IAAI,SAAS,SAAS,EAAG,KAAK,GAAG,KAAK;AAAA,IAC7C,IAAI,cAAc,GAAG;AAAA,MACnB,IAAI,QAAQ,IAAI,MAAO;AAAA,MACvB,YAAY;AAAA,MACZ,QAAQ;AAAA,IACV;AAAA,IACA,MAAM,gBAAgB,IAAI,QAAQ,SAAS,EAAG,KAAK,aAAa;AAAA,IAChE,IAAI,QAAQ,IAAI,eAAe,GAAI;AAAA,IACnC,aAAa;AAAA,IACb,QAAQ,gBAAgB;AAAA,IACxB,IAAI,QAAQ,KAAK;AAAA,MAAW,MAAM,IAAI,MAAM,6BAA6B;AAAA,EAC3E;AAAA,EACA,IAAI,QAAQ,IAAI,MAAO;AAAA,EAEvB,IAAI,IAAI,SAAS,MAAM;AAAA,IAAG,IAAI,QAAQ,GAAG;AAAA,EAGzC,IAAI,kBAAkB;AAAA,EACtB,OAAO,kBAAkB,IAAI,UAAU,IAAI,qBAAqB;AAAA,IAAK;AAAA,EACrE,IAAI,SAAS,IAAI,MAAM,kBAAmB,kBAAkB,CAAE,EAAE,KAAK,EAAE;AAAA,EAEvE,SAAS,IAAI,EAAG,IAAI,qBAAqB;AAAA,IAAK,SAAS,KAAK;AAAA,EAE5D,OAAO;AAAA;AAGT,SAAS,WAAW,CAAC,SAAyB;AAAA,EAC5C,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA;AAGnE,SAAS,cAAc,CAAC,SAAiB,MAAsB;AAAA,EAC7D,IAAI,UAAU,KAAK,WAAW;AAAA,IAAI,MAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9F,IAAI,CAAC,KAAK,MAAM,gBAAgB;AAAA,IAAG,MAAM,IAAI,MAAM,iCAAiC;AAAA,EAEpF,OAAO,KAAK,YAAY;AAAA,EACxB,IAAI,KAAK,SAAS,MAAM;AAAA,IAAG,OAAO,IAAI;AAAA,EAEtC,IAAI,aAAa,QAAQ,SAAS,EAAE;AAAA,EACpC,IAAI,WAAW,WAAW;AAAA,IAAG,aAAa,IAAI;AAAA,EAE9C,MAAM,cAAc,YAAY,GAAG,aAAa,MAAM;AAAA,EACtD,OAAO,GAAG,IAAI,WAAW,UAAU,GAAG,OAAO,aAAa;AAAA;AAG5D,SAAS,cAAc,CAAC,SAAmC;AAAA,EACzD,UAAU,aAAa,OAAO;AAAA,EAC9B,MAAM,UAAU,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,EAC1C,MAAM,UAAU,IAAI,QAAQ,QAAQ,EAAG;AAAA,EACvC,MAAM,WAAW,QAAQ,MAAM,EAAE;AAAA,EAEjC,IAAI,aAAa,QAAQ,SAAS,EAAE;AAAA,EACpC,IAAI,WAAW,WAAW;AAAA,IAAG,aAAa,IAAI;AAAA,EAE9C,IAAI,YAAY,GAAG,aAAa,QAAQ,UAAU,GAAG,QAAQ,SAAS,CAAC,GAAG,MAAM,UAAU;AAAA,IACxF,MAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAAA,EAEA,OAAO,CAAC,SAAS,QAAQ,UAAU,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA;AAGpD,SAAS,UAAU,CAAC,SAAiB,YAA4B;AAAA,EACtE,IAAI,CAAC,WAAW,MAAM,mBAAmB,GAAG;AAAA,IAC1C,MAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAAA,EACA,OAAO,IAAI,eAAe,SAAS,UAAU;AAAA;AAGxC,SAAS,gBAAgB,CAAC,SAAmC;AAAA,EAClE,IAAI,QAAQ,UAAU;AAAA,IAAG,MAAM,IAAI,MAAM,qCAAqC;AAAA,EAC9E,IAAI,QAAQ,OAAO;AAAA,IAAK,MAAM,IAAI,MAAM,0CAA0C;AAAA,EAClF,OAAO,eAAe,QAAQ,MAAM,CAAC,CAAC;AAAA;",
|
|
9
|
+
"debugId": "AA001B4C9FEE084964756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/accounts/providerToAccount.ts
|
|
2
|
+
async function providerToAccount(provider) {
|
|
3
|
+
const result = await provider.request("stx_getAddresses");
|
|
4
|
+
const entry = result?.addresses?.[0];
|
|
5
|
+
if (!entry?.address || !entry?.publicKey) {
|
|
6
|
+
throw new Error("Provider did not return a valid address");
|
|
7
|
+
}
|
|
8
|
+
return {
|
|
9
|
+
type: "provider",
|
|
10
|
+
address: entry.address,
|
|
11
|
+
publicKey: entry.publicKey,
|
|
12
|
+
provider
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { providerToAccount };
|
|
17
|
+
|
|
18
|
+
//# debugId=BD733EF94152D34564756E2164756E21
|
|
19
|
+
//# sourceMappingURL=stacks-qcae5852.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/accounts/providerToAccount.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { StacksProvider, ProviderAccount } from \"./types.ts\";\n\n/** Create a ProviderAccount by querying the wallet for addresses */\nexport async function providerToAccount(\n provider: StacksProvider\n): Promise<ProviderAccount> {\n const result = await provider.request(\"stx_getAddresses\");\n\n const entry = result?.addresses?.[0];\n if (!entry?.address || !entry?.publicKey) {\n throw new Error(\"Provider did not return a valid address\");\n }\n\n return {\n type: \"provider\",\n address: entry.address,\n publicKey: entry.publicKey,\n provider,\n };\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";AAGA,eAAsB,iBAAiB,CACrC,UAC0B;AAAA,EAC1B,MAAM,SAAS,MAAM,SAAS,QAAQ,kBAAkB;AAAA,EAExD,MAAM,QAAQ,QAAQ,YAAY;AAAA,EAClC,IAAI,CAAC,OAAO,WAAW,CAAC,OAAO,WAAW;AAAA,IACxC,MAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,MAAM;AAAA,IACf,WAAW,MAAM;AAAA,IACjB;AAAA,EACF;AAAA;",
|
|
8
|
+
"debugId": "BD733EF94152D34564756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// src/chains/definitions.ts
|
|
2
|
+
var mainnet = {
|
|
3
|
+
id: 1,
|
|
4
|
+
name: "Stacks Mainnet",
|
|
5
|
+
network: "mainnet",
|
|
6
|
+
transactionVersion: 0,
|
|
7
|
+
peerNetworkId: 385875968,
|
|
8
|
+
addressVersion: { singleSig: 22, multiSig: 20 },
|
|
9
|
+
magicBytes: "X2",
|
|
10
|
+
bootAddress: "SP000000000000000000002Q6VF78",
|
|
11
|
+
nativeCurrency: { name: "Stacks", symbol: "STX", decimals: 6 },
|
|
12
|
+
rpcUrls: {
|
|
13
|
+
default: {
|
|
14
|
+
http: ["https://api.mainnet.hiro.so"],
|
|
15
|
+
ws: ["wss://api.mainnet.hiro.so/extended/v1/ws"]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
blockExplorers: {
|
|
19
|
+
default: { name: "Hiro Explorer", url: "https://explorer.hiro.so" }
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var testnet = {
|
|
23
|
+
id: 2147483648,
|
|
24
|
+
name: "Stacks Testnet",
|
|
25
|
+
network: "testnet",
|
|
26
|
+
transactionVersion: 128,
|
|
27
|
+
peerNetworkId: 4278190080,
|
|
28
|
+
addressVersion: { singleSig: 26, multiSig: 21 },
|
|
29
|
+
magicBytes: "T2",
|
|
30
|
+
bootAddress: "ST000000000000000000002AMW42H",
|
|
31
|
+
nativeCurrency: { name: "Stacks", symbol: "STX", decimals: 6 },
|
|
32
|
+
rpcUrls: {
|
|
33
|
+
default: {
|
|
34
|
+
http: ["https://api.testnet.hiro.so"],
|
|
35
|
+
ws: ["wss://api.testnet.hiro.so/extended/v1/ws"]
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
blockExplorers: {
|
|
39
|
+
default: {
|
|
40
|
+
name: "Hiro Explorer",
|
|
41
|
+
url: "https://explorer.hiro.so/?chain=testnet"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var devnet = {
|
|
46
|
+
id: 2147483648,
|
|
47
|
+
name: "Stacks Devnet",
|
|
48
|
+
network: "testnet",
|
|
49
|
+
transactionVersion: 128,
|
|
50
|
+
peerNetworkId: 4278190080,
|
|
51
|
+
addressVersion: { singleSig: 26, multiSig: 21 },
|
|
52
|
+
magicBytes: "id",
|
|
53
|
+
bootAddress: "ST000000000000000000002AMW42H",
|
|
54
|
+
nativeCurrency: { name: "Stacks", symbol: "STX", decimals: 6 },
|
|
55
|
+
rpcUrls: {
|
|
56
|
+
default: {
|
|
57
|
+
http: ["http://localhost:3999"],
|
|
58
|
+
ws: ["ws://localhost:3999/extended/v1/ws"]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
var mocknet = {
|
|
63
|
+
...devnet,
|
|
64
|
+
name: "Stacks Mocknet",
|
|
65
|
+
addressVersion: { ...devnet.addressVersion }
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// src/chains/defineChain.ts
|
|
69
|
+
function defineChain(chain) {
|
|
70
|
+
return chain;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { mainnet, testnet, devnet, mocknet, defineChain };
|
|
74
|
+
|
|
75
|
+
//# debugId=DD11AFA6B6F43BF964756E2164756E21
|
|
76
|
+
//# sourceMappingURL=stacks-qt8ehebn.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/chains/definitions.ts", "../src/chains/defineChain.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { StacksChain } from \"./types.ts\";\n\n/** Stacks mainnet chain definition (Hiro API). */\nexport const mainnet: StacksChain = {\n id: 0x00000001,\n name: \"Stacks Mainnet\",\n network: \"mainnet\",\n transactionVersion: 0x00,\n peerNetworkId: 0x17000000,\n addressVersion: { singleSig: 22, multiSig: 20 },\n magicBytes: \"X2\",\n bootAddress: \"SP000000000000000000002Q6VF78\",\n nativeCurrency: { name: \"Stacks\", symbol: \"STX\", decimals: 6 },\n rpcUrls: {\n default: {\n http: [\"https://api.mainnet.hiro.so\"],\n ws: [\"wss://api.mainnet.hiro.so/extended/v1/ws\"],\n },\n },\n blockExplorers: {\n default: { name: \"Hiro Explorer\", url: \"https://explorer.hiro.so\" },\n },\n};\n\n/** Stacks testnet chain definition (Hiro API). */\nexport const testnet: StacksChain = {\n id: 0x80000000,\n name: \"Stacks Testnet\",\n network: \"testnet\",\n transactionVersion: 0x80,\n peerNetworkId: 0xff000000,\n addressVersion: { singleSig: 26, multiSig: 21 },\n magicBytes: \"T2\",\n bootAddress: \"ST000000000000000000002AMW42H\",\n nativeCurrency: { name: \"Stacks\", symbol: \"STX\", decimals: 6 },\n rpcUrls: {\n default: {\n http: [\"https://api.testnet.hiro.so\"],\n ws: [\"wss://api.testnet.hiro.so/extended/v1/ws\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Hiro Explorer\",\n url: \"https://explorer.hiro.so/?chain=testnet\",\n },\n },\n};\n\n/** Local development chain definition (localhost:3999). */\nexport const devnet: StacksChain = {\n id: 0x80000000,\n name: \"Stacks Devnet\",\n network: \"testnet\",\n transactionVersion: 0x80,\n peerNetworkId: 0xff000000,\n addressVersion: { singleSig: 26, multiSig: 21 },\n magicBytes: \"id\",\n bootAddress: \"ST000000000000000000002AMW42H\",\n nativeCurrency: { name: \"Stacks\", symbol: \"STX\", decimals: 6 },\n rpcUrls: {\n default: {\n http: [\"http://localhost:3999\"],\n ws: [\"ws://localhost:3999/extended/v1/ws\"],\n },\n },\n};\n\n/** Alias for devnet used in mock/test environments. */\nexport const mocknet: StacksChain = {\n ...devnet,\n name: \"Stacks Mocknet\",\n addressVersion: { ...devnet.addressVersion },\n};\n",
|
|
6
|
+
"import type { StacksChain } from \"./types.ts\";\n\n/** Identity helper for defining a custom {@link StacksChain} with full type inference. */\nexport function defineChain(chain: StacksChain): StacksChain {\n return chain;\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": ";AAGO,IAAM,UAAuB;AAAA,EAClC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,gBAAgB,EAAE,WAAW,IAAI,UAAU,GAAG;AAAA,EAC9C,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,gBAAgB,EAAE,MAAM,UAAU,QAAQ,OAAO,UAAU,EAAE;AAAA,EAC7D,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,6BAA6B;AAAA,MACpC,IAAI,CAAC,0CAA0C;AAAA,IACjD;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS,EAAE,MAAM,iBAAiB,KAAK,2BAA2B;AAAA,EACpE;AACF;AAGO,IAAM,UAAuB;AAAA,EAClC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,gBAAgB,EAAE,WAAW,IAAI,UAAU,GAAG;AAAA,EAC9C,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,gBAAgB,EAAE,MAAM,UAAU,QAAQ,OAAO,UAAU,EAAE;AAAA,EAC7D,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,6BAA6B;AAAA,MACpC,IAAI,CAAC,0CAA0C;AAAA,IACjD;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AACF;AAGO,IAAM,SAAsB;AAAA,EACjC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,gBAAgB,EAAE,WAAW,IAAI,UAAU,GAAG;AAAA,EAC9C,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,gBAAgB,EAAE,MAAM,UAAU,QAAQ,OAAO,UAAU,EAAE;AAAA,EAC7D,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,uBAAuB;AAAA,MAC9B,IAAI,CAAC,oCAAoC;AAAA,IAC3C;AAAA,EACF;AACF;AAGO,IAAM,UAAuB;AAAA,KAC/B;AAAA,EACH,MAAM;AAAA,EACN,gBAAgB,KAAK,OAAO,eAAe;AAC7C;;;ACtEO,SAAS,WAAW,CAAC,OAAiC;AAAA,EAC3D,OAAO;AAAA;",
|
|
9
|
+
"debugId": "DD11AFA6B6F43BF964756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|