@lendasat/lendaswap-sdk-pure 0.2.41 → 0.2.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/dist/_esm-6K2AP5GG.js +3663 -0
  2. package/dist/_esm-6K2AP5GG.js.map +1 -0
  3. package/dist/_esm-UGRDSVEV.cjs +3662 -0
  4. package/dist/_esm-UGRDSVEV.cjs.map +1 -0
  5. package/dist/api/client.d.ts +0 -4
  6. package/dist/api/client.d.ts.map +1 -1
  7. package/dist/base-2KYNAFR3.cjs +109 -0
  8. package/dist/base-2KYNAFR3.cjs.map +1 -0
  9. package/dist/base-HMHH3XPM.js +9 -0
  10. package/dist/base-HMHH3XPM.js.map +1 -0
  11. package/dist/ccip-EBXWV2U3.js +8 -0
  12. package/dist/ccip-EBXWV2U3.js.map +1 -0
  13. package/dist/ccip-PD37NJHA.cjs +26 -0
  14. package/dist/ccip-PD37NJHA.cjs.map +1 -0
  15. package/dist/cctp-bridge/index.cjs +67 -0
  16. package/dist/cctp-bridge/index.cjs.map +1 -0
  17. package/dist/cctp-bridge/index.js +53 -15
  18. package/dist/cctp-bridge/index.js.map +1 -1
  19. package/dist/cctp-inbound/client.d.ts +21 -19
  20. package/dist/cctp-inbound/client.d.ts.map +1 -1
  21. package/dist/cctp-inbound/smartAccount.d.ts +21 -19
  22. package/dist/cctp-inbound/smartAccount.d.ts.map +1 -1
  23. package/dist/chunk-4JXN4UPB.js +554 -0
  24. package/dist/chunk-4JXN4UPB.js.map +1 -0
  25. package/dist/chunk-A4GKKURK.cjs +430 -0
  26. package/dist/chunk-A4GKKURK.cjs.map +1 -0
  27. package/dist/chunk-BZU3R5DJ.cjs +554 -0
  28. package/dist/chunk-BZU3R5DJ.cjs.map +1 -0
  29. package/dist/chunk-DBBCKPZ5.js +421 -0
  30. package/dist/chunk-DBBCKPZ5.js.map +1 -0
  31. package/dist/chunk-DNSJDKTP.cjs +96 -0
  32. package/dist/chunk-DNSJDKTP.cjs.map +1 -0
  33. package/dist/chunk-EIK6BZWG.js +90 -0
  34. package/dist/chunk-EIK6BZWG.js.map +1 -0
  35. package/dist/chunk-GVAPVS4Z.js +6144 -0
  36. package/dist/chunk-GVAPVS4Z.js.map +1 -0
  37. package/dist/chunk-I7TGLGN6.js +46 -0
  38. package/dist/chunk-I7TGLGN6.js.map +1 -0
  39. package/dist/chunk-JBVKWKD4.cjs +50 -0
  40. package/dist/chunk-JBVKWKD4.cjs.map +1 -0
  41. package/dist/chunk-LA3YX2HD.js +47096 -0
  42. package/dist/chunk-LA3YX2HD.js.map +1 -0
  43. package/dist/chunk-PKDJZJMV.cjs +2214 -0
  44. package/dist/chunk-PKDJZJMV.cjs.map +1 -0
  45. package/dist/chunk-PRN5VZOM.js +370 -0
  46. package/dist/chunk-PRN5VZOM.js.map +1 -0
  47. package/dist/chunk-RIOT5VOJ.cjs +47240 -0
  48. package/dist/chunk-RIOT5VOJ.cjs.map +1 -0
  49. package/dist/chunk-WVZSHRV7.cjs +431 -0
  50. package/dist/chunk-WVZSHRV7.cjs.map +1 -0
  51. package/dist/chunk-YLWPBHMV.cjs +6311 -0
  52. package/dist/chunk-YLWPBHMV.cjs.map +1 -0
  53. package/dist/chunk-Z2FCTNRC.js +2210 -0
  54. package/dist/chunk-Z2FCTNRC.js.map +1 -0
  55. package/dist/client.d.ts +68 -1
  56. package/dist/client.d.ts.map +1 -1
  57. package/dist/compose-quote.d.ts +77 -0
  58. package/dist/compose-quote.d.ts.map +1 -0
  59. package/dist/delegate.cjs +23 -0
  60. package/dist/delegate.cjs.map +1 -0
  61. package/dist/delegate.js +8 -269
  62. package/dist/delegate.js.map +1 -1
  63. package/dist/dist-PWXNFVDF.js +8 -0
  64. package/dist/dist-PWXNFVDF.js.map +1 -0
  65. package/dist/dist-VEHYC67F.cjs +550 -0
  66. package/dist/dist-VEHYC67F.cjs.map +1 -0
  67. package/dist/esplora.d.ts +14 -0
  68. package/dist/esplora.d.ts.map +1 -1
  69. package/dist/generated/api.d.ts +235 -38
  70. package/dist/generated/api.d.ts.map +1 -1
  71. package/dist/index.cjs +35461 -0
  72. package/dist/index.cjs.map +1 -0
  73. package/dist/index.d.ts +2 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +35312 -32
  76. package/dist/index.js.map +1 -1
  77. package/dist/mine.wasm-LUTPOAD2.js +12 -0
  78. package/dist/mine.wasm-LUTPOAD2.js.map +1 -0
  79. package/dist/mine.wasm-Z3ORSBKN.cjs +12 -0
  80. package/dist/mine.wasm-Z3ORSBKN.cjs.map +1 -0
  81. package/dist/node.cjs +166 -0
  82. package/dist/node.cjs.map +1 -0
  83. package/dist/node.js +159 -18
  84. package/dist/node.js.map +1 -1
  85. package/dist/secp256k1-B6OW5ZCM.js +8 -0
  86. package/dist/secp256k1-B6OW5ZCM.js.map +1 -0
  87. package/dist/secp256k1-PJCSE4N6.cjs +30 -0
  88. package/dist/secp256k1-PJCSE4N6.cjs.map +1 -0
  89. package/dist/tokens.d.ts +2 -1
  90. package/dist/tokens.d.ts.map +1 -1
  91. package/dist/types/chain-config.d.ts +50 -0
  92. package/dist/types/chain-config.d.ts.map +1 -0
  93. package/dist/types/chain.d.ts +11 -0
  94. package/dist/types/chain.d.ts.map +1 -0
  95. package/dist/types/dex-quote.d.ts +85 -0
  96. package/dist/types/dex-quote.d.ts.map +1 -0
  97. package/dist/types/index.d.ts +15 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/network-fees.d.ts +43 -0
  100. package/dist/types/network-fees.d.ts.map +1 -0
  101. package/dist/types/quote.d.ts +87 -0
  102. package/dist/types/quote.d.ts.map +1 -0
  103. package/dist/types/swap-pairs.d.ts +37 -0
  104. package/dist/types/swap-pairs.d.ts.map +1 -0
  105. package/dist/version.d.ts +2 -2
  106. package/dist/wallet-4YGTKWNZ.js +7 -0
  107. package/dist/wallet-4YGTKWNZ.js.map +1 -0
  108. package/dist/wallet-SZJDXAY7.cjs +45 -0
  109. package/dist/wallet-SZJDXAY7.cjs.map +1 -0
  110. package/package.json +23 -10
  111. package/dist/api/client.js +0 -13
  112. package/dist/api/client.js.map +0 -1
  113. package/dist/arkade-network.js +0 -40
  114. package/dist/arkade-network.js.map +0 -1
  115. package/dist/arkade.js +0 -61
  116. package/dist/arkade.js.map +0 -1
  117. package/dist/cctp/attestation.js +0 -149
  118. package/dist/cctp/attestation.js.map +0 -1
  119. package/dist/cctp/constants.js +0 -92
  120. package/dist/cctp/constants.js.map +0 -1
  121. package/dist/cctp/fee.js +0 -70
  122. package/dist/cctp/fee.js.map +0 -1
  123. package/dist/cctp/index.js +0 -13
  124. package/dist/cctp/index.js.map +0 -1
  125. package/dist/cctp/types.js +0 -5
  126. package/dist/cctp/types.js.map +0 -1
  127. package/dist/cctp/utils.js +0 -91
  128. package/dist/cctp/utils.js.map +0 -1
  129. package/dist/cctp-bridge/bridge.js +0 -74
  130. package/dist/cctp-bridge/bridge.js.map +0 -1
  131. package/dist/cctp-inbound/approveAndBurn.js +0 -95
  132. package/dist/cctp-inbound/approveAndBurn.js.map +0 -1
  133. package/dist/cctp-inbound/burn.js +0 -66
  134. package/dist/cctp-inbound/burn.js.map +0 -1
  135. package/dist/cctp-inbound/chainMap.js +0 -128
  136. package/dist/cctp-inbound/chainMap.js.map +0 -1
  137. package/dist/cctp-inbound/client.js +0 -125
  138. package/dist/cctp-inbound/client.js.map +0 -1
  139. package/dist/cctp-inbound/eip2612.js +0 -95
  140. package/dist/cctp-inbound/eip2612.js.map +0 -1
  141. package/dist/cctp-inbound/evmSignerAdapter.js +0 -82
  142. package/dist/cctp-inbound/evmSignerAdapter.js.map +0 -1
  143. package/dist/cctp-inbound/fundSwap.js +0 -95
  144. package/dist/cctp-inbound/fundSwap.js.map +0 -1
  145. package/dist/cctp-inbound/index.js +0 -34
  146. package/dist/cctp-inbound/index.js.map +0 -1
  147. package/dist/cctp-inbound/permit2.js +0 -32
  148. package/dist/cctp-inbound/permit2.js.map +0 -1
  149. package/dist/cctp-inbound/preflight.js +0 -84
  150. package/dist/cctp-inbound/preflight.js.map +0 -1
  151. package/dist/cctp-inbound/recover.js +0 -177
  152. package/dist/cctp-inbound/recover.js.map +0 -1
  153. package/dist/cctp-inbound/smartAccount.js +0 -117
  154. package/dist/cctp-inbound/smartAccount.js.map +0 -1
  155. package/dist/cctp-inbound/submit.js +0 -136
  156. package/dist/cctp-inbound/submit.js.map +0 -1
  157. package/dist/cctp-inbound/types.js +0 -5
  158. package/dist/cctp-inbound/types.js.map +0 -1
  159. package/dist/cctp-inbound/userOp.js +0 -151
  160. package/dist/cctp-inbound/userOp.js.map +0 -1
  161. package/dist/client.js +0 -4126
  162. package/dist/client.js.map +0 -1
  163. package/dist/create/arkade-to-lightning.js +0 -76
  164. package/dist/create/arkade-to-lightning.js.map +0 -1
  165. package/dist/create/arkade.js +0 -86
  166. package/dist/create/arkade.js.map +0 -1
  167. package/dist/create/bitcoin-to-arkade.js +0 -76
  168. package/dist/create/bitcoin-to-arkade.js.map +0 -1
  169. package/dist/create/bitcoin.js +0 -77
  170. package/dist/create/bitcoin.js.map +0 -1
  171. package/dist/create/evm-to-arkade.js +0 -80
  172. package/dist/create/evm-to-arkade.js.map +0 -1
  173. package/dist/create/evm-to-bitcoin.js +0 -82
  174. package/dist/create/evm-to-bitcoin.js.map +0 -1
  175. package/dist/create/evm-to-lightning.js +0 -89
  176. package/dist/create/evm-to-lightning.js.map +0 -1
  177. package/dist/create/index.js +0 -21
  178. package/dist/create/index.js.map +0 -1
  179. package/dist/create/lightning-to-arkade.js +0 -69
  180. package/dist/create/lightning-to-arkade.js.map +0 -1
  181. package/dist/create/lightning.js +0 -61
  182. package/dist/create/lightning.js.map +0 -1
  183. package/dist/create/retry.js +0 -71
  184. package/dist/create/retry.js.map +0 -1
  185. package/dist/create/types.js +0 -5
  186. package/dist/create/types.js.map +0 -1
  187. package/dist/escrow/index.js +0 -115
  188. package/dist/escrow/index.js.map +0 -1
  189. package/dist/esplora.js +0 -47
  190. package/dist/esplora.js.map +0 -1
  191. package/dist/evm/coordinator.js +0 -714
  192. package/dist/evm/coordinator.js.map +0 -1
  193. package/dist/evm/htlc.js +0 -278
  194. package/dist/evm/htlc.js.map +0 -1
  195. package/dist/evm/index.js +0 -10
  196. package/dist/evm/index.js.map +0 -1
  197. package/dist/evm/signing.js +0 -70
  198. package/dist/evm/signing.js.map +0 -1
  199. package/dist/evm/wallet.js +0 -133
  200. package/dist/evm/wallet.js.map +0 -1
  201. package/dist/generated/api.js +0 -6
  202. package/dist/generated/api.js.map +0 -1
  203. package/dist/logging.js +0 -130
  204. package/dist/logging.js.map +0 -1
  205. package/dist/price-calculations.js +0 -135
  206. package/dist/price-calculations.js.map +0 -1
  207. package/dist/redeem/arkade.js +0 -416
  208. package/dist/redeem/arkade.js.map +0 -1
  209. package/dist/redeem/ethereum.js +0 -206
  210. package/dist/redeem/ethereum.js.map +0 -1
  211. package/dist/redeem/gasless.js +0 -73
  212. package/dist/redeem/gasless.js.map +0 -1
  213. package/dist/redeem/index.js +0 -189
  214. package/dist/redeem/index.js.map +0 -1
  215. package/dist/redeem/types.js +0 -36
  216. package/dist/redeem/types.js.map +0 -1
  217. package/dist/refund/arkade.js +0 -200
  218. package/dist/refund/arkade.js.map +0 -1
  219. package/dist/refund/collab-arkade-evm.js +0 -307
  220. package/dist/refund/collab-arkade-evm.js.map +0 -1
  221. package/dist/refund/collab-arkade-lightning.js +0 -245
  222. package/dist/refund/collab-arkade-lightning.js.map +0 -1
  223. package/dist/refund/index.js +0 -12
  224. package/dist/refund/index.js.map +0 -1
  225. package/dist/refund/onchain.js +0 -366
  226. package/dist/refund/onchain.js.map +0 -1
  227. package/dist/signer/index.js +0 -249
  228. package/dist/signer/index.js.map +0 -1
  229. package/dist/storage/idb.js +0 -236
  230. package/dist/storage/idb.js.map +0 -1
  231. package/dist/storage/index.js +0 -98
  232. package/dist/storage/index.js.map +0 -1
  233. package/dist/storage/sqlite.js +0 -206
  234. package/dist/storage/sqlite.js.map +0 -1
  235. package/dist/storage/types.js +0 -9
  236. package/dist/storage/types.js.map +0 -1
  237. package/dist/tokens.js +0 -322
  238. package/dist/tokens.js.map +0 -1
  239. package/dist/usd-price.js +0 -96
  240. package/dist/usd-price.js.map +0 -1
  241. package/dist/usdt0-bridge/constants.js +0 -71
  242. package/dist/usdt0-bridge/constants.js.map +0 -1
  243. package/dist/usdt0-bridge/index.js +0 -11
  244. package/dist/usdt0-bridge/index.js.map +0 -1
  245. package/dist/usdt0-bridge/tracking.js +0 -123
  246. package/dist/usdt0-bridge/tracking.js.map +0 -1
  247. package/dist/usdt0-bridge/utils.js +0 -51
  248. package/dist/usdt0-bridge/utils.js.map +0 -1
  249. package/dist/version.js +0 -6
  250. package/dist/version.js.map +0 -1
  251. package/dist/ws.js +0 -145
  252. package/dist/ws.js.map +0 -1
