@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 { describe, expect, it } from "@jest/globals";
3
+ import { bytesToHex, equalBytes, hexToBytes, } from "@noble/curves/abstract/utils";
4
+ import { sha256 } from "@scure/btc-signer/utils";
5
+ import { WalletConfigService } from "../services/config.js";
6
+ import { ConnectionManager } from "../services/connection.js";
7
+ import { TransferService } from "../services/transfer.js";
8
+ import { Network } from "../utils/network.js";
9
+ import { createNewTree } from "./test-util.js";
10
+ import { SparkWalletTesting } from "./utils/spark-testing-wallet.js";
11
+ import { BitcoinFaucet } from "./utils/test-faucet.js";
12
+ describe("Transfer", () => {
13
+ // Skip all tests if running in GitHub Actions
14
+ const testFn = process.env.GITHUB_ACTIONS ? it.skip : it;
15
+ testFn("test transfer", async () => {
16
+ const faucet = new BitcoinFaucet("http://127.0.0.1:18443", "admin1", "123");
17
+ const senderWallet = new SparkWalletTesting(Network.LOCAL);
18
+ await senderWallet.initWalletFromMnemonic();
19
+ const senderConfigService = new WalletConfigService(Network.LOCAL, senderWallet.getSigner());
20
+ const senderConnectionManager = new ConnectionManager(senderConfigService);
21
+ const senderTransferService = new TransferService(senderConfigService, senderConnectionManager);
22
+ const leafPubKey = await senderWallet.getSigner().generatePublicKey();
23
+ const rootNode = await createNewTree(senderWallet, leafPubKey, faucet, 1000n);
24
+ const newLeafPubKey = await senderWallet.getSigner().generatePublicKey();
25
+ const receiverWallet = new SparkWalletTesting(Network.LOCAL);
26
+ await receiverWallet.initWalletFromMnemonic();
27
+ const receiverPubkey = await receiverWallet.getIdentityPublicKey();
28
+ const receiverConfigService = new WalletConfigService(Network.LOCAL, receiverWallet.getSigner());
29
+ const receiverConnectionManager = new ConnectionManager(receiverConfigService);
30
+ const receiverTransferService = new TransferService(receiverConfigService, receiverConnectionManager);
31
+ const transferNode = {
32
+ leaf: rootNode,
33
+ signingPubKey: leafPubKey,
34
+ newSigningPubKey: newLeafPubKey,
35
+ };
36
+ const senderTransfer = await senderTransferService.sendTransfer([transferNode], hexToBytes(receiverPubkey), new Date(Date.now() + 10 * 60 * 1000));
37
+ const pendingTransfer = await receiverWallet.queryPendingTransfers();
38
+ expect(pendingTransfer.transfers.length).toBe(1);
39
+ const receiverTransfer = pendingTransfer.transfers[0];
40
+ expect(receiverTransfer.id).toBe(senderTransfer.id);
41
+ const leafPrivKeyMap = await receiverWallet.verifyPendingTransfer(receiverTransfer);
42
+ expect(leafPrivKeyMap.size).toBe(1);
43
+ const leafPrivKeyMapBytes = leafPrivKeyMap.get(rootNode.id);
44
+ expect(leafPrivKeyMapBytes).toBeDefined();
45
+ expect(bytesToHex(leafPrivKeyMapBytes)).toBe(bytesToHex(newLeafPubKey));
46
+ const finalLeafPubKey = await receiverWallet
47
+ .getSigner()
48
+ .generatePublicKey(sha256(rootNode.id));
49
+ const claimingNode = {
50
+ leaf: rootNode,
51
+ signingPubKey: newLeafPubKey,
52
+ newSigningPubKey: finalLeafPubKey,
53
+ };
54
+ await receiverTransferService.claimTransfer(receiverTransfer, [
55
+ claimingNode,
56
+ ]);
57
+ const newReceiverWallet = new SparkWalletTesting(Network.LOCAL);
58
+ await newReceiverWallet.initWalletFromMnemonic();
59
+ const newReceiverPubkey = await newReceiverWallet.getIdentityPublicKey();
60
+ await receiverWallet.sendTransfer({
61
+ amount: 1000,
62
+ receiverPubKey: hexToBytes(newReceiverPubkey),
63
+ });
64
+ const newPendingTransfer = await newReceiverWallet.queryPendingTransfers();
65
+ expect(newPendingTransfer.transfers.length).toBe(1);
66
+ await newReceiverWallet.getBalance();
67
+ }, 30000);
68
+ testFn("test transfer with separate", async () => {
69
+ const faucet = new BitcoinFaucet("http://127.0.0.1:18443", "admin1", "123");
70
+ const senderWallet = new SparkWalletTesting(Network.LOCAL);
71
+ await senderWallet.initWalletFromMnemonic();
72
+ const senderConfigService = new WalletConfigService(Network.LOCAL, senderWallet.getSigner());
73
+ const senderConnectionManager = new ConnectionManager(senderConfigService);
74
+ const senderTransferService = new TransferService(senderConfigService, senderConnectionManager);
75
+ const receiverWallet = new SparkWalletTesting(Network.LOCAL);
76
+ await receiverWallet.initWalletFromMnemonic();
77
+ const receiverPubkey = await receiverWallet.getIdentityPublicKey();
78
+ const receiverConfigService = new WalletConfigService(Network.LOCAL, receiverWallet.getSigner());
79
+ const receiverConnectionManager = new ConnectionManager(receiverConfigService);
80
+ const receiverTransferService = new TransferService(receiverConfigService, receiverConnectionManager);
81
+ const leafPubKey = await senderWallet.getSigner().generatePublicKey();
82
+ const rootNode = await createNewTree(senderWallet, leafPubKey, faucet, 100000n);
83
+ const newLeafPubKey = await senderWallet.getSigner().generatePublicKey();
84
+ const transferNode = {
85
+ leaf: rootNode,
86
+ signingPubKey: leafPubKey,
87
+ newSigningPubKey: newLeafPubKey,
88
+ };
89
+ const leavesToTransfer = [transferNode];
90
+ const senderTransfer = await senderTransferService.sendTransfer(leavesToTransfer, hexToBytes(receiverPubkey), new Date(Date.now() + 10 * 60 * 1000));
91
+ // Receiver queries pending transfer
92
+ const pendingTransfer = await receiverWallet.queryPendingTransfers();
93
+ expect(pendingTransfer.transfers.length).toBe(1);
94
+ const receiverTransfer = pendingTransfer.transfers[0];
95
+ expect(receiverTransfer.id).toBe(senderTransfer.id);
96
+ const leafPrivKeyMap = await receiverWallet.verifyPendingTransfer(receiverTransfer);
97
+ expect(leafPrivKeyMap.size).toBe(1);
98
+ const leafPrivKeyMapBytes = leafPrivKeyMap.get(rootNode.id);
99
+ expect(leafPrivKeyMapBytes).toBeDefined();
100
+ expect(equalBytes(leafPrivKeyMapBytes, newLeafPubKey)).toBe(true);
101
+ const finalLeafPubKey = await receiverWallet
102
+ .getSigner()
103
+ .generatePublicKey(sha256(rootNode.id));
104
+ const claimingNode = {
105
+ leaf: receiverTransfer.leaves[0].leaf,
106
+ signingPubKey: newLeafPubKey,
107
+ newSigningPubKey: finalLeafPubKey,
108
+ };
109
+ const transferService = new TransferService(receiverConfigService, new ConnectionManager(receiverConfigService));
110
+ await transferService.claimTransferTweakKeys(receiverTransfer, [
111
+ claimingNode,
112
+ ]);
113
+ const newPendingTransfer = await receiverWallet.queryPendingTransfers();
114
+ expect(newPendingTransfer.transfers.length).toBe(1);
115
+ const newReceiverTransfer = newPendingTransfer.transfers[0];
116
+ expect(newReceiverTransfer.id).toBe(receiverTransfer.id);
117
+ const newLeafPubKeyMap = await receiverWallet.verifyPendingTransfer(newReceiverTransfer);
118
+ expect(newLeafPubKeyMap.size).toBe(1);
119
+ const newLeafPubKeyMapBytes = newLeafPubKeyMap.get(rootNode.id);
120
+ expect(newLeafPubKeyMapBytes).toBeDefined();
121
+ expect(bytesToHex(newLeafPubKeyMapBytes)).toBe(bytesToHex(newLeafPubKey));
122
+ await transferService.claimTransferSignRefunds(newReceiverTransfer, [
123
+ claimingNode,
124
+ ]);
125
+ const newNewPendingTransfer = await receiverWallet.queryPendingTransfers();
126
+ expect(newNewPendingTransfer.transfers.length).toBe(1);
127
+ await receiverTransferService.claimTransfer(newNewPendingTransfer.transfers[0], [claimingNode]);
128
+ });
129
+ testFn("cancel transfer", async () => {
130
+ const faucet = new BitcoinFaucet("http://127.0.0.1:18443", "admin1", "123");
131
+ const senderWallet = new SparkWalletTesting(Network.LOCAL);
132
+ await senderWallet.initWalletFromMnemonic();
133
+ const receiverWallet = new SparkWalletTesting(Network.LOCAL);
134
+ await receiverWallet.initWalletFromMnemonic();
135
+ const receiverPubkey = await receiverWallet.getIdentityPublicKey();
136
+ const receiverConfigService = new WalletConfigService(Network.LOCAL, receiverWallet.getSigner());
137
+ const receiverConnectionManager = new ConnectionManager(receiverConfigService);
138
+ const receiverTransferService = new TransferService(receiverConfigService, receiverConnectionManager);
139
+ const leafPubKey = await senderWallet.getSigner().generatePublicKey();
140
+ const rootNode = await createNewTree(senderWallet, leafPubKey, faucet, 100000n);
141
+ const newLeafPubKey = await senderWallet.getSigner().generatePublicKey();
142
+ const transferNode = {
143
+ leaf: rootNode,
144
+ signingPubKey: leafPubKey,
145
+ newSigningPubKey: newLeafPubKey,
146
+ };
147
+ const senderConfigService = new WalletConfigService(Network.LOCAL, senderWallet.getSigner());
148
+ const senderConnectionManager = new ConnectionManager(senderConfigService);
149
+ const senderTransferService = new TransferService(senderConfigService, senderConnectionManager);
150
+ const senderTransfer = await senderTransferService.sendTransferSignRefund([transferNode], hexToBytes(receiverPubkey), new Date(Date.now() + 10 * 60 * 1000));
151
+ await senderTransferService.cancelSendTransfer(senderTransfer.transfer);
152
+ const newSenderTransfer = await senderTransferService.sendTransfer([transferNode], hexToBytes(receiverPubkey), new Date(Date.now() + 10 * 60 * 1000));
153
+ const pendingTransfer = await receiverWallet.queryPendingTransfers();
154
+ expect(pendingTransfer.transfers.length).toBe(1);
155
+ const receiverTransfer = pendingTransfer.transfers[0];
156
+ expect(receiverTransfer.id).toBe(newSenderTransfer.id);
157
+ const leafPubKeyMap = await receiverWallet.verifyPendingTransfer(receiverTransfer);
158
+ expect(leafPubKeyMap.size).toBe(1);
159
+ const leafPubKeyMapBytes = leafPubKeyMap.get(rootNode.id);
160
+ expect(leafPubKeyMapBytes).toBeDefined();
161
+ expect(equalBytes(leafPubKeyMapBytes, newLeafPubKey)).toBe(true);
162
+ const finalLeafPubKey = await receiverWallet
163
+ .getSigner()
164
+ .generatePublicKey(sha256(rootNode.id));
165
+ const claimingNode = {
166
+ leaf: receiverTransfer.leaves[0].leaf,
167
+ signingPubKey: newLeafPubKey,
168
+ newSigningPubKey: finalLeafPubKey,
169
+ };
170
+ await receiverTransferService.claimTransfer(receiverTransfer, [
171
+ claimingNode,
172
+ ]);
173
+ });
174
+ });
175
+ //# sourceMappingURL=transfer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.test.js","sourceRoot":"","sources":["../../src/tests/transfer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,32 @@
1
+ import { describe, expect, it } from "@jest/globals";
2
+ import { bytesToHex } from "@noble/curves/abstract/utils";
3
+ import { getTxFromRawTxBytes, getTxId } from "../utils/bitcoin.js";
4
+ import { Network } from "../utils/network.js";
5
+ import { createDummyTx } from "../utils/wasm.js";
6
+ import { SparkWalletTesting } from "./utils/spark-testing-wallet.js";
7
+ describe("Tree Creation", () => {
8
+ // Skip all tests if running in GitHub Actions
9
+ const testFn = process.env.GITHUB_ACTIONS ? it.skip : it;
10
+ testFn("test tree creation address generation", async () => {
11
+ const wallet = new SparkWalletTesting(Network.LOCAL);
12
+ await wallet.initWalletFromMnemonic();
13
+ const pubKey = await wallet.getSigner().generatePublicKey();
14
+ const depositResp = await wallet.generateDepositAddress(pubKey);
15
+ expect(depositResp.depositAddress).toBeDefined();
16
+ const dummyTx = createDummyTx({
17
+ address: depositResp.depositAddress.address,
18
+ amountSats: 65536n,
19
+ });
20
+ const depositTxHex = bytesToHex(dummyTx.tx);
21
+ const depositTx = getTxFromRawTxBytes(dummyTx.tx);
22
+ const vout = 0;
23
+ const txid = getTxId(depositTx);
24
+ if (!txid) {
25
+ throw new Error("txid not found");
26
+ }
27
+ const treeResp = await wallet.generateDepositAddressForTree(vout, pubKey, depositTx);
28
+ const treeNodes = await wallet.createTree(vout, treeResp, true, depositTx);
29
+ console.log("tree nodes:", treeNodes);
30
+ }, 30000);
31
+ });
32
+ //# sourceMappingURL=tree-creation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-creation.test.js","sourceRoot":"","sources":["../../src/tests/tree-creation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,8CAA8C;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,MAAM,CACJ,uCAAuC,EACvC,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAEtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAE5D,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAEhE,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QAEjD,MAAM,OAAO,GAAG,aAAa,CAAC;YAC5B,OAAO,EAAE,WAAW,CAAC,cAAe,CAAC,OAAO;YAC5C,UAAU,EAAE,MAAM;SACnB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAElD,MAAM,IAAI,GAAG,CAAC,CAAC;QACf,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,6BAA6B,CACzD,IAAI,EACJ,MAAM,EACN,SAAS,CACV,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,UAAU,CACvC,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,SAAS,CACV,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC,EACD,KAAK,CACN,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { QueryPendingTransfersResponse, Transfer } from "../../proto/spark.js";
2
+ import { SparkSigner } from "../../signer/signer.js";
3
+ import { SparkWallet } from "../../spark-sdk.js";
4
+ interface ISparkWalletTesting extends SparkWallet {
5
+ getSigner(): SparkSigner;
6
+ queryPendingTransfers(): Promise<QueryPendingTransfersResponse>;
7
+ verifyPendingTransfer(transfer: Transfer): Promise<Map<string, Uint8Array>>;
8
+ }
9
+ export declare class SparkWalletTesting extends SparkWallet implements ISparkWalletTesting {
10
+ getSigner(): SparkSigner;
11
+ queryPendingTransfers(): Promise<QueryPendingTransfersResponse>;
12
+ verifyPendingTransfer(transfer: Transfer): Promise<Map<string, Uint8Array>>;
13
+ }
14
+ export {};
@@ -0,0 +1,13 @@
1
+ import { SparkWallet } from "../../spark-sdk.js";
2
+ export class SparkWalletTesting extends SparkWallet {
3
+ getSigner() {
4
+ return this.config.signer;
5
+ }
6
+ async queryPendingTransfers() {
7
+ return await this.transferService.queryPendingTransfers();
8
+ }
9
+ async verifyPendingTransfer(transfer) {
10
+ return await this.transferService.verifyPendingTransfer(transfer);
11
+ }
12
+ }
13
+ //# sourceMappingURL=spark-testing-wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spark-testing-wallet.js","sourceRoot":"","sources":["../../../src/tests/utils/spark-testing-wallet.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,OAAO,kBACX,SAAQ,WAAW;IAGZ,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,qBAAqB;QAChC,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAChC,QAAkB;QAElB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { Transaction } from "@scure/btc-signer";
2
+ import { TransactionInput, TransactionOutput } from "@scure/btc-signer/psbt";
3
+ export type FaucetCoin = {
4
+ key: Uint8Array;
5
+ outpoint: TransactionInput;
6
+ txout: TransactionOutput;
7
+ };
8
+ export declare class BitcoinFaucet {
9
+ private url;
10
+ private username;
11
+ private password;
12
+ private coins;
13
+ private static instance;
14
+ constructor(url: string, username: string, password: string);
15
+ fund(): Promise<FaucetCoin | undefined>;
16
+ refill(): Promise<void>;
17
+ signFaucetCoin(unsignedTx: Transaction, fundingTxOut: TransactionOutput, key: Uint8Array): Promise<Transaction>;
18
+ private call;
19
+ generateToAddress(numBlocks: number, address: string): Promise<any>;
20
+ getBlock(blockHash: string): Promise<any>;
21
+ broadcastTx(txHex: string): Promise<any>;
22
+ }
@@ -0,0 +1,148 @@
1
+ import { bytesToHex, hexToBytes } from "@noble/curves/abstract/utils";
2
+ import { schnorr, secp256k1 } from "@noble/curves/secp256k1";
3
+ import { SigHash, Transaction } from "@scure/btc-signer";
4
+ import { taprootTweakPrivKey } from "@scure/btc-signer/utils";
5
+ import { getP2TRAddressFromPublicKey, getP2TRScriptFromPublicKey, } from "../../utils/bitcoin.js";
6
+ import { Network } from "../../utils/network.js";
7
+ export class BitcoinFaucet {
8
+ url;
9
+ username;
10
+ password;
11
+ coins = [];
12
+ static instance = null;
13
+ constructor(url, username, password) {
14
+ this.url = url;
15
+ this.username = username;
16
+ this.password = password;
17
+ if (BitcoinFaucet.instance) {
18
+ return BitcoinFaucet.instance;
19
+ }
20
+ BitcoinFaucet.instance = this;
21
+ }
22
+ async fund() {
23
+ // If no coins available, refill the faucet
24
+ if (this.coins.length === 0) {
25
+ await this.refill();
26
+ }
27
+ // Take the first coin from the faucet
28
+ const coin = this.coins[0];
29
+ // Remove the used coin from the array
30
+ this.coins = this.coins.slice(1);
31
+ return coin;
32
+ }
33
+ async refill() {
34
+ // Generate key for initial block reward
35
+ const key = secp256k1.utils.randomPrivateKey();
36
+ const pubKey = secp256k1.getPublicKey(key);
37
+ const address = getP2TRAddressFromPublicKey(pubKey, Network.LOCAL);
38
+ // Mine a block to this address
39
+ const blockHash = await this.generateToAddress(1, address);
40
+ // Get block and funding transaction
41
+ const block = await this.getBlock(blockHash[0]);
42
+ const fundingTx = Transaction.fromRaw(hexToBytes(block.tx[0].hex), {
43
+ allowUnknownOutputs: true,
44
+ });
45
+ // Mine 100 blocks to make funds spendable
46
+ const randomKey = secp256k1.utils.randomPrivateKey();
47
+ const randomPubKey = secp256k1.getPublicKey(randomKey);
48
+ const randomAddress = getP2TRAddressFromPublicKey(randomPubKey, Network.LOCAL);
49
+ await this.generateToAddress(100, randomAddress);
50
+ const fundingTxId = block.tx[0].txid;
51
+ const fundingOutpoint = {
52
+ txid: fundingTxId,
53
+ index: 0,
54
+ };
55
+ const splitTx = new Transaction();
56
+ splitTx.addInput(fundingOutpoint);
57
+ let initialValue = fundingTx.getOutput(0).amount;
58
+ const coinAmount = 10000000n;
59
+ const coinKeys = [];
60
+ while (initialValue > coinAmount + 100000n) {
61
+ const coinKey = secp256k1.utils.randomPrivateKey();
62
+ const coinPubKey = secp256k1.getPublicKey(coinKey);
63
+ coinKeys.push(coinKey);
64
+ const script = getP2TRScriptFromPublicKey(coinPubKey, Network.LOCAL);
65
+ splitTx.addOutput({
66
+ script,
67
+ amount: coinAmount,
68
+ });
69
+ initialValue -= coinAmount;
70
+ }
71
+ // Sign and broadcast
72
+ const signedSplitTx = await this.signFaucetCoin(splitTx, fundingTx.getOutput(0), key);
73
+ await this.broadcastTx(bytesToHex(signedSplitTx.extract()));
74
+ // Create faucet coins
75
+ const splitTxId = signedSplitTx.id;
76
+ for (let i = 0; i < signedSplitTx.outputsLength; i++) {
77
+ this.coins.push({
78
+ // @ts-ignore - It's a test file
79
+ key: coinKeys[i],
80
+ outpoint: {
81
+ txid: hexToBytes(splitTxId),
82
+ index: i,
83
+ },
84
+ txout: signedSplitTx.getOutput(i),
85
+ });
86
+ }
87
+ }
88
+ async signFaucetCoin(unsignedTx, fundingTxOut, key) {
89
+ const pubKey = secp256k1.getPublicKey(key);
90
+ const internalKey = pubKey.slice(1); // Remove the 0x02/0x03 prefix
91
+ const script = getP2TRScriptFromPublicKey(pubKey, Network.LOCAL);
92
+ unsignedTx.updateInput(0, {
93
+ tapInternalKey: internalKey,
94
+ witnessUtxo: {
95
+ script,
96
+ amount: fundingTxOut.amount,
97
+ },
98
+ });
99
+ const sighash = unsignedTx.preimageWitnessV1(0, new Array(unsignedTx.inputsLength).fill(script), SigHash.DEFAULT, new Array(unsignedTx.inputsLength).fill(fundingTxOut.amount));
100
+ const merkleRoot = new Uint8Array();
101
+ const tweakedKey = taprootTweakPrivKey(key, merkleRoot);
102
+ if (!tweakedKey)
103
+ throw new Error("Invalid private key for taproot tweaking");
104
+ const signature = schnorr.sign(sighash, tweakedKey);
105
+ unsignedTx.updateInput(0, {
106
+ tapKeySig: signature,
107
+ });
108
+ unsignedTx.finalize();
109
+ return unsignedTx;
110
+ }
111
+ async call(method, params) {
112
+ try {
113
+ const response = await fetch(this.url, {
114
+ method: "POST",
115
+ headers: {
116
+ "Content-Type": "application/json",
117
+ Authorization: "Basic " + btoa(`${this.username}:${this.password}`),
118
+ },
119
+ body: JSON.stringify({
120
+ jsonrpc: "1.0",
121
+ id: "spark-js",
122
+ method,
123
+ params,
124
+ }),
125
+ });
126
+ const data = await response.json();
127
+ if (data.error) {
128
+ console.error(`RPC Error for method ${method}:`, data.error);
129
+ throw new Error(`Bitcoin RPC error: ${data.error.message}`);
130
+ }
131
+ return data.result;
132
+ }
133
+ catch (error) {
134
+ console.error("Error calling Bitcoin RPC:", error);
135
+ throw error;
136
+ }
137
+ }
138
+ async generateToAddress(numBlocks, address) {
139
+ return await this.call("generatetoaddress", [numBlocks, address]);
140
+ }
141
+ async getBlock(blockHash) {
142
+ return await this.call("getblock", [blockHash, 2]);
143
+ }
144
+ async broadcastTx(txHex) {
145
+ return await this.call("sendrawtransaction", [txHex, 0]);
146
+ }
147
+ }
148
+ //# sourceMappingURL=test-faucet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-faucet.js","sourceRoot":"","sources":["../../../src/tests/utils/test-faucet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "../graphql/objects/index.js";
2
+ export * as CommonProto from "../proto/common.js";
3
+ export * as SparkProto from "../proto/spark.js";
@@ -0,0 +1,4 @@
1
+ export * from "../graphql/objects/index.js";
2
+ export * as CommonProto from "../proto/common.js";
3
+ export * as SparkProto from "../proto/spark.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function generateSignatureFromExistingAdaptor(signature: Uint8Array, adaptorPrivateKeyBytes: Uint8Array): Uint8Array;
2
+ export declare function generateAdaptorFromSignature(signature: Uint8Array): {
3
+ adaptorSignature: Uint8Array;
4
+ adaptorPrivateKey: Uint8Array;
5
+ };
6
+ export declare function validateOutboundAdaptorSignature(pubkey: Uint8Array, hash: Uint8Array, signature: Uint8Array, adaptorPubkey: Uint8Array): boolean;
7
+ export declare function applyAdaptorToSignature(pubkey: Uint8Array, hash: Uint8Array, signature: Uint8Array, adaptorPrivateKeyBytes: Uint8Array): Uint8Array;
@@ -0,0 +1,114 @@
1
+ import { mod } from "@noble/curves/abstract/modular";
2
+ import { bytesToNumberBE, numberToBytesBE } from "@noble/curves/abstract/utils";
3
+ import { schnorr, secp256k1 } from "@noble/curves/secp256k1";
4
+ export function generateSignatureFromExistingAdaptor(signature, adaptorPrivateKeyBytes) {
5
+ const { r, s } = parseSignature(signature);
6
+ const sBigInt = bytesToNumberBE(s);
7
+ const tBigInt = bytesToNumberBE(adaptorPrivateKeyBytes);
8
+ const newS = mod(sBigInt - tBigInt, secp256k1.CURVE.n);
9
+ const newSignature = new Uint8Array([...r, ...numberToBytesBE(newS, 32)]);
10
+ return newSignature;
11
+ }
12
+ export function generateAdaptorFromSignature(signature) {
13
+ const adaptorPrivateKey = secp256k1.utils.randomPrivateKey();
14
+ const { r, s } = parseSignature(signature);
15
+ const sBigInt = bytesToNumberBE(s);
16
+ const tBigInt = bytesToNumberBE(adaptorPrivateKey);
17
+ // Calculate s - adaptorPrivateKey
18
+ const newS = mod(sBigInt - tBigInt, secp256k1.CURVE.n);
19
+ const newSignature = new Uint8Array([...r, ...numberToBytesBE(newS, 32)]);
20
+ return {
21
+ adaptorSignature: newSignature,
22
+ adaptorPrivateKey: adaptorPrivateKey,
23
+ };
24
+ }
25
+ export function validateOutboundAdaptorSignature(pubkey, hash, signature, adaptorPubkey) {
26
+ return schnorrVerifyWithAdaptor(signature, hash, pubkey, adaptorPubkey, false);
27
+ }
28
+ export function applyAdaptorToSignature(pubkey, hash, signature, adaptorPrivateKeyBytes) {
29
+ // Parse the signature
30
+ const { r, s } = parseSignature(signature);
31
+ // Convert values to bigints
32
+ const sBigInt = bytesToNumberBE(s);
33
+ const adaptorPrivateKey = bytesToNumberBE(adaptorPrivateKeyBytes);
34
+ // Try adding adaptor to s first
35
+ const newS = mod(sBigInt + adaptorPrivateKey, secp256k1.CURVE.n);
36
+ const newSig = new Uint8Array([...r, ...numberToBytesBE(newS, 32)]);
37
+ if (schnorr.verify(newSig, hash, pubkey)) {
38
+ return newSig;
39
+ }
40
+ // If adding didn't work, try subtracting
41
+ const altS = mod(sBigInt - adaptorPrivateKey, secp256k1.CURVE.n);
42
+ const altSig = new Uint8Array([...r, ...numberToBytesBE(altS, 32)]);
43
+ if (schnorr.verify(altSig, hash, pubkey)) {
44
+ return altSig;
45
+ }
46
+ throw new Error("Cannot apply adaptor to signature");
47
+ }
48
+ // Step 1: P = lift_x(int(pk))
49
+ // Step 2: r = int(sig[0:32])
50
+ // Step 3: s = int(sig[32:64])
51
+ // Step 4: e = int(tagged_hash("BIP0340/challenge", bytes(r) || bytes(P) || m)) mod n
52
+ // Step 5: R = sG - eP
53
+ // Step 6: R = R + T
54
+ function schnorrVerifyWithAdaptor(signature, hash, pubKeyBytes, adaptorPubkey, inbound) {
55
+ // Step 1: Verify message length
56
+ if (hash.length !== 32) {
57
+ throw new Error(`wrong size for message (got ${hash.length}, want 32)`);
58
+ }
59
+ // Step 2: Lift x coordinate to curve point
60
+ const pubKey = schnorr.utils.lift_x(bytesToNumberBE(pubKeyBytes));
61
+ pubKey.assertValidity();
62
+ // Parse signature
63
+ // Step 3 and 4 is handled by parseSignature
64
+ const { r, s } = parseSignature(signature);
65
+ // Step 5: Compute challenge
66
+ const commitmenet = schnorr.utils.taggedHash("BIP0340/challenge", r, pubKey.toRawBytes().slice(1), hash);
67
+ if (commitmenet.length > 32) {
68
+ throw new Error("hash of (r || P || m) too big");
69
+ }
70
+ const e = mod(bytesToNumberBE(commitmenet), secp256k1.CURVE.n);
71
+ const negE = mod(-e, secp256k1.CURVE.n); // Negate e before multiplication
72
+ // Step 6: Calculate R = sG - eP
73
+ const R = secp256k1.ProjectivePoint.BASE.multiplyAndAddUnsafe(pubKey, bytesToNumberBE(s), negE);
74
+ if (!R) {
75
+ throw new Error("R is undefined");
76
+ }
77
+ R.assertValidity();
78
+ // Step 6.5: Add adaptor public key T to R
79
+ const adaptorPoint = secp256k1.ProjectivePoint.fromHex(adaptorPubkey);
80
+ const newR = R.add(adaptorPoint);
81
+ // Step 7: Check for point at infinity (if not inbound)
82
+ if (!inbound && newR.equals(secp256k1.ProjectivePoint.ZERO)) {
83
+ throw new Error("calculated R point is the point at infinity");
84
+ }
85
+ // Step 8: Check if R.y is odd
86
+ newR.assertValidity();
87
+ if (!newR.hasEvenY()) {
88
+ throw new Error("calculated R y-value is odd");
89
+ }
90
+ // Step 9: Check if R.x == r
91
+ const rNum = bytesToNumberBE(r);
92
+ if (newR.toAffine().x !== rNum) {
93
+ throw new Error("calculated R point was not given R");
94
+ }
95
+ return true;
96
+ }
97
+ function parseSignature(signature) {
98
+ if (signature.length < 64) {
99
+ throw new Error(`malformed signature: too short: ${signature.length} < 64`);
100
+ }
101
+ if (signature.length > 64) {
102
+ throw new Error(`malformed signature: too long: ${signature.length} > 64`);
103
+ }
104
+ const r = signature.slice(0, 32);
105
+ const s = signature.slice(32, 64);
106
+ if (bytesToNumberBE(r) >= secp256k1.CURVE.Fp.ORDER) {
107
+ throw new Error(`invalid signature: r >= field prime`);
108
+ }
109
+ if (bytesToNumberBE(s) >= secp256k1.CURVE.n) {
110
+ throw new Error(`invalid signature: s >= group order`);
111
+ }
112
+ return { r, s };
113
+ }
114
+ //# sourceMappingURL=adaptor-signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptor-signature.js","sourceRoot":"","sources":["../../src/utils/adaptor-signature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import * as btc from "@scure/btc-signer";
2
+ import { TransactionOutput } from "@scure/btc-signer/psbt";
3
+ import { Network } from "./network.js";
4
+ export declare function computeTaprootKeyNoScript(pubkey: Uint8Array): Uint8Array;
5
+ export declare function getP2TRScriptFromPublicKey(pubKey: Uint8Array, network: Network): Uint8Array;
6
+ export declare function getP2TRAddressFromPublicKey(pubKey: Uint8Array, network: Network): string;
7
+ export declare function getP2TRAddressFromPkScript(pkScript: Uint8Array, network: Network): string;
8
+ export declare function getTxFromRawTxHex(rawTxHex: string): btc.Transaction;
9
+ export declare function getTxFromRawTxBytes(rawTxBytes: Uint8Array): btc.Transaction;
10
+ export declare function getSigHashFromTx(tx: btc.Transaction, inputIndex: number, prevOutput: TransactionOutput): Uint8Array;
11
+ export declare function getTxId(tx: btc.Transaction): string;
12
+ export declare function getTxIdNoReverse(tx: btc.Transaction): string;