@lendasat/lendaswap-sdk-pure 0.2.21-1 → 0.2.21

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 (208) hide show
  1. package/dist/api/client.d.ts.map +1 -1
  2. package/dist/api/client.js +4 -1
  3. package/dist/api/client.js.map +1 -1
  4. package/dist/client.d.ts +1 -1
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/client.js.map +1 -1
  7. package/dist/version.d.ts +4 -0
  8. package/dist/version.d.ts.map +1 -0
  9. package/dist/version.js +6 -0
  10. package/dist/version.js.map +1 -0
  11. package/package.json +4 -1
  12. package/dist/price-feed.d.ts +0 -124
  13. package/dist/price-feed.d.ts.map +0 -1
  14. package/dist/price-feed.js +0 -178
  15. package/dist/price-feed.js.map +0 -1
  16. package/dist/src/api/client.d.ts +0 -31
  17. package/dist/src/api/client.d.ts.map +0 -1
  18. package/dist/src/api/client.js +0 -12
  19. package/dist/src/api/client.js.map +0 -1
  20. package/dist/src/arkade.d.ts +0 -36
  21. package/dist/src/arkade.d.ts.map +0 -1
  22. package/dist/src/arkade.js +0 -68
  23. package/dist/src/arkade.js.map +0 -1
  24. package/dist/src/client.d.ts +0 -760
  25. package/dist/src/client.d.ts.map +0 -1
  26. package/dist/src/client.js +0 -2169
  27. package/dist/src/client.js.map +0 -1
  28. package/dist/src/create/arkade.d.ts +0 -34
  29. package/dist/src/create/arkade.d.ts.map +0 -1
  30. package/dist/src/create/arkade.js +0 -76
  31. package/dist/src/create/arkade.js.map +0 -1
  32. package/dist/src/create/bitcoin-to-arkade.d.ts +0 -36
  33. package/dist/src/create/bitcoin-to-arkade.d.ts.map +0 -1
  34. package/dist/src/create/bitcoin-to-arkade.js +0 -69
  35. package/dist/src/create/bitcoin-to-arkade.js.map +0 -1
  36. package/dist/src/create/bitcoin.d.ts +0 -31
  37. package/dist/src/create/bitcoin.d.ts.map +0 -1
  38. package/dist/src/create/bitcoin.js +0 -67
  39. package/dist/src/create/bitcoin.js.map +0 -1
  40. package/dist/src/create/evm-to-arkade.d.ts +0 -34
  41. package/dist/src/create/evm-to-arkade.d.ts.map +0 -1
  42. package/dist/src/create/evm-to-arkade.js +0 -69
  43. package/dist/src/create/evm-to-arkade.js.map +0 -1
  44. package/dist/src/create/evm-to-bitcoin.d.ts +0 -35
  45. package/dist/src/create/evm-to-bitcoin.d.ts.map +0 -1
  46. package/dist/src/create/evm-to-bitcoin.js +0 -71
  47. package/dist/src/create/evm-to-bitcoin.js.map +0 -1
  48. package/dist/src/create/evm-to-lightning.d.ts +0 -34
  49. package/dist/src/create/evm-to-lightning.d.ts.map +0 -1
  50. package/dist/src/create/evm-to-lightning.js +0 -66
  51. package/dist/src/create/evm-to-lightning.js.map +0 -1
  52. package/dist/src/create/index.d.ts +0 -19
  53. package/dist/src/create/index.d.ts.map +0 -1
  54. package/dist/src/create/index.js +0 -18
  55. package/dist/src/create/index.js.map +0 -1
  56. package/dist/src/create/lightning.d.ts +0 -31
  57. package/dist/src/create/lightning.d.ts.map +0 -1
  58. package/dist/src/create/lightning.js +0 -72
  59. package/dist/src/create/lightning.js.map +0 -1
  60. package/dist/src/create/types.d.ts +0 -247
  61. package/dist/src/create/types.d.ts.map +0 -1
  62. package/dist/src/create/types.js +0 -5
  63. package/dist/src/create/types.js.map +0 -1
  64. package/dist/src/delegate.d.ts +0 -62
  65. package/dist/src/delegate.d.ts.map +0 -1
  66. package/dist/src/delegate.js +0 -284
  67. package/dist/src/delegate.js.map +0 -1
  68. package/dist/src/esplora.d.ts +0 -41
  69. package/dist/src/esplora.d.ts.map +0 -1
  70. package/dist/src/esplora.js +0 -47
  71. package/dist/src/esplora.js.map +0 -1
  72. package/dist/src/evm/coordinator.d.ts +0 -247
  73. package/dist/src/evm/coordinator.d.ts.map +0 -1
  74. package/dist/src/evm/coordinator.js +0 -414
  75. package/dist/src/evm/coordinator.js.map +0 -1
  76. package/dist/src/evm/htlc.d.ts +0 -238
  77. package/dist/src/evm/htlc.d.ts.map +0 -1
  78. package/dist/src/evm/htlc.js +0 -278
  79. package/dist/src/evm/htlc.js.map +0 -1
  80. package/dist/src/evm/index.d.ts +0 -9
  81. package/dist/src/evm/index.d.ts.map +0 -1
  82. package/dist/src/evm/index.js +0 -9
  83. package/dist/src/evm/index.js.map +0 -1
  84. package/dist/src/evm/signing.d.ts +0 -30
  85. package/dist/src/evm/signing.d.ts.map +0 -1
  86. package/dist/src/evm/signing.js +0 -91
  87. package/dist/src/evm/signing.js.map +0 -1
  88. package/dist/src/generated/api.d.ts +0 -2736
  89. package/dist/src/generated/api.d.ts.map +0 -1
  90. package/dist/src/generated/api.js +0 -6
  91. package/dist/src/generated/api.js.map +0 -1
  92. package/dist/src/index.d.ts +0 -18
  93. package/dist/src/index.d.ts.map +0 -1
  94. package/dist/src/index.js +0 -24
  95. package/dist/src/index.js.map +0 -1
  96. package/dist/src/node.d.ts +0 -19
  97. package/dist/src/node.d.ts.map +0 -1
  98. package/dist/src/node.js +0 -19
  99. package/dist/src/node.js.map +0 -1
  100. package/dist/src/price-calculations.d.ts +0 -109
  101. package/dist/src/price-calculations.d.ts.map +0 -1
  102. package/dist/src/price-calculations.js +0 -135
  103. package/dist/src/price-calculations.js.map +0 -1
  104. package/dist/src/redeem/arkade.d.ts +0 -65
  105. package/dist/src/redeem/arkade.d.ts.map +0 -1
  106. package/dist/src/redeem/arkade.js +0 -217
  107. package/dist/src/redeem/arkade.js.map +0 -1
  108. package/dist/src/redeem/ethereum.d.ts +0 -52
  109. package/dist/src/redeem/ethereum.d.ts.map +0 -1
  110. package/dist/src/redeem/ethereum.js +0 -206
  111. package/dist/src/redeem/ethereum.js.map +0 -1
  112. package/dist/src/redeem/gasless.d.ts +0 -41
  113. package/dist/src/redeem/gasless.d.ts.map +0 -1
  114. package/dist/src/redeem/gasless.js +0 -71
  115. package/dist/src/redeem/gasless.js.map +0 -1
  116. package/dist/src/redeem/index.d.ts +0 -49
  117. package/dist/src/redeem/index.d.ts.map +0 -1
  118. package/dist/src/redeem/index.js +0 -189
  119. package/dist/src/redeem/index.js.map +0 -1
  120. package/dist/src/redeem/types.d.ts +0 -126
  121. package/dist/src/redeem/types.d.ts.map +0 -1
  122. package/dist/src/redeem/types.js +0 -36
  123. package/dist/src/redeem/types.js.map +0 -1
  124. package/dist/src/refund/arkade.d.ts +0 -62
  125. package/dist/src/refund/arkade.d.ts.map +0 -1
  126. package/dist/src/refund/arkade.js +0 -212
  127. package/dist/src/refund/arkade.js.map +0 -1
  128. package/dist/src/refund/index.d.ts +0 -10
  129. package/dist/src/refund/index.d.ts.map +0 -1
  130. package/dist/src/refund/index.js +0 -10
  131. package/dist/src/refund/index.js.map +0 -1
  132. package/dist/src/refund/onchain.d.ts +0 -137
  133. package/dist/src/refund/onchain.d.ts.map +0 -1
  134. package/dist/src/refund/onchain.js +0 -366
  135. package/dist/src/refund/onchain.js.map +0 -1
  136. package/dist/src/signer/index.d.ts +0 -106
  137. package/dist/src/signer/index.d.ts.map +0 -1
  138. package/dist/src/signer/index.js +0 -179
  139. package/dist/src/signer/index.js.map +0 -1
  140. package/dist/src/storage/idb.d.ts +0 -70
  141. package/dist/src/storage/idb.d.ts.map +0 -1
  142. package/dist/src/storage/idb.js +0 -236
  143. package/dist/src/storage/idb.js.map +0 -1
  144. package/dist/src/storage/index.d.ts +0 -152
  145. package/dist/src/storage/index.d.ts.map +0 -1
  146. package/dist/src/storage/index.js +0 -98
  147. package/dist/src/storage/index.js.map +0 -1
  148. package/dist/src/storage/sqlite.d.ts +0 -95
  149. package/dist/src/storage/sqlite.d.ts.map +0 -1
  150. package/dist/src/storage/sqlite.js +0 -206
  151. package/dist/src/storage/sqlite.js.map +0 -1
  152. package/dist/src/storage/types.d.ts +0 -57
  153. package/dist/src/storage/types.d.ts.map +0 -1
  154. package/dist/src/storage/types.js +0 -9
  155. package/dist/src/storage/types.js.map +0 -1
  156. package/dist/src/tokens.d.ts +0 -29
  157. package/dist/src/tokens.d.ts.map +0 -1
  158. package/dist/src/tokens.js +0 -89
  159. package/dist/src/tokens.js.map +0 -1
  160. package/dist/src/usd-price.d.ts +0 -34
  161. package/dist/src/usd-price.d.ts.map +0 -1
  162. package/dist/src/usd-price.js +0 -83
  163. package/dist/src/usd-price.js.map +0 -1
  164. package/dist/tests/api-client.test.d.ts +0 -2
  165. package/dist/tests/api-client.test.d.ts.map +0 -1
  166. package/dist/tests/api-client.test.js +0 -86
  167. package/dist/tests/api-client.test.js.map +0 -1
  168. package/dist/tests/client.test.d.ts +0 -2
  169. package/dist/tests/client.test.d.ts.map +0 -1
  170. package/dist/tests/client.test.js +0 -150
  171. package/dist/tests/client.test.js.map +0 -1
  172. package/dist/tests/index.test.d.ts +0 -2
  173. package/dist/tests/index.test.d.ts.map +0 -1
  174. package/dist/tests/index.test.js +0 -8
  175. package/dist/tests/index.test.js.map +0 -1
  176. package/dist/tests/onchain-refund.test.d.ts +0 -2
  177. package/dist/tests/onchain-refund.test.d.ts.map +0 -1
  178. package/dist/tests/onchain-refund.test.js +0 -279
  179. package/dist/tests/onchain-refund.test.js.map +0 -1
  180. package/dist/tests/signer.test.d.ts +0 -2
  181. package/dist/tests/signer.test.d.ts.map +0 -1
  182. package/dist/tests/signer.test.js +0 -92
  183. package/dist/tests/signer.test.js.map +0 -1
  184. package/dist/tests/sqlite-storage.test.d.ts +0 -2
  185. package/dist/tests/sqlite-storage.test.d.ts.map +0 -1
  186. package/dist/tests/sqlite-storage.test.js +0 -160
  187. package/dist/tests/sqlite-storage.test.js.map +0 -1
  188. package/dist/tests/storage.test.d.ts +0 -2
  189. package/dist/tests/storage.test.d.ts.map +0 -1
  190. package/dist/tests/storage.test.js +0 -184
  191. package/dist/tests/storage.test.js.map +0 -1
  192. package/dist/tsconfig.tsbuildinfo +0 -1
  193. package/dist/usdt0-bridge/bridge.d.ts +0 -82
  194. package/dist/usdt0-bridge/bridge.d.ts.map +0 -1
  195. package/dist/usdt0-bridge/bridge.js +0 -56
  196. package/dist/usdt0-bridge/bridge.js.map +0 -1
  197. package/dist/usdt0-bridge/chains.d.ts +0 -41
  198. package/dist/usdt0-bridge/chains.d.ts.map +0 -1
  199. package/dist/usdt0-bridge/chains.js +0 -117
  200. package/dist/usdt0-bridge/chains.js.map +0 -1
  201. package/dist/usdt0-bridge/layerzero-tracker.d.ts +0 -34
  202. package/dist/usdt0-bridge/layerzero-tracker.d.ts.map +0 -1
  203. package/dist/usdt0-bridge/layerzero-tracker.js +0 -86
  204. package/dist/usdt0-bridge/layerzero-tracker.js.map +0 -1
  205. package/dist/usdt0-bridge/oft-abi.d.ts +0 -145
  206. package/dist/usdt0-bridge/oft-abi.d.ts.map +0 -1
  207. package/dist/usdt0-bridge/oft-abi.js +0 -117
  208. package/dist/usdt0-bridge/oft-abi.js.map +0 -1