@@ -1,416 +0,0 @@
1
- /**
2
- * Arkade (off-chain) VHTLC claim implementation.
3
- *
4
- * This module provides VHTLC claim functionality for Arkade swaps.
5
- * When a swap is funded by the server (EVM-to-Arkade direction),
6
- * the user can claim their BTC by revealing the preimage.
7
- *
8
- * The VHTLC uses a Taproot output with multiple spending paths. For claims,
9
- * we use the `claim` script path which requires revealing the preimage.
10
- */
11
- import { buildOffchainTx, ConditionWitness, CSVMultisigTapscript, Intent, RestArkProvider, RestIndexerProvider, SingleKey, setArkPsbtField, Transaction, VHTLC, VtxoTaprootTree, } from "@arkade-os/sdk";
12
- import { ripemd160 } from "@noble/hashes/legacy.js";
13
- import { sha256 } from "@noble/hashes/sha2.js";
14
- import { base64, hex } from "@scure/base";
15
- import { SigHash } from "@scure/btc-signer";
16
- import { getNetworkHrp, getNetworkName, resolveArkadeServerUrlByName, } from "../arkade-network.js";
17
- import { createSdkLogger } from "../logging.js";
18
- /**
19
- * Convert seconds to RelativeTimelock format.
20
- */
21
- function secondsToTimelock(seconds) {
22
- return {
23
- type: "seconds",
24
- value: BigInt(seconds),
25
- };
26
- }
27
- /**
28
- * Parse public key, handling both compressed (33-byte) and x-only (32-byte) formats.
29
- * Returns x-only (32-byte) format.
30
- */
31
- function parseXOnlyPubKey(pubKeyHex) {
32
- const bytes = hex.decode(pubKeyHex);
33
- if (bytes.length === 33) {
34
- // Compressed pubkey, strip the prefix byte
35
- return bytes.slice(1);
36
- }
37
- if (bytes.length === 32) {
38
- // Already x-only
39
- return bytes;
40
- }
41
- throw new Error(`Invalid public key length: expected 32 or 33, got ${bytes.length}`);
42
- }
43
- function isNoPendingClaimError(error) {
44
- return (error instanceof Error &&
45
- error.message.startsWith("No pending transactions found at the VHTLC address"));
46
- }
47
- /**
48
- * Claim a VHTLC swap by revealing the preimage.
49
- *
50
- * This function:
51
- * 1. Constructs the VHTLC with the same parameters as the original swap
52
- * 2. Connects to the Arkade server
53
- * 3. Fetches spendable VTXOs at the VHTLC address
54
- * 4. Builds an offchain transaction using the claim script path
55
- * 5. Signs and submits the transaction (with preimage in witness)
56
- * 6. Finalizes the transaction
57
- *
58
- * @param params - The claim parameters
59
- * @returns The claim result with transaction ID and amount
60
- * @throws Error if the claim fails
61
- */
62
- export async function buildArkadeClaim(params) {
63
- const { userSecretKey, userPubKey, lendaswapPubKey, arkadeServerPubKey, preimage, preimageHash, vhtlcAddress, refundLocktime, unilateralClaimDelay, unilateralRefundDelay, unilateralRefundWithoutReceiverDelay, destinationAddress, network, arkadeServerUrl, } = params;
64
- const logger = createSdkLogger(params).child({
65
- module: "redeem/arkade",
66
- operation: "arkade.claim",
67
- data: { vhtlcAddress, network, destinationAddress },
68
- });
69
- logger.info({
70
- event: "arkade.claim.start",
71
- message: "Starting Arkade claim",
72
- });
73
- // Arkade offchain spends are submit/finalize. If a previous attempt submitted
74
- // but failed before finalization, submitting again with the same VTXOs will
75
- // fail. First ask the server for an existing pending tx and finalize that.
76
- try {
77
- return await continueArkadeClaim(params);
78
- }
79
- catch (error) {
80
- if (!isNoPendingClaimError(error)) {
81
- throw error;
82
- }
83
- console.log("No pending Arkade claim found; submitting a new claim");
84
- }
85
- // Parse keys
86
- // For claim: user is RECEIVER, lendaswap is SENDER
87
- const userPkBytes = parseXOnlyPubKey(userPubKey);
88
- const lendaswapPkBytes = parseXOnlyPubKey(lendaswapPubKey);
89
- const serverPkBytes = parseXOnlyPubKey(arkadeServerPubKey);
90
- // Parse preimage and compute hash
91
- const preimageBytes = hex.decode(preimage);
92
- if (preimageBytes.length !== 32) {
93
- throw new Error(`Invalid preimage length: expected 32, got ${preimageBytes.length}`);
94
- }
95
- // Compute preimage hash: SHA256 -> RIPEMD160 (HASH160)
96
- const sha256Hash = sha256(preimageBytes);
97
- const preimageHashBytes = ripemd160(sha256Hash);
98
- const preimageHashBytesString = hex.encode(preimageHashBytes);
99
- if (preimageHashBytesString !== hex.encode(ripemd160(hex.decode(preimageHash)))) {
100
- throw new Error(`Preimage hash are not equal. '${hex.encode(ripemd160(hex.decode(preimageHash)))}' vs ${preimageHashBytesString}'`);
101
- }
102
- // Determine Arkade server URL
103
- const networkName = getNetworkName(network);
104
- const serverUrl = resolveArkadeServerUrlByName(networkName, arkadeServerUrl);
105
- // Create Arkade providers
106
- const arkProvider = new RestArkProvider(serverUrl);
107
- const indexerProvider = new RestIndexerProvider(serverUrl);
108
- // Get server info
109
- const serverInfo = await arkProvider.getInfo();
110
- // Construct VHTLC with the same parameters as the original swap
111
- // For claim: lendaswap is the SENDER, user is the RECEIVER
112
- const vhtlc = new VHTLC.Script({
113
- sender: lendaswapPkBytes,
114
- receiver: userPkBytes,
115
- server: serverPkBytes,
116
- preimageHash: preimageHashBytes,
117
- refundLocktime: BigInt(refundLocktime),
118
- unilateralClaimDelay: secondsToTimelock(unilateralClaimDelay),
119
- unilateralRefundDelay: secondsToTimelock(unilateralRefundDelay),
120
- unilateralRefundWithoutReceiverDelay: secondsToTimelock(unilateralRefundWithoutReceiverDelay),
121
- });
122
- // Get network HRP and verify computed VHTLC address
123
- const hrp = getNetworkHrp(networkName);
124
- const computedAddress = vhtlc.address(hrp, serverPkBytes);
125
- const computedAddressStr = computedAddress.encode();
126
- // Verify address matches expected
127
- if (computedAddressStr !== vhtlcAddress) {
128
- throw new Error(`Computed VHTLC address (${computedAddressStr}) does not match expected (${vhtlcAddress})`);
129
- }
130
- // Fetch VTXOs at the VHTLC address
131
- const vhtlcPkScript = hex.encode(vhtlc.pkScript);
132
- const { vtxos } = await indexerProvider.getVtxos({
133
- scripts: [vhtlcPkScript],
134
- spendableOnly: true,
135
- });
136
- if (vtxos.length === 0) {
137
- const { vtxos: allVtxos } = await indexerProvider.getVtxos({
138
- scripts: [vhtlcPkScript],
139
- });
140
- logger.debug({
141
- event: "arkade.claim.no_spendable_vtxos",
142
- message: "No spendable VTXOs found at VHTLC address",
143
- data: { vtxos: allVtxos },
144
- });
145
- throw new Error("No spendable VTXOs found at the VHTLC address");
146
- }
147
- // Calculate total amount
148
- const totalAmount = vtxos.reduce((acc, v) => acc + BigInt(v.value), 0n);
149
- if (totalAmount === 0n) {
150
- throw new Error("Total VTXO amount is zero");
151
- }
152
- // Get the claim TapLeafScript (this is the key difference from refund)
153
- const claimLeafScript = vhtlc.claim();
154
- // Encode the VHTLC tap tree
155
- const tapTree = vhtlc.encode();
156
- // Decode the server's checkpoint tapscript
157
- const checkpointTapscript = CSVMultisigTapscript.decode(hex.decode(serverInfo.checkpointTapscript));
158
- // Build inputs for offchain transaction
159
- // Include the preimage in the witness data
160
- const inputs = vtxos.map((v) => ({
161
- txid: v.txid,
162
- vout: v.vout,
163
- value: v.value,
164
- tapTree: tapTree,
165
- tapLeafScript: claimLeafScript,
166
- // The preimage will be added to the witness during signing
167
- witnessData: preimageBytes,
168
- }));
169
- // Parse destination address
170
- const { ArkAddress } = await import("@arkade-os/sdk");
171
- const destAddr = ArkAddress.decode(destinationAddress);
172
- const destPkScript = destAddr.pkScript;
173
- // Build outputs
174
- const outputs = [
175
- {
176
- script: destPkScript,
177
- amount: totalAmount,
178
- },
179
- ];
180
- logger.info({
181
- event: "arkade.claim.vtxos_found",
182
- message: "Found spendable VTXOs for Arkade claim",
183
- data: { totalAmount, vtxoCount: vtxos.length },
184
- });
185
- // Build the offchain transaction
186
- const { arkTx, checkpoints } = buildOffchainTx(inputs, outputs, checkpointTapscript);
187
- // Create signer from user's secret key
188
- const signer = SingleKey.fromHex(userSecretKey);
189
- const computedPk = await signer.xOnlyPublicKey();
190
- if (hex.encode(userPkBytes) !== hex.encode(computedPk)) {
191
- throw new Error(`Signing with wrong key? ${hex.encode(userPkBytes)} vs ${hex.encode(computedPk)}`);
192
- }
193
- // Sign the ark transaction
194
- setArkPsbtField(arkTx, 0, ConditionWitness, [preimageBytes]);
195
- const signedArkTx = await signer.sign(arkTx);
196
- // Submit the transaction to the Arkade server
197
- const signedArkTxBase64 = base64.encode(signedArkTx.toPSBT());
198
- const { arkTxid, signedCheckpointTxs } = await arkProvider.submitTx(signedArkTxBase64, checkpoints.map((cp) => base64.encode(cp.toPSBT())));
199
- // Sign and finalize checkpoint transactions
200
- const finalCheckpoints = await Promise.all(signedCheckpointTxs.map(async (c) => {
201
- const tx = Transaction.fromPSBT(base64.decode(c));
202
- setArkPsbtField(tx, 0, ConditionWitness, [preimageBytes]);
203
- const signedCheckpoint = await signer.sign(tx, [0]);
204
- return base64.encode(signedCheckpoint.toPSBT());
205
- }));
206
- logger.debug({
207
- event: "arkade.claim.checkpoints_signed",
208
- message: "Checkpoint transactions signed",
209
- });
210
- // Finalize the transaction
211
- try {
212
- await arkProvider.finalizeTx(arkTxid, finalCheckpoints);
213
- }
214
- catch (error) {
215
- logger.error({
216
- event: "arkade.claim.finalize_failed",
217
- message: "Failed to finalize Arkade claim",
218
- error,
219
- });
220
- throw error;
221
- }
222
- logger.info({
223
- event: "arkade.claim.finalized",
224
- message: "Arkade claim finalized",
225
- data: { arkTxid },
226
- });
227
- return {
228
- txId: arkTxid,
229
- claimAmount: totalAmount,
230
- };
231
- }
232
- export async function continueArkadeClaim(params) {
233
- const { userSecretKey, userPubKey, lendaswapPubKey, arkadeServerPubKey, preimage, preimageHash, vhtlcAddress, refundLocktime, unilateralClaimDelay, unilateralRefundDelay, unilateralRefundWithoutReceiverDelay,
234
- // destinationAddress not needed — we continue an existing pending tx
235
- network, arkadeServerUrl, } = params;
236
- const logger = createSdkLogger(params).child({
237
- module: "redeem/arkade",
238
- operation: "arkade.claim.continue",
239
- data: { vhtlcAddress, network },
240
- });
241
- logger.info({
242
- event: "arkade.claim.continue_start",
243
- message: "Continuing Arkade claim",
244
- });
245
- // Parse keys
246
- // For claim: user is RECEIVER, lendaswap is SENDER
247
- const userPkBytes = parseXOnlyPubKey(userPubKey);
248
- const lendaswapPkBytes = parseXOnlyPubKey(lendaswapPubKey);
249
- const serverPkBytes = parseXOnlyPubKey(arkadeServerPubKey);
250
- // Parse preimage and compute hash
251
- const preimageBytes = hex.decode(preimage);
252
- if (preimageBytes.length !== 32) {
253
- throw new Error(`Invalid preimage length: expected 32, got ${preimageBytes.length}`);
254
- }
255
- // Compute preimage hash: SHA256 -> RIPEMD160 (HASH160)
256
- const sha256Hash = sha256(preimageBytes);
257
- const preimageHashBytes = ripemd160(sha256Hash);
258
- const preimageHashBytesString = hex.encode(preimageHashBytes);
259
- if (preimageHashBytesString !== hex.encode(ripemd160(hex.decode(preimageHash)))) {
260
- throw new Error(`Preimage hash are not equal. '${hex.encode(ripemd160(hex.decode(preimageHash)))}' vs ${preimageHashBytesString}'`);
261
- }
262
- // Determine Arkade server URL
263
- const networkName = getNetworkName(network);
264
- const serverUrl = resolveArkadeServerUrlByName(networkName, arkadeServerUrl);
265
- // Create Arkade providers
266
- const arkProvider = new RestArkProvider(serverUrl);
267
- const indexerProvider = new RestIndexerProvider(serverUrl);
268
- // Construct VHTLC with the same parameters as the original swap
269
- // For claim: lendaswap is the SENDER, user is the RECEIVER
270
- const vhtlc = new VHTLC.Script({
271
- sender: lendaswapPkBytes,
272
- receiver: userPkBytes,
273
- server: serverPkBytes,
274
- preimageHash: preimageHashBytes,
275
- refundLocktime: BigInt(refundLocktime),
276
- unilateralClaimDelay: secondsToTimelock(unilateralClaimDelay),
277
- unilateralRefundDelay: secondsToTimelock(unilateralRefundDelay),
278
- unilateralRefundWithoutReceiverDelay: secondsToTimelock(unilateralRefundWithoutReceiverDelay),
279
- });
280
- // Get network HRP and verify computed VHTLC address
281
- const hrp = getNetworkHrp(networkName);
282
- const computedAddress = vhtlc.address(hrp, serverPkBytes);
283
- const computedAddressStr = computedAddress.encode();
284
- // Verify address matches expected
285
- if (computedAddressStr !== vhtlcAddress) {
286
- throw new Error(`Computed VHTLC address (${computedAddressStr}) does not match expected (${vhtlcAddress})`);
287
- }
288
- // Fetch VTXOs at the VHTLC address
289
- const vhtlcPkScript = hex.encode(vhtlc.pkScript);
290
- const { vtxos } = await indexerProvider.getVtxos({
291
- scripts: [vhtlcPkScript],
292
- });
293
- if (vtxos.length === 0) {
294
- const { vtxos: allVtxos } = await indexerProvider.getVtxos({
295
- scripts: [vhtlcPkScript],
296
- });
297
- logger.debug({
298
- event: "arkade.claim.no_spendable_vtxos",
299
- message: "No spendable VTXOs found at VHTLC address",
300
- data: { vtxos: allVtxos },
301
- });
302
- throw new Error("No spendable VTXOs found at the VHTLC address");
303
- }
304
- // Calculate total amount
305
- const totalAmount = vtxos.reduce((acc, v) => acc + BigInt(v.value), 0n);
306
- if (totalAmount === 0n) {
307
- throw new Error("Total VTXO amount is zero");
308
- }
309
- // Get the claim TapLeafScript (needed for the GetPendingTx intent)
310
- const claimLeafScript = vhtlc.claim();
311
- const claimScriptByte = claimLeafScript[1];
312
- // Encode the VHTLC tap tree
313
- const tapTree = vhtlc.encode();
314
- logger.info({
315
- event: "arkade.claim.continue_vtxos_found",
316
- message: "Found VTXOs for pending Arkade claim",
317
- data: { totalAmount, vtxoCount: vtxos.length },
318
- });
319
- // Build a GetPendingTx intent to ask Arkade for pending transactions
320
- const now = Math.floor(Date.now() / 1000);
321
- const intentMessage = {
322
- type: "get-pending-tx",
323
- expire_at: now + 120,
324
- };
325
- // Build intent inputs from VTXOs
326
- const pkScriptBytes = hex.decode(vhtlcPkScript);
327
- const intentInputs = vtxos.map((v) => ({
328
- txid: hex.decode(v.txid),
329
- index: v.vout,
330
- witnessUtxo: {
331
- script: pkScriptBytes,
332
- amount: BigInt(v.value),
333
- },
334
- tapLeafScript: [claimLeafScript],
335
- sighashType: SigHash.ALL,
336
- }));
337
- // Create the intent proof PSBT
338
- const intentProof = Intent.create(intentMessage, intentInputs);
339
- // Set VtxoTaprootTree on each real input (skip input 0 which is the toSpend ref)
340
- for (let i = 0; i < vtxos.length; i++) {
341
- setArkPsbtField(intentProof, i + 1, VtxoTaprootTree, tapTree);
342
- }
343
- // Set condition witness (preimage) on each real input
344
- for (let i = 0; i < vtxos.length; i++) {
345
- setArkPsbtField(intentProof, i + 1, ConditionWitness, [preimageBytes]);
346
- }
347
- // Create signer from user's secret key
348
- const signer = SingleKey.fromHex(userSecretKey);
349
- const computedPk = await signer.xOnlyPublicKey();
350
- if (hex.encode(userPkBytes) !== hex.encode(computedPk)) {
351
- throw new Error(`Signing with wrong key? ${hex.encode(userPkBytes)} vs ${hex.encode(computedPk)}`);
352
- }
353
- // Sign the intent proof
354
- const signedIntentProof = await signer.sign(intentProof);
355
- const signedIntent = {
356
- proof: base64.encode(signedIntentProof.toPSBT()),
357
- message: intentMessage,
358
- };
359
- // Fetch pending transactions from Arkade
360
- const pendingTxs = await arkProvider.getPendingTxs(signedIntent);
361
- if (pendingTxs.length === 0) {
362
- throw new Error("No pending transactions found at the VHTLC address. The claim may have already been finalized or was never submitted.");
363
- }
364
- logger.info({
365
- event: "arkade.claim.pending_txs_found",
366
- message: "Found pending Arkade claim transactions",
367
- data: { pendingTxCount: pendingTxs.length },
368
- });
369
- // Finalize each pending transaction
370
- let lastResult;
371
- for (const pendingTx of pendingTxs) {
372
- const { arkTxid, signedCheckpointTxs } = pendingTx;
373
- // Sign and finalize checkpoint transactions
374
- const finalCheckpoints = await Promise.all(signedCheckpointTxs.map(async (c) => {
375
- const checkpointTx = Transaction.fromPSBT(base64.decode(c));
376
- // Restore missing witness scripts from the ark tx
377
- checkpointTx.updateInput(0, {
378
- witnessScript: claimScriptByte,
379
- });
380
- // Inject preimage into all checkpoint inputs
381
- for (let i = 0; i < checkpointTx.inputsLength; i++) {
382
- setArkPsbtField(checkpointTx, i, ConditionWitness, [preimageBytes]);
383
- }
384
- // Sign input 0 (the checkpoint input)
385
- const signedCheckpoint = await signer.sign(checkpointTx, [0]);
386
- return base64.encode(signedCheckpoint.toPSBT());
387
- }));
388
- // Finalize the transaction
389
- try {
390
- await arkProvider.finalizeTx(arkTxid, finalCheckpoints);
391
- }
392
- catch (error) {
393
- logger.error({
394
- event: "arkade.claim.continue_finalize_failed",
395
- message: "Failed to finalize pending Arkade claim",
396
- error,
397
- });
398
- throw error;
399
- }
400
- logger.info({
401
- event: "arkade.claim.finalized",
402
- message: "Arkade claim finalized",
403
- data: { arkTxid },
404
- });
405
- lastResult = {
406
- txId: arkTxid,
407
- claimAmount: totalAmount,
408
- };
409
- }
410
- if (!lastResult) {
411
- throw Error("Failed continuing claim");
412
- }
413
- // We know lastResult is defined because we checked pendingTxs.length > 0
414
- return lastResult;
415
- }
416
- //# sourceMappingURL=arkade.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"arkade.js","sourceRoot":"","sources":["../../src/redeem/arkade.ts"],"names":[],"mappings":"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"}
@@ -1,206 +0,0 @@
1
- /**
2
- * Ethereum claim logic with contract call data encoding.
3
- *
4
- * EVM claims use the HTLCErc20 contract's redeem() function which requires
5
- * all original swap parameters for verification.
6
- */
7
- /**
8
- * Builds the claim data for an EVM swap (Ethereum, Polygon, or Arbitrum).
9
- *
10
- * The HTLCErc20 contract requires all original swap parameters for verification:
11
- * - preimage: The secret whose SHA-256 hash matches the preimageHash
12
- * - amount: Token amount that was locked
13
- * - token: ERC20 token address that was locked
14
- * - sender: Address that created the swap (server)
15
- * - timelock: Unix timestamp after which sender can refund
16
- *
17
- * @param id - The UUID of the swap (not used in contract call, kept for reference).
18
- * @param secret - The preimage/secret (32-byte hex string, with or without 0x prefix).
19
- * @param swap - The swap response from the API.
20
- * @param chain - The target chain for the claim.
21
- * @returns A ClaimResult with the EVM claim data.
22
- */
23
- export function buildEthereumClaimData(id, secret, swap, chain) {
24
- const contractAddress = getEvmHtlcAddress(swap);
25
- if (!contractAddress) {
26
- return {
27
- success: false,
28
- message: "Could not find HTLC contract address in swap response.",
29
- chain,
30
- };
31
- }
32
- // Extract swap parameters needed for redeem()
33
- const params = getRedeemParams(swap);
34
- if (!params) {
35
- return {
36
- success: false,
37
- message: "Could not extract redeem parameters from swap response. Missing amount, token, sender, or timelock.",
38
- chain,
39
- };
40
- }
41
- // Normalize the secret - strip any double 0x prefix first
42
- let normalizedSecret = secret;
43
- while (normalizedSecret.startsWith("0x0x")) {
44
- normalizedSecret = normalizedSecret.slice(2);
45
- }
46
- normalizedSecret = normalizedSecret.startsWith("0x")
47
- ? normalizedSecret
48
- : `0x${normalizedSecret}`;
49
- // Encode the call data for redeem(bytes32,uint256,address,address,uint256)
50
- const callData = encodeRedeemCallData(normalizedSecret, params.amount, params.token, params.sender, params.timelock);
51
- return {
52
- success: true,
53
- message: `${chain.charAt(0).toUpperCase() + chain.slice(1)} claims require manual execution. Use the provided call data to submit the transaction.`,
54
- chain,
55
- ethereumClaimData: {
56
- contractAddress,
57
- callData,
58
- swapId: id, // Keep for reference (not used in contract)
59
- secret: normalizedSecret,
60
- functionSignature: "redeem(bytes32 preimage, uint256 amount, address token, address sender, uint256 timelock)",
61
- // Additional params for manual construction
62
- amount: params.amount,
63
- token: params.token,
64
- sender: params.sender,
65
- timelock: params.timelock,
66
- },
67
- };
68
- }
69
- /**
70
- * Extracts redeem parameters from a swap response.
71
- *
72
- * Note: Lightning-to-EVM and Arkade-to-EVM swaps use the gasless claim path
73
- * and don't go through this function.
74
- */
75
- function getRedeemParams(swap) {
76
- // BTC-to-EVM swaps (BtcToEvmSwapResponse) - legacy type
77
- if ("htlc_address_evm" in swap) {
78
- // These swaps use different field names - not supported for manual redeem
79
- return undefined;
80
- }
81
- // EVM swaps with the newer field structure
82
- // Check for the fields we need
83
- const evmSwap = swap;
84
- if (evmSwap.evm_expected_sats !== undefined &&
85
- evmSwap.wbtc_address &&
86
- evmSwap.server_evm_address &&
87
- evmSwap.evm_refund_locktime !== undefined) {
88
- return {
89
- amount: BigInt(evmSwap.evm_expected_sats),
90
- token: evmSwap.wbtc_address,
91
- sender: evmSwap.server_evm_address,
92
- timelock: BigInt(evmSwap.evm_refund_locktime),
93
- };
94
- }
95
- return undefined;
96
- }
97
- /**
98
- * Encodes call data for the redeem(bytes32,uint256,address,address,uint256) function.
99
- *
100
- * Function selector: keccak256("redeem(bytes32,uint256,address,address,uint256)")[0:4]
101
- *
102
- * @param preimage - The preimage/secret as a bytes32 hex string
103
- * @param amount - The token amount
104
- * @param token - The ERC20 token address
105
- * @param sender - The swap sender (server) address
106
- * @param timelock - The refund timelock
107
- * @returns The encoded call data as a hex string with 0x prefix
108
- */
109
- export function encodeRedeemCallData(preimage, amount, token, sender, timelock) {
110
- // Function selector for redeem(bytes32,uint256,address,address,uint256)
111
- // keccak256("redeem(bytes32,uint256,address,address,uint256)") = 0xb31597ad
112
- const selector = "0xb31597ad";
113
- // Normalize preimage to 32 bytes (64 hex chars)
114
- const normalizedPreimage = normalizeBytes32(preimage);
115
- // Encode amount as uint256 (32 bytes, left-padded)
116
- const encodedAmount = amount.toString(16).padStart(64, "0");
117
- // Encode addresses as 32 bytes (left-padded with zeros)
118
- const encodedToken = normalizeAddress(token);
119
- const encodedSender = normalizeAddress(sender);
120
- // Encode timelock as uint256 (32 bytes, left-padded)
121
- const encodedTimelock = timelock.toString(16).padStart(64, "0");
122
- return `${selector}${normalizedPreimage}${encodedAmount}${encodedToken}${encodedSender}${encodedTimelock}`;
123
- }
124
- /**
125
- * Encodes call data for the legacy claimSwap(bytes32,bytes32) function.
126
- * @deprecated Use encodeRedeemCallData instead for HTLCErc20 v2 contracts.
127
- */
128
- export function encodeClaimSwapCallData(swapId, secret) {
129
- // Function selector for claimSwap(bytes32,bytes32)
130
- // keccak256("claimSwap(bytes32,bytes32)") = 0x84cc315b...
131
- const selector = "0x84cc315b";
132
- // Normalize inputs - remove 0x prefix if present and ensure 64 chars (32 bytes)
133
- const normalizedSwapId = normalizeBytes32(swapId);
134
- const normalizedSecret = normalizeBytes32(secret);
135
- return `${selector}${normalizedSwapId}${normalizedSecret}`;
136
- }
137
- /**
138
- * Normalizes a hex string to a 32-byte (64 character) representation.
139
- * Left-pads with zeros (for secrets/hashes).
140
- *
141
- * @param input - Hex string
142
- * @returns 64-character hex string (without 0x prefix)
143
- */
144
- function normalizeBytes32(input) {
145
- // Remove 0x prefix if present
146
- let hex = input.startsWith("0x") ? input.slice(2) : input;
147
- // Pad to 64 characters (32 bytes) if needed - left pad for hashes
148
- if (hex.length < 64) {
149
- hex = hex.padStart(64, "0");
150
- }
151
- // Truncate if longer (shouldn't happen for valid inputs)
152
- if (hex.length > 64) {
153
- hex = hex.slice(0, 64);
154
- }
155
- return hex.toLowerCase();
156
- }
157
- /**
158
- * Normalizes an Ethereum address to a 32-byte (64 character) representation.
159
- * Left-pads with zeros (addresses are 20 bytes, need 12 bytes of padding).
160
- *
161
- * @param address - Ethereum address (with or without 0x prefix)
162
- * @returns 64-character hex string (without 0x prefix)
163
- */
164
- function normalizeAddress(address) {
165
- // Remove 0x prefix if present
166
- const hex = address.startsWith("0x") ? address.slice(2) : address;
167
- // Addresses are 20 bytes (40 hex chars), pad to 32 bytes (64 hex chars)
168
- return hex.padStart(64, "0").toLowerCase();
169
- }
170
- /**
171
- * Converts a UUID to a bytes32 hex string.
172
- * Removes dashes and right-pads with zeros to make 32 bytes.
173
- *
174
- * @param uuid - UUID string (e.g., "550e8400-e29b-41d4-a716-446655440000")
175
- * @returns 64-character hex string (without 0x prefix)
176
- */
177
- export function uuidToBytes32(uuid) {
178
- // Remove dashes and 0x prefix if present
179
- let hex = uuid.replace(/-/g, "");
180
- if (hex.startsWith("0x")) {
181
- hex = hex.slice(2);
182
- }
183
- // Right-pad to 64 characters (32 bytes)
184
- if (hex.length < 64) {
185
- hex = hex.padEnd(64, "0");
186
- }
187
- // Truncate if longer (shouldn't happen for valid UUIDs)
188
- if (hex.length > 64) {
189
- hex = hex.slice(0, 64);
190
- }
191
- return hex.toLowerCase();
192
- }
193
- /**
194
- * Gets the EVM HTLC contract address from a swap response.
195
- *
196
- * @param swap - The swap response
197
- * @returns The HTLC contract address or undefined if not found
198
- */
199
- function getEvmHtlcAddress(swap) {
200
- // Other EVM swap types use evm_htlc_address
201
- if ("evm_htlc_address" in swap) {
202
- return swap.evm_htlc_address;
203
- }
204
- return undefined;
205
- }
206
- //# sourceMappingURL=ethereum.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ethereum.js","sourceRoot":"","sources":["../../src/redeem/ethereum.ts"],"names":[],"mappings":"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"}