@buildonspark/spark-sdk 0.0.0

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 (314) hide show
  1. package/dist/graphql/client.d.ts +24 -0
  2. package/dist/graphql/client.js +177 -0
  3. package/dist/graphql/client.js.map +1 -0
  4. package/dist/graphql/mutations/CompleteCoopExit.d.ts +1 -0
  5. package/dist/graphql/mutations/CompleteCoopExit.js +19 -0
  6. package/dist/graphql/mutations/CompleteCoopExit.js.map +1 -0
  7. package/dist/graphql/mutations/CompleteLeavesSwap.d.ts +1 -0
  8. package/dist/graphql/mutations/CompleteLeavesSwap.js +17 -0
  9. package/dist/graphql/mutations/CompleteLeavesSwap.js.map +1 -0
  10. package/dist/graphql/mutations/RequestCoopExit.d.ts +1 -0
  11. package/dist/graphql/mutations/RequestCoopExit.js +20 -0
  12. package/dist/graphql/mutations/RequestCoopExit.js.map +1 -0
  13. package/dist/graphql/mutations/RequestLightningReceive.d.ts +1 -0
  14. package/dist/graphql/mutations/RequestLightningReceive.js +26 -0
  15. package/dist/graphql/mutations/RequestLightningReceive.js.map +1 -0
  16. package/dist/graphql/mutations/RequestLightningSend.d.ts +1 -0
  17. package/dist/graphql/mutations/RequestLightningSend.js +18 -0
  18. package/dist/graphql/mutations/RequestLightningSend.js.map +1 -0
  19. package/dist/graphql/mutations/RequestSwapLeaves.d.ts +1 -0
  20. package/dist/graphql/mutations/RequestSwapLeaves.js +26 -0
  21. package/dist/graphql/mutations/RequestSwapLeaves.js.map +1 -0
  22. package/dist/graphql/objects/BitcoinNetwork.d.ts +17 -0
  23. package/dist/graphql/objects/BitcoinNetwork.js +20 -0
  24. package/dist/graphql/objects/BitcoinNetwork.js.map +1 -0
  25. package/dist/graphql/objects/CompleteCoopExitInput.d.ts +7 -0
  26. package/dist/graphql/objects/CompleteCoopExitInput.js +14 -0
  27. package/dist/graphql/objects/CompleteCoopExitInput.js.map +1 -0
  28. package/dist/graphql/objects/CompleteCoopExitOutput.d.ts +7 -0
  29. package/dist/graphql/objects/CompleteCoopExitOutput.js +19 -0
  30. package/dist/graphql/objects/CompleteCoopExitOutput.js.map +1 -0
  31. package/dist/graphql/objects/CompleteLeavesSwapInput.d.ts +8 -0
  32. package/dist/graphql/objects/CompleteLeavesSwapInput.js +16 -0
  33. package/dist/graphql/objects/CompleteLeavesSwapInput.js.map +1 -0
  34. package/dist/graphql/objects/CompleteLeavesSwapOutput.d.ts +7 -0
  35. package/dist/graphql/objects/CompleteLeavesSwapOutput.js +19 -0
  36. package/dist/graphql/objects/CompleteLeavesSwapOutput.js.map +1 -0
  37. package/dist/graphql/objects/Connection.d.ts +16 -0
  38. package/dist/graphql/objects/Connection.js +56 -0
  39. package/dist/graphql/objects/Connection.js.map +1 -0
  40. package/dist/graphql/objects/CoopExitFeeEstimateInput.d.ts +7 -0
  41. package/dist/graphql/objects/CoopExitFeeEstimateInput.js +14 -0
  42. package/dist/graphql/objects/CoopExitFeeEstimateInput.js.map +1 -0
  43. package/dist/graphql/objects/CoopExitFeeEstimateOutput.d.ts +8 -0
  44. package/dist/graphql/objects/CoopExitFeeEstimateOutput.js +26 -0
  45. package/dist/graphql/objects/CoopExitFeeEstimateOutput.js.map +1 -0
  46. package/dist/graphql/objects/CoopExitRequest.d.ts +32 -0
  47. package/dist/graphql/objects/CoopExitRequest.js +64 -0
  48. package/dist/graphql/objects/CoopExitRequest.js.map +1 -0
  49. package/dist/graphql/objects/CurrencyAmount.d.ts +24 -0
  50. package/dist/graphql/objects/CurrencyAmount.js +30 -0
  51. package/dist/graphql/objects/CurrencyAmount.js.map +1 -0
  52. package/dist/graphql/objects/CurrencyUnit.d.ts +27 -0
  53. package/dist/graphql/objects/CurrencyUnit.js +30 -0
  54. package/dist/graphql/objects/CurrencyUnit.js.map +1 -0
  55. package/dist/graphql/objects/Entity.d.ts +16 -0
  56. package/dist/graphql/objects/Entity.js +141 -0
  57. package/dist/graphql/objects/Entity.js.map +1 -0
  58. package/dist/graphql/objects/Invoice.d.ts +15 -0
  59. package/dist/graphql/objects/Invoice.js +45 -0
  60. package/dist/graphql/objects/Invoice.js.map +1 -0
  61. package/dist/graphql/objects/Leaf.d.ts +11 -0
  62. package/dist/graphql/objects/Leaf.js +29 -0
  63. package/dist/graphql/objects/Leaf.js.map +1 -0
  64. package/dist/graphql/objects/LeavesSwapFeeEstimateInput.d.ts +6 -0
  65. package/dist/graphql/objects/LeavesSwapFeeEstimateInput.js +12 -0
  66. package/dist/graphql/objects/LeavesSwapFeeEstimateInput.js.map +1 -0
  67. package/dist/graphql/objects/LeavesSwapFeeEstimateOutput.d.ts +8 -0
  68. package/dist/graphql/objects/LeavesSwapFeeEstimateOutput.js +26 -0
  69. package/dist/graphql/objects/LeavesSwapFeeEstimateOutput.js.map +1 -0
  70. package/dist/graphql/objects/LeavesSwapRequest.d.ts +32 -0
  71. package/dist/graphql/objects/LeavesSwapRequest.js +87 -0
  72. package/dist/graphql/objects/LeavesSwapRequest.js.map +1 -0
  73. package/dist/graphql/objects/LightningReceiveFeeEstimateInput.d.ts +8 -0
  74. package/dist/graphql/objects/LightningReceiveFeeEstimateInput.js +15 -0
  75. package/dist/graphql/objects/LightningReceiveFeeEstimateInput.js.map +1 -0
  76. package/dist/graphql/objects/LightningReceiveFeeEstimateOutput.d.ts +8 -0
  77. package/dist/graphql/objects/LightningReceiveFeeEstimateOutput.js +26 -0
  78. package/dist/graphql/objects/LightningReceiveFeeEstimateOutput.js.map +1 -0
  79. package/dist/graphql/objects/LightningReceiveRequest.d.ts +31 -0
  80. package/dist/graphql/objects/LightningReceiveRequest.js +93 -0
  81. package/dist/graphql/objects/LightningReceiveRequest.js.map +1 -0
  82. package/dist/graphql/objects/LightningReceiveRequestStatus.d.ts +16 -0
  83. package/dist/graphql/objects/LightningReceiveRequestStatus.js +19 -0
  84. package/dist/graphql/objects/LightningReceiveRequestStatus.js.map +1 -0
  85. package/dist/graphql/objects/LightningSendFeeEstimateInput.d.ts +6 -0
  86. package/dist/graphql/objects/LightningSendFeeEstimateInput.js +12 -0
  87. package/dist/graphql/objects/LightningSendFeeEstimateInput.js.map +1 -0
  88. package/dist/graphql/objects/LightningSendFeeEstimateOutput.d.ts +8 -0
  89. package/dist/graphql/objects/LightningSendFeeEstimateOutput.js +26 -0
  90. package/dist/graphql/objects/LightningSendFeeEstimateOutput.js.map +1 -0
  91. package/dist/graphql/objects/LightningSendRequest.d.ts +32 -0
  92. package/dist/graphql/objects/LightningSendRequest.js +78 -0
  93. package/dist/graphql/objects/LightningSendRequest.js.map +1 -0
  94. package/dist/graphql/objects/LightningSendRequestStatus.d.ts +15 -0
  95. package/dist/graphql/objects/LightningSendRequestStatus.js +18 -0
  96. package/dist/graphql/objects/LightningSendRequestStatus.js.map +1 -0
  97. package/dist/graphql/objects/PageInfo.d.ts +11 -0
  98. package/dist/graphql/objects/PageInfo.js +26 -0
  99. package/dist/graphql/objects/PageInfo.js.map +1 -0
  100. package/dist/graphql/objects/RequestCoopExitInput.d.ts +7 -0
  101. package/dist/graphql/objects/RequestCoopExitInput.js +14 -0
  102. package/dist/graphql/objects/RequestCoopExitInput.js.map +1 -0
  103. package/dist/graphql/objects/RequestCoopExitOutput.d.ts +7 -0
  104. package/dist/graphql/objects/RequestCoopExitOutput.js +19 -0
  105. package/dist/graphql/objects/RequestCoopExitOutput.js.map +1 -0
  106. package/dist/graphql/objects/RequestLeavesSwapInput.d.ts +13 -0
  107. package/dist/graphql/objects/RequestLeavesSwapInput.js +25 -0
  108. package/dist/graphql/objects/RequestLeavesSwapInput.js.map +1 -0
  109. package/dist/graphql/objects/RequestLeavesSwapOutput.d.ts +7 -0
  110. package/dist/graphql/objects/RequestLeavesSwapOutput.js +19 -0
  111. package/dist/graphql/objects/RequestLeavesSwapOutput.js.map +1 -0
  112. package/dist/graphql/objects/RequestLightningReceiveInput.d.ts +16 -0
  113. package/dist/graphql/objects/RequestLightningReceiveInput.js +21 -0
  114. package/dist/graphql/objects/RequestLightningReceiveInput.js.map +1 -0
  115. package/dist/graphql/objects/RequestLightningReceiveOutput.d.ts +7 -0
  116. package/dist/graphql/objects/RequestLightningReceiveOutput.js +19 -0
  117. package/dist/graphql/objects/RequestLightningReceiveOutput.js.map +1 -0
  118. package/dist/graphql/objects/RequestLightningSendInput.d.ts +7 -0
  119. package/dist/graphql/objects/RequestLightningSendInput.js +14 -0
  120. package/dist/graphql/objects/RequestLightningSendInput.js.map +1 -0
  121. package/dist/graphql/objects/RequestLightningSendOutput.d.ts +7 -0
  122. package/dist/graphql/objects/RequestLightningSendOutput.js +19 -0
  123. package/dist/graphql/objects/RequestLightningSendOutput.js.map +1 -0
  124. package/dist/graphql/objects/SparkCoopExitRequestStatus.d.ts +11 -0
  125. package/dist/graphql/objects/SparkCoopExitRequestStatus.js +14 -0
  126. package/dist/graphql/objects/SparkCoopExitRequestStatus.js.map +1 -0
  127. package/dist/graphql/objects/SparkLeavesSwapRequestStatus.d.ts +11 -0
  128. package/dist/graphql/objects/SparkLeavesSwapRequestStatus.js +14 -0
  129. package/dist/graphql/objects/SparkLeavesSwapRequestStatus.js.map +1 -0
  130. package/dist/graphql/objects/SparkTransferToLeavesConnection.d.ts +19 -0
  131. package/dist/graphql/objects/SparkTransferToLeavesConnection.js +45 -0
  132. package/dist/graphql/objects/SparkTransferToLeavesConnection.js.map +1 -0
  133. package/dist/graphql/objects/SwapLeaf.d.ts +9 -0
  134. package/dist/graphql/objects/SwapLeaf.js +23 -0
  135. package/dist/graphql/objects/SwapLeaf.js.map +1 -0
  136. package/dist/graphql/objects/Transfer.d.ts +24 -0
  137. package/dist/graphql/objects/Transfer.js +82 -0
  138. package/dist/graphql/objects/Transfer.js.map +1 -0
  139. package/dist/graphql/objects/UserLeafInput.d.ts +8 -0
  140. package/dist/graphql/objects/UserLeafInput.js +16 -0
  141. package/dist/graphql/objects/UserLeafInput.js.map +1 -0
  142. package/dist/graphql/objects/WalletUser.d.ts +21 -0
  143. package/dist/graphql/objects/WalletUser.js +48 -0
  144. package/dist/graphql/objects/WalletUser.js.map +1 -0
  145. package/dist/graphql/objects/index.d.ts +41 -0
  146. package/dist/graphql/objects/index.js +13 -0
  147. package/dist/graphql/objects/index.js.map +1 -0
  148. package/dist/graphql/queries/CoopExitFeeEstimate.d.ts +1 -0
  149. package/dist/graphql/queries/CoopExitFeeEstimate.js +18 -0
  150. package/dist/graphql/queries/CoopExitFeeEstimate.js.map +1 -0
  151. package/dist/graphql/queries/CurrentUser.d.ts +1 -0
  152. package/dist/graphql/queries/CurrentUser.js +10 -0
  153. package/dist/graphql/queries/CurrentUser.js.map +1 -0
  154. package/dist/graphql/queries/LightningReceiveFeeEstimate.d.ts +1 -0
  155. package/dist/graphql/queries/LightningReceiveFeeEstimate.js +18 -0
  156. package/dist/graphql/queries/LightningReceiveFeeEstimate.js.map +1 -0
  157. package/dist/graphql/queries/LightningSendFeeEstimate.d.ts +1 -0
  158. package/dist/graphql/queries/LightningSendFeeEstimate.js +16 -0
  159. package/dist/graphql/queries/LightningSendFeeEstimate.js.map +1 -0
  160. package/dist/proto/common.d.ts +58 -0
  161. package/dist/proto/common.js +350 -0
  162. package/dist/proto/common.js.map +1 -0
  163. package/dist/proto/google/protobuf/descriptor.d.ts +1228 -0
  164. package/dist/proto/google/protobuf/descriptor.js +5070 -0
  165. package/dist/proto/google/protobuf/descriptor.js.map +1 -0
  166. package/dist/proto/google/protobuf/duration.d.ts +99 -0
  167. package/dist/proto/google/protobuf/duration.js +90 -0
  168. package/dist/proto/google/protobuf/duration.js.map +1 -0
  169. package/dist/proto/google/protobuf/empty.d.ts +33 -0
  170. package/dist/proto/google/protobuf/empty.js +46 -0
  171. package/dist/proto/google/protobuf/empty.js.map +1 -0
  172. package/dist/proto/google/protobuf/timestamp.d.ts +128 -0
  173. package/dist/proto/google/protobuf/timestamp.js +90 -0
  174. package/dist/proto/google/protobuf/timestamp.js.map +1 -0
  175. package/dist/proto/mock.d.ts +48 -0
  176. package/dist/proto/mock.js +103 -0
  177. package/dist/proto/mock.js.map +1 -0
  178. package/dist/proto/spark.d.ts +1101 -0
  179. package/dist/proto/spark.js +9565 -0
  180. package/dist/proto/spark.js.map +1 -0
  181. package/dist/proto/spark_authn.d.ts +111 -0
  182. package/dist/proto/spark_authn.js +517 -0
  183. package/dist/proto/spark_authn.js.map +1 -0
  184. package/dist/proto/validate/validate.d.ts +1087 -0
  185. package/dist/proto/validate/validate.js +4437 -0
  186. package/dist/proto/validate/validate.js.map +1 -0
  187. package/dist/services/config.d.ts +24 -0
  188. package/dist/services/config.js +29 -0
  189. package/dist/services/config.js.map +1 -0
  190. package/dist/services/connection.d.ts +21 -0
  191. package/dist/services/connection.js +154 -0
  192. package/dist/services/connection.js.map +1 -0
  193. package/dist/services/coop-exit.d.ts +20 -0
  194. package/dist/services/coop-exit.js +102 -0
  195. package/dist/services/coop-exit.js.map +1 -0
  196. package/dist/services/deposit.d.ts +21 -0
  197. package/dist/services/deposit.js +214 -0
  198. package/dist/services/deposit.js.map +1 -0
  199. package/dist/services/lightning.d.ts +31 -0
  200. package/dist/services/lightning.js +196 -0
  201. package/dist/services/lightning.js.map +1 -0
  202. package/dist/services/token-transactions.d.ts +17 -0
  203. package/dist/services/token-transactions.js +297 -0
  204. package/dist/services/token-transactions.js.map +1 -0
  205. package/dist/services/transfer.d.ts +63 -0
  206. package/dist/services/transfer.js +499 -0
  207. package/dist/services/transfer.js.map +1 -0
  208. package/dist/services/tree-creation.d.ts +30 -0
  209. package/dist/services/tree-creation.js +404 -0
  210. package/dist/services/tree-creation.js.map +1 -0
  211. package/dist/signer/signer.d.ts +97 -0
  212. package/dist/signer/signer.js +239 -0
  213. package/dist/signer/signer.js.map +1 -0
  214. package/dist/spark-sdk.d.ts +87 -0
  215. package/dist/spark-sdk.js +675 -0
  216. package/dist/spark-sdk.js.map +1 -0
  217. package/dist/tests/adaptor-signature.test.d.ts +1 -0
  218. package/dist/tests/adaptor-signature.test.js +34 -0
  219. package/dist/tests/adaptor-signature.test.js.map +1 -0
  220. package/dist/tests/bitcoin.test.d.ts +1 -0
  221. package/dist/tests/bitcoin.test.js +77 -0
  222. package/dist/tests/bitcoin.test.js.map +1 -0
  223. package/dist/tests/coop-exit.test.d.ts +1 -0
  224. package/dist/tests/coop-exit.test.js +140 -0
  225. package/dist/tests/coop-exit.test.js.map +1 -0
  226. package/dist/tests/deposit.test.d.ts +1 -0
  227. package/dist/tests/deposit.test.js +57 -0
  228. package/dist/tests/deposit.test.js.map +1 -0
  229. package/dist/tests/keys.test.d.ts +1 -0
  230. package/dist/tests/keys.test.js +53 -0
  231. package/dist/tests/keys.test.js.map +1 -0
  232. package/dist/tests/lightning.test.d.ts +1 -0
  233. package/dist/tests/lightning.test.js +175 -0
  234. package/dist/tests/lightning.test.js.map +1 -0
  235. package/dist/tests/secret-sharing.test.d.ts +1 -0
  236. package/dist/tests/secret-sharing.test.js +41 -0
  237. package/dist/tests/secret-sharing.test.js.map +1 -0
  238. package/dist/tests/swap.test.d.ts +1 -0
  239. package/dist/tests/swap.test.js +131 -0
  240. package/dist/tests/swap.test.js.map +1 -0
  241. package/dist/tests/test-util.d.ts +24 -0
  242. package/dist/tests/test-util.js +137 -0
  243. package/dist/tests/test-util.js.map +1 -0
  244. package/dist/tests/tokens.test.d.ts +1 -0
  245. package/dist/tests/tokens.test.js +42 -0
  246. package/dist/tests/tokens.test.js.map +1 -0
  247. package/dist/tests/transfer.test.d.ts +1 -0
  248. package/dist/tests/transfer.test.js +175 -0
  249. package/dist/tests/transfer.test.js.map +1 -0
  250. package/dist/tests/tree-creation.test.d.ts +1 -0
  251. package/dist/tests/tree-creation.test.js +32 -0
  252. package/dist/tests/tree-creation.test.js.map +1 -0
  253. package/dist/tests/utils/spark-testing-wallet.d.ts +14 -0
  254. package/dist/tests/utils/spark-testing-wallet.js +13 -0
  255. package/dist/tests/utils/spark-testing-wallet.js.map +1 -0
  256. package/dist/tests/utils/test-faucet.d.ts +22 -0
  257. package/dist/tests/utils/test-faucet.js +148 -0
  258. package/dist/tests/utils/test-faucet.js.map +1 -0
  259. package/dist/types/index.d.ts +3 -0
  260. package/dist/types/index.js +4 -0
  261. package/dist/types/index.js.map +1 -0
  262. package/dist/utils/adaptor-signature.d.ts +7 -0
  263. package/dist/utils/adaptor-signature.js +114 -0
  264. package/dist/utils/adaptor-signature.js.map +1 -0
  265. package/dist/utils/bitcoin.d.ts +12 -0
  266. package/dist/utils/bitcoin.js +87 -0
  267. package/dist/utils/bitcoin.js.map +1 -0
  268. package/dist/utils/crypto.d.ts +1 -0
  269. package/dist/utils/crypto.js +14 -0
  270. package/dist/utils/crypto.js.map +1 -0
  271. package/dist/utils/index.d.ts +14 -0
  272. package/dist/utils/index.js +15 -0
  273. package/dist/utils/index.js.map +1 -0
  274. package/dist/utils/keys.d.ts +7 -0
  275. package/dist/utils/keys.js +68 -0
  276. package/dist/utils/keys.js.map +1 -0
  277. package/dist/utils/network.d.ts +11 -0
  278. package/dist/utils/network.js +26 -0
  279. package/dist/utils/network.js.map +1 -0
  280. package/dist/utils/proof.d.ts +1 -0
  281. package/dist/utils/proof.js +12 -0
  282. package/dist/utils/proof.js.map +1 -0
  283. package/dist/utils/response-validation.d.ts +1 -0
  284. package/dist/utils/response-validation.js +16 -0
  285. package/dist/utils/response-validation.js.map +1 -0
  286. package/dist/utils/secret-sharing.d.ts +26 -0
  287. package/dist/utils/secret-sharing.js +175 -0
  288. package/dist/utils/secret-sharing.js.map +1 -0
  289. package/dist/utils/signing.d.ts +12 -0
  290. package/dist/utils/signing.js +67 -0
  291. package/dist/utils/signing.js.map +1 -0
  292. package/dist/utils/token-hashing.d.ts +3 -0
  293. package/dist/utils/token-hashing.js +117 -0
  294. package/dist/utils/token-hashing.js.map +1 -0
  295. package/dist/utils/token-keyshares.d.ts +5 -0
  296. package/dist/utils/token-keyshares.js +17 -0
  297. package/dist/utils/token-keyshares.js.map +1 -0
  298. package/dist/utils/token-transactions.d.ts +5 -0
  299. package/dist/utils/token-transactions.js +40 -0
  300. package/dist/utils/token-transactions.js.map +1 -0
  301. package/dist/utils/transaction.d.ts +8 -0
  302. package/dist/utils/transaction.js +33 -0
  303. package/dist/utils/transaction.js.map +1 -0
  304. package/dist/utils/wasm-wrapper.d.ts +2 -0
  305. package/dist/utils/wasm-wrapper.js +36 -0
  306. package/dist/utils/wasm-wrapper.js.map +1 -0
  307. package/dist/utils/wasm.d.ts +54 -0
  308. package/dist/utils/wasm.js +26 -0
  309. package/dist/utils/wasm.js.map +1 -0
  310. package/dist/wasm/spark_bindings.d.ts +229 -0
  311. package/dist/wasm/spark_bindings.js +1097 -0
  312. package/dist/wasm/spark_bindings.js.map +1 -0
  313. package/dist/wasm/spark_bindings_bg.wasm +0 -0
  314. package/package.json +140 -0
@@ -0,0 +1,175 @@
1
+ //@ts-nocheck
2
+ import { afterEach, beforeAll, describe, expect, it } from "@jest/globals";
3
+ import { hexToBytes } from "@noble/curves/abstract/utils";
4
+ import { equalBytes, sha256 } from "@scure/btc-signer/utils";
5
+ import { TransferStatus } from "../proto/spark.js";
6
+ import { WalletConfigService } from "../services/config.js";
7
+ import { ConnectionManager } from "../services/connection.js";
8
+ import { LightningService } from "../services/lightning.js";
9
+ import { TransferService } from "../services/transfer.js";
10
+ import { Network } from "../utils/network.js";
11
+ import { createNewTree, getTestWalletConfig } from "./test-util.js";
12
+ import { SparkWalletTesting } from "./utils/spark-testing-wallet.js";
13
+ import { BitcoinFaucet } from "./utils/test-faucet.js";
14
+ async function cleanUp() {
15
+ const config = getTestWalletConfig();
16
+ const preimage = hexToBytes("2d059c3ede82a107aa1452c0bea47759be3c5c6e5342be6a310f6c3a907d9f4c");
17
+ const paymentHash = sha256(preimage);
18
+ for (const operator of Object.values(config.signingOperators)) {
19
+ const client = ConnectionManager.createMockClient(operator.address);
20
+ await client.clean_up_preimage_share({
21
+ paymentHash,
22
+ });
23
+ client.close();
24
+ }
25
+ }
26
+ const fakeInvoiceCreator = async () => {
27
+ return "lnbcrt123450n1pnj6uf4pp5l26hsdxssmr52vd4xmn5xran7puzx34hpr6uevaq7ta0ayzrp8esdqqcqzpgxqyz5vqrzjqtr2vd60g57hu63rdqk87u3clac6jlfhej4kldrrjvfcw3mphcw8sqqqqzp3jlj6zyqqqqqqqqqqqqqq9qsp5w22fd8aqn7sdum7hxdf59ptgk322fkv589ejxjltngvgehlcqcyq9qxpqysgqvykwsxdx64qrj0s5pgcgygmrpj8w25jsjgltwn09yp24l9nvghe3dl3y0ycy70ksrlqmcn42hxn24e0ucuy3g9fjltudvhv4lrhhamgq3stqgp";
28
+ };
29
+ describe("LightningService", () => {
30
+ let userWallet;
31
+ let userConfig;
32
+ let lightningService;
33
+ let transferService;
34
+ let sspWallet;
35
+ let sspConfig;
36
+ let sspLightningService;
37
+ let sspTransferService;
38
+ // Skip all tests if running in GitHub Actions
39
+ const testFn = process.env.GITHUB_ACTIONS ? it.skip : it;
40
+ beforeAll(async () => {
41
+ userWallet = new SparkWalletTesting(Network.LOCAL);
42
+ await userWallet.initWalletFromMnemonic();
43
+ userConfig = new WalletConfigService(Network.LOCAL, userWallet.getSigner());
44
+ const connectionManager = new ConnectionManager(userConfig);
45
+ lightningService = new LightningService(userConfig, connectionManager);
46
+ transferService = new TransferService(userConfig, connectionManager);
47
+ sspWallet = new SparkWalletTesting(Network.LOCAL);
48
+ await sspWallet.initWalletFromMnemonic();
49
+ sspConfig = new WalletConfigService(Network.LOCAL, sspWallet.getSigner());
50
+ const sspConnectionManager = new ConnectionManager(sspConfig);
51
+ sspLightningService = new LightningService(sspConfig, sspConnectionManager);
52
+ sspTransferService = new TransferService(sspConfig, sspConnectionManager);
53
+ });
54
+ afterEach(async () => {
55
+ await cleanUp();
56
+ });
57
+ testFn("should create an invoice", async () => {
58
+ const preimage = hexToBytes("2d059c3ede82a107aa1452c0bea47759be3c5c6e5342be6a310f6c3a907d9f4c");
59
+ const invoice = await lightningService.createLightningInvoiceWithPreImage({
60
+ invoiceCreator: fakeInvoiceCreator,
61
+ amountSats: 100,
62
+ memo: "test",
63
+ preimage,
64
+ });
65
+ expect(invoice).toBeDefined();
66
+ });
67
+ testFn("test receive lightning payment", async () => {
68
+ const faucet = new BitcoinFaucet("http://127.0.0.1:18443", "admin1", "123");
69
+ const preimage = hexToBytes("2d059c3ede82a107aa1452c0bea47759be3c5c6e5342be6a310f6c3a907d9f4c");
70
+ const paymentHash = sha256(preimage);
71
+ const invoice = await lightningService.createLightningInvoiceWithPreImage({
72
+ invoiceCreator: fakeInvoiceCreator,
73
+ amountSats: 100,
74
+ memo: "test",
75
+ preimage,
76
+ });
77
+ expect(invoice).toBeDefined();
78
+ const sspLeafPubKey = await sspWallet.getSigner().generatePublicKey();
79
+ const nodeToSend = await createNewTree(sspWallet, sspLeafPubKey, faucet, 12345n);
80
+ const newLeafPubKey = await sspWallet
81
+ .getSigner()
82
+ .generatePublicKey(sha256("1"));
83
+ const leaves = [
84
+ {
85
+ leaf: nodeToSend,
86
+ signingPubKey: sspLeafPubKey,
87
+ newSigningPubKey: newLeafPubKey,
88
+ },
89
+ ];
90
+ const response = await sspLightningService.swapNodesForPreimage({
91
+ leaves,
92
+ receiverIdentityPubkey: await userConfig.signer.getIdentityPublicKey(),
93
+ paymentHash,
94
+ isInboundPayment: true,
95
+ });
96
+ expect(equalBytes(response.preimage, preimage)).toBe(true);
97
+ const senderTransfer = response.transfer;
98
+ expect(senderTransfer).toBeDefined();
99
+ const transfer = await sspTransferService.sendTransferTweakKey(senderTransfer, leaves, new Map());
100
+ expect(transfer.status).toEqual(TransferStatus.TRANSFER_STATUS_SENDER_KEY_TWEAKED);
101
+ const pendingTransfer = await transferService.queryPendingTransfers();
102
+ expect(pendingTransfer.transfers.length).toBe(1);
103
+ const receiverTransfer = pendingTransfer.transfers[0];
104
+ expect(receiverTransfer.id).toEqual(senderTransfer.id);
105
+ const leafPrivKeyMap = await transferService.verifyPendingTransfer(receiverTransfer);
106
+ expect(leafPrivKeyMap.size).toBe(1);
107
+ expect(leafPrivKeyMap.has(nodeToSend.id)).toBe(true);
108
+ expect(equalBytes(leafPrivKeyMap.get(nodeToSend.id), newLeafPubKey)).toBe(true);
109
+ const finalLeafPubKey = await userWallet.getSigner().generatePublicKey();
110
+ const leaf = receiverTransfer.leaves[0].leaf;
111
+ expect(leaf).toBeDefined();
112
+ const claimingNode = {
113
+ leaf: leaf,
114
+ signingPubKey: newLeafPubKey,
115
+ newSigningPubKey: finalLeafPubKey,
116
+ };
117
+ await transferService.claimTransfer(receiverTransfer, [claimingNode]);
118
+ }, 60000);
119
+ testFn("test send lightning payment", async () => {
120
+ const faucet = new BitcoinFaucet("http://127.0.0.1:18443", "admin1", "123");
121
+ const preimage = hexToBytes("2d059c3ede82a107aa1452c0bea47759be3c5c6e5342be6a310f6c3a907d9f4c");
122
+ const paymentHash = sha256(preimage);
123
+ const userLeafPubKey = await userWallet
124
+ .getSigner()
125
+ .generatePublicKey(sha256("1"));
126
+ const nodeToSend = await createNewTree(userWallet, userLeafPubKey, faucet, 12345n);
127
+ const newLeafPubKey = await userWallet
128
+ .getSigner()
129
+ .generatePublicKey(sha256("2"));
130
+ const leaves = [
131
+ {
132
+ leaf: nodeToSend,
133
+ signingPubKey: userLeafPubKey,
134
+ newSigningPubKey: newLeafPubKey,
135
+ },
136
+ ];
137
+ const response = await lightningService.swapNodesForPreimage({
138
+ leaves,
139
+ receiverIdentityPubkey: await sspConfig.signer.getIdentityPublicKey(),
140
+ paymentHash,
141
+ isInboundPayment: false,
142
+ invoiceString: await fakeInvoiceCreator(),
143
+ });
144
+ expect(response.transfer).toBeDefined();
145
+ // const refunds = await sspLightningService.queryUserSignedRefunds(
146
+ // paymentHash
147
+ // );
148
+ // let totalValue = 0n;
149
+ // for (const refund of refunds) {
150
+ // const value = sspLightningService.validateUserSignedRefund(refund);
151
+ // totalValue += value;
152
+ // }
153
+ // expect(totalValue).toBe(12345n);
154
+ const transfer = await transferService.sendTransferTweakKey(response.transfer, leaves, new Map());
155
+ expect(transfer.status).toEqual(TransferStatus.TRANSFER_STATUS_SENDER_KEY_TWEAK_PENDING);
156
+ const receiverTransfer = await sspLightningService.providePreimage(preimage);
157
+ expect(receiverTransfer.status).toEqual(TransferStatus.TRANSFER_STATUS_SENDER_KEY_TWEAKED);
158
+ expect(receiverTransfer.id).toEqual(transfer.id);
159
+ const leafPrivKeyMap = await sspTransferService.verifyPendingTransfer(receiverTransfer);
160
+ expect(leafPrivKeyMap.size).toBe(1);
161
+ expect(leafPrivKeyMap.has(nodeToSend.id)).toBe(true);
162
+ expect(equalBytes(leafPrivKeyMap.get(nodeToSend.id), newLeafPubKey)).toBe(true);
163
+ const finalLeafPubKey = await sspWallet
164
+ .getSigner()
165
+ .generatePublicKey(sha256("2"));
166
+ expect(receiverTransfer.leaves[0].leaf).toBeDefined();
167
+ const claimingNode = {
168
+ leaf: receiverTransfer.leaves[0].leaf,
169
+ signingPubKey: newLeafPubKey,
170
+ newSigningPubKey: finalLeafPubKey,
171
+ };
172
+ await sspTransferService.claimTransfer(receiverTransfer, [claimingNode]);
173
+ }, 60000);
174
+ });
175
+ //# sourceMappingURL=lightning.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightning.test.js","sourceRoot":"","sources":["../../src/tests/lightning.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,41 @@
1
+ import { describe, expect, it } from "@jest/globals";
2
+ import { secp256k1 } from "@noble/curves/secp256k1";
3
+ import { modInverse, recoverSecret, splitSecretWithProofs, validateShare, } from "../utils/secret-sharing.js";
4
+ describe("Secret Sharing", () => {
5
+ describe("modInverse", () => {
6
+ it("should correctly calculate modular multiplicative inverse", () => {
7
+ // Test cases: [a, m, expected]
8
+ const testCases = [
9
+ [3n, 11n, 4n], // 3 * 4 ≡ 1 (mod 11)
10
+ [10n, 17n, 12n], // 10 * 12 ≡ 1 (mod 17)
11
+ [7n, 13n, 2n], // 7 * 2 ≡ 1 (mod 13)
12
+ [-1n, secp256k1.CURVE.n, secp256k1.CURVE.n - 1n],
13
+ ];
14
+ for (const [a, m, expected] of testCases) {
15
+ const result = modInverse(a, m);
16
+ expect(result).toBe(expected);
17
+ // Normalize the result of (a * result) before taking modulo
18
+ const product = a * result;
19
+ const normalizedProduct = ((product % m) + m) % m;
20
+ expect(normalizedProduct).toBe(1n);
21
+ }
22
+ });
23
+ it("should throw error when modular inverse doesn't exist", () => {
24
+ expect(() => modInverse(4n, 8n)).toThrow("Modular inverse does not exist");
25
+ expect(() => modInverse(6n, 9n)).toThrow("Modular inverse does not exist");
26
+ });
27
+ });
28
+ it("test secret sharing", () => {
29
+ const fieldModulus = secp256k1.CURVE.n;
30
+ const secret = 56223216183876340914672117764605975762373003965917245943571257601961255596156n;
31
+ const threshold = 3;
32
+ const numberOfShares = 5;
33
+ const shares = splitSecretWithProofs(secret, fieldModulus, threshold, numberOfShares);
34
+ for (const share of shares) {
35
+ validateShare(share);
36
+ }
37
+ const recoveredSecret = recoverSecret(shares.slice(0, threshold));
38
+ expect(recoveredSecret).toBe(secret);
39
+ });
40
+ });
41
+ //# sourceMappingURL=secret-sharing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-sharing.test.js","sourceRoot":"","sources":["../../src/tests/secret-sharing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EACL,UAAU,EACV,aAAa,EACb,qBAAqB,EACrB,aAAa,GACd,MAAM,4BAA4B,CAAC;AAEpC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,+BAA+B;YAC/B,MAAM,SAAS,GAA+B;gBAC5C,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,qBAAqB;gBACpC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,uBAAuB;gBACxC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,qBAAqB;gBACpC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;aACjD,CAAC;YAEF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE9B,4DAA4D;gBAC5D,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC;gBAC3B,MAAM,iBAAiB,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CACtC,gCAAgC,CACjC,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CACtC,gCAAgC,CACjC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GACV,8EAA8E,CAAC;QACjF,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,MAAM,cAAc,GAAG,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,qBAAqB,CAClC,MAAM,EACN,YAAY,EACZ,SAAS,EACT,cAAc,CACf,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,131 @@
1
+ //@ts-nocheck
2
+ import { describe, expect, it } from "@jest/globals";
3
+ import { equalBytes, hexToBytes } from "@noble/curves/abstract/utils";
4
+ import { secp256k1 } from "@noble/curves/secp256k1";
5
+ import { sha256 } from "@scure/btc-signer/utils";
6
+ import { WalletConfigService } from "../services/config.js";
7
+ import { ConnectionManager } from "../services/connection.js";
8
+ import { TransferService } from "../services/transfer.js";
9
+ import { applyAdaptorToSignature, generateAdaptorFromSignature, } from "../utils/adaptor-signature.js";
10
+ import { computeTaprootKeyNoScript, getSigHashFromTx, } from "../utils/bitcoin.js";
11
+ import { Network } from "../utils/network.js";
12
+ import { createNewTree } from "./test-util.js";
13
+ import { SparkWalletTesting } from "./utils/spark-testing-wallet.js";
14
+ import { BitcoinFaucet } from "./utils/test-faucet.js";
15
+ describe("swap", () => {
16
+ const testFn = process.env.GITHUB_ACTIONS ? it.skip : it;
17
+ testFn("test swap", async () => {
18
+ const faucet = new BitcoinFaucet("http://127.0.0.1:18443", "admin1", "123");
19
+ // Initiate sender
20
+ const senderWallet = new SparkWalletTesting(Network.LOCAL);
21
+ await senderWallet.initWalletFromMnemonic();
22
+ const senderPubkey = await senderWallet.getIdentityPublicKey();
23
+ const senderConfig = new WalletConfigService(Network.LOCAL, senderWallet.getSigner());
24
+ const senderConnectionManager = new ConnectionManager(senderConfig);
25
+ const senderTransferService = new TransferService(senderConfig, senderConnectionManager);
26
+ // Initiate receiver
27
+ const receiverWallet = new SparkWalletTesting(Network.LOCAL);
28
+ await receiverWallet.initWalletFromMnemonic();
29
+ const receiverPubkey = await receiverWallet.getIdentityPublicKey();
30
+ const receiverConfig = new WalletConfigService(Network.LOCAL, receiverWallet.getSigner());
31
+ const receiverConnectionManager = new ConnectionManager(receiverConfig);
32
+ const receiverTransferService = new TransferService(receiverConfig, receiverConnectionManager);
33
+ const senderLeafPubKey = await senderWallet
34
+ .getSigner()
35
+ .generatePublicKey();
36
+ const senderRootNode = await createNewTree(senderWallet, senderLeafPubKey, faucet);
37
+ const receiverLeafPubKey = await receiverWallet
38
+ .getSigner()
39
+ .generatePublicKey();
40
+ const receiverRootNode = await createNewTree(receiverWallet, receiverLeafPubKey, faucet);
41
+ // Sender initiates transfer
42
+ const senderNewLeafPubKey = await senderWallet
43
+ .getSigner()
44
+ .generatePublicKey(sha256("1"));
45
+ const senderTransferNode = {
46
+ leaf: senderRootNode,
47
+ signingPubKey: senderLeafPubKey,
48
+ newSigningPubKey: senderNewLeafPubKey,
49
+ };
50
+ const senderLeavesToTransfer = [senderTransferNode];
51
+ // Get signature for refunds (normal flow)
52
+ const { transfer: senderTransfer, signatureMap: senderRefundSignatureMap, leafDataMap: senderLeafDataMap, } = await senderTransferService.sendTransferSignRefund(senderLeavesToTransfer, hexToBytes(receiverPubkey), new Date(Date.now() + 10 * 60 * 1000));
53
+ expect(senderRefundSignatureMap.size).toBe(1);
54
+ const senderSignature = senderRefundSignatureMap.get(senderRootNode.id);
55
+ expect(senderSignature).toBeDefined();
56
+ expect(senderLeafDataMap.size).toBe(1);
57
+ const { adaptorPrivateKey, adaptorSignature } = generateAdaptorFromSignature(senderSignature);
58
+ const adaptorPubKey = secp256k1.getPublicKey(adaptorPrivateKey);
59
+ const receiverNewLeafPubKey = await receiverWallet
60
+ .getSigner()
61
+ .generatePublicKey(sha256("1"));
62
+ const receiverTransferNode = {
63
+ leaf: receiverRootNode,
64
+ signingPubKey: receiverLeafPubKey,
65
+ newSigningPubKey: receiverNewLeafPubKey,
66
+ };
67
+ const receiverLeavesToTransfer = [receiverTransferNode];
68
+ const { transfer: receiverTransfer, signatureMap: receiverRefundSignatureMap, leafDataMap: receiverLeafDataMap, signingResults: operatorSigningResults, } = await receiverTransferService.sendSwapSignRefund(receiverLeavesToTransfer, hexToBytes(senderPubkey), new Date(Date.now() + 10 * 60 * 1000), adaptorPubKey);
69
+ const newReceiverRefundSignatureMap = new Map();
70
+ for (const [nodeId, signature] of receiverRefundSignatureMap.entries()) {
71
+ const leafData = receiverLeafDataMap.get(nodeId);
72
+ if (!leafData?.refundTx) {
73
+ throw new Error(`No refund tx for leaf ${nodeId}`);
74
+ }
75
+ const sighash = getSigHashFromTx(leafData.refundTx, 0, leafData.tx.getOutput(leafData.vout));
76
+ let verifyingPubkey;
77
+ for (const signingResult of operatorSigningResults) {
78
+ if (signingResult.leafId === nodeId) {
79
+ verifyingPubkey = signingResult.verifyingKey;
80
+ }
81
+ }
82
+ expect(verifyingPubkey).toBeDefined();
83
+ const taprootKey = computeTaprootKeyNoScript(verifyingPubkey.slice(1, 33));
84
+ const adaptorSig = applyAdaptorToSignature(taprootKey.slice(1, 33), sighash, signature, adaptorPrivateKey);
85
+ newReceiverRefundSignatureMap.set(nodeId, adaptorSig);
86
+ }
87
+ const senderTransferTweakKey = await senderTransferService.sendTransferTweakKey(senderTransfer, senderLeavesToTransfer, senderRefundSignatureMap);
88
+ const pendingTransfer = await receiverTransferService.queryPendingTransfers();
89
+ expect(pendingTransfer.transfers.length).toBe(1);
90
+ const receiverPendingTransfer = pendingTransfer.transfers[0];
91
+ expect(receiverPendingTransfer.id).toBe(senderTransferTweakKey.id);
92
+ const leafPrivKeyMap = await receiverTransferService.verifyPendingTransfer(receiverPendingTransfer);
93
+ expect(leafPrivKeyMap.size).toBe(1);
94
+ expect(leafPrivKeyMap.get(senderRootNode.id)).toBeDefined();
95
+ const bytesEqual = equalBytes(leafPrivKeyMap.get(senderRootNode.id), senderNewLeafPubKey);
96
+ expect(bytesEqual).toBe(true);
97
+ expect(receiverPendingTransfer.leaves[0].leaf).toBeDefined();
98
+ const finalLeafPubKey = await receiverWallet
99
+ .getSigner()
100
+ .generatePublicKey(sha256("2"));
101
+ const claimingNode = {
102
+ leaf: receiverPendingTransfer.leaves[0].leaf,
103
+ signingPubKey: senderNewLeafPubKey,
104
+ newSigningPubKey: finalLeafPubKey,
105
+ };
106
+ const leavesToClaim = [claimingNode];
107
+ await receiverTransferService.claimTransfer(receiverPendingTransfer, leavesToClaim);
108
+ await receiverTransferService.sendTransferTweakKey(receiverTransfer, receiverLeavesToTransfer, newReceiverRefundSignatureMap);
109
+ const sPendingTransfer = await senderTransferService.queryPendingTransfers();
110
+ expect(sPendingTransfer.transfers.length).toBe(1);
111
+ const senderPendingTransfer = sPendingTransfer.transfers[0];
112
+ expect(senderPendingTransfer.id).toBe(receiverTransfer.id);
113
+ const senderLeafPrivKeyMap = await senderTransferService.verifyPendingTransfer(senderPendingTransfer);
114
+ expect(senderLeafPrivKeyMap.size).toBe(1);
115
+ expect(senderLeafPrivKeyMap.get(receiverRootNode.id)).toBeDefined();
116
+ const bytesEqual_1 = equalBytes(senderLeafPrivKeyMap.get(receiverRootNode.id), receiverNewLeafPubKey);
117
+ expect(bytesEqual_1).toBe(true);
118
+ expect(senderPendingTransfer.leaves[0].leaf).toBeDefined();
119
+ const finalLeafPubKey_1 = await senderWallet
120
+ .getSigner()
121
+ .generatePublicKey(sha256("3"));
122
+ const claimingNode_1 = {
123
+ leaf: senderPendingTransfer.leaves[0].leaf,
124
+ signingPubKey: receiverNewLeafPubKey,
125
+ newSigningPubKey: finalLeafPubKey_1,
126
+ };
127
+ const leavesToClaim_1 = [claimingNode_1];
128
+ await senderTransferService.claimTransfer(senderPendingTransfer, leavesToClaim_1);
129
+ }, 30000);
130
+ });
131
+ //# sourceMappingURL=swap.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.test.js","sourceRoot":"","sources":["../../src/tests/swap.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { TreeNode } from "../proto/spark.js";
2
+ import { SigningOperator, WalletConfig } from "../services/config.js";
3
+ import { Network } from "../utils/network.js";
4
+ import { SparkWalletTesting } from "./utils/spark-testing-wallet.js";
5
+ import { BitcoinFaucet } from "./utils/test-faucet.js";
6
+ export declare const LOCAL_WALLET_CONFIG: {
7
+ network: Network;
8
+ coodinatorIdentifier: string;
9
+ frostSignerAddress: string;
10
+ threshold: number;
11
+ signingOperators: Record<string, SigningOperator>;
12
+ };
13
+ export declare const REGTEST_WALLET_CONFIG: {
14
+ network: Network;
15
+ coodinatorIdentifier: string;
16
+ frostSignerAddress: string;
17
+ threshold: number;
18
+ signingOperators: Record<string, SigningOperator>;
19
+ };
20
+ export declare function getRegtestSigningOperators(): Record<string, SigningOperator>;
21
+ export declare function getLocalSigningOperators(): Record<string, SigningOperator>;
22
+ export declare function getTestWalletConfig(): WalletConfig;
23
+ export declare function getTestWalletConfigWithIdentityKey(identityPrivateKey: Uint8Array): WalletConfig;
24
+ export declare function createNewTree(wallet: SparkWalletTesting, pubKey: Uint8Array, faucet: BitcoinFaucet, amountSats?: bigint): Promise<TreeNode>;
@@ -0,0 +1,137 @@
1
+ //@ts-nocheck
2
+ import { hexToBytes } from "@noble/curves/abstract/utils";
3
+ import { secp256k1 } from "@noble/curves/secp256k1";
4
+ import { Address, OutScript, Transaction } from "@scure/btc-signer";
5
+ import { WalletConfigService, } from "../services/config.js";
6
+ import { ConnectionManager } from "../services/connection.js";
7
+ import { DepositService } from "../services/deposit.js";
8
+ import { getP2TRAddressFromPublicKey } from "../utils/bitcoin.js";
9
+ import { getNetwork, Network } from "../utils/network.js";
10
+ export const LOCAL_WALLET_CONFIG = {
11
+ network: Network.REGTEST,
12
+ coodinatorIdentifier: "0000000000000000000000000000000000000000000000000000000000000001",
13
+ frostSignerAddress: "unix:///tmp/frost_0.sock",
14
+ threshold: 3,
15
+ signingOperators: getLocalSigningOperators(),
16
+ };
17
+ export const REGTEST_WALLET_CONFIG = {
18
+ network: Network.REGTEST,
19
+ coodinatorIdentifier: "0000000000000000000000000000000000000000000000000000000000000001",
20
+ frostSignerAddress: "unix:///tmp/frost_0.sock",
21
+ threshold: 3,
22
+ signingOperators: getRegtestSigningOperators(),
23
+ };
24
+ export function getRegtestSigningOperators() {
25
+ const pubkeys = [
26
+ "03acd9a5a88db102730ff83dee69d69088cc4c9d93bbee893e90fd5051b7da9651",
27
+ "02d2d103cacb1d6355efeab27637c74484e2a7459e49110c3fe885210369782e23",
28
+ "0350f07ffc21bfd59d31e0a7a600e2995273938444447cb9bc4c75b8a895dbb853",
29
+ ];
30
+ const pubkeyBytesArray = pubkeys.map((pubkey) => hexToBytes(pubkey));
31
+ return {
32
+ "0000000000000000000000000000000000000000000000000000000000000001": {
33
+ id: 0,
34
+ identifier: "0000000000000000000000000000000000000000000000000000000000000001",
35
+ address: "https://0.spark.dev.dev.sparkinfra.net",
36
+ identityPublicKey: pubkeyBytesArray[0],
37
+ },
38
+ "0000000000000000000000000000000000000000000000000000000000000002": {
39
+ id: 1,
40
+ identifier: "0000000000000000000000000000000000000000000000000000000000000002",
41
+ address: "https://1.spark.dev.dev.sparkinfra.net",
42
+ identityPublicKey: pubkeyBytesArray[1],
43
+ },
44
+ "0000000000000000000000000000000000000000000000000000000000000003": {
45
+ id: 2,
46
+ identifier: "0000000000000000000000000000000000000000000000000000000000000003",
47
+ address: "https://2.spark.dev.dev.sparkinfra.net",
48
+ identityPublicKey: pubkeyBytesArray[2],
49
+ },
50
+ };
51
+ }
52
+ export function getLocalSigningOperators() {
53
+ const pubkeys = [
54
+ "0322ca18fc489ae25418a0e768273c2c61cabb823edfb14feb891e9bec62016510",
55
+ "0341727a6c41b168f07eb50865ab8c397a53c7eef628ac1020956b705e43b6cb27",
56
+ "0305ab8d485cc752394de4981f8a5ae004f2becfea6f432c9a59d5022d8764f0a6",
57
+ "0352aef4d49439dedd798ac4aef1e7ebef95f569545b647a25338398c1247ffdea",
58
+ "02c05c88cc8fc181b1ba30006df6a4b0597de6490e24514fbdd0266d2b9cd3d0ba",
59
+ ];
60
+ const pubkeyBytesArray = pubkeys.map((pubkey) => hexToBytes(pubkey));
61
+ return {
62
+ "0000000000000000000000000000000000000000000000000000000000000001": {
63
+ id: 0,
64
+ identifier: "0000000000000000000000000000000000000000000000000000000000000001",
65
+ address: "https://localhost:8535",
66
+ identityPublicKey: pubkeyBytesArray[0],
67
+ },
68
+ "0000000000000000000000000000000000000000000000000000000000000002": {
69
+ id: 1,
70
+ identifier: "0000000000000000000000000000000000000000000000000000000000000002",
71
+ address: "https://localhost:8536",
72
+ identityPublicKey: pubkeyBytesArray[1],
73
+ },
74
+ "0000000000000000000000000000000000000000000000000000000000000003": {
75
+ id: 2,
76
+ identifier: "0000000000000000000000000000000000000000000000000000000000000003",
77
+ address: "https://localhost:8537",
78
+ identityPublicKey: pubkeyBytesArray[2],
79
+ },
80
+ "0000000000000000000000000000000000000000000000000000000000000004": {
81
+ id: 3,
82
+ identifier: "0000000000000000000000000000000000000000000000000000000000000004",
83
+ address: "https://localhost:8538",
84
+ identityPublicKey: pubkeyBytesArray[3],
85
+ },
86
+ "0000000000000000000000000000000000000000000000000000000000000005": {
87
+ id: 4,
88
+ identifier: "0000000000000000000000000000000000000000000000000000000000000005",
89
+ address: "https://localhost:8539",
90
+ identityPublicKey: pubkeyBytesArray[4],
91
+ },
92
+ };
93
+ }
94
+ export function getTestWalletConfig() {
95
+ const identityPrivateKey = secp256k1.utils.randomPrivateKey();
96
+ return getTestWalletConfigWithIdentityKey(identityPrivateKey);
97
+ }
98
+ export function getTestWalletConfigWithIdentityKey(identityPrivateKey) {
99
+ return {
100
+ ...LOCAL_WALLET_CONFIG,
101
+ identityPrivateKey,
102
+ };
103
+ }
104
+ export async function createNewTree(wallet, pubKey, faucet, amountSats = 100000n) {
105
+ const faucetCoin = await faucet.fund();
106
+ const configService = new WalletConfigService(Network.LOCAL, wallet.getSigner());
107
+ const connectionManager = new ConnectionManager(configService);
108
+ const depositService = new DepositService(configService, connectionManager);
109
+ const depositResp = await depositService.generateDepositAddress({
110
+ signingPubkey: pubKey,
111
+ });
112
+ if (!depositResp.depositAddress) {
113
+ throw new Error("deposit address not found");
114
+ }
115
+ const depositTx = new Transaction();
116
+ depositTx.addInput(faucetCoin.outpoint);
117
+ // Add the main output
118
+ const addr = Address(getNetwork(Network.LOCAL)).decode(depositResp.depositAddress.address);
119
+ const script = OutScript.encode(addr);
120
+ depositTx.addOutput({ script, amount: amountSats });
121
+ const treeResp = await depositService.createTreeRoot({
122
+ signingPubKey: pubKey,
123
+ verifyingKey: depositResp.depositAddress.verifyingKey,
124
+ depositTx,
125
+ vout: 0,
126
+ });
127
+ const signedDepositTx = await faucet.signFaucetCoin(depositTx, faucetCoin.txout, faucetCoin.key);
128
+ await faucet.broadcastTx(signedDepositTx.hex);
129
+ // Mine just 1 block instead of waiting for many confirmations
130
+ const randomKey = secp256k1.utils.randomPrivateKey();
131
+ const randomPubKey = secp256k1.getPublicKey(randomKey);
132
+ const randomAddress = getP2TRAddressFromPublicKey(randomPubKey, Network.LOCAL);
133
+ await faucet.generateToAddress(1, randomAddress);
134
+ await new Promise((resolve) => setTimeout(resolve, 100));
135
+ return treeResp.nodes[0];
136
+ }
137
+ //# sourceMappingURL=test-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-util.js","sourceRoot":"","sources":["../../src/tests/test-util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,42 @@
1
+ import { numberToBytesBE } from "@noble/curves/abstract/utils";
2
+ import { hashTokenTransaction } from "../utils/token-hashing.js";
3
+ describe("hash token transaction", () => {
4
+ it("should produce the exact same hash", () => {
5
+ const tokenAmount = 1000n;
6
+ const tokenPublicKey = new Uint8Array([
7
+ 242, 155, 208, 90, 72, 211, 120, 244, 69, 99, 28, 101, 149, 222, 123, 50,
8
+ 252, 63, 99, 54, 137, 226, 7, 224, 163, 122, 93, 248, 42, 159, 173, 45,
9
+ ]);
10
+ const identityPubKey = new Uint8Array([
11
+ 25, 155, 208, 90, 72, 211, 120, 244, 69, 99, 28, 101, 149, 222, 123, 50,
12
+ 252, 63, 99, 54, 137, 226, 7, 224, 163, 122, 93, 248, 42, 159, 173, 46,
13
+ ]);
14
+ const tokenTransaction = {
15
+ tokenInput: {
16
+ $case: "mintInput",
17
+ mintInput: {
18
+ issuerPublicKey: tokenPublicKey,
19
+ issuerProvidedTimestamp: 100,
20
+ },
21
+ },
22
+ outputLeaves: [
23
+ {
24
+ id: "db1a4e48-0fc5-4f6c-8a80-d9d6c561a436",
25
+ ownerPublicKey: identityPubKey,
26
+ withdrawBondSats: 10000,
27
+ withdrawLocktime: 100,
28
+ tokenPublicKey: tokenPublicKey,
29
+ tokenAmount: numberToBytesBE(tokenAmount, 16),
30
+ revocationPublicKey: new Uint8Array(0),
31
+ },
32
+ ],
33
+ sparkOperatorIdentityPublicKeys: [],
34
+ };
35
+ const hash = hashTokenTransaction(tokenTransaction, false);
36
+ expect(Array.from(hash)).toEqual([
37
+ 169, 30, 146, 172, 90, 113, 89, 157, 142, 5, 138, 251, 237, 122, 65, 135,
38
+ 47, 178, 192, 116, 107, 24, 176, 162, 78, 238, 80, 166, 38, 129, 151, 167,
39
+ ]);
40
+ });
41
+ });
42
+ //# sourceMappingURL=tokens.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.test.js","sourceRoot":"","sources":["../../src/tests/tokens.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,WAAW,GAAW,KAAK,CAAC;QAElC,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC;YACpC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACxE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;SACvE,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC;YACpC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACvE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;SACvE,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG;YACvB,UAAU,EAAE;gBACV,KAAK,EAAE,WAAoB;gBAC3B,SAAS,EAAE;oBACT,eAAe,EAAE,cAAc;oBAC/B,uBAAuB,EAAE,GAAG;iBAC7B;aACF;YACD,YAAY,EAAE;gBACZ;oBACE,EAAE,EAAE,sCAAsC;oBAC1C,cAAc,EAAE,cAAc;oBAC9B,gBAAgB,EAAE,KAAK;oBACvB,gBAAgB,EAAE,GAAG;oBACrB,cAAc,EAAE,cAAc;oBAC9B,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC7C,mBAAmB,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;iBACvC;aACF;YACD,+BAA+B,EAAE,EAAE;SACpC,CAAC;QAEF,MAAM,IAAI,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAE3D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;YACxE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC1E,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};