@arkade-os/sdk 0.5.0-rc.2 → 0.5.0-rc.4
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 +12 -67
- package/dist/adapters/expo.cjs +5 -6
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -4
- package/dist/{asyncStorageTaskQueue-C5rBYlru.d.ts → asyncStorageTaskQueue-BCiOgs5x.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-BuDvgWh6.d.cts → asyncStorageTaskQueue-CTIwKrt5.d.cts} +2 -2
- package/dist/{chunk-3R476TDV.js → chunk-4EZOMPAO.js} +14 -38
- package/dist/chunk-4EZOMPAO.js.map +1 -0
- package/dist/{chunk-D25O4EGY.cjs → chunk-5NLJUXXQ.cjs} +10 -10
- package/dist/{chunk-D25O4EGY.cjs.map → chunk-5NLJUXXQ.cjs.map} +1 -1
- package/dist/{chunk-JZWLXNHV.cjs → chunk-C5Y2R63Z.cjs} +25 -71
- package/dist/chunk-C5Y2R63Z.cjs.map +1 -0
- package/dist/{chunk-6DNR46C7.js → chunk-CIBGIZUW.js} +4 -4
- package/dist/{chunk-6DNR46C7.js.map → chunk-CIBGIZUW.js.map} +1 -1
- package/dist/{chunk-43FKNLX4.cjs → chunk-F7HJO5GT.cjs} +61 -85
- package/dist/chunk-F7HJO5GT.cjs.map +1 -0
- package/dist/{chunk-ISO4TI5J.js → chunk-GLZNJFAT.js} +25 -67
- package/dist/chunk-GLZNJFAT.js.map +1 -0
- package/dist/{chunk-HLCGYOIH.cjs → chunk-GPJSGLWM.cjs} +17 -17
- package/dist/{chunk-HLCGYOIH.cjs.map → chunk-GPJSGLWM.cjs.map} +1 -1
- package/dist/{chunk-ZOTXDOS5.js → chunk-MOWSLXGO.js} +4 -4
- package/dist/{chunk-ZOTXDOS5.js.map → chunk-MOWSLXGO.js.map} +1 -1
- package/dist/{chunk-ZRNQV6HV.js → chunk-PYTAH2NY.js} +167 -703
- package/dist/chunk-PYTAH2NY.js.map +1 -0
- package/dist/{chunk-NVZJSKZS.cjs → chunk-SYRQJS5N.cjs} +18 -19
- package/dist/chunk-SYRQJS5N.cjs.map +1 -0
- package/dist/{chunk-4PKLULWT.js → chunk-XHASFSDU.js} +3 -4
- package/dist/chunk-XHASFSDU.js.map +1 -0
- package/dist/{chunk-GMZZQXV5.cjs → chunk-ZHLYFRYY.cjs} +583 -1128
- package/dist/chunk-ZHLYFRYY.cjs.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -10
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/contracts/handlers/index.js +2 -3
- package/dist/{delegate-1yp1HyP7.d.cts → delegate-CpQIgTs7.d.cts} +1 -1
- package/dist/{delegate-BAX5QftB.d.ts → delegate-Dv-us16c.d.ts} +1 -1
- package/dist/{hdWalletCapable-CmEU0NP1.d.ts → hdWalletCapable-BC4Fmmht.d.ts} +7 -25
- package/dist/{hdWalletCapable-eJgaT-ec.d.cts → hdWalletCapable-DotEa5rZ.d.cts} +7 -25
- package/dist/{index-DUxufw76.d.ts → index-Czz9HSqE.d.cts} +21 -220
- package/dist/{index-DUxufw76.d.cts → index-Czz9HSqE.d.ts} +21 -220
- package/dist/{index-Bem5vKzX.d.ts → index-DUkvXxpt.d.ts} +3 -3
- package/dist/{index-W_oMcOmG.d.cts → index-DdJt5fRc.d.cts} +3 -3
- package/dist/index.cjs +291 -340
- package/dist/index.d.cts +58 -223
- package/dist/index.d.ts +58 -223
- package/dist/index.js +4 -5
- package/dist/repositories/realm/index.cjs +57 -24
- package/dist/repositories/realm/index.cjs.map +1 -1
- package/dist/repositories/realm/index.d.cts +12 -4
- package/dist/repositories/realm/index.d.ts +12 -4
- package/dist/repositories/realm/index.js +43 -10
- package/dist/repositories/realm/index.js.map +1 -1
- package/dist/repositories/sqlite/index.cjs +103 -33
- package/dist/repositories/sqlite/index.cjs.map +1 -1
- package/dist/repositories/sqlite/index.d.cts +12 -2
- package/dist/repositories/sqlite/index.d.ts +12 -2
- package/dist/repositories/sqlite/index.js +90 -20
- package/dist/repositories/sqlite/index.js.map +1 -1
- package/dist/{taskRunner-Dr3NStc0.d.cts → taskRunner-7E_Rx8bD.d.cts} +2 -2
- package/dist/{taskRunner-D_iPiZIi.d.ts → taskRunner-DUId1UJ8.d.ts} +2 -2
- package/dist/wallet/expo/background.cjs +14 -15
- package/dist/wallet/expo/background.cjs.map +1 -1
- package/dist/wallet/expo/background.d.cts +3 -3
- package/dist/wallet/expo/background.d.ts +3 -3
- package/dist/wallet/expo/background.js +6 -7
- package/dist/wallet/expo/background.js.map +1 -1
- package/dist/wallet/expo/index.cjs +15 -23
- package/dist/wallet/expo/index.cjs.map +1 -1
- package/dist/wallet/expo/index.d.cts +4 -7
- package/dist/wallet/expo/index.d.ts +4 -7
- package/dist/wallet/expo/index.js +7 -15
- package/dist/wallet/expo/index.js.map +1 -1
- package/dist/worker/expo/index.cjs +9 -10
- package/dist/worker/expo/index.cjs.map +1 -1
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +5 -6
- package/dist/worker/expo/index.js.map +1 -1
- package/package.json +4 -42
- package/dist/adapters/asyncStorage.cjs +0 -48
- package/dist/adapters/asyncStorage.cjs.map +0 -1
- package/dist/adapters/asyncStorage.d.cts +0 -16
- package/dist/adapters/asyncStorage.d.ts +0 -16
- package/dist/adapters/asyncStorage.js +0 -46
- package/dist/adapters/asyncStorage.js.map +0 -1
- package/dist/adapters/fileSystem.cjs +0 -116
- package/dist/adapters/fileSystem.cjs.map +0 -1
- package/dist/adapters/fileSystem.d.cts +0 -17
- package/dist/adapters/fileSystem.d.ts +0 -17
- package/dist/adapters/fileSystem.js +0 -93
- package/dist/adapters/fileSystem.js.map +0 -1
- package/dist/adapters/indexedDB.cjs +0 -103
- package/dist/adapters/indexedDB.cjs.map +0 -1
- package/dist/adapters/indexedDB.d.cts +0 -18
- package/dist/adapters/indexedDB.d.ts +0 -18
- package/dist/adapters/indexedDB.js +0 -101
- package/dist/adapters/indexedDB.js.map +0 -1
- package/dist/adapters/localStorage.cjs +0 -50
- package/dist/adapters/localStorage.cjs.map +0 -1
- package/dist/adapters/localStorage.d.cts +0 -14
- package/dist/adapters/localStorage.d.ts +0 -14
- package/dist/adapters/localStorage.js +0 -48
- package/dist/adapters/localStorage.js.map +0 -1
- package/dist/chunk-3R476TDV.js.map +0 -1
- package/dist/chunk-43FKNLX4.cjs.map +0 -1
- package/dist/chunk-4PKLULWT.js.map +0 -1
- package/dist/chunk-5BLDMQED.cjs +0 -18
- package/dist/chunk-5BLDMQED.cjs.map +0 -1
- package/dist/chunk-GMZZQXV5.cjs.map +0 -1
- package/dist/chunk-ISO4TI5J.js.map +0 -1
- package/dist/chunk-JZWLXNHV.cjs.map +0 -1
- package/dist/chunk-NSBPE2FW.js +0 -15
- package/dist/chunk-NSBPE2FW.js.map +0 -1
- package/dist/chunk-NVZJSKZS.cjs.map +0 -1
- package/dist/chunk-ZRNQV6HV.js.map +0 -1
- package/dist/index-C0IanN1m.d.cts +0 -11
- package/dist/index-C0IanN1m.d.ts +0 -11
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getRandomId, extendVirtualCoinForContract, isWatchedContract, warnAndFilterVtxosForScript, saveVtxosForContract } from './chunk-
|
|
2
|
-
import { getNormalizedVtxos } from './chunk-
|
|
1
|
+
import { getRandomId, extendVirtualCoinForContract, isWatchedContract, warnAndFilterVtxosForScript, saveVtxosForContract } from './chunk-PYTAH2NY.js';
|
|
2
|
+
import { getNormalizedVtxos } from './chunk-GLZNJFAT.js';
|
|
3
3
|
|
|
4
4
|
// src/worker/expo/taskRunner.ts
|
|
5
5
|
async function runTasks(queue, processors, deps) {
|
|
@@ -92,5 +92,5 @@ var contractPollProcessor = {
|
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
export { CONTRACT_POLL_TASK_TYPE, contractPollProcessor, createTaskDependencies, runTasks };
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
96
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# sourceMappingURL=chunk-CIBGIZUW.js.map
|
|
96
|
+
//# sourceMappingURL=chunk-CIBGIZUW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/worker/expo/taskRunner.ts","../src/worker/expo/processors/contractPollProcessor.ts"],"names":[],"mappings":"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","file":"chunk-6DNR46C7.js","sourcesContent":["import type { TaskItem, TaskResult, TaskQueue } from \"./taskQueue\";\nimport type { WalletRepository } from \"../../repositories/walletRepository\";\nimport type { ContractRepository } from \"../../repositories/contractRepository\";\nimport type { IndexerProvider } from \"../../providers/indexer\";\nimport type { ArkProvider } from \"../../providers/ark\";\nimport type { ExtendedVirtualCoin, VirtualCoin } from \"../../wallet\";\nimport type { Contract } from \"../../contracts/types\";\nimport { getRandomId, extendVirtualCoinForContract } from \"../../wallet/utils\";\n\n/**\n * Shared dependencies injected into every processor at runtime.\n *\n * `extendVtxo` requires the owning contract — processors must resolve each\n * vtxo's `script` to a known contract (via the contract repository) before\n * calling this. The strict signature prevents the footgun where a missing\n * contract silently falls back to the wallet's default tapscript.\n */\nexport interface TaskDependencies {\n walletRepository: WalletRepository;\n contractRepository: ContractRepository;\n indexerProvider: IndexerProvider;\n arkProvider: ArkProvider;\n extendVtxo: (vtxo: VirtualCoin, contract: Contract) => ExtendedVirtualCoin;\n}\n\n/**\n * A stateless unit that handles one type of task item.\n *\n * Processors must not keep in-memory state across invocations —\n * all coordination lives in the @see TaskQueue and repositories.\n *\n * The `TDeps` parameter defaults to @see TaskDependencies but\n * can be overridden for domain-specific processors (e.g. swap processing).\n */\nexport interface TaskProcessor<TDeps = TaskDependencies> {\n readonly taskType: string;\n execute(item: TaskItem, deps: TDeps): Promise<Omit<TaskResult, \"id\" | \"executedAt\">>;\n}\n\n/**\n * Run all pending tasks from the queue through matching processors.\n *\n * For each task in the inbox:\n * 1. Find the processor whose `taskType` matches `task.type`.\n * 2. Execute it, producing a @see TaskResult.\n * 3. Push the result to the outbox and remove the task from the inbox.\n *\n * Tasks with no matching processor produce a `\"noop\"` result.\n * Processor errors produce a `\"failed\"` result with the error message.\n */\nexport async function runTasks<TDeps = TaskDependencies>(\n queue: TaskQueue,\n processors: TaskProcessor<TDeps>[],\n deps: TDeps,\n): Promise<TaskResult[]> {\n const tasks = await queue.getTasks();\n const processorMap = new Map(processors.map((p) => [p.taskType, p]));\n const results: TaskResult[] = [];\n\n for (const task of tasks) {\n const processor = processorMap.get(task.type);\n\n let partial: Omit<TaskResult, \"id\" | \"executedAt\">;\n\n if (!processor) {\n partial = {\n taskItemId: task.id,\n type: task.type,\n status: \"noop\",\n };\n } else {\n try {\n partial = await processor.execute(task, deps);\n } catch (error) {\n partial = {\n taskItemId: task.id,\n type: task.type,\n status: \"failed\",\n data: {\n error: error instanceof Error ? error.message : String(error),\n },\n };\n }\n }\n\n const result: TaskResult = {\n ...partial,\n id: getRandomId(),\n executedAt: Date.now(),\n };\n\n await queue.pushResult(result);\n await queue.removeTask(task.id);\n results.push(result);\n }\n\n return results;\n}\n\n/**\n * Options for @see createTaskDependencies.\n */\nexport interface CreateTaskDependenciesOptions {\n walletRepository: WalletRepository;\n contractRepository: ContractRepository;\n indexerProvider: IndexerProvider;\n arkProvider: ArkProvider;\n}\n\n/**\n * Build the @see TaskDependencies needed by task processors\n * (e.g. `src/worker/expo/processors/contractPollProcessor.ts`)\n *\n * This is the same construction that `defineExpoBackgroundTask` does\n * internally, extracted so that consumers with custom schedulers\n * (e.g. bare React Native with `react-native-background-fetch`)\n * can build deps without depending on Expo.\n */\nexport function createTaskDependencies(options: CreateTaskDependenciesOptions): TaskDependencies {\n return {\n ...options,\n extendVtxo: (vtxo: VirtualCoin, contract: Contract) =>\n extendVirtualCoinForContract(vtxo, contract),\n };\n}\n","import type { TaskItem, TaskResult } from \"../taskQueue\";\nimport type { TaskProcessor, TaskDependencies } from \"../taskRunner\";\nimport type { ExtendedVirtualCoin } from \"../../../wallet\";\nimport { getNormalizedVtxos } from \"../../../wallet/vtxo\";\nimport {\n warnAndFilterVtxosForScript,\n saveVtxosForContract,\n} from \"../../../contracts/vtxoOwnership\";\nimport { isWatchedContract } from \"../../../contracts/types\";\n\nexport const CONTRACT_POLL_TASK_TYPE = \"contract-poll\";\n\n/**\n * Polls the indexer for the latest VTXO state of every contract and\n * persists the results to the wallet repository.\n *\n * Replicates the polling subset of @see ContractManager.initialize:\n * 1. Load every watched contract from the contract repository.\n * 2. Paginated fetch of every VTXO (including spent) from the indexer.\n * 3. Extend each VTXO with tapscript data.\n * 4. Save to the wallet repository.\n *\n * NOTE: the indexer query deliberately omits `spendableOnly`. Every\n * repository implements `saveVtxos` as an upsert with no batch delete,\n * so filtering to spendable-only would leave VTXOs that became spent\n * between polls marked as spendable forever. Fetching the full set lets\n * the upsert overwrite stale records with their latest state.\n */\nexport const contractPollProcessor: TaskProcessor = {\n taskType: CONTRACT_POLL_TASK_TYPE,\n\n async execute(\n item: TaskItem,\n deps: TaskDependencies,\n ): Promise<Omit<TaskResult, \"id\" | \"executedAt\">> {\n const { contractRepository, walletRepository, indexerProvider, extendVtxo } = deps;\n\n // Background channel, so it covers exactly what the watcher's\n // subscription covers: `retained` rows are kept for reads only.\n const contracts = (await contractRepository.getContracts()).filter(isWatchedContract);\n let contractsProcessed = 0;\n let vtxosSaved = 0;\n\n for (const contract of contracts) {\n // Paginated fetch of spendable virtual outputs\n const pageSize = 100;\n let pageIndex = 0;\n let hasMore = true;\n const allVtxos: ExtendedVirtualCoin[] = [];\n\n while (hasMore) {\n const { vtxos, page } = await getNormalizedVtxos(indexerProvider, {\n scripts: [contract.script],\n pageIndex,\n pageSize,\n });\n\n for (const vtxo of vtxos) {\n allVtxos.push(extendVtxo(vtxo, contract));\n }\n\n hasMore = page ? vtxos.length === pageSize : false;\n pageIndex++;\n }\n\n // Skip wrong-script rows (legacy duplicates or indexer drift)\n // before persisting; the loop must keep going for the remaining\n // contracts even when one row is rejected.\n const filtered = warnAndFilterVtxosForScript(\n allVtxos,\n contract.script,\n \"contractPollProcessor\",\n );\n await saveVtxosForContract(walletRepository, contract, filtered);\n vtxosSaved += filtered.length;\n contractsProcessed++;\n }\n\n return {\n taskItemId: item.id,\n type: CONTRACT_POLL_TASK_TYPE,\n status: \"success\",\n data: { contractsProcessed, vtxosSaved },\n };\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/worker/expo/taskRunner.ts","../src/worker/expo/processors/contractPollProcessor.ts"],"names":[],"mappings":"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","file":"chunk-CIBGIZUW.js","sourcesContent":["import type { TaskItem, TaskResult, TaskQueue } from \"./taskQueue\";\nimport type { WalletRepository } from \"../../repositories/walletRepository\";\nimport type { ContractRepository } from \"../../repositories/contractRepository\";\nimport type { IndexerProvider } from \"../../providers/indexer\";\nimport type { ArkProvider } from \"../../providers/ark\";\nimport type { ExtendedVirtualCoin, VirtualCoin } from \"../../wallet\";\nimport type { Contract } from \"../../contracts/types\";\nimport { getRandomId, extendVirtualCoinForContract } from \"../../wallet/utils\";\n\n/**\n * Shared dependencies injected into every processor at runtime.\n *\n * `extendVtxo` requires the owning contract — processors must resolve each\n * vtxo's `script` to a known contract (via the contract repository) before\n * calling this. The strict signature prevents the footgun where a missing\n * contract silently falls back to the wallet's default tapscript.\n */\nexport interface TaskDependencies {\n walletRepository: WalletRepository;\n contractRepository: ContractRepository;\n indexerProvider: IndexerProvider;\n arkProvider: ArkProvider;\n extendVtxo: (vtxo: VirtualCoin, contract: Contract) => ExtendedVirtualCoin;\n}\n\n/**\n * A stateless unit that handles one type of task item.\n *\n * Processors must not keep in-memory state across invocations —\n * all coordination lives in the @see TaskQueue and repositories.\n *\n * The `TDeps` parameter defaults to @see TaskDependencies but\n * can be overridden for domain-specific processors (e.g. swap processing).\n */\nexport interface TaskProcessor<TDeps = TaskDependencies> {\n readonly taskType: string;\n execute(item: TaskItem, deps: TDeps): Promise<Omit<TaskResult, \"id\" | \"executedAt\">>;\n}\n\n/**\n * Run all pending tasks from the queue through matching processors.\n *\n * For each task in the inbox:\n * 1. Find the processor whose `taskType` matches `task.type`.\n * 2. Execute it, producing a @see TaskResult.\n * 3. Push the result to the outbox and remove the task from the inbox.\n *\n * Tasks with no matching processor produce a `\"noop\"` result.\n * Processor errors produce a `\"failed\"` result with the error message.\n */\nexport async function runTasks<TDeps = TaskDependencies>(\n queue: TaskQueue,\n processors: TaskProcessor<TDeps>[],\n deps: TDeps,\n): Promise<TaskResult[]> {\n const tasks = await queue.getTasks();\n const processorMap = new Map(processors.map((p) => [p.taskType, p]));\n const results: TaskResult[] = [];\n\n for (const task of tasks) {\n const processor = processorMap.get(task.type);\n\n let partial: Omit<TaskResult, \"id\" | \"executedAt\">;\n\n if (!processor) {\n partial = {\n taskItemId: task.id,\n type: task.type,\n status: \"noop\",\n };\n } else {\n try {\n partial = await processor.execute(task, deps);\n } catch (error) {\n partial = {\n taskItemId: task.id,\n type: task.type,\n status: \"failed\",\n data: {\n error: error instanceof Error ? error.message : String(error),\n },\n };\n }\n }\n\n const result: TaskResult = {\n ...partial,\n id: getRandomId(),\n executedAt: Date.now(),\n };\n\n await queue.pushResult(result);\n await queue.removeTask(task.id);\n results.push(result);\n }\n\n return results;\n}\n\n/**\n * Options for @see createTaskDependencies.\n */\nexport interface CreateTaskDependenciesOptions {\n walletRepository: WalletRepository;\n contractRepository: ContractRepository;\n indexerProvider: IndexerProvider;\n arkProvider: ArkProvider;\n}\n\n/**\n * Build the @see TaskDependencies needed by task processors\n * (e.g. `src/worker/expo/processors/contractPollProcessor.ts`)\n *\n * This is the same construction that `defineExpoBackgroundTask` does\n * internally, extracted so that consumers with custom schedulers\n * (e.g. bare React Native with `react-native-background-fetch`)\n * can build deps without depending on Expo.\n */\nexport function createTaskDependencies(options: CreateTaskDependenciesOptions): TaskDependencies {\n return {\n ...options,\n extendVtxo: (vtxo: VirtualCoin, contract: Contract) =>\n extendVirtualCoinForContract(vtxo, contract),\n };\n}\n","import type { TaskItem, TaskResult } from \"../taskQueue\";\nimport type { TaskProcessor, TaskDependencies } from \"../taskRunner\";\nimport type { ExtendedVirtualCoin } from \"../../../wallet\";\nimport { getNormalizedVtxos } from \"../../../wallet/vtxo\";\nimport {\n warnAndFilterVtxosForScript,\n saveVtxosForContract,\n} from \"../../../contracts/vtxoOwnership\";\nimport { isWatchedContract } from \"../../../contracts/types\";\n\nexport const CONTRACT_POLL_TASK_TYPE = \"contract-poll\";\n\n/**\n * Polls the indexer for the latest VTXO state of every contract and\n * persists the results to the wallet repository.\n *\n * Replicates the polling subset of @see ContractManager.initialize:\n * 1. Load every watched contract from the contract repository.\n * 2. Paginated fetch of every VTXO (including spent) from the indexer.\n * 3. Extend each VTXO with tapscript data.\n * 4. Save to the wallet repository.\n *\n * NOTE: the indexer query deliberately omits `spendableOnly`. Every\n * repository implements `saveVtxos` as an upsert with no batch delete,\n * so filtering to spendable-only would leave VTXOs that became spent\n * between polls marked as spendable forever. Fetching the full set lets\n * the upsert overwrite stale records with their latest state.\n */\nexport const contractPollProcessor: TaskProcessor = {\n taskType: CONTRACT_POLL_TASK_TYPE,\n\n async execute(\n item: TaskItem,\n deps: TaskDependencies,\n ): Promise<Omit<TaskResult, \"id\" | \"executedAt\">> {\n const { contractRepository, walletRepository, indexerProvider, extendVtxo } = deps;\n\n // Background channel, so it covers exactly what the watcher's\n // subscription covers: `retained` rows are kept for reads only.\n const contracts = (await contractRepository.getContracts()).filter(isWatchedContract);\n let contractsProcessed = 0;\n let vtxosSaved = 0;\n\n for (const contract of contracts) {\n // Paginated fetch of spendable virtual outputs\n const pageSize = 100;\n let pageIndex = 0;\n let hasMore = true;\n const allVtxos: ExtendedVirtualCoin[] = [];\n\n while (hasMore) {\n const { vtxos, page } = await getNormalizedVtxos(indexerProvider, {\n scripts: [contract.script],\n pageIndex,\n pageSize,\n });\n\n for (const vtxo of vtxos) {\n allVtxos.push(extendVtxo(vtxo, contract));\n }\n\n hasMore = page ? vtxos.length === pageSize : false;\n pageIndex++;\n }\n\n // Skip wrong-script rows (legacy duplicates or indexer drift)\n // before persisting; the loop must keep going for the remaining\n // contracts even when one row is rejected.\n const filtered = warnAndFilterVtxosForScript(\n allVtxos,\n contract.script,\n \"contractPollProcessor\",\n );\n await saveVtxosForContract(walletRepository, contract, filtered);\n vtxosSaved += filtered.length;\n contractsProcessed++;\n }\n\n return {\n taskItemId: item.id,\n type: CONTRACT_POLL_TASK_TYPE,\n status: \"success\",\n data: { contractsProcessed, vtxosSaved },\n };\n },\n};\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var chunk5BLDMQED_cjs = require('./chunk-5BLDMQED.cjs');
|
|
3
|
+
var chunkC5Y2R63Z_cjs = require('./chunk-C5Y2R63Z.cjs');
|
|
5
4
|
var base = require('@scure/base');
|
|
6
5
|
var descriptorsScure = require('@bitcoinerlab/descriptors-scure');
|
|
7
6
|
var btcSigner = require('@scure/btc-signer');
|
|
@@ -76,14 +75,14 @@ var ContractHandlerRegistry = class {
|
|
|
76
75
|
var contractHandlers = new ContractHandlerRegistry();
|
|
77
76
|
exports.DefaultVtxo = void 0;
|
|
78
77
|
((DefaultVtxo2) => {
|
|
79
|
-
class Script3 extends
|
|
78
|
+
class Script3 extends chunkC5Y2R63Z_cjs.VtxoScript {
|
|
80
79
|
/** Create the default virtual output script with one forfeit path and one exit path. */
|
|
81
80
|
constructor(options) {
|
|
82
81
|
const { pubKey, serverPubKey, csvTimelock } = options;
|
|
83
|
-
const forfeitScript =
|
|
82
|
+
const forfeitScript = chunkC5Y2R63Z_cjs.MultisigTapscript.encode({
|
|
84
83
|
pubkeys: [pubKey, serverPubKey]
|
|
85
84
|
}).script;
|
|
86
|
-
const exitScript =
|
|
85
|
+
const exitScript = chunkC5Y2R63Z_cjs.CSVMultisigTapscript.encode({
|
|
87
86
|
timelock: csvTimelock,
|
|
88
87
|
pubkeys: [pubKey]
|
|
89
88
|
}).script;
|
|
@@ -268,27 +267,14 @@ function resolveRole(contract, context) {
|
|
|
268
267
|
}
|
|
269
268
|
return void 0;
|
|
270
269
|
};
|
|
271
|
-
if (context.walletDescriptor)
|
|
272
|
-
|
|
273
|
-
const matchedRole = matchRole(walletDescriptorKey);
|
|
274
|
-
if (matchedRole) {
|
|
275
|
-
return matchedRole;
|
|
276
|
-
}
|
|
277
|
-
if (!walletDescriptorKey && context.walletPubKey) {
|
|
278
|
-
return matchRole(extractRawPubKey(context.walletPubKey));
|
|
279
|
-
}
|
|
280
|
-
return void 0;
|
|
281
|
-
}
|
|
282
|
-
if (context.walletPubKey) {
|
|
283
|
-
return matchRole(extractRawPubKey(context.walletPubKey));
|
|
284
|
-
}
|
|
285
|
-
return void 0;
|
|
270
|
+
if (!context.walletDescriptor) return void 0;
|
|
271
|
+
return matchRole(extractRawPubKey(context.walletDescriptor));
|
|
286
272
|
}
|
|
287
273
|
function extractPubKeyBytes(value) {
|
|
288
274
|
return base.hex.decode(extractPubKey(normalizeToDescriptor(value)));
|
|
289
275
|
}
|
|
290
276
|
function deserializeCsvTimelock(value) {
|
|
291
|
-
return value !== void 0 && value !== "" ?
|
|
277
|
+
return value !== void 0 && value !== "" ? chunkC5Y2R63Z_cjs.sequenceToTimelock(Number(value)) : exports.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
292
278
|
}
|
|
293
279
|
var CLTV_HEIGHT_THRESHOLD = 500000000n;
|
|
294
280
|
function isCltvSatisfied(context, locktime) {
|
|
@@ -330,7 +316,7 @@ function assertVhtlcSpendableNow(contract, context) {
|
|
|
330
316
|
function isCsvSpendable(context, sequence) {
|
|
331
317
|
if (sequence === void 0) return true;
|
|
332
318
|
if (!context.vtxo) return false;
|
|
333
|
-
const timelock =
|
|
319
|
+
const timelock = chunkC5Y2R63Z_cjs.sequenceToTimelock(sequence);
|
|
334
320
|
if (timelock.type === "blocks") {
|
|
335
321
|
if (context.blockHeight === void 0 || context.vtxo.status.block_height === void 0) {
|
|
336
322
|
return false;
|
|
@@ -388,21 +374,21 @@ function forfeitExitSpendablePaths(script, contract, context) {
|
|
|
388
374
|
async function detectUsedScripts(indexerProvider, scriptHexes) {
|
|
389
375
|
const used = /* @__PURE__ */ new Set();
|
|
390
376
|
const unique = [...new Set(scriptHexes)];
|
|
391
|
-
for (let offset = 0; offset < unique.length; offset +=
|
|
392
|
-
const scripts = unique.slice(offset, offset +
|
|
377
|
+
for (let offset = 0; offset < unique.length; offset += chunkC5Y2R63Z_cjs.SCRIPT_QUERY_CHUNK_SIZE) {
|
|
378
|
+
const scripts = unique.slice(offset, offset + chunkC5Y2R63Z_cjs.SCRIPT_QUERY_CHUNK_SIZE);
|
|
393
379
|
const remaining = new Set(scripts);
|
|
394
380
|
let pageIndex = 0;
|
|
395
381
|
let hasMore = true;
|
|
396
382
|
while (hasMore && remaining.size > 0) {
|
|
397
|
-
const { vtxos, page } = await
|
|
383
|
+
const { vtxos, page } = await chunkC5Y2R63Z_cjs.getNormalizedVtxos(indexerProvider, {
|
|
398
384
|
scripts,
|
|
399
385
|
pageIndex,
|
|
400
|
-
pageSize:
|
|
386
|
+
pageSize: chunkC5Y2R63Z_cjs.DEFAULT_PAGE_SIZE
|
|
401
387
|
});
|
|
402
388
|
for (const vtxo of vtxos) {
|
|
403
389
|
if (remaining.delete(vtxo.script)) used.add(vtxo.script);
|
|
404
390
|
}
|
|
405
|
-
hasMore = page ? vtxos.length ===
|
|
391
|
+
hasMore = page ? vtxos.length === chunkC5Y2R63Z_cjs.DEFAULT_PAGE_SIZE : false;
|
|
406
392
|
pageIndex++;
|
|
407
393
|
}
|
|
408
394
|
}
|
|
@@ -463,7 +449,7 @@ var DefaultContractHandler = {
|
|
|
463
449
|
return {
|
|
464
450
|
pubKey: base.hex.encode(params.pubKey),
|
|
465
451
|
serverPubKey: base.hex.encode(params.serverPubKey),
|
|
466
|
-
csvTimelock:
|
|
452
|
+
csvTimelock: chunkC5Y2R63Z_cjs.timelockToSequence(params.csvTimelock).toString()
|
|
467
453
|
};
|
|
468
454
|
},
|
|
469
455
|
deserializeParams(params) {
|
|
@@ -498,7 +484,7 @@ function defaultCandidatesAt(_index, descriptor, deps) {
|
|
|
498
484
|
params: {
|
|
499
485
|
pubKey: base.hex.encode(c.pubKey),
|
|
500
486
|
serverPubKey: base.hex.encode(c.serverPubKey),
|
|
501
|
-
csvTimelock:
|
|
487
|
+
csvTimelock: chunkC5Y2R63Z_cjs.timelockToSequence(c.csvTimelock).toString()
|
|
502
488
|
},
|
|
503
489
|
script: c.scriptHex,
|
|
504
490
|
address: c.script.address(deps.network.hrp, c.serverPubKey).encode()
|
|
@@ -514,12 +500,12 @@ function discoverDefaultRange(entries, deps) {
|
|
|
514
500
|
}
|
|
515
501
|
exports.DelegateVtxo = void 0;
|
|
516
502
|
((DelegateVtxo2) => {
|
|
517
|
-
class Script3 extends
|
|
503
|
+
class Script3 extends chunkC5Y2R63Z_cjs.VtxoScript {
|
|
518
504
|
/** Create a delegated virtual output script with forfeit, exit, and delegate paths. */
|
|
519
505
|
constructor(options) {
|
|
520
506
|
const defaultVtxo = new exports.DefaultVtxo.Script(options);
|
|
521
507
|
const { delegatePubKey, pubKey, serverPubKey } = options;
|
|
522
|
-
const delegateScript =
|
|
508
|
+
const delegateScript = chunkC5Y2R63Z_cjs.MultisigTapscript.encode({
|
|
523
509
|
pubkeys: [pubKey, delegatePubKey, serverPubKey]
|
|
524
510
|
}).script;
|
|
525
511
|
super([...defaultVtxo.scripts, delegateScript]);
|
|
@@ -558,7 +544,7 @@ var DelegateContractHandler = {
|
|
|
558
544
|
pubKey: base.hex.encode(params.pubKey),
|
|
559
545
|
serverPubKey: base.hex.encode(params.serverPubKey),
|
|
560
546
|
delegatePubKey: base.hex.encode(params.delegatePubKey),
|
|
561
|
-
csvTimelock:
|
|
547
|
+
csvTimelock: chunkC5Y2R63Z_cjs.timelockToSequence(params.csvTimelock).toString()
|
|
562
548
|
};
|
|
563
549
|
},
|
|
564
550
|
deserializeParams(params) {
|
|
@@ -602,7 +588,7 @@ function delegateCandidatesAt(_index, descriptor, deps) {
|
|
|
602
588
|
pubKey: base.hex.encode(c.pubKey),
|
|
603
589
|
serverPubKey: base.hex.encode(c.serverPubKey),
|
|
604
590
|
delegatePubKey: base.hex.encode(delegatePubKey),
|
|
605
|
-
csvTimelock:
|
|
591
|
+
csvTimelock: chunkC5Y2R63Z_cjs.timelockToSequence(c.csvTimelock).toString()
|
|
606
592
|
},
|
|
607
593
|
script: c.scriptHex,
|
|
608
594
|
address: c.script.address(deps.network.hrp, c.serverPubKey).encode()
|
|
@@ -1256,7 +1242,7 @@ function getOpcodeValue(name) {
|
|
|
1256
1242
|
|
|
1257
1243
|
// src/arkade/bignum.ts
|
|
1258
1244
|
var bignum_exports = {};
|
|
1259
|
-
|
|
1245
|
+
chunkC5Y2R63Z_cjs.__export(bignum_exports, {
|
|
1260
1246
|
BIGNUM_MAX_BYTES: () => BIGNUM_MAX_BYTES,
|
|
1261
1247
|
decode: () => decode,
|
|
1262
1248
|
encode: () => encode
|
|
@@ -1445,7 +1431,7 @@ function computeArkadeScriptPublicKey(pubKey, script) {
|
|
|
1445
1431
|
// src/script/vhtlc.ts
|
|
1446
1432
|
exports.VHTLC = void 0;
|
|
1447
1433
|
((VHTLC2) => {
|
|
1448
|
-
class BaseScript extends
|
|
1434
|
+
class BaseScript extends chunkC5Y2R63Z_cjs.VtxoScript {
|
|
1449
1435
|
options;
|
|
1450
1436
|
claimScript;
|
|
1451
1437
|
refundScript;
|
|
@@ -1472,27 +1458,27 @@ exports.VHTLC = void 0;
|
|
|
1472
1458
|
unilateralRefundWithoutReceiverDelay
|
|
1473
1459
|
} = options;
|
|
1474
1460
|
const conditionScript = preimageCondition(preimageHash);
|
|
1475
|
-
const claimScript =
|
|
1461
|
+
const claimScript = chunkC5Y2R63Z_cjs.ConditionMultisigTapscript.encode({
|
|
1476
1462
|
conditionScript,
|
|
1477
1463
|
pubkeys: [receiver, server]
|
|
1478
1464
|
}).script;
|
|
1479
|
-
const refundScript =
|
|
1465
|
+
const refundScript = chunkC5Y2R63Z_cjs.MultisigTapscript.encode({
|
|
1480
1466
|
pubkeys: [sender, receiver, server]
|
|
1481
1467
|
}).script;
|
|
1482
|
-
const refundWithoutReceiverScript =
|
|
1468
|
+
const refundWithoutReceiverScript = chunkC5Y2R63Z_cjs.CLTVMultisigTapscript.encode({
|
|
1483
1469
|
absoluteTimelock: refundLocktime,
|
|
1484
1470
|
pubkeys: [sender, server]
|
|
1485
1471
|
}).script;
|
|
1486
|
-
const unilateralClaimScript =
|
|
1472
|
+
const unilateralClaimScript = chunkC5Y2R63Z_cjs.ConditionCSVMultisigTapscript.encode({
|
|
1487
1473
|
conditionScript,
|
|
1488
1474
|
timelock: unilateralClaimDelay,
|
|
1489
1475
|
pubkeys: [receiver]
|
|
1490
1476
|
}).script;
|
|
1491
|
-
const unilateralRefundScript =
|
|
1477
|
+
const unilateralRefundScript = chunkC5Y2R63Z_cjs.CSVMultisigTapscript.encode({
|
|
1492
1478
|
timelock: unilateralRefundDelay,
|
|
1493
1479
|
pubkeys: [sender, receiver]
|
|
1494
1480
|
}).script;
|
|
1495
|
-
const unilateralRefundWithoutReceiverScript =
|
|
1481
|
+
const unilateralRefundWithoutReceiverScript = chunkC5Y2R63Z_cjs.CSVMultisigTapscript.encode({
|
|
1496
1482
|
timelock: unilateralRefundWithoutReceiverDelay,
|
|
1497
1483
|
pubkeys: [sender]
|
|
1498
1484
|
}).script;
|
|
@@ -1512,7 +1498,7 @@ exports.VHTLC = void 0;
|
|
|
1512
1498
|
const covenants = options.nonInteractiveParameters;
|
|
1513
1499
|
if (covenants) {
|
|
1514
1500
|
arkadeScriptNic = enforcePayToMaybeAsset(covenants.receiverPkScript, options.asset);
|
|
1515
|
-
nonInteractiveClaimScript =
|
|
1501
|
+
nonInteractiveClaimScript = chunkC5Y2R63Z_cjs.ConditionMultisigTapscript.encode({
|
|
1516
1502
|
conditionScript,
|
|
1517
1503
|
pubkeys: [
|
|
1518
1504
|
server,
|
|
@@ -1525,12 +1511,12 @@ exports.VHTLC = void 0;
|
|
|
1525
1511
|
covenants.emulatorPubkey,
|
|
1526
1512
|
arkadeScriptNir
|
|
1527
1513
|
);
|
|
1528
|
-
nonInteractiveRefundScript =
|
|
1514
|
+
nonInteractiveRefundScript = chunkC5Y2R63Z_cjs.MultisigTapscript.encode({
|
|
1529
1515
|
pubkeys: [server, receiver, nirCosigner]
|
|
1530
1516
|
}).script;
|
|
1531
1517
|
scripts.push(nonInteractiveRefundScript);
|
|
1532
1518
|
if (covenants.legacy !== "preTimelockedRefund") {
|
|
1533
|
-
nonInteractiveRefundWithoutReceiverScript =
|
|
1519
|
+
nonInteractiveRefundWithoutReceiverScript = chunkC5Y2R63Z_cjs.CLTVMultisigTapscript.encode({
|
|
1534
1520
|
absoluteTimelock: refundLocktime,
|
|
1535
1521
|
pubkeys: [server, nirCosigner]
|
|
1536
1522
|
}).script;
|
|
@@ -1844,9 +1830,9 @@ var VHTLCContractHandler = {
|
|
|
1844
1830
|
server: base.hex.encode(params.server),
|
|
1845
1831
|
hash: base.hex.encode(params.preimageHash),
|
|
1846
1832
|
refundLocktime: params.refundLocktime.toString(),
|
|
1847
|
-
claimDelay:
|
|
1848
|
-
refundDelay:
|
|
1849
|
-
refundNoReceiverDelay:
|
|
1833
|
+
claimDelay: chunkC5Y2R63Z_cjs.timelockToSequence(params.unilateralClaimDelay).toString(),
|
|
1834
|
+
refundDelay: chunkC5Y2R63Z_cjs.timelockToSequence(params.unilateralRefundDelay).toString(),
|
|
1835
|
+
refundNoReceiverDelay: chunkC5Y2R63Z_cjs.timelockToSequence(
|
|
1850
1836
|
params.unilateralRefundWithoutReceiverDelay
|
|
1851
1837
|
).toString()
|
|
1852
1838
|
};
|
|
@@ -1858,9 +1844,9 @@ var VHTLCContractHandler = {
|
|
|
1858
1844
|
server: base.hex.decode(params.server),
|
|
1859
1845
|
preimageHash: base.hex.decode(params.hash),
|
|
1860
1846
|
refundLocktime: BigInt(params.refundLocktime),
|
|
1861
|
-
unilateralClaimDelay:
|
|
1862
|
-
unilateralRefundDelay:
|
|
1863
|
-
unilateralRefundWithoutReceiverDelay:
|
|
1847
|
+
unilateralClaimDelay: chunkC5Y2R63Z_cjs.sequenceToTimelock(Number(params.claimDelay)),
|
|
1848
|
+
unilateralRefundDelay: chunkC5Y2R63Z_cjs.sequenceToTimelock(Number(params.refundDelay)),
|
|
1849
|
+
unilateralRefundWithoutReceiverDelay: chunkC5Y2R63Z_cjs.sequenceToTimelock(
|
|
1864
1850
|
Number(params.refundNoReceiverDelay)
|
|
1865
1851
|
)
|
|
1866
1852
|
};
|
|
@@ -1869,7 +1855,7 @@ var VHTLCContractHandler = {
|
|
|
1869
1855
|
* Select spending path based on context.
|
|
1870
1856
|
*
|
|
1871
1857
|
* Role is determined from `context.role` or by matching
|
|
1872
|
-
* `context.walletDescriptor`
|
|
1858
|
+
* `context.walletDescriptor`
|
|
1873
1859
|
* against sender/receiver in contract params.
|
|
1874
1860
|
*/
|
|
1875
1861
|
selectPath(script, contract, context) {
|
|
@@ -1916,7 +1902,7 @@ var VHTLCContractHandler = {
|
|
|
1916
1902
|
* Get all possible spending paths (no timelock checks).
|
|
1917
1903
|
*
|
|
1918
1904
|
* Role is determined from `context.role` or by matching
|
|
1919
|
-
* `context.walletDescriptor`
|
|
1905
|
+
* `context.walletDescriptor`
|
|
1920
1906
|
* against sender/receiver in contract params.
|
|
1921
1907
|
*/
|
|
1922
1908
|
getAllSpendingPaths(script, contract, context) {
|
|
@@ -2106,9 +2092,9 @@ var VHTLCV2ContractHandler = {
|
|
|
2106
2092
|
server: base.hex.encode(params.server),
|
|
2107
2093
|
hash: base.hex.encode(params.preimageHash),
|
|
2108
2094
|
refundLocktime: params.refundLocktime.toString(),
|
|
2109
|
-
claimDelay:
|
|
2110
|
-
refundDelay:
|
|
2111
|
-
refundNoReceiverDelay:
|
|
2095
|
+
claimDelay: chunkC5Y2R63Z_cjs.timelockToSequence(params.unilateralClaimDelay).toString(),
|
|
2096
|
+
refundDelay: chunkC5Y2R63Z_cjs.timelockToSequence(params.unilateralRefundDelay).toString(),
|
|
2097
|
+
refundNoReceiverDelay: chunkC5Y2R63Z_cjs.timelockToSequence(
|
|
2112
2098
|
params.unilateralRefundWithoutReceiverDelay
|
|
2113
2099
|
).toString(),
|
|
2114
2100
|
// The on-disk keys keep their per-leaf names even though the typed
|
|
@@ -2208,9 +2194,9 @@ var VHTLCV2ContractHandler = {
|
|
|
2208
2194
|
preimageHash: base.hex.decode(params.hash),
|
|
2209
2195
|
refundLocktime: BigInt(params.refundLocktime),
|
|
2210
2196
|
...asset && { asset },
|
|
2211
|
-
unilateralClaimDelay:
|
|
2212
|
-
unilateralRefundDelay:
|
|
2213
|
-
unilateralRefundWithoutReceiverDelay:
|
|
2197
|
+
unilateralClaimDelay: chunkC5Y2R63Z_cjs.sequenceToTimelock(Number(params.claimDelay)),
|
|
2198
|
+
unilateralRefundDelay: chunkC5Y2R63Z_cjs.sequenceToTimelock(Number(params.refundDelay)),
|
|
2199
|
+
unilateralRefundWithoutReceiverDelay: chunkC5Y2R63Z_cjs.sequenceToTimelock(
|
|
2214
2200
|
Number(params.refundNoReceiverDelay)
|
|
2215
2201
|
),
|
|
2216
2202
|
...claim && refund && {
|
|
@@ -2231,7 +2217,7 @@ var VHTLCV2ContractHandler = {
|
|
|
2231
2217
|
* Select spending path based on context.
|
|
2232
2218
|
*
|
|
2233
2219
|
* Role is determined from `context.role` or by matching
|
|
2234
|
-
* `context.walletDescriptor`
|
|
2220
|
+
* `context.walletDescriptor`
|
|
2235
2221
|
* against sender/receiver in contract params.
|
|
2236
2222
|
*/
|
|
2237
2223
|
selectPath(script, contract, context) {
|
|
@@ -2278,7 +2264,7 @@ var VHTLCV2ContractHandler = {
|
|
|
2278
2264
|
* Get all possible spending paths (no timelock checks).
|
|
2279
2265
|
*
|
|
2280
2266
|
* Role is determined from `context.role` or by matching
|
|
2281
|
-
* `context.walletDescriptor`
|
|
2267
|
+
* `context.walletDescriptor`
|
|
2282
2268
|
* against sender/receiver in contract params.
|
|
2283
2269
|
*/
|
|
2284
2270
|
getAllSpendingPaths(script, contract, context) {
|
|
@@ -2482,7 +2468,7 @@ var BoardingContractHandler = {
|
|
|
2482
2468
|
const coins = await deps.onchainProvider.getCoins(onchainAddress);
|
|
2483
2469
|
if (coins.length === 0) return [];
|
|
2484
2470
|
const scriptHex = base.hex.encode(script.pkScript);
|
|
2485
|
-
const boardingSeq =
|
|
2471
|
+
const boardingSeq = chunkC5Y2R63Z_cjs.timelockToSequence(deps.boardingTimelock);
|
|
2486
2472
|
return [
|
|
2487
2473
|
{
|
|
2488
2474
|
type: "boarding",
|
|
@@ -2643,27 +2629,27 @@ function encodeTapscriptSegment(seg, pubkeys, args) {
|
|
|
2643
2629
|
if (seg.csv) {
|
|
2644
2630
|
const timelock = { type: seg.csv.type, value: resolveTimelockValue(seg.csv.value, args) };
|
|
2645
2631
|
if (seg.asm) {
|
|
2646
|
-
return
|
|
2632
|
+
return chunkC5Y2R63Z_cjs.ConditionCSVMultisigTapscript.encode({
|
|
2647
2633
|
conditionScript: resolveAsm(seg.asm, args),
|
|
2648
2634
|
timelock,
|
|
2649
2635
|
pubkeys
|
|
2650
2636
|
});
|
|
2651
2637
|
}
|
|
2652
|
-
return
|
|
2638
|
+
return chunkC5Y2R63Z_cjs.CSVMultisigTapscript.encode({ timelock, pubkeys });
|
|
2653
2639
|
}
|
|
2654
2640
|
if (seg.cltv !== void 0) {
|
|
2655
|
-
return
|
|
2641
|
+
return chunkC5Y2R63Z_cjs.CLTVMultisigTapscript.encode({
|
|
2656
2642
|
absoluteTimelock: resolveTimelockValue(seg.cltv, args),
|
|
2657
2643
|
pubkeys
|
|
2658
2644
|
});
|
|
2659
2645
|
}
|
|
2660
2646
|
if (seg.asm) {
|
|
2661
|
-
return
|
|
2647
|
+
return chunkC5Y2R63Z_cjs.ConditionMultisigTapscript.encode({
|
|
2662
2648
|
conditionScript: resolveAsm(seg.asm, args),
|
|
2663
2649
|
pubkeys
|
|
2664
2650
|
});
|
|
2665
2651
|
}
|
|
2666
|
-
return
|
|
2652
|
+
return chunkC5Y2R63Z_cjs.MultisigTapscript.encode({ pubkeys });
|
|
2667
2653
|
}
|
|
2668
2654
|
function compileFunctions(program, args, keys) {
|
|
2669
2655
|
if (program.version !== SUPPORTED_PROGRAM_VERSION) {
|
|
@@ -2693,7 +2679,7 @@ function compileFunctions(program, args, keys) {
|
|
|
2693
2679
|
return { name: names[i], def, leafScript, arkadeScript, signerKeys: pubkeys };
|
|
2694
2680
|
});
|
|
2695
2681
|
}
|
|
2696
|
-
var ArkadeProgramScript = class extends
|
|
2682
|
+
var ArkadeProgramScript = class extends chunkC5Y2R63Z_cjs.VtxoScript {
|
|
2697
2683
|
constructor(program, args, keys) {
|
|
2698
2684
|
const partial = compileFunctions(program, args, keys);
|
|
2699
2685
|
super(partial.map((p) => p.leafScript));
|
|
@@ -2852,22 +2838,12 @@ function deserializeArkadeContractParams(params) {
|
|
|
2852
2838
|
|
|
2853
2839
|
// src/contracts/handlers/arkade.ts
|
|
2854
2840
|
function walletKeyFrom(context) {
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
return void 0;
|
|
2861
|
-
}
|
|
2862
|
-
};
|
|
2863
|
-
if (context.walletDescriptor) {
|
|
2864
|
-
const key = extract(context.walletDescriptor);
|
|
2865
|
-
if (key) return key;
|
|
2866
|
-
}
|
|
2867
|
-
if (context.walletPubKey) {
|
|
2868
|
-
return extract(context.walletPubKey);
|
|
2841
|
+
if (!context.walletDescriptor) return void 0;
|
|
2842
|
+
try {
|
|
2843
|
+
return extractPubKey(context.walletDescriptor).toLowerCase();
|
|
2844
|
+
} catch {
|
|
2845
|
+
return void 0;
|
|
2869
2846
|
}
|
|
2870
|
-
return void 0;
|
|
2871
2847
|
}
|
|
2872
2848
|
function staticWitness(fn, script) {
|
|
2873
2849
|
const refs = fn.def.tapscript.witness ?? [];
|
|
@@ -2906,7 +2882,7 @@ function pathsFor(script, context, opts) {
|
|
|
2906
2882
|
continue;
|
|
2907
2883
|
}
|
|
2908
2884
|
if (requiresServer) continue;
|
|
2909
|
-
const sequence = csv ? Number(
|
|
2885
|
+
const sequence = csv ? Number(chunkC5Y2R63Z_cjs.timelockToSequence(csv)) : void 0;
|
|
2910
2886
|
if (opts.checkTimelocks && csv && !isCsvSpendable(context, sequence)) continue;
|
|
2911
2887
|
if (opts.checkTimelocks && cltv !== void 0 && !isCltvSatisfied(context, cltv)) {
|
|
2912
2888
|
continue;
|
|
@@ -3035,5 +3011,5 @@ exports.toASM = toASM;
|
|
|
3035
3011
|
exports.toXOnly = toXOnly;
|
|
3036
3012
|
exports.validateProgram = validateProgram;
|
|
3037
3013
|
exports.witnessRefToBytes = witnessRefToBytes;
|
|
3038
|
-
//# sourceMappingURL=chunk-
|
|
3039
|
-
//# sourceMappingURL=chunk-
|
|
3014
|
+
//# sourceMappingURL=chunk-F7HJO5GT.cjs.map
|
|
3015
|
+
//# sourceMappingURL=chunk-F7HJO5GT.cjs.map
|