@@ -1,62 +0,0 @@
1
- /**
2
- * Delegate settlement for VHTLC VTXOs.
3
- *
4
- * Allows the client to prepare and sign delegate PSBTs (intent + forfeits),
5
- * then POST them to the lendaswap backend which runs the Ark batch ceremony.
6
- *
7
- * This works for spendable, recoverable, AND expired VTXOs — unlike the
8
- * offchain submitTx/finalizeTx path which only handles spendable VTXOs.
9
- */
10
- export interface DelegateClaimParams {
11
- userSecretKey: string;
12
- userPubKey: string;
13
- lendaswapPubKey: string;
14
- arkadeServerPubKey: string;
15
- preimage: string;
16
- preimageHash: string;
17
- vhtlcAddress: string;
18
- refundLocktime: number;
19
- unilateralClaimDelay: number;
20
- unilateralRefundDelay: number;
21
- unilateralRefundWithoutReceiverDelay: number;
22
- /** Destination Arkade address */
23
- destinationAddress: string;
24
- network: string;
25
- /** Lendaswap API base URL (e.g. http://localhost:3333) */
26
- lendaswapApiUrl: string;
27
- arkadeServerUrl?: string;
28
- /** Optional swap ID — enables the backend to mark swap as ClientRedeemed. */
29
- swapId?: string;
30
- }
31
- export interface DelegateRefundParams {
32
- userSecretKey: string;
33
- userPubKey: string;
34
- lendaswapPubKey: string;
35
- arkadeServerPubKey: string;
36
- hashLock: string;
37
- vhtlcAddress: string;
38
- refundLocktime: number;
39
- unilateralClaimDelay: number;
40
- unilateralRefundDelay: number;
41
- unilateralRefundWithoutReceiverDelay: number;
42
- destinationAddress: string;
43
- network: string;
44
- lendaswapApiUrl: string;
45
- arkadeServerUrl?: string;
46
- }
47
- export interface DelegateSettleResult {
48
- commitmentTxid: string;
49
- }
50
- /**
51
- * Fetch the backend's static delegate cosigner public key.
52
- */
53
- export declare function fetchCosignerPk(lendaswapApiUrl: string): Promise<string>;
54
- /**
55
- * Settle a VHTLC via delegate claim (reveal preimage).
56
- */
57
- export declare function delegateClaim(params: DelegateClaimParams): Promise<DelegateSettleResult>;
58
- /**
59
- * Settle a VHTLC via delegate refund (after locktime expiry).
60
- */
61
- export declare function delegateRefund(params: DelegateRefundParams): Promise<DelegateSettleResult>;
62
- //# sourceMappingURL=delegate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../src/delegate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4EH,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oCAAoC,EAAE,MAAM,CAAC;IAC7C,iCAAiC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oCAAoC,EAAE,MAAM,CAAC;IAC7C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAoD/B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CA4C/B"}
@@ -1,284 +0,0 @@
1
- /**
2
- * Delegate settlement for VHTLC VTXOs.
3
- *
4
- * Allows the client to prepare and sign delegate PSBTs (intent + forfeits),
5
- * then POST them to the lendaswap backend which runs the Ark batch ceremony.
6
- *
7
- * This works for spendable, recoverable, AND expired VTXOs — unlike the
8
- * offchain submitTx/finalizeTx path which only handles spendable VTXOs.
9
- */
10
- import { ArkAddress, ConditionWitness, Intent, networks, RestArkProvider, RestIndexerProvider, SingleKey, setArkPsbtField, Transaction, VHTLC, VtxoTaprootTree, } from "@arkade-os/sdk";
11
- import { Address, OutScript, SigHash } from "@scure/btc-signer";
12
- // P2A is the zero-value anchor output (OP_1 0x4e73)
13
- const P2A_SCRIPT = new Uint8Array([0x51, 0x02, 0x4e, 0x73]);
14
- const P2A = { script: P2A_SCRIPT, amount: 0n };
15
- import { ripemd160 } from "@noble/hashes/legacy";
16
- import { sha256 } from "@noble/hashes/sha2";
17
- import { base64, hex } from "@scure/base";
18
- /** Default Arkade server URL by network */
19
- const DEFAULT_ARKADE_URLS = {
20
- bitcoin: "https://arkade.computer",
21
- mainnet: "https://arkade.computer",
22
- signet: "https://mutinynet.arkade.sh",
23
- mutinynet: "https://mutinynet.arkade.sh",
24
- };
25
- function getNetworkName(network) {
26
- switch (network.toLowerCase()) {
27
- case "mainnet":
28
- case "bitcoin":
29
- return "bitcoin";
30
- case "testnet":
31
- return "testnet";
32
- case "signet":
33
- return "signet";
34
- case "mutinynet":
35
- return "mutinynet";
36
- case "regtest":
37
- return "regtest";
38
- default:
39
- throw new Error(`Unknown network: ${network}`);
40
- }
41
- }
42
- function getNetworkHrp(networkName) {
43
- return networks[networkName].hrp;
44
- }
45
- function secondsToTimelock(seconds) {
46
- return { type: "seconds", value: BigInt(seconds) };
47
- }
48
- function parseXOnlyPubKey(pubKeyHex) {
49
- const bytes = hex.decode(pubKeyHex);
50
- if (bytes.length === 33)
51
- return bytes.slice(1);
52
- if (bytes.length === 32)
53
- return bytes;
54
- throw new Error(`Invalid public key length: ${bytes.length}`);
55
- }
56
- /**
57
- * Fetch the backend's static delegate cosigner public key.
58
- */
59
- export async function fetchCosignerPk(lendaswapApiUrl) {
60
- const url = `${lendaswapApiUrl.replace(/\/$/, "")}/api/delegate/cosigner-pk`;
61
- const res = await fetch(url);
62
- if (!res.ok) {
63
- throw new Error(`Failed to fetch cosigner pk: ${res.status} ${await res.text()}`);
64
- }
65
- const body = (await res.json());
66
- return body.cosigner_pk;
67
- }
68
- /**
69
- * Settle a VHTLC via delegate claim (reveal preimage).
70
- */
71
- export async function delegateClaim(params) {
72
- const userPkBytes = parseXOnlyPubKey(params.userPubKey);
73
- const lendaswapPkBytes = parseXOnlyPubKey(params.lendaswapPubKey);
74
- const serverPkBytes = parseXOnlyPubKey(params.arkadeServerPubKey);
75
- const preimageBytes = hex.decode(params.preimage);
76
- const preimageHashBytes = ripemd160(sha256(preimageBytes));
77
- if (hex.encode(preimageHashBytes) !==
78
- hex.encode(ripemd160(hex.decode(params.preimageHash)))) {
79
- throw new Error("Preimage hash mismatch");
80
- }
81
- // Build VHTLC — for claim: lendaswap=sender, user=receiver
82
- const networkName = getNetworkName(params.network);
83
- const vhtlc = new VHTLC.Script({
84
- sender: lendaswapPkBytes,
85
- receiver: userPkBytes,
86
- server: serverPkBytes,
87
- preimageHash: preimageHashBytes,
88
- refundLocktime: BigInt(params.refundLocktime),
89
- unilateralClaimDelay: secondsToTimelock(params.unilateralClaimDelay),
90
- unilateralRefundDelay: secondsToTimelock(params.unilateralRefundDelay),
91
- unilateralRefundWithoutReceiverDelay: secondsToTimelock(params.unilateralRefundWithoutReceiverDelay),
92
- });
93
- const hrp = getNetworkHrp(networkName);
94
- const computedAddr = vhtlc.address(hrp, serverPkBytes).encode();
95
- if (computedAddr !== params.vhtlcAddress) {
96
- throw new Error(`VHTLC address mismatch: computed ${computedAddr}, expected ${params.vhtlcAddress}`);
97
- }
98
- return settleDelegate({
99
- userSecretKey: params.userSecretKey,
100
- tapLeafScript: vhtlc.claim(),
101
- tapTree: vhtlc.encode(),
102
- vhtlcPkScript: hex.encode(vhtlc.pkScript),
103
- witnessData: preimageBytes,
104
- destinationAddress: params.destinationAddress,
105
- networkName,
106
- lendaswapApiUrl: params.lendaswapApiUrl,
107
- arkadeServerUrl: params.arkadeServerUrl,
108
- locktime: undefined,
109
- swapId: params.swapId,
110
- preimage: params.preimage,
111
- });
112
- }
113
- /**
114
- * Settle a VHTLC via delegate refund (after locktime expiry).
115
- */
116
- export async function delegateRefund(params) {
117
- const userPkBytes = parseXOnlyPubKey(params.userPubKey);
118
- const lendaswapPkBytes = parseXOnlyPubKey(params.lendaswapPubKey);
119
- const serverPkBytes = parseXOnlyPubKey(params.arkadeServerPubKey);
120
- const hashLockBytes = hex.decode(params.hashLock);
121
- const preimageHashBytes = hashLockBytes.length === 32 ? ripemd160(hashLockBytes) : hashLockBytes;
122
- // Build VHTLC — for refund: user=sender, lendaswap=receiver
123
- const networkName = getNetworkName(params.network);
124
- const vhtlc = new VHTLC.Script({
125
- sender: userPkBytes,
126
- receiver: lendaswapPkBytes,
127
- server: serverPkBytes,
128
- preimageHash: preimageHashBytes,
129
- refundLocktime: BigInt(params.refundLocktime),
130
- unilateralClaimDelay: secondsToTimelock(params.unilateralClaimDelay),
131
- unilateralRefundDelay: secondsToTimelock(params.unilateralRefundDelay),
132
- unilateralRefundWithoutReceiverDelay: secondsToTimelock(params.unilateralRefundWithoutReceiverDelay),
133
- });
134
- const hrp = getNetworkHrp(networkName);
135
- const computedAddr = vhtlc.address(hrp, serverPkBytes).encode();
136
- if (computedAddr !== params.vhtlcAddress) {
137
- throw new Error(`VHTLC address mismatch: computed ${computedAddr}, expected ${params.vhtlcAddress}`);
138
- }
139
- return settleDelegate({
140
- userSecretKey: params.userSecretKey,
141
- tapLeafScript: vhtlc.refundWithoutReceiver(),
142
- tapTree: vhtlc.encode(),
143
- vhtlcPkScript: hex.encode(vhtlc.pkScript),
144
- witnessData: undefined,
145
- destinationAddress: params.destinationAddress,
146
- networkName,
147
- lendaswapApiUrl: params.lendaswapApiUrl,
148
- arkadeServerUrl: params.arkadeServerUrl,
149
- locktime: params.refundLocktime,
150
- });
151
- }
152
- async function settleDelegate(opts) {
153
- const { userSecretKey, tapLeafScript, tapTree, vhtlcPkScript, witnessData, destinationAddress, networkName, lendaswapApiUrl, arkadeServerUrl, } = opts;
154
- const serverUrl = arkadeServerUrl ?? DEFAULT_ARKADE_URLS[networkName];
155
- if (!serverUrl) {
156
- throw new Error(`No Arkade server URL for network: ${networkName}`);
157
- }
158
- const arkProvider = new RestArkProvider(serverUrl);
159
- const indexerProvider = new RestIndexerProvider(serverUrl);
160
- const serverInfo = await arkProvider.getInfo();
161
- // Fetch cosigner pk from lendaswap backend
162
- const cosignerPkHex = await fetchCosignerPk(lendaswapApiUrl);
163
- // Decode forfeit address (bech32) to pkScript
164
- const btcNetwork = networks[networkName];
165
- const forfeitDecoded = Address(btcNetwork).decode(serverInfo.forfeitAddress);
166
- const forfeitPkScript = OutScript.encode(forfeitDecoded);
167
- // Fetch VTXOs — include all (not just spendable)
168
- const { vtxos: allVtxos } = await indexerProvider.getVtxos({
169
- scripts: [vhtlcPkScript],
170
- });
171
- // Filter to unspent VTXOs
172
- const vtxos = allVtxos.filter((v) => !v.isSpent);
173
- if (vtxos.length === 0) {
174
- throw new Error("No settleable VTXOs found at the VHTLC address");
175
- }
176
- const totalAmount = vtxos.reduce((acc, v) => acc + BigInt(v.value), 0n);
177
- if (totalAmount === 0n) {
178
- throw new Error("Total VTXO amount is zero");
179
- }
180
- console.log(`Found ${vtxos.length} VTXO(s) totalling ${totalAmount} sats`);
181
- // Parse destination (Ark address → taproot pkScript)
182
- const destAddr = ArkAddress.decode(destinationAddress);
183
- const destPkScript = destAddr.pkScript;
184
- // Build intent message
185
- const now = Math.floor(Date.now() / 1000);
186
- const intentMessage = {
187
- type: "register",
188
- onchain_output_indexes: [],
189
- valid_at: now,
190
- expire_at: now + 120,
191
- cosigners_public_keys: [cosignerPkHex],
192
- };
193
- // Build intent inputs from VTXOs
194
- const pkScriptBytes = hex.decode(vhtlcPkScript);
195
- const intentInputs = vtxos.map((v) => ({
196
- txid: hex.decode(v.txid),
197
- index: v.vout,
198
- witnessUtxo: {
199
- script: pkScriptBytes,
200
- amount: BigInt(v.value),
201
- },
202
- tapLeafScript: [tapLeafScript],
203
- sequence: opts.locktime ? 0xfffffffe : undefined,
204
- sighashType: SigHash.ALL,
205
- }));
206
- // Build intent proof PSBT
207
- const intentProof = Intent.create(intentMessage, intentInputs, [
208
- { script: destPkScript, amount: totalAmount },
209
- ]);
210
- // Set VtxoTaprootTree on each real input (skip input 0 which is the toSpend ref)
211
- for (let i = 0; i < vtxos.length; i++) {
212
- setArkPsbtField(intentProof, i + 1, VtxoTaprootTree, tapTree);
213
- }
214
- // Sign intent proof
215
- const signer = SingleKey.fromHex(userSecretKey);
216
- // Set condition witness (preimage) if claiming
217
- if (witnessData) {
218
- for (let i = 0; i < vtxos.length; i++) {
219
- setArkPsbtField(intentProof, i + 1, ConditionWitness, [witnessData]);
220
- }
221
- }
222
- const signedIntentProof = await signer.sign(intentProof);
223
- // Build and sign delegate forfeit PSBTs.
224
- // Delegate forfeits have 1 input (the VTXO) with SIGHASH_ALL|ANYONECANPAY.
225
- // The connector input is added later by the cosigner during batch finalization.
226
- // Output amount = vtxo_amount + connector_dust (anticipating the connector).
227
- const dust = serverInfo.dust;
228
- const signedForfeitPsbts = [];
229
- for (const v of vtxos) {
230
- const vtxoAmount = BigInt(v.value);
231
- const forfeitTx = new Transaction({
232
- version: 3,
233
- lockTime: 0,
234
- });
235
- forfeitTx.addInput({
236
- txid: hex.decode(v.txid),
237
- index: v.vout,
238
- witnessUtxo: {
239
- script: pkScriptBytes,
240
- amount: vtxoAmount,
241
- },
242
- tapLeafScript: [tapLeafScript],
243
- sighashType: SigHash.ALL_ANYONECANPAY,
244
- });
245
- // Main output: VTXO amount + connector dust → forfeit address
246
- forfeitTx.addOutput({
247
- script: forfeitPkScript,
248
- amount: vtxoAmount + dust,
249
- });
250
- // Anchor output (P2A)
251
- forfeitTx.addOutput(P2A);
252
- // Set taproot tree
253
- setArkPsbtField(forfeitTx, 0, VtxoTaprootTree, tapTree);
254
- if (witnessData) {
255
- setArkPsbtField(forfeitTx, 0, ConditionWitness, [witnessData]);
256
- }
257
- const signedForfeit = await signer.sign(forfeitTx);
258
- signedForfeitPsbts.push(base64.encode(signedForfeit.toPSBT()));
259
- }
260
- // Serialize intent proof
261
- const intentProofBase64 = base64.encode(signedIntentProof.toPSBT());
262
- const intentMessageJson = Intent.encodeMessage(intentMessage);
263
- // POST to backend
264
- const settleUrl = `${lendaswapApiUrl.replace(/\/$/, "")}/api/delegate/settle`;
265
- const settleRes = await fetch(settleUrl, {
266
- method: "POST",
267
- headers: { "Content-Type": "application/json" },
268
- body: JSON.stringify({
269
- intent_proof: intentProofBase64,
270
- intent_message: intentMessageJson,
271
- forfeit_psbts: signedForfeitPsbts,
272
- cosigner_pk: cosignerPkHex,
273
- swap_id: opts.swapId,
274
- preimage: opts.preimage,
275
- }),
276
- });
277
- if (!settleRes.ok) {
278
- const errBody = await settleRes.text();
279
- throw new Error(`Delegate settle failed: ${settleRes.status} ${errBody}`);
280
- }
281
- const result = (await settleRes.json());
282
- return { commitmentTxid: result.commitment_txid };
283
- }
284
- //# sourceMappingURL=delegate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../src/delegate.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Esplora API utilities for Bitcoin transaction lookups.
3
- */
4
- /** Esplora UTXO response */
5
- export interface EsploraUtxo {
6
- txid: string;
7
- vout: number;
8
- status: {
9
- confirmed: boolean;
10
- block_height?: number;
11
- block_hash?: string;
12
- block_time?: number;
13
- };
14
- value: number;
15
- }
16
- /** Result of finding an HTLC output */
17
- export interface HtlcOutputResult {
18
- txid: string;
19
- vout: number;
20
- amount: bigint;
21
- }
22
- /**
23
- * Finds a UTXO at the given address.
24
- *
25
- * Queries the Esplora `/address/:address/utxo` endpoint to find
26
- * unspent outputs. Returns the first UTXO found.
27
- *
28
- * @param esploraUrl - The Esplora API base URL
29
- * @param address - The address to look up UTXOs for
30
- * @returns The txid, vout, and amount of the first UTXO, or null if none found
31
- */
32
- export declare function findOutputByAddress(esploraUrl: string, address: string): Promise<HtlcOutputResult | null>;
33
- /**
34
- * Broadcasts a raw transaction to the Bitcoin network via Esplora API.
35
- *
36
- * @param esploraUrl - The Esplora API base URL
37
- * @param txHex - The raw transaction hex to broadcast
38
- * @returns The transaction ID on success
39
- */
40
- export declare function broadcastTransaction(esploraUrl: string, txHex: string): Promise<string>;
41
- //# sourceMappingURL=esplora.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"esplora.d.ts","sourceRoot":"","sources":["../../src/esplora.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,4BAA4B;AAC5B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAgBlC;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAejB"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Esplora API utilities for Bitcoin transaction lookups.
3
- */
4
- /**
5
- * Finds a UTXO at the given address.
6
- *
7
- * Queries the Esplora `/address/:address/utxo` endpoint to find
8
- * unspent outputs. Returns the first UTXO found.
9
- *
10
- * @param esploraUrl - The Esplora API base URL
11
- * @param address - The address to look up UTXOs for
12
- * @returns The txid, vout, and amount of the first UTXO, or null if none found
13
- */
14
- export async function findOutputByAddress(esploraUrl, address) {
15
- const response = await fetch(`${esploraUrl}/address/${address}/utxo`);
16
- if (!response.ok) {
17
- throw new Error(`Failed to fetch UTXOs for address ${address}: ${response.status}`);
18
- }
19
- const utxos = (await response.json());
20
- if (utxos.length === 0) {
21
- return null;
22
- }
23
- const utxo = utxos[0];
24
- return { txid: utxo.txid, vout: utxo.vout, amount: BigInt(utxo.value) };
25
- }
26
- /**
27
- * Broadcasts a raw transaction to the Bitcoin network via Esplora API.
28
- *
29
- * @param esploraUrl - The Esplora API base URL
30
- * @param txHex - The raw transaction hex to broadcast
31
- * @returns The transaction ID on success
32
- */
33
- export async function broadcastTransaction(esploraUrl, txHex) {
34
- const response = await fetch(`${esploraUrl}/tx`, {
35
- method: "POST",
36
- headers: {
37
- "Content-Type": "text/plain",
38
- },
39
- body: txHex,
40
- });
41
- if (!response.ok) {
42
- const errorText = await response.text();
43
- throw new Error(`Broadcast failed: ${response.status} - ${errorText}`);
44
- }
45
- return response.text();
46
- }
47
- //# sourceMappingURL=esplora.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"esplora.js","sourceRoot":"","sources":["../../src/esplora.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,OAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,YAAY,OAAO,OAAO,CAAC,CAAC;IACtE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,KAAK,QAAQ,CAAC,MAAM,EAAE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;IAEvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,KAAK,EAAE;QAC/C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,YAAY;SAC7B;QACD,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}