@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,404 @@
1
+ import { Address, OutScript, Transaction } from "@scure/btc-signer";
2
+ import { sha256 } from "@scure/btc-signer/utils";
3
+ import { getP2TRAddressFromPublicKey, getSigHashFromTx, getTxFromRawTxBytes, getTxId, } from "../utils/bitcoin.js";
4
+ import { getNetwork } from "../utils/network.js";
5
+ const INITIAL_TIME_LOCK = 2000;
6
+ export class TreeCreationService {
7
+ config;
8
+ connectionManager;
9
+ constructor(config, connectionManager) {
10
+ this.config = config;
11
+ this.connectionManager = connectionManager;
12
+ }
13
+ async generateDepositAddressForTree(vout, parentSigningPublicKey, parentTx, parentNode) {
14
+ if (!parentTx && !parentNode) {
15
+ throw new Error("No parent tx or parent node provided");
16
+ }
17
+ const id = parentNode?.id ?? getTxId(parentTx);
18
+ const tree = await this.createDepositAddressTree(parentSigningPublicKey, id);
19
+ const addressRequestNodes = this.createAddressRequestNodeFromTreeNodes(tree);
20
+ const sparkClient = await this.connectionManager.createSparkClient(this.config.getCoordinatorAddress());
21
+ const request = {
22
+ userIdentityPublicKey: await this.config.signer.getIdentityPublicKey(),
23
+ node: undefined,
24
+ };
25
+ if (parentNode) {
26
+ if (!parentNode.parentNodeId) {
27
+ throw new Error("Parent node ID is undefined");
28
+ }
29
+ request.source = {
30
+ $case: "parentNodeOutput",
31
+ parentNodeOutput: {
32
+ nodeId: parentNode.parentNodeId,
33
+ vout: vout,
34
+ },
35
+ };
36
+ }
37
+ else if (parentTx) {
38
+ request.source = {
39
+ $case: "onChainUtxo",
40
+ onChainUtxo: {
41
+ vout: vout,
42
+ rawTx: parentTx.toBytes(),
43
+ network: this.config.getNetworkProto(),
44
+ },
45
+ };
46
+ }
47
+ else {
48
+ throw new Error("No parent node or parent tx provided");
49
+ }
50
+ request.node = {
51
+ userPublicKey: parentSigningPublicKey,
52
+ children: addressRequestNodes,
53
+ };
54
+ const root = {
55
+ address: undefined,
56
+ signingPublicKey: parentSigningPublicKey,
57
+ children: tree,
58
+ };
59
+ let response;
60
+ try {
61
+ response = await sparkClient.prepare_tree_address(request);
62
+ }
63
+ catch (error) {
64
+ throw new Error(`Error preparing tree address: ${error}`);
65
+ }
66
+ if (!response.node) {
67
+ throw new Error("No node found in response");
68
+ }
69
+ this.applyAddressNodesToTree([root], [response.node]);
70
+ return root;
71
+ }
72
+ async createTree(vout, root, createLeaves, parentTx, parentNode) {
73
+ const request = {
74
+ userIdentityPublicKey: await this.config.signer.getIdentityPublicKey(),
75
+ node: undefined,
76
+ };
77
+ let tx;
78
+ if (parentTx) {
79
+ tx = parentTx;
80
+ request.source = {
81
+ $case: "onChainUtxo",
82
+ onChainUtxo: {
83
+ vout: vout,
84
+ rawTx: parentTx.toBytes(),
85
+ network: this.config.getNetworkProto(),
86
+ },
87
+ };
88
+ }
89
+ else if (parentNode) {
90
+ tx = getTxFromRawTxBytes(parentNode.nodeTx);
91
+ if (!parentNode.parentNodeId) {
92
+ throw new Error("Parent node ID is undefined");
93
+ }
94
+ request.source = {
95
+ $case: "parentNodeOutput",
96
+ parentNodeOutput: {
97
+ nodeId: parentNode.parentNodeId,
98
+ vout: vout,
99
+ },
100
+ };
101
+ }
102
+ else {
103
+ throw new Error("No parent node or parent tx provided");
104
+ }
105
+ const rootCreationNode = await this.buildCreationNodesFromTree(vout, createLeaves, this.config.getNetwork(), root, tx);
106
+ request.node = rootCreationNode;
107
+ const sparkClient = await this.connectionManager.createSparkClient(this.config.getCoordinatorAddress());
108
+ let response;
109
+ try {
110
+ response = await sparkClient.create_tree(request);
111
+ }
112
+ catch (error) {
113
+ throw new Error(`Error creating tree: ${error}`);
114
+ }
115
+ if (!response.node) {
116
+ throw new Error("No node found in response");
117
+ }
118
+ const creationResultTreeRoot = response.node;
119
+ const nodeSignatures = await this.signTreeCreation(tx, vout, root, rootCreationNode, creationResultTreeRoot);
120
+ let finalizeResp;
121
+ try {
122
+ finalizeResp = await sparkClient.finalize_node_signatures({
123
+ nodeSignatures: nodeSignatures,
124
+ });
125
+ }
126
+ catch (error) {
127
+ throw new Error(`Error finalizing node signatures in tree creation: ${error}`);
128
+ }
129
+ return finalizeResp;
130
+ }
131
+ async createDepositAddressTree(targetSigningPublicKey, nodeId) {
132
+ const leftKey = await this.config.signer.generatePublicKey(sha256(nodeId));
133
+ const leftNode = {
134
+ signingPublicKey: leftKey,
135
+ children: [],
136
+ };
137
+ const rightKey = await this.config.signer.subtractPrivateKeysGivenPublicKeys(targetSigningPublicKey, leftKey);
138
+ const rightNode = {
139
+ signingPublicKey: rightKey,
140
+ children: [],
141
+ };
142
+ return [leftNode, rightNode];
143
+ }
144
+ createAddressRequestNodeFromTreeNodes(treeNodes) {
145
+ const results = [];
146
+ for (const node of treeNodes) {
147
+ const result = {
148
+ userPublicKey: node.signingPublicKey,
149
+ children: this.createAddressRequestNodeFromTreeNodes(node.children),
150
+ };
151
+ results.push(result);
152
+ }
153
+ return results;
154
+ }
155
+ applyAddressNodesToTree(tree, addressNodes) {
156
+ for (let i = 0; i < tree.length; i++) {
157
+ if (!tree[i]) {
158
+ throw new Error("Tree or address node is undefined");
159
+ }
160
+ if (!addressNodes[i]) {
161
+ throw new Error("Address node is undefined");
162
+ }
163
+ // @ts-ignore
164
+ tree[i].address = addressNodes[i].address?.address;
165
+ // @ts-ignore
166
+ tree[i].verificationKey = addressNodes[i].address?.verifyingKey;
167
+ // @ts-ignore
168
+ this.applyAddressNodesToTree(tree[i].children, addressNodes[i].children);
169
+ }
170
+ }
171
+ async buildChildCreationNode(node, parentTx, vout, network) {
172
+ // internal node
173
+ const internalCreationNode = {
174
+ nodeTxSigningJob: undefined,
175
+ refundTxSigningJob: undefined,
176
+ children: [],
177
+ };
178
+ const tx = new Transaction();
179
+ tx.addInput({
180
+ txid: getTxId(parentTx),
181
+ index: vout,
182
+ });
183
+ const parentTxOut = parentTx.getOutput(vout);
184
+ if (!parentTxOut?.script || !parentTxOut?.amount) {
185
+ throw new Error("parentTxOut is undefined");
186
+ }
187
+ tx.addOutput({
188
+ script: parentTxOut.script,
189
+ amount: parentTxOut.amount,
190
+ });
191
+ // Add ephemeral anchor
192
+ tx.addOutput(this.ephemeralAnchorOutput());
193
+ const signingNonceCommitment = await this.config.signer.getRandomSigningCommitment();
194
+ const signingJob = {
195
+ signingPublicKey: node.signingPublicKey,
196
+ rawTx: tx.toBytes(),
197
+ signingNonceCommitment: signingNonceCommitment,
198
+ };
199
+ internalCreationNode.nodeTxSigningCommitment = signingNonceCommitment;
200
+ internalCreationNode.nodeTxSigningJob = signingJob;
201
+ // leaf node
202
+ const sequence = (1 << 30) | INITIAL_TIME_LOCK;
203
+ const childCreationNode = {
204
+ nodeTxSigningJob: undefined,
205
+ refundTxSigningJob: undefined,
206
+ children: [],
207
+ };
208
+ const childTx = new Transaction();
209
+ childTx.addInput({
210
+ txid: getTxId(tx),
211
+ index: 0,
212
+ sequence,
213
+ });
214
+ childTx.addOutput({
215
+ script: parentTxOut.script,
216
+ amount: parentTxOut.amount,
217
+ });
218
+ // Add ephemeral anchor
219
+ childTx.addOutput(this.ephemeralAnchorOutput());
220
+ const childSigningNonceCommitment = await this.config.signer.getRandomSigningCommitment();
221
+ const childSigningJob = {
222
+ signingPublicKey: node.signingPublicKey,
223
+ rawTx: childTx.toBytes(),
224
+ signingNonceCommitment: childSigningNonceCommitment,
225
+ };
226
+ childCreationNode.nodeTxSigningCommitment = childSigningNonceCommitment;
227
+ childCreationNode.nodeTxSigningJob = childSigningJob;
228
+ const refundTx = new Transaction();
229
+ refundTx.addInput({
230
+ txid: getTxId(childTx),
231
+ index: 0,
232
+ sequence,
233
+ });
234
+ const refundP2trAddress = getP2TRAddressFromPublicKey(node.signingPublicKey, network);
235
+ const refundAddress = Address(getNetwork(network)).decode(refundP2trAddress);
236
+ const refundPkScript = OutScript.encode(refundAddress);
237
+ refundTx.addOutput({
238
+ script: refundPkScript,
239
+ amount: parentTxOut.amount,
240
+ });
241
+ const refundSigningNonceCommitment = await this.config.signer.getRandomSigningCommitment();
242
+ const refundSigningJob = {
243
+ signingPublicKey: node.signingPublicKey,
244
+ rawTx: refundTx.toBytes(),
245
+ signingNonceCommitment: refundSigningNonceCommitment,
246
+ };
247
+ childCreationNode.refundTxSigningCommitment = refundSigningNonceCommitment;
248
+ childCreationNode.refundTxSigningJob = refundSigningJob;
249
+ internalCreationNode.children.push(childCreationNode);
250
+ return internalCreationNode;
251
+ }
252
+ ephemeralAnchorOutput() {
253
+ return {
254
+ script: new Uint8Array([0x51]), // OP_TRUE
255
+ amount: 0n,
256
+ };
257
+ }
258
+ async buildCreationNodesFromTree(vout, createLeaves, network, root, parentTx) {
259
+ const parentTxOutput = parentTx.getOutput(vout);
260
+ if (!parentTxOutput?.script || !parentTxOutput?.amount) {
261
+ throw new Error("parentTxOutput is undefined");
262
+ }
263
+ const rootNodeTx = new Transaction();
264
+ rootNodeTx.addInput({
265
+ txid: getTxId(parentTx),
266
+ index: vout,
267
+ });
268
+ for (let i = 0; i < root.children.length; i++) {
269
+ const child = root.children[i];
270
+ if (!child || !child.address) {
271
+ throw new Error("child address is undefined");
272
+ }
273
+ const childAddress = Address(getNetwork(network)).decode(child.address);
274
+ const childPkScript = OutScript.encode(childAddress);
275
+ rootNodeTx.addOutput({
276
+ script: childPkScript,
277
+ amount: parentTxOutput.amount / 2n,
278
+ });
279
+ }
280
+ // Add ephemeral anchor output
281
+ const anchor = this.ephemeralAnchorOutput();
282
+ rootNodeTx.addOutput(anchor);
283
+ const rootNodeSigningCommitment = await this.config.signer.getRandomSigningCommitment();
284
+ const rootNodeSigningJob = {
285
+ signingPublicKey: root.signingPublicKey,
286
+ rawTx: rootNodeTx.toBytes(),
287
+ signingNonceCommitment: rootNodeSigningCommitment,
288
+ };
289
+ const rootCreationNode = {
290
+ nodeTxSigningJob: rootNodeSigningJob,
291
+ refundTxSigningJob: undefined,
292
+ children: [],
293
+ };
294
+ rootCreationNode.nodeTxSigningCommitment = rootNodeSigningCommitment;
295
+ const leftChild = root.children[0];
296
+ const rightChild = root.children[1];
297
+ if (!leftChild || !rightChild) {
298
+ throw new Error("Root children are undefined");
299
+ }
300
+ const leftChildCreationNode = await this.buildChildCreationNode(leftChild, rootNodeTx, 0, network);
301
+ const rightChildCreationNode = await this.buildChildCreationNode(rightChild, rootNodeTx, 1, network);
302
+ rootCreationNode.children.push(leftChildCreationNode);
303
+ rootCreationNode.children.push(rightChildCreationNode);
304
+ return rootCreationNode;
305
+ }
306
+ async signNodeCreation(parentTx, vout, internalNode, creationNode, creationResponseNode) {
307
+ if (!creationNode.nodeTxSigningJob?.signingPublicKey ||
308
+ !internalNode.verificationKey) {
309
+ throw new Error("signingPublicKey or verificationKey is undefined");
310
+ }
311
+ const parentTxOutput = parentTx.getOutput(vout);
312
+ if (!parentTxOutput) {
313
+ throw new Error("parentTxOutput is undefined");
314
+ }
315
+ const tx = getTxFromRawTxBytes(creationNode.nodeTxSigningJob.rawTx);
316
+ const txSighash = getSigHashFromTx(tx, 0, parentTxOutput);
317
+ let nodeTxSignature = new Uint8Array();
318
+ if (creationNode.nodeTxSigningCommitment) {
319
+ const userSignature = await this.config.signer.signFrost({
320
+ message: txSighash,
321
+ publicKey: creationNode.nodeTxSigningJob.signingPublicKey,
322
+ privateAsPubKey: internalNode.signingPublicKey,
323
+ selfCommitment: creationNode.nodeTxSigningCommitment,
324
+ statechainCommitments: creationResponseNode.nodeTxSigningResult?.signingNonceCommitments,
325
+ verifyingKey: internalNode.verificationKey,
326
+ });
327
+ nodeTxSignature = await this.config.signer.aggregateFrost({
328
+ message: txSighash,
329
+ statechainSignatures: creationResponseNode.nodeTxSigningResult?.signatureShares,
330
+ statechainPublicKeys: creationResponseNode.nodeTxSigningResult?.publicKeys,
331
+ verifyingKey: internalNode.verificationKey,
332
+ statechainCommitments: creationResponseNode.nodeTxSigningResult?.signingNonceCommitments,
333
+ selfCommitment: creationNode.nodeTxSigningCommitment,
334
+ selfSignature: userSignature,
335
+ publicKey: internalNode.signingPublicKey,
336
+ });
337
+ }
338
+ let refundTxSignature = new Uint8Array();
339
+ if (creationNode.refundTxSigningCommitment) {
340
+ const rawTx = creationNode.refundTxSigningJob?.rawTx;
341
+ if (!rawTx) {
342
+ throw new Error("rawTx is undefined");
343
+ }
344
+ if (!creationNode.refundTxSigningJob?.signingPublicKey) {
345
+ throw new Error("signingPublicKey is undefined");
346
+ }
347
+ const refundTx = getTxFromRawTxBytes(rawTx);
348
+ const refundTxSighash = getSigHashFromTx(refundTx, 0, parentTxOutput);
349
+ const refundSigningResponse = await this.config.signer.signFrost({
350
+ message: refundTxSighash,
351
+ publicKey: creationNode.refundTxSigningJob.signingPublicKey,
352
+ privateAsPubKey: internalNode.signingPublicKey,
353
+ selfCommitment: creationNode.refundTxSigningCommitment,
354
+ statechainCommitments: creationResponseNode.refundTxSigningResult?.signingNonceCommitments,
355
+ verifyingKey: internalNode.verificationKey,
356
+ });
357
+ refundTxSignature = await this.config.signer.aggregateFrost({
358
+ message: refundTxSighash,
359
+ statechainSignatures: creationResponseNode.refundTxSigningResult?.signatureShares,
360
+ statechainPublicKeys: creationResponseNode.refundTxSigningResult?.publicKeys,
361
+ verifyingKey: internalNode.verificationKey,
362
+ statechainCommitments: creationResponseNode.refundTxSigningResult?.signingNonceCommitments,
363
+ selfCommitment: creationNode.refundTxSigningCommitment,
364
+ selfSignature: refundSigningResponse,
365
+ publicKey: internalNode.signingPublicKey,
366
+ });
367
+ }
368
+ return {
369
+ tx: tx,
370
+ signature: {
371
+ nodeId: creationResponseNode.nodeId,
372
+ nodeTxSignature: nodeTxSignature,
373
+ refundTxSignature: refundTxSignature,
374
+ },
375
+ };
376
+ }
377
+ async signTreeCreation(tx, vout, root, rootCreationNode, creationResultTreeRoot) {
378
+ const rootSignature = await this.signNodeCreation(tx, vout, root, rootCreationNode, creationResultTreeRoot);
379
+ const firstRootChild = root.children[0];
380
+ const secondRootChild = root.children[1];
381
+ const firstRootChildCreationNode = rootCreationNode.children[0];
382
+ const secondRootChildCreationNode = rootCreationNode.children[1];
383
+ const firstRootChildCreationResult = creationResultTreeRoot.children[0];
384
+ const secondRootChildCreationResult = creationResultTreeRoot.children[1];
385
+ if (!firstRootChild || !secondRootChild) {
386
+ throw new Error("Root children are undefined");
387
+ }
388
+ if (!firstRootChildCreationNode || !secondRootChildCreationNode) {
389
+ throw new Error("Root child creation nodes are undefined");
390
+ }
391
+ if (!firstRootChildCreationResult || !secondRootChildCreationResult) {
392
+ throw new Error("Root child creation results are undefined");
393
+ }
394
+ const leftChildSignature = await this.signNodeCreation(rootSignature.tx, 0, firstRootChild, firstRootChildCreationNode, firstRootChildCreationResult);
395
+ const rightChildSignature = await this.signNodeCreation(rootSignature.tx, 1, secondRootChild, secondRootChildCreationNode, secondRootChildCreationResult);
396
+ const signatures = [
397
+ rootSignature.signature,
398
+ leftChildSignature.signature,
399
+ rightChildSignature.signature,
400
+ ];
401
+ return signatures;
402
+ }
403
+ }
404
+ //# sourceMappingURL=tree-creation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-creation.js","sourceRoot":"","sources":["../../src/services/tree-creation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { TreeNode } from "../proto/spark.js";
2
+ import { VerifiableSecretShare } from "../utils/secret-sharing.js";
3
+ export type SigningNonce = {
4
+ binding: Uint8Array;
5
+ hiding: Uint8Array;
6
+ };
7
+ export type SigningCommitment = {
8
+ binding: Uint8Array;
9
+ hiding: Uint8Array;
10
+ };
11
+ export type SignFrostParams = {
12
+ message: Uint8Array;
13
+ privateAsPubKey: Uint8Array;
14
+ publicKey: Uint8Array;
15
+ verifyingKey: Uint8Array;
16
+ selfCommitment: SigningCommitment;
17
+ statechainCommitments?: {
18
+ [key: string]: SigningCommitment;
19
+ } | undefined;
20
+ adaptorPubKey?: Uint8Array | undefined;
21
+ };
22
+ export type AggregateFrostParams = Omit<SignFrostParams, "privateAsPubKey"> & {
23
+ selfSignature: Uint8Array;
24
+ statechainSignatures?: {
25
+ [key: string]: Uint8Array;
26
+ } | undefined;
27
+ statechainPublicKeys?: {
28
+ [key: string]: Uint8Array;
29
+ } | undefined;
30
+ };
31
+ export type SplitSecretWithProofsParams = {
32
+ secret: Uint8Array;
33
+ curveOrder: bigint;
34
+ threshold: number;
35
+ numShares: number;
36
+ isSecretPubkey?: boolean;
37
+ };
38
+ interface SparkSigner {
39
+ getIdentityPublicKey(): Promise<Uint8Array>;
40
+ generateMnemonic(): Promise<string>;
41
+ createSparkWalletFromMnemonic(mnemonic: string): Promise<string>;
42
+ createSparkWalletFromSeed(seed: Uint8Array | string): Promise<string>;
43
+ restoreSigningKeysFromLeafs(leafs: TreeNode[]): Promise<void>;
44
+ getTrackedPublicKeys(): Promise<Uint8Array[]>;
45
+ generatePublicKey(hash?: Uint8Array): Promise<Uint8Array>;
46
+ removePublicKey(publicKey: Uint8Array): Promise<void>;
47
+ getSchnorrPublicKey(publicKey: Uint8Array): Promise<Uint8Array>;
48
+ signSchnorr(message: Uint8Array, publicKey: Uint8Array): Promise<Uint8Array>;
49
+ subtractPrivateKeysGivenPublicKeys(first: Uint8Array, second: Uint8Array): Promise<Uint8Array>;
50
+ splitSecretWithProofs(params: SplitSecretWithProofsParams): Promise<VerifiableSecretShare[]>;
51
+ signFrost(params: SignFrostParams): Promise<Uint8Array>;
52
+ aggregateFrost(params: AggregateFrostParams): Promise<Uint8Array>;
53
+ signMessageWithPublicKey(message: Uint8Array, publicKey: Uint8Array, compact?: boolean): Promise<Uint8Array>;
54
+ signMessageWithIdentityKey(message: Uint8Array, compact?: boolean): Promise<Uint8Array>;
55
+ encryptLeafPrivateKeyEcies(receiverPublicKey: Uint8Array, publicKey: Uint8Array): Promise<Uint8Array>;
56
+ decryptEcies(ciphertext: Uint8Array): Promise<Uint8Array>;
57
+ getRandomSigningCommitment(): Promise<SigningCommitment>;
58
+ getSspIdentityPublicKey(): Promise<Uint8Array>;
59
+ hashRandomPrivateKey(): Promise<Uint8Array>;
60
+ generateAdaptorFromSignature(signature: Uint8Array): Promise<{
61
+ adaptorSignature: Uint8Array;
62
+ adaptorPublicKey: Uint8Array;
63
+ }>;
64
+ }
65
+ declare class DefaultSparkSigner implements SparkSigner {
66
+ private identityPrivateKey;
67
+ private publicKeyToPrivateKeyMap;
68
+ private commitmentToNonceMap;
69
+ private deriveSigningKey;
70
+ restoreSigningKeysFromLeafs(leafs: TreeNode[]): Promise<void>;
71
+ getSchnorrPublicKey(publicKey: Uint8Array): Promise<Uint8Array>;
72
+ signSchnorr(message: Uint8Array, publicKey: Uint8Array): Promise<Uint8Array>;
73
+ getIdentityPublicKey(): Promise<Uint8Array>;
74
+ generateMnemonic(): Promise<string>;
75
+ createSparkWalletFromMnemonic(mnemonic: string): Promise<string>;
76
+ getTrackedPublicKeys(): Promise<Uint8Array[]>;
77
+ generatePublicKey(hash?: Uint8Array): Promise<Uint8Array>;
78
+ removePublicKey(publicKey: Uint8Array): Promise<void>;
79
+ subtractPrivateKeysGivenPublicKeys(first: Uint8Array, second: Uint8Array): Promise<Uint8Array>;
80
+ splitSecretWithProofs({ secret, curveOrder, threshold, numShares, isSecretPubkey, }: SplitSecretWithProofsParams): Promise<VerifiableSecretShare[]>;
81
+ signFrost({ message, privateAsPubKey, publicKey, verifyingKey, selfCommitment, statechainCommitments, adaptorPubKey, }: SignFrostParams): Promise<Uint8Array>;
82
+ aggregateFrost({ message, publicKey, verifyingKey, selfCommitment, statechainCommitments, adaptorPubKey, selfSignature, statechainSignatures, statechainPublicKeys, }: AggregateFrostParams): Promise<Uint8Array>;
83
+ createSparkWalletFromSeed(seed: Uint8Array): Promise<string>;
84
+ signMessageWithPublicKey(message: Uint8Array, publicKey: Uint8Array, compact?: boolean): Promise<Uint8Array>;
85
+ signMessageWithIdentityKey(message: Uint8Array, compact?: boolean): Promise<Uint8Array>;
86
+ encryptLeafPrivateKeyEcies(receiverPublicKey: Uint8Array, publicKey: Uint8Array): Promise<Uint8Array>;
87
+ decryptEcies(ciphertext: Uint8Array): Promise<Uint8Array>;
88
+ getRandomSigningCommitment(): Promise<SigningCommitment>;
89
+ getSspIdentityPublicKey(): Promise<Uint8Array>;
90
+ hashRandomPrivateKey(): Promise<Uint8Array>;
91
+ generateAdaptorFromSignature(signature: Uint8Array): Promise<{
92
+ adaptorSignature: Uint8Array;
93
+ adaptorPublicKey: Uint8Array;
94
+ }>;
95
+ }
96
+ export { DefaultSparkSigner };
97
+ export type { SparkSigner };