@miradexio/client 0.1.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 (405) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +405 -0
  3. package/dist/address/base58.d.ts +9 -0
  4. package/dist/address/base58.d.ts.map +1 -0
  5. package/dist/address/base58.js +33 -0
  6. package/dist/address/base58.js.map +1 -0
  7. package/dist/address/bech32.d.ts +13 -0
  8. package/dist/address/bech32.d.ts.map +1 -0
  9. package/dist/address/bech32.js +41 -0
  10. package/dist/address/bech32.js.map +1 -0
  11. package/dist/address/evm.d.ts +5 -0
  12. package/dist/address/evm.d.ts.map +1 -0
  13. package/dist/address/evm.js +27 -0
  14. package/dist/address/evm.js.map +1 -0
  15. package/dist/address/index.d.ts +15 -0
  16. package/dist/address/index.d.ts.map +1 -0
  17. package/dist/address/index.js +134 -0
  18. package/dist/address/index.js.map +1 -0
  19. package/dist/address/monero.d.ts +15 -0
  20. package/dist/address/monero.d.ts.map +1 -0
  21. package/dist/address/monero.js +30 -0
  22. package/dist/address/monero.js.map +1 -0
  23. package/dist/address/polkadot.d.ts +10 -0
  24. package/dist/address/polkadot.d.ts.map +1 -0
  25. package/dist/address/polkadot.js +36 -0
  26. package/dist/address/polkadot.js.map +1 -0
  27. package/dist/address/solana.d.ts +5 -0
  28. package/dist/address/solana.d.ts.map +1 -0
  29. package/dist/address/solana.js +17 -0
  30. package/dist/address/solana.js.map +1 -0
  31. package/dist/address/ton.d.ts +11 -0
  32. package/dist/address/ton.d.ts.map +1 -0
  33. package/dist/address/ton.js +28 -0
  34. package/dist/address/ton.js.map +1 -0
  35. package/dist/api/index.d.ts +80 -0
  36. package/dist/api/index.d.ts.map +1 -0
  37. package/dist/api/index.js +213 -0
  38. package/dist/api/index.js.map +1 -0
  39. package/dist/atomic-swap/drive.d.ts +22 -0
  40. package/dist/atomic-swap/drive.d.ts.map +1 -0
  41. package/dist/atomic-swap/drive.js +713 -0
  42. package/dist/atomic-swap/drive.js.map +1 -0
  43. package/dist/atomic-swap/extract.d.ts +46 -0
  44. package/dist/atomic-swap/extract.d.ts.map +1 -0
  45. package/dist/atomic-swap/extract.js +55 -0
  46. package/dist/atomic-swap/extract.js.map +1 -0
  47. package/dist/atomic-swap/index.d.ts +15 -0
  48. package/dist/atomic-swap/index.d.ts.map +1 -0
  49. package/dist/atomic-swap/index.js +13 -0
  50. package/dist/atomic-swap/index.js.map +1 -0
  51. package/dist/atomic-swap/monero-sweep/errors.d.ts +2 -0
  52. package/dist/atomic-swap/monero-sweep/errors.d.ts.map +1 -0
  53. package/dist/atomic-swap/monero-sweep/errors.js +43 -0
  54. package/dist/atomic-swap/monero-sweep/errors.js.map +1 -0
  55. package/dist/atomic-swap/monero-sweep/index.d.ts +33 -0
  56. package/dist/atomic-swap/monero-sweep/index.d.ts.map +1 -0
  57. package/dist/atomic-swap/monero-sweep/index.js +415 -0
  58. package/dist/atomic-swap/monero-sweep/index.js.map +1 -0
  59. package/dist/atomic-swap/monero-sweep/ring-select.d.ts +12 -0
  60. package/dist/atomic-swap/monero-sweep/ring-select.d.ts.map +1 -0
  61. package/dist/atomic-swap/monero-sweep/ring-select.js +61 -0
  62. package/dist/atomic-swap/monero-sweep/ring-select.js.map +1 -0
  63. package/dist/atomic-swap/presign.d.ts +101 -0
  64. package/dist/atomic-swap/presign.d.ts.map +1 -0
  65. package/dist/atomic-swap/presign.js +460 -0
  66. package/dist/atomic-swap/presign.js.map +1 -0
  67. package/dist/atomic-swap/refund.d.ts +72 -0
  68. package/dist/atomic-swap/refund.d.ts.map +1 -0
  69. package/dist/atomic-swap/refund.js +224 -0
  70. package/dist/atomic-swap/refund.js.map +1 -0
  71. package/dist/atomic-swap/run.d.ts +27 -0
  72. package/dist/atomic-swap/run.d.ts.map +1 -0
  73. package/dist/atomic-swap/run.js +282 -0
  74. package/dist/atomic-swap/run.js.map +1 -0
  75. package/dist/atomic-swap/snapshot.d.ts +111 -0
  76. package/dist/atomic-swap/snapshot.d.ts.map +1 -0
  77. package/dist/atomic-swap/snapshot.js +69 -0
  78. package/dist/atomic-swap/snapshot.js.map +1 -0
  79. package/dist/atomic-swap/submit-encsig.d.ts +10 -0
  80. package/dist/atomic-swap/submit-encsig.d.ts.map +1 -0
  81. package/dist/atomic-swap/submit-encsig.js +56 -0
  82. package/dist/atomic-swap/submit-encsig.js.map +1 -0
  83. package/dist/atomic-swap/types.d.ts +168 -0
  84. package/dist/atomic-swap/types.d.ts.map +1 -0
  85. package/dist/atomic-swap/types.js +5 -0
  86. package/dist/atomic-swap/types.js.map +1 -0
  87. package/dist/blockchain/quorum-provider.d.ts +25 -0
  88. package/dist/blockchain/quorum-provider.d.ts.map +1 -0
  89. package/dist/blockchain/quorum-provider.js +144 -0
  90. package/dist/blockchain/quorum-provider.js.map +1 -0
  91. package/dist/cooperative-redeem.d.ts +23 -0
  92. package/dist/cooperative-redeem.d.ts.map +1 -0
  93. package/dist/cooperative-redeem.js +40 -0
  94. package/dist/cooperative-redeem.js.map +1 -0
  95. package/dist/engine/blockchain-querier.d.ts +34 -0
  96. package/dist/engine/blockchain-querier.d.ts.map +1 -0
  97. package/dist/engine/blockchain-querier.js +2 -0
  98. package/dist/engine/blockchain-querier.js.map +1 -0
  99. package/dist/engine/engine-state.d.ts +20 -0
  100. package/dist/engine/engine-state.d.ts.map +1 -0
  101. package/dist/engine/engine-state.js +9 -0
  102. package/dist/engine/engine-state.js.map +1 -0
  103. package/dist/engine/flow-context.d.ts +494 -0
  104. package/dist/engine/flow-context.d.ts.map +1 -0
  105. package/dist/engine/flow-context.js +147 -0
  106. package/dist/engine/flow-context.js.map +1 -0
  107. package/dist/engine/flows/atomic-flow-state.d.ts +124 -0
  108. package/dist/engine/flows/atomic-flow-state.d.ts.map +1 -0
  109. package/dist/engine/flows/atomic-flow-state.js +2 -0
  110. package/dist/engine/flows/atomic-flow-state.js.map +1 -0
  111. package/dist/engine/flows/atomic-flow.d.ts +88 -0
  112. package/dist/engine/flows/atomic-flow.d.ts.map +1 -0
  113. package/dist/engine/flows/atomic-flow.js +1192 -0
  114. package/dist/engine/flows/atomic-flow.js.map +1 -0
  115. package/dist/engine/flows/history-flow-state.d.ts +19 -0
  116. package/dist/engine/flows/history-flow-state.d.ts.map +1 -0
  117. package/dist/engine/flows/history-flow-state.js +2 -0
  118. package/dist/engine/flows/history-flow-state.js.map +1 -0
  119. package/dist/engine/flows/providers-flow-state.d.ts +14 -0
  120. package/dist/engine/flows/providers-flow-state.d.ts.map +1 -0
  121. package/dist/engine/flows/providers-flow-state.js +2 -0
  122. package/dist/engine/flows/providers-flow-state.js.map +1 -0
  123. package/dist/engine/flows/quote-flow-state.d.ts +20 -0
  124. package/dist/engine/flows/quote-flow-state.d.ts.map +1 -0
  125. package/dist/engine/flows/quote-flow-state.js +2 -0
  126. package/dist/engine/flows/quote-flow-state.js.map +1 -0
  127. package/dist/engine/flows/swap-flow-state.d.ts +155 -0
  128. package/dist/engine/flows/swap-flow-state.d.ts.map +1 -0
  129. package/dist/engine/flows/swap-flow-state.js +2 -0
  130. package/dist/engine/flows/swap-flow-state.js.map +1 -0
  131. package/dist/engine/flows/swap-flow.d.ts +81 -0
  132. package/dist/engine/flows/swap-flow.d.ts.map +1 -0
  133. package/dist/engine/flows/swap-flow.js +720 -0
  134. package/dist/engine/flows/swap-flow.js.map +1 -0
  135. package/dist/engine/flows/tokens-flow-state.d.ts +16 -0
  136. package/dist/engine/flows/tokens-flow-state.d.ts.map +1 -0
  137. package/dist/engine/flows/tokens-flow-state.js +2 -0
  138. package/dist/engine/flows/tokens-flow-state.js.map +1 -0
  139. package/dist/engine/miradex-engine.d.ts +152 -0
  140. package/dist/engine/miradex-engine.d.ts.map +1 -0
  141. package/dist/engine/miradex-engine.js +278 -0
  142. package/dist/engine/miradex-engine.js.map +1 -0
  143. package/dist/engine/pipeline.d.ts +27 -0
  144. package/dist/engine/pipeline.d.ts.map +1 -0
  145. package/dist/engine/pipeline.js +166 -0
  146. package/dist/engine/pipeline.js.map +1 -0
  147. package/dist/engine/platform.d.ts +220 -0
  148. package/dist/engine/platform.d.ts.map +1 -0
  149. package/dist/engine/platform.js +2 -0
  150. package/dist/engine/platform.js.map +1 -0
  151. package/dist/index.d.ts +85 -0
  152. package/dist/index.d.ts.map +1 -0
  153. package/dist/index.js +62 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/interfaces/blockchain.d.ts +33 -0
  156. package/dist/interfaces/blockchain.d.ts.map +1 -0
  157. package/dist/interfaces/blockchain.js +2 -0
  158. package/dist/interfaces/blockchain.js.map +1 -0
  159. package/dist/interfaces/logger.d.ts +14 -0
  160. package/dist/interfaces/logger.d.ts.map +1 -0
  161. package/dist/interfaces/logger.js +7 -0
  162. package/dist/interfaces/logger.js.map +1 -0
  163. package/dist/lib/bitcoin/deposit-watcher.d.ts +66 -0
  164. package/dist/lib/bitcoin/deposit-watcher.d.ts.map +1 -0
  165. package/dist/lib/bitcoin/deposit-watcher.js +218 -0
  166. package/dist/lib/bitcoin/deposit-watcher.js.map +1 -0
  167. package/dist/lib/bitcoin/script-hash.d.ts +8 -0
  168. package/dist/lib/bitcoin/script-hash.d.ts.map +1 -0
  169. package/dist/lib/bitcoin/script-hash.js +29 -0
  170. package/dist/lib/bitcoin/script-hash.js.map +1 -0
  171. package/dist/lib/bitcoin/sweep.d.ts +56 -0
  172. package/dist/lib/bitcoin/sweep.d.ts.map +1 -0
  173. package/dist/lib/bitcoin/sweep.js +185 -0
  174. package/dist/lib/bitcoin/sweep.js.map +1 -0
  175. package/dist/lib/bitcoin/tx-verify.d.ts +43 -0
  176. package/dist/lib/bitcoin/tx-verify.d.ts.map +1 -0
  177. package/dist/lib/bitcoin/tx-verify.js +202 -0
  178. package/dist/lib/bitcoin/tx-verify.js.map +1 -0
  179. package/dist/lib/bitcoin/wallet.d.ts +71 -0
  180. package/dist/lib/bitcoin/wallet.d.ts.map +1 -0
  181. package/dist/lib/bitcoin/wallet.js +141 -0
  182. package/dist/lib/bitcoin/wallet.js.map +1 -0
  183. package/dist/lib/crypto/bytes.d.ts +21 -0
  184. package/dist/lib/crypto/bytes.d.ts.map +1 -0
  185. package/dist/lib/crypto/bytes.js +39 -0
  186. package/dist/lib/crypto/bytes.js.map +1 -0
  187. package/dist/lib/crypto/errors.d.ts +12 -0
  188. package/dist/lib/crypto/errors.d.ts.map +1 -0
  189. package/dist/lib/crypto/errors.js +16 -0
  190. package/dist/lib/crypto/errors.js.map +1 -0
  191. package/dist/lib/crypto/keygen.d.ts +19 -0
  192. package/dist/lib/crypto/keygen.d.ts.map +1 -0
  193. package/dist/lib/crypto/keygen.js +24 -0
  194. package/dist/lib/crypto/keygen.js.map +1 -0
  195. package/dist/lib/crypto/libp2p-identity.d.ts +25 -0
  196. package/dist/lib/crypto/libp2p-identity.d.ts.map +1 -0
  197. package/dist/lib/crypto/libp2p-identity.js +80 -0
  198. package/dist/lib/crypto/libp2p-identity.js.map +1 -0
  199. package/dist/lib/crypto/mnemonic.d.ts +28 -0
  200. package/dist/lib/crypto/mnemonic.d.ts.map +1 -0
  201. package/dist/lib/crypto/mnemonic.js +97 -0
  202. package/dist/lib/crypto/mnemonic.js.map +1 -0
  203. package/dist/lib/crypto/platform.d.ts +10 -0
  204. package/dist/lib/crypto/platform.d.ts.map +1 -0
  205. package/dist/lib/crypto/platform.js +38 -0
  206. package/dist/lib/crypto/platform.js.map +1 -0
  207. package/dist/lib/crypto/scalars.d.ts +33 -0
  208. package/dist/lib/crypto/scalars.d.ts.map +1 -0
  209. package/dist/lib/crypto/scalars.js +81 -0
  210. package/dist/lib/crypto/scalars.js.map +1 -0
  211. package/dist/lib/crypto/types.d.ts +24 -0
  212. package/dist/lib/crypto/types.d.ts.map +1 -0
  213. package/dist/lib/crypto/types.js +2 -0
  214. package/dist/lib/crypto/types.js.map +1 -0
  215. package/dist/lib/crypto/wasm.d.ts +51 -0
  216. package/dist/lib/crypto/wasm.d.ts.map +1 -0
  217. package/dist/lib/crypto/wasm.js +192 -0
  218. package/dist/lib/crypto/wasm.js.map +1 -0
  219. package/dist/lib/default-config.d.ts +140 -0
  220. package/dist/lib/default-config.d.ts.map +1 -0
  221. package/dist/lib/default-config.js +239 -0
  222. package/dist/lib/default-config.js.map +1 -0
  223. package/dist/lib/delay.d.ts +6 -0
  224. package/dist/lib/delay.d.ts.map +1 -0
  225. package/dist/lib/delay.js +20 -0
  226. package/dist/lib/delay.js.map +1 -0
  227. package/dist/lib/errors.d.ts +90 -0
  228. package/dist/lib/errors.d.ts.map +1 -0
  229. package/dist/lib/errors.js +129 -0
  230. package/dist/lib/errors.js.map +1 -0
  231. package/dist/lib/format.d.ts +7 -0
  232. package/dist/lib/format.d.ts.map +1 -0
  233. package/dist/lib/format.js +43 -0
  234. package/dist/lib/format.js.map +1 -0
  235. package/dist/lib/keystore.d.ts +85 -0
  236. package/dist/lib/keystore.d.ts.map +1 -0
  237. package/dist/lib/keystore.js +105 -0
  238. package/dist/lib/keystore.js.map +1 -0
  239. package/dist/lib/monero/output-scanner.d.ts +53 -0
  240. package/dist/lib/monero/output-scanner.d.ts.map +1 -0
  241. package/dist/lib/monero/output-scanner.js +180 -0
  242. package/dist/lib/monero/output-scanner.js.map +1 -0
  243. package/dist/lib/monero/rpc.d.ts +131 -0
  244. package/dist/lib/monero/rpc.d.ts.map +1 -0
  245. package/dist/lib/monero/rpc.js +267 -0
  246. package/dist/lib/monero/rpc.js.map +1 -0
  247. package/dist/lib/monero/verify-lock.d.ts +50 -0
  248. package/dist/lib/monero/verify-lock.d.ts.map +1 -0
  249. package/dist/lib/monero/verify-lock.js +161 -0
  250. package/dist/lib/monero/verify-lock.js.map +1 -0
  251. package/dist/lib/monero/verify-sweep.d.ts +59 -0
  252. package/dist/lib/monero/verify-sweep.d.ts.map +1 -0
  253. package/dist/lib/monero/verify-sweep.js +82 -0
  254. package/dist/lib/monero/verify-sweep.js.map +1 -0
  255. package/dist/lib/monero/wasm.d.ts +19 -0
  256. package/dist/lib/monero/wasm.d.ts.map +1 -0
  257. package/dist/lib/monero/wasm.js +24 -0
  258. package/dist/lib/monero/wasm.js.map +1 -0
  259. package/dist/lib/pow-solver.d.ts +4 -0
  260. package/dist/lib/pow-solver.d.ts.map +1 -0
  261. package/dist/lib/pow-solver.js +37 -0
  262. package/dist/lib/pow-solver.js.map +1 -0
  263. package/dist/lib/retry.d.ts +86 -0
  264. package/dist/lib/retry.d.ts.map +1 -0
  265. package/dist/lib/retry.js +104 -0
  266. package/dist/lib/retry.js.map +1 -0
  267. package/dist/portable.d.ts +23 -0
  268. package/dist/portable.d.ts.map +1 -0
  269. package/dist/portable.js +13 -0
  270. package/dist/portable.js.map +1 -0
  271. package/dist/quote-binding.d.ts +31 -0
  272. package/dist/quote-binding.d.ts.map +1 -0
  273. package/dist/quote-binding.js +40 -0
  274. package/dist/quote-binding.js.map +1 -0
  275. package/dist/swap-executor.d.ts +51 -0
  276. package/dist/swap-executor.d.ts.map +1 -0
  277. package/dist/swap-executor.js +138 -0
  278. package/dist/swap-executor.js.map +1 -0
  279. package/dist/types/api.d.ts +34 -0
  280. package/dist/types/api.d.ts.map +1 -0
  281. package/dist/types/api.js +18 -0
  282. package/dist/types/api.js.map +1 -0
  283. package/dist/types/errors.d.ts +94 -0
  284. package/dist/types/errors.d.ts.map +1 -0
  285. package/dist/types/errors.js +93 -0
  286. package/dist/types/errors.js.map +1 -0
  287. package/dist/types/index.d.ts +8 -0
  288. package/dist/types/index.d.ts.map +1 -0
  289. package/dist/types/index.js +10 -0
  290. package/dist/types/index.js.map +1 -0
  291. package/dist/types/keys.d.ts +33 -0
  292. package/dist/types/keys.d.ts.map +1 -0
  293. package/dist/types/keys.js +2 -0
  294. package/dist/types/keys.js.map +1 -0
  295. package/dist/types/protocol.d.ts +93 -0
  296. package/dist/types/protocol.d.ts.map +1 -0
  297. package/dist/types/protocol.js +18 -0
  298. package/dist/types/protocol.js.map +1 -0
  299. package/dist/types/status.d.ts +3 -0
  300. package/dist/types/status.d.ts.map +1 -0
  301. package/dist/types/status.js +23 -0
  302. package/dist/types/status.js.map +1 -0
  303. package/dist/types/verification.d.ts +49 -0
  304. package/dist/types/verification.d.ts.map +1 -0
  305. package/dist/types/verification.js +34 -0
  306. package/dist/types/verification.js.map +1 -0
  307. package/dist/verification/atomic-swap.d.ts +9 -0
  308. package/dist/verification/atomic-swap.d.ts.map +1 -0
  309. package/dist/verification/atomic-swap.js +22 -0
  310. package/dist/verification/atomic-swap.js.map +1 -0
  311. package/dist/verification/chainflip-networks.d.ts +46 -0
  312. package/dist/verification/chainflip-networks.d.ts.map +1 -0
  313. package/dist/verification/chainflip-networks.js +24 -0
  314. package/dist/verification/chainflip-networks.js.map +1 -0
  315. package/dist/verification/chainflip.d.ts +61 -0
  316. package/dist/verification/chainflip.d.ts.map +1 -0
  317. package/dist/verification/chainflip.js +377 -0
  318. package/dist/verification/chainflip.js.map +1 -0
  319. package/dist/verification/constants.d.ts +52 -0
  320. package/dist/verification/constants.d.ts.map +1 -0
  321. package/dist/verification/constants.js +54 -0
  322. package/dist/verification/constants.js.map +1 -0
  323. package/dist/verification/index.d.ts +71 -0
  324. package/dist/verification/index.d.ts.map +1 -0
  325. package/dist/verification/index.js +91 -0
  326. package/dist/verification/index.js.map +1 -0
  327. package/dist/verification/memo.d.ts +27 -0
  328. package/dist/verification/memo.d.ts.map +1 -0
  329. package/dist/verification/memo.js +52 -0
  330. package/dist/verification/memo.js.map +1 -0
  331. package/dist/verification/near-intents.d.ts +91 -0
  332. package/dist/verification/near-intents.d.ts.map +1 -0
  333. package/dist/verification/near-intents.js +213 -0
  334. package/dist/verification/near-intents.js.map +1 -0
  335. package/dist/verification/rate-oracle.d.ts +32 -0
  336. package/dist/verification/rate-oracle.d.ts.map +1 -0
  337. package/dist/verification/rate-oracle.js +43 -0
  338. package/dist/verification/rate-oracle.js.map +1 -0
  339. package/dist/verification/shared.d.ts +20 -0
  340. package/dist/verification/shared.d.ts.map +1 -0
  341. package/dist/verification/shared.js +25 -0
  342. package/dist/verification/shared.js.map +1 -0
  343. package/dist/verification/thorchain-networks.d.ts +35 -0
  344. package/dist/verification/thorchain-networks.d.ts.map +1 -0
  345. package/dist/verification/thorchain-networks.js +35 -0
  346. package/dist/verification/thorchain-networks.js.map +1 -0
  347. package/dist/verification/thorchain.d.ts +55 -0
  348. package/dist/verification/thorchain.d.ts.map +1 -0
  349. package/dist/verification/thorchain.js +232 -0
  350. package/dist/verification/thorchain.js.map +1 -0
  351. package/dist/wasm-pins.d.ts +4 -0
  352. package/dist/wasm-pins.d.ts.map +1 -0
  353. package/dist/wasm-pins.js +6 -0
  354. package/dist/wasm-pins.js.map +1 -0
  355. package/dist/wire/chainflip.zod.d.ts +144 -0
  356. package/dist/wire/chainflip.zod.d.ts.map +1 -0
  357. package/dist/wire/chainflip.zod.js +33 -0
  358. package/dist/wire/chainflip.zod.js.map +1 -0
  359. package/dist/wire/near-intents.zod.d.ts +376 -0
  360. package/dist/wire/near-intents.zod.d.ts.map +1 -0
  361. package/dist/wire/near-intents.zod.js +101 -0
  362. package/dist/wire/near-intents.zod.js.map +1 -0
  363. package/dist/wire/server/action.zod.d.ts +1119 -0
  364. package/dist/wire/server/action.zod.d.ts.map +1 -0
  365. package/dist/wire/server/action.zod.js +173 -0
  366. package/dist/wire/server/action.zod.js.map +1 -0
  367. package/dist/wire/server/common.zod.d.ts +62 -0
  368. package/dist/wire/server/common.zod.d.ts.map +1 -0
  369. package/dist/wire/server/common.zod.js +43 -0
  370. package/dist/wire/server/common.zod.js.map +1 -0
  371. package/dist/wire/server/index.d.ts +8 -0
  372. package/dist/wire/server/index.d.ts.map +1 -0
  373. package/dist/wire/server/index.js +8 -0
  374. package/dist/wire/server/index.js.map +1 -0
  375. package/dist/wire/server/pow.zod.d.ts +45 -0
  376. package/dist/wire/server/pow.zod.d.ts.map +1 -0
  377. package/dist/wire/server/pow.zod.js +18 -0
  378. package/dist/wire/server/pow.zod.js.map +1 -0
  379. package/dist/wire/server/quotes.zod.d.ts +694 -0
  380. package/dist/wire/server/quotes.zod.d.ts.map +1 -0
  381. package/dist/wire/server/quotes.zod.js +103 -0
  382. package/dist/wire/server/quotes.zod.js.map +1 -0
  383. package/dist/wire/server/swap.zod.d.ts +1981 -0
  384. package/dist/wire/server/swap.zod.d.ts.map +1 -0
  385. package/dist/wire/server/swap.zod.js +270 -0
  386. package/dist/wire/server/swap.zod.js.map +1 -0
  387. package/dist/wire/server/tokens.zod.d.ts +93 -0
  388. package/dist/wire/server/tokens.zod.d.ts.map +1 -0
  389. package/dist/wire/server/tokens.zod.js +28 -0
  390. package/dist/wire/server/tokens.zod.js.map +1 -0
  391. package/dist/wire/server/verify.zod.d.ts +30 -0
  392. package/dist/wire/server/verify.zod.d.ts.map +1 -0
  393. package/dist/wire/server/verify.zod.js +12 -0
  394. package/dist/wire/server/verify.zod.js.map +1 -0
  395. package/dist/wire/thorchain.zod.d.ts +224 -0
  396. package/dist/wire/thorchain.zod.d.ts.map +1 -0
  397. package/dist/wire/thorchain.zod.js +51 -0
  398. package/dist/wire/thorchain.zod.js.map +1 -0
  399. package/package.json +128 -0
  400. package/wasm/miradex-rust/README.md +74 -0
  401. package/wasm/miradex-rust/miradex_rust.d.ts +149 -0
  402. package/wasm/miradex-rust/miradex_rust.js +943 -0
  403. package/wasm/miradex-rust/miradex_rust_bg.wasm +0 -0
  404. package/wasm/miradex-rust/miradex_rust_bg.wasm.d.ts +31 -0
  405. package/wasm/miradex-rust/package.json +24 -0
@@ -0,0 +1,460 @@
1
+ /**
2
+ * Client-side pre-signing for non-custodial atomic swaps.
3
+ *
4
+ * Constructs the same Bitcoin transactions (TxCancel, TxPunish, TxEarlyRefund,
5
+ * TxRedeem) that the Rust sidecar builds, computes their BIP143 segwit sighashes,
6
+ * and signs them with Bob's secret key `b` — all client-side. The server never
7
+ * sees `b`.
8
+ *
9
+ * The miniscript `c:and_v(v:pk(A),pk_k(B))` compiles to:
10
+ * <A> OP_CHECKSIGVERIFY <B> OP_CHECKSIG
11
+ *
12
+ * This is the witness script for the 2-of-2 P2WSH used in TxLock and TxCancel.
13
+ */
14
+ import * as bitcoin from 'bitcoinjs-lib';
15
+ import { ECPairFactory } from 'ecpair';
16
+ import * as ecc from 'tiny-secp256k1';
17
+ import { VerificationError, DEFAULT_FEE_POLICY, DEFAULT_AMNESTY_POLICY, DEFAULT_DUST_POLICY, } from '../types/index.js';
18
+ import { ATOMICSWAP_TIMELOCK_MIN_BLOCKS, ATOMICSWAP_TIMELOCK_MAX_BLOCKS, ATOMICSWAP_PUNISH_TIMELOCK_MIN_BLOCKS, ATOMICSWAP_PUNISH_TIMELOCK_MAX_BLOCKS, ATOMICSWAP_REMAINING_REFUND_TIMELOCK_MIN_BLOCKS, ATOMICSWAP_REMAINING_REFUND_TIMELOCK_MAX_BLOCKS, } from '../verification/constants.js';
19
+ const ECPair = ECPairFactory(ecc);
20
+ const SEQUENCE_FINAL = 0xffffffff;
21
+ /** Typical vbyte cost of a single P2WSH spend with one output. */
22
+ const VBYTES_SINGLE_IN_SINGLE_OUT = 154n;
23
+ /** Typical vbyte cost of a single P2WSH spend with two outputs (partial refund). */
24
+ const VBYTES_SINGLE_IN_TWO_OUT = 187n;
25
+ /**
26
+ * Reject a sidecar-supplied BIP68 sequence value if it falls outside the
27
+ * configured min/max range. Bob signs pre-sigs over digests that bake in
28
+ * these sequences, so a degenerate value (e.g. `punish_timelock = 0`) would
29
+ * silently arm Alice for an immediate punish race after TxCancel confirms.
30
+ *
31
+ * @security Closes V-1.
32
+ */
33
+ function requireTimelockInBounds(params) {
34
+ if (!Number.isInteger(params.value) || params.value < params.min || params.value > params.max) {
35
+ throw new VerificationError('E_TIMELOCK_OUT_OF_RANGE', `${params.fieldName} ${String(params.value)} is outside the accepted range ` +
36
+ `[${String(params.min)}, ${String(params.max)}]`);
37
+ }
38
+ }
39
+ function requireFeeInBounds(params) {
40
+ const minFee = params.policy.minRelaySatsPerVbyte * params.weightVbytes;
41
+ const maxFee = params.policy.maxSatsPerVbyte * params.weightVbytes;
42
+ if (params.feeSats < minFee) {
43
+ throw new VerificationError('E_FEE_BELOW_RELAY', `${params.txName} fee ${params.feeSats.toString()} below min ${minFee.toString()}`);
44
+ }
45
+ if (params.feeSats > maxFee) {
46
+ throw new VerificationError('E_FEE_ABOVE_CAP', `${params.txName} fee ${params.feeSats.toString()} above max ${maxFee.toString()}`);
47
+ }
48
+ }
49
+ function requireAboveDust(params) {
50
+ if (params.outputSats < params.floor) {
51
+ throw new VerificationError('E_OUTPUT_DUST', `${params.txName} output ${params.outputSats.toString()} below dust floor ${params.floor.toString()}`);
52
+ }
53
+ }
54
+ function resolveNetwork(network) {
55
+ switch (network) {
56
+ case 'mainnet':
57
+ return bitcoin.networks.bitcoin;
58
+ case 'testnet':
59
+ return bitcoin.networks.testnet;
60
+ case 'regtest':
61
+ return bitcoin.networks.regtest;
62
+ }
63
+ }
64
+ /**
65
+ * Derive the canonical 2-of-2 P2WSH lock address from Alice's and Bob's
66
+ * compressed secp256k1 public keys. Callers must compare this against any
67
+ * sidecar-claimed lock address before signing.
68
+ *
69
+ * @param params.aHex Alice's 33-byte compressed secp256k1 public key (hex).
70
+ * @param params.bHex Bob's 33-byte compressed secp256k1 public key (hex).
71
+ * @param params.network `'mainnet'` or `'testnet'`; selects the bech32 HRP.
72
+ * @returns The bech32 P2WSH address derived from `(A, B)`.
73
+ * @throws {VerificationError} `E_LOCK_SCRIPT` if p2wsh derivation fails.
74
+ * @security Closes AV-B.1 / AV-C.1 — always prefer this over a sidecar-supplied address.
75
+ */
76
+ export function deriveLockAddress(params) {
77
+ const net = resolveNetwork(params.network);
78
+ const witnessScript = buildMultisigWitnessScript(params.aHex, params.bHex);
79
+ const p2wsh = bitcoin.payments.p2wsh({ redeem: { output: witnessScript }, network: net });
80
+ if (!p2wsh.address) {
81
+ throw new VerificationError('E_LOCK_SCRIPT', 'failed to derive P2WSH lock address');
82
+ }
83
+ return p2wsh.address;
84
+ }
85
+ /**
86
+ * Build the 2-of-2 witness script: <A> OP_CHECKSIGVERIFY <B> OP_CHECKSIG
87
+ *
88
+ * This matches the Rust miniscript `c:and_v(v:pk(A),pk_k(B))`.
89
+ * A and B are 33-byte compressed secp256k1 public keys (hex).
90
+ */
91
+ export function buildMultisigWitnessScript(aHex, bHex) {
92
+ const keyA = Buffer.from(aHex, 'hex');
93
+ const keyB = Buffer.from(bHex, 'hex');
94
+ if (keyA.length !== 33 || keyB.length !== 33) {
95
+ throw new Error(`Public keys must be 33 bytes compressed. Got A=${String(keyA.length)}, B=${String(keyB.length)}`);
96
+ }
97
+ return Buffer.from(bitcoin.script.compile([
98
+ keyA,
99
+ bitcoin.opcodes.OP_CHECKSIGVERIFY,
100
+ keyB,
101
+ bitcoin.opcodes.OP_CHECKSIG,
102
+ ]));
103
+ }
104
+ /**
105
+ * Find the 2-of-2 P2WSH output in a transaction that matches the given witness script.
106
+ * Returns { vout, value } or throws if not found.
107
+ */
108
+ function findMultisigOutput(tx, witnessScript, network) {
109
+ const p2wsh = bitcoin.payments.p2wsh({ redeem: { output: witnessScript }, network });
110
+ if (!p2wsh.output)
111
+ throw new Error('Failed to derive P2WSH output script');
112
+ const p2wshOutput = Buffer.from(p2wsh.output);
113
+ for (let i = 0; i < tx.outs.length; i++) {
114
+ const out = tx.outs[i];
115
+ if (out && p2wshOutput.equals(Buffer.from(out.script))) {
116
+ return { vout: i, valueSats: Number(out.value) };
117
+ }
118
+ }
119
+ throw new Error('No output matching the 2-of-2 multisig descriptor found in transaction');
120
+ }
121
+ /**
122
+ * Build a spending transaction from a P2WSH output.
123
+ * Mirrors the Rust `build_spend_transaction` pattern.
124
+ */
125
+ function buildSpendTx(options) {
126
+ const tx = new bitcoin.Transaction();
127
+ tx.version = 2;
128
+ tx.locktime = 0;
129
+ tx.addInput(options.inputTxId, options.inputVout, options.inputSequence);
130
+ const outputScript = bitcoin.address.toOutputScript(options.outputAddress, options.network);
131
+ tx.addOutput(outputScript, BigInt(options.outputValueSats));
132
+ return tx;
133
+ }
134
+ /**
135
+ * Compute BIP143 segwit sighash for a P2WSH input.
136
+ */
137
+ function computeWitnessSighash(tx, inputIndex, witnessScript, valueSats) {
138
+ return Buffer.from(tx.hashForWitnessV0(inputIndex, witnessScript, BigInt(valueSats), bitcoin.Transaction.SIGHASH_ALL));
139
+ }
140
+ /**
141
+ * Compute the 3 pre-signatures (TxCancel, TxPunish, TxEarlyRefund) for a client-side swap.
142
+ *
143
+ * These are standard ECDSA signatures that the sidecar sends to Alice in Message4.
144
+ * The TxRedeem encrypted signature is computed separately (requires WASM adaptor crypto).
145
+ *
146
+ * @param params - All parameters needed for pre-signature computation
147
+ * @returns 3 hex-encoded compact ECDSA signatures (64 bytes each)
148
+ */
149
+ export function computePreSigs(params) {
150
+ const { bHex, signedPsbtBase64, protocolParams, refundAddress, network } = params;
151
+ const feePolicy = params.feePolicy ?? DEFAULT_FEE_POLICY;
152
+ const dustPolicy = params.dustPolicy ?? DEFAULT_DUST_POLICY;
153
+ const amnestyPolicy = params.amnestyPolicy ?? DEFAULT_AMNESTY_POLICY;
154
+ // V-1: validate every BIP68 sequence the sidecar supplies before we sign
155
+ // over a digest that embeds it. The verification module bounds
156
+ // cancel_timelock at deposit-verification time, but presign pre-dates it
157
+ // for the punish + reclaim paths; gate them here too so pre-sigs cannot
158
+ // arm a degenerate refund race.
159
+ requireTimelockInBounds({
160
+ value: protocolParams.cancel_timelock,
161
+ min: ATOMICSWAP_TIMELOCK_MIN_BLOCKS,
162
+ max: ATOMICSWAP_TIMELOCK_MAX_BLOCKS,
163
+ fieldName: 'cancel_timelock',
164
+ });
165
+ requireTimelockInBounds({
166
+ value: protocolParams.punish_timelock,
167
+ min: ATOMICSWAP_PUNISH_TIMELOCK_MIN_BLOCKS,
168
+ max: ATOMICSWAP_PUNISH_TIMELOCK_MAX_BLOCKS,
169
+ fieldName: 'punish_timelock',
170
+ });
171
+ if (protocolParams.remaining_refund_timelock !== undefined &&
172
+ protocolParams.remaining_refund_timelock !== null) {
173
+ requireTimelockInBounds({
174
+ value: protocolParams.remaining_refund_timelock,
175
+ min: ATOMICSWAP_REMAINING_REFUND_TIMELOCK_MIN_BLOCKS,
176
+ max: ATOMICSWAP_REMAINING_REFUND_TIMELOCK_MAX_BLOCKS,
177
+ fieldName: 'remaining_refund_timelock',
178
+ });
179
+ }
180
+ const net = resolveNetwork(network);
181
+ const keyPair = ECPair.fromPrivateKey(Buffer.from(bHex, 'hex'), { network: net });
182
+ const bPubHex = Buffer.from(keyPair.publicKey).toString('hex');
183
+ const psbt = bitcoin.Psbt.fromBase64(signedPsbtBase64, { network: net });
184
+ // bitcoinjs-lib throws if inputs are already finalised; buildAndSignFundingPsbt finalises first.
185
+ try {
186
+ psbt.finalizeAllInputs();
187
+ }
188
+ catch { /* already finalized */ }
189
+ const txLock = psbt.extractTransaction();
190
+ const txLockHash = txLock.getHash();
191
+ const lockWitnessScript = buildMultisigWitnessScript(protocolParams.A, bPubHex);
192
+ const { vout: lockVout, valueSats: lockValueSats } = findMultisigOutput(txLock, lockWitnessScript, net);
193
+ const lockValueSatsBn = BigInt(lockValueSats);
194
+ // AV-A.12: cap amnesty at a fraction of lock before any tx relies on it.
195
+ const amnestyAmount = BigInt(protocolParams.amnesty_amount_sats ?? 0);
196
+ if (amnestyAmount < 0n) {
197
+ throw new VerificationError('E_AMNESTY_NEGATIVE', 'amnesty amount is negative');
198
+ }
199
+ if (amnestyAmount * 10000n > lockValueSatsBn * BigInt(amnestyPolicy.maxRatioBps)) {
200
+ throw new VerificationError('E_AMNESTY_EXCEEDS_CAP', `amnesty ${amnestyAmount.toString()} exceeds ${(amnestyPolicy.maxRatioBps / 100).toFixed(2)}% of lock ${lockValueSatsBn.toString()}`);
201
+ }
202
+ const cancelWitnessScript = buildMultisigWitnessScript(protocolParams.A, bPubHex);
203
+ const cancelP2wsh = bitcoin.payments.p2wsh({ redeem: { output: cancelWitnessScript }, network: net });
204
+ if (!cancelP2wsh.output)
205
+ throw new Error('Failed to derive cancel P2WSH');
206
+ requireFeeInBounds({
207
+ feeSats: BigInt(protocolParams.tx_cancel_fee_sats),
208
+ weightVbytes: VBYTES_SINGLE_IN_SINGLE_OUT,
209
+ policy: feePolicy,
210
+ txName: 'TxCancel',
211
+ });
212
+ const cancelOutputSats = BigInt(lockValueSats) - BigInt(protocolParams.tx_cancel_fee_sats);
213
+ requireAboveDust({
214
+ outputSats: cancelOutputSats,
215
+ floor: dustPolicy.p2wshDustSats,
216
+ txName: 'TxCancel',
217
+ });
218
+ const txCancel = new bitcoin.Transaction();
219
+ txCancel.version = 2;
220
+ txCancel.locktime = 0;
221
+ txCancel.addInput(Buffer.from(txLockHash), lockVout, protocolParams.cancel_timelock);
222
+ txCancel.addOutput(Buffer.from(cancelP2wsh.output), cancelOutputSats);
223
+ const cancelDigest = computeWitnessSighash(txCancel, 0, lockWitnessScript, lockValueSats);
224
+ const cancelSig = keyPair.sign(cancelDigest);
225
+ requireFeeInBounds({
226
+ feeSats: BigInt(protocolParams.tx_punish_fee_sats),
227
+ weightVbytes: VBYTES_SINGLE_IN_SINGLE_OUT,
228
+ policy: feePolicy,
229
+ txName: 'TxPunish',
230
+ });
231
+ const punishOutputSats = cancelOutputSats - BigInt(protocolParams.tx_punish_fee_sats);
232
+ requireAboveDust({
233
+ outputSats: punishOutputSats,
234
+ floor: dustPolicy.p2wpkhDustSats,
235
+ txName: 'TxPunish',
236
+ });
237
+ const txPunish = buildSpendTx({
238
+ inputTxId: Buffer.from(txCancel.getHash()),
239
+ inputVout: 0,
240
+ inputSequence: protocolParams.punish_timelock,
241
+ outputAddress: protocolParams.punish_address,
242
+ outputValueSats: Number(punishOutputSats),
243
+ network: net,
244
+ });
245
+ const punishDigest = computeWitnessSighash(txPunish, 0, cancelWitnessScript, Number(cancelOutputSats));
246
+ const punishSig = keyPair.sign(punishDigest);
247
+ requireFeeInBounds({
248
+ feeSats: BigInt(protocolParams.tx_refund_fee_sats),
249
+ weightVbytes: VBYTES_SINGLE_IN_SINGLE_OUT,
250
+ policy: feePolicy,
251
+ txName: 'TxEarlyRefund',
252
+ });
253
+ const earlyRefundOutputSats = BigInt(lockValueSats) - BigInt(protocolParams.tx_refund_fee_sats);
254
+ requireAboveDust({
255
+ outputSats: earlyRefundOutputSats,
256
+ floor: dustPolicy.p2wpkhDustSats,
257
+ txName: 'TxEarlyRefund',
258
+ });
259
+ const txEarlyRefund = buildSpendTx({
260
+ inputTxId: Buffer.from(txLockHash),
261
+ inputVout: lockVout,
262
+ inputSequence: SEQUENCE_FINAL,
263
+ outputAddress: refundAddress,
264
+ outputValueSats: Number(earlyRefundOutputSats),
265
+ network: net,
266
+ });
267
+ const earlyRefundDigest = computeWitnessSighash(txEarlyRefund, 0, lockWitnessScript, lockValueSats);
268
+ const earlyRefundSig = keyPair.sign(earlyRefundDigest);
269
+ let tx_reclaim_sig;
270
+ let tx_withhold_sig;
271
+ let tx_mercy_sig;
272
+ if (amnestyAmount > 0n &&
273
+ protocolParams.tx_partial_refund_fee_sats &&
274
+ protocolParams.tx_reclaim_fee_sats &&
275
+ protocolParams.tx_withhold_fee_sats &&
276
+ protocolParams.tx_mercy_fee_sats &&
277
+ protocolParams.remaining_refund_timelock) {
278
+ const amnestyWitnessScript = buildMultisigWitnessScript(protocolParams.A, bPubHex);
279
+ const amnestyP2wsh = bitcoin.payments.p2wsh({ redeem: { output: amnestyWitnessScript }, network: net });
280
+ if (!amnestyP2wsh.output)
281
+ throw new Error('Failed to derive amnesty P2WSH');
282
+ requireFeeInBounds({
283
+ feeSats: BigInt(protocolParams.tx_partial_refund_fee_sats),
284
+ weightVbytes: VBYTES_SINGLE_IN_TWO_OUT,
285
+ policy: feePolicy,
286
+ txName: 'TxPartialRefund',
287
+ });
288
+ const partialRefundOutputSats = cancelOutputSats - amnestyAmount - BigInt(protocolParams.tx_partial_refund_fee_sats);
289
+ requireAboveDust({
290
+ outputSats: partialRefundOutputSats,
291
+ floor: dustPolicy.p2wpkhDustSats,
292
+ txName: 'TxPartialRefund',
293
+ });
294
+ requireAboveDust({
295
+ outputSats: amnestyAmount,
296
+ floor: dustPolicy.p2wshDustSats,
297
+ txName: 'TxPartialRefund amnesty',
298
+ });
299
+ const txPartialRefund = new bitcoin.Transaction();
300
+ txPartialRefund.version = 2;
301
+ txPartialRefund.locktime = 0;
302
+ txPartialRefund.addInput(Buffer.from(txCancel.getHash()), 0, SEQUENCE_FINAL);
303
+ txPartialRefund.addOutput(bitcoin.address.toOutputScript(refundAddress, net), partialRefundOutputSats);
304
+ txPartialRefund.addOutput(Buffer.from(amnestyP2wsh.output), amnestyAmount);
305
+ requireFeeInBounds({
306
+ feeSats: BigInt(protocolParams.tx_reclaim_fee_sats),
307
+ weightVbytes: VBYTES_SINGLE_IN_SINGLE_OUT,
308
+ policy: feePolicy,
309
+ txName: 'TxReclaim',
310
+ });
311
+ const reclaimOutputSats = amnestyAmount - BigInt(protocolParams.tx_reclaim_fee_sats);
312
+ requireAboveDust({
313
+ outputSats: reclaimOutputSats,
314
+ floor: dustPolicy.p2wpkhDustSats,
315
+ txName: 'TxReclaim',
316
+ });
317
+ const txReclaim = buildSpendTx({
318
+ inputTxId: Buffer.from(txPartialRefund.getHash()),
319
+ inputVout: 1,
320
+ inputSequence: protocolParams.remaining_refund_timelock,
321
+ outputAddress: refundAddress,
322
+ outputValueSats: Number(reclaimOutputSats),
323
+ network: net,
324
+ });
325
+ const reclaimDigest = computeWitnessSighash(txReclaim, 0, amnestyWitnessScript, Number(amnestyAmount));
326
+ tx_reclaim_sig = Buffer.from(keyPair.sign(reclaimDigest)).toString('hex');
327
+ requireFeeInBounds({
328
+ feeSats: BigInt(protocolParams.tx_withhold_fee_sats),
329
+ weightVbytes: VBYTES_SINGLE_IN_SINGLE_OUT,
330
+ policy: feePolicy,
331
+ txName: 'TxWithhold',
332
+ });
333
+ const withholdOutputSats = amnestyAmount - BigInt(protocolParams.tx_withhold_fee_sats);
334
+ requireAboveDust({
335
+ outputSats: withholdOutputSats,
336
+ floor: dustPolicy.p2wshDustSats,
337
+ txName: 'TxWithhold',
338
+ });
339
+ const txWithhold = new bitcoin.Transaction();
340
+ txWithhold.version = 2;
341
+ txWithhold.locktime = 0;
342
+ txWithhold.addInput(Buffer.from(txPartialRefund.getHash()), 1, SEQUENCE_FINAL);
343
+ txWithhold.addOutput(Buffer.from(amnestyP2wsh.output), withholdOutputSats);
344
+ const withholdDigest = computeWitnessSighash(txWithhold, 0, amnestyWitnessScript, Number(amnestyAmount));
345
+ tx_withhold_sig = Buffer.from(keyPair.sign(withholdDigest)).toString('hex');
346
+ requireFeeInBounds({
347
+ feeSats: BigInt(protocolParams.tx_mercy_fee_sats),
348
+ weightVbytes: VBYTES_SINGLE_IN_SINGLE_OUT,
349
+ policy: feePolicy,
350
+ txName: 'TxMercy',
351
+ });
352
+ const mercyOutputSats = withholdOutputSats - BigInt(protocolParams.tx_mercy_fee_sats);
353
+ requireAboveDust({
354
+ outputSats: mercyOutputSats,
355
+ floor: dustPolicy.p2wpkhDustSats,
356
+ txName: 'TxMercy',
357
+ });
358
+ const txMercy = buildSpendTx({
359
+ inputTxId: Buffer.from(txWithhold.getHash()),
360
+ inputVout: 0,
361
+ inputSequence: SEQUENCE_FINAL,
362
+ outputAddress: refundAddress,
363
+ outputValueSats: Number(mercyOutputSats),
364
+ network: net,
365
+ });
366
+ const mercyDigest = computeWitnessSighash(txMercy, 0, amnestyWitnessScript, Number(withholdOutputSats));
367
+ tx_mercy_sig = Buffer.from(keyPair.sign(mercyDigest)).toString('hex');
368
+ }
369
+ return {
370
+ tx_cancel_sig: Buffer.from(cancelSig).toString('hex'),
371
+ tx_punish_sig: Buffer.from(punishSig).toString('hex'),
372
+ tx_early_refund_sig: Buffer.from(earlyRefundSig).toString('hex'),
373
+ tx_reclaim_sig,
374
+ tx_withhold_sig,
375
+ tx_mercy_sig,
376
+ };
377
+ }
378
+ /**
379
+ * Compute the TxRedeem BIP143 sighash digest.
380
+ *
381
+ * The client uses this digest with WASM `encsign_digest(b, S_a_bitcoin, digest)`
382
+ * to produce the adaptor-encrypted signature for Alice.
383
+ *
384
+ * @param params - All parameters needed for redeem digest computation
385
+ * @returns Hex-encoded sighash (32 bytes)
386
+ */
387
+ export function computeRedeemDigest(params) {
388
+ const net = resolveNetwork(params.network);
389
+ const psbt = bitcoin.Psbt.fromBase64(params.signedPsbtBase64, { network: net });
390
+ try {
391
+ psbt.finalizeAllInputs();
392
+ }
393
+ catch { /* already finalized */ }
394
+ const txLock = psbt.extractTransaction();
395
+ return computeRedeemDigestFromTxLock({
396
+ txLock,
397
+ protocolParams: params.protocolParams,
398
+ bPubHex: params.bPubHex,
399
+ network: params.network,
400
+ feePolicy: params.feePolicy,
401
+ dustPolicy: params.dustPolicy,
402
+ });
403
+ }
404
+ /**
405
+ * Recompute the TxRedeem BIP143 sighash from a raw, already-broadcast TxLock
406
+ * rather than a signed PSBT. Used on the resume path: when the driver comes
407
+ * up after a restart, `signedPsbtBase64` is no longer in memory, but the
408
+ * lock tx is permanently on-chain and any `BlockchainDataProvider` can
409
+ * return its raw hex.
410
+ *
411
+ * Produces a byte-identical digest to `computeRedeemDigest` for the same
412
+ * underlying transaction.
413
+ *
414
+ * @security Preserves Fix 1 / AV-B.2 guarantees on resume — the digest is
415
+ * still derived independently from chain data; the caller CT-compares the
416
+ * result against the sidecar's claimed digest.
417
+ */
418
+ export function computeRedeemDigestFromTxHex(params) {
419
+ const txLock = bitcoin.Transaction.fromHex(params.lockTxRawHex);
420
+ return computeRedeemDigestFromTxLock({
421
+ txLock,
422
+ protocolParams: params.protocolParams,
423
+ bPubHex: params.bPubHex,
424
+ network: params.network,
425
+ feePolicy: params.feePolicy,
426
+ dustPolicy: params.dustPolicy,
427
+ });
428
+ }
429
+ function computeRedeemDigestFromTxLock(params) {
430
+ const { txLock, protocolParams, bPubHex, network } = params;
431
+ const feePolicy = params.feePolicy ?? DEFAULT_FEE_POLICY;
432
+ const dustPolicy = params.dustPolicy ?? DEFAULT_DUST_POLICY;
433
+ const net = resolveNetwork(network);
434
+ const txLockHash = txLock.getHash();
435
+ const lockWitnessScript = buildMultisigWitnessScript(protocolParams.A, bPubHex);
436
+ const { vout: lockVout, valueSats: lockValueSats } = findMultisigOutput(txLock, lockWitnessScript, net);
437
+ requireFeeInBounds({
438
+ feeSats: BigInt(protocolParams.tx_redeem_fee_sats),
439
+ weightVbytes: VBYTES_SINGLE_IN_SINGLE_OUT,
440
+ policy: feePolicy,
441
+ txName: 'TxRedeem',
442
+ });
443
+ const redeemOutputSats = BigInt(lockValueSats) - BigInt(protocolParams.tx_redeem_fee_sats);
444
+ requireAboveDust({
445
+ outputSats: redeemOutputSats,
446
+ floor: dustPolicy.p2wpkhDustSats,
447
+ txName: 'TxRedeem',
448
+ });
449
+ const txRedeem = buildSpendTx({
450
+ inputTxId: Buffer.from(txLockHash),
451
+ inputVout: lockVout,
452
+ inputSequence: SEQUENCE_FINAL,
453
+ outputAddress: protocolParams.redeem_address,
454
+ outputValueSats: Number(redeemOutputSats),
455
+ network: net,
456
+ });
457
+ const digest = computeWitnessSighash(txRedeem, 0, lockWitnessScript, lockValueSats);
458
+ return digest.toString('hex');
459
+ }
460
+ //# sourceMappingURL=presign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presign.js","sourceRoot":"","sources":["../../src/atomic-swap/presign.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { Logger } from '../interfaces/logger.js';
2
+ type NetworkName = 'mainnet' | 'testnet' | 'regtest' | 'regtest';
3
+ export interface BuildFullRefundParams {
4
+ readonly txCancelHex: string;
5
+ readonly refundAddress: string;
6
+ readonly refundFeeSats: bigint;
7
+ readonly network: NetworkName;
8
+ }
9
+ export interface BuildFullRefundResult {
10
+ readonly txRefundHex: string;
11
+ readonly refundOutputValueSats: bigint;
12
+ readonly cancelOutputValueSats: bigint;
13
+ }
14
+ export interface BuildPartialRefundParams extends BuildFullRefundParams {
15
+ readonly amnestyAmountSats: bigint;
16
+ readonly partialRefundFeeSats: bigint;
17
+ readonly aPubHex: string;
18
+ readonly bPubHex: string;
19
+ }
20
+ export interface BuildPartialRefundResult {
21
+ readonly txRefundHex: string;
22
+ readonly refundOutputValueSats: bigint;
23
+ readonly amnestyOutputValueSats: bigint;
24
+ readonly cancelOutputValueSats: bigint;
25
+ }
26
+ export interface SignRefundParams {
27
+ readonly txRefundHex: string;
28
+ readonly witnessScript: Buffer;
29
+ readonly txCancelOutputValueSats: bigint;
30
+ readonly encsigRefund: string;
31
+ /** Bob's s_b in its stored Ed25519 little-endian form. Reversed internally. */
32
+ readonly sBHexLE: string;
33
+ readonly bHex: string;
34
+ readonly aPubHex: string;
35
+ readonly bPubHex: string;
36
+ /** Bob's adaptor public key S_b_bitcoin (verification target for encsig). */
37
+ readonly sBPubHex: string;
38
+ readonly logger?: Logger;
39
+ }
40
+ export interface AssembledRefundTx {
41
+ readonly txid: string;
42
+ readonly hex: string;
43
+ readonly digestHex: string;
44
+ }
45
+ /**
46
+ * Build an unsigned single-output TxRefund spending TxCancel's sole output.
47
+ * Returns the serialised tx hex and the output value in sats so callers can
48
+ * plumb it into the BIP143 sighash.
49
+ */
50
+ export declare function buildFullRefund(params: BuildFullRefundParams): BuildFullRefundResult;
51
+ /**
52
+ * Build an unsigned two-output TxPartialRefund (amnesty variant).
53
+ * - Output 0: refund back to Bob.
54
+ * - Output 1: new 2-of-2 P2WSH holding the amnesty amount.
55
+ */
56
+ export declare function buildPartialRefund(params: BuildPartialRefundParams): BuildPartialRefundResult;
57
+ /**
58
+ * Verify encsig, decrypt Alice's signature, sign with Bob's key, DER-encode,
59
+ * append SIGHASH_ALL, and assemble the 2-of-2 witness.
60
+ */
61
+ export declare function signRefund(params: SignRefundParams): AssembledRefundTx;
62
+ /**
63
+ * Encode a 64-byte compact ECDSA signature as strict DER.
64
+ * The sighash byte is NOT appended; the caller concatenates SIGHASH_ALL.
65
+ */
66
+ export declare function compactToDer(compact: Buffer): Buffer;
67
+ /** Decode a strict-DER ECDSA signature back into a 64-byte compact form. */
68
+ export declare function derToCompact(der: Buffer): Buffer;
69
+ /** Reject high-S signatures (BIP146). */
70
+ export declare function isLowS(compact: Buffer): boolean;
71
+ export {};
72
+ //# sourceMappingURL=refund.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refund.d.ts","sourceRoot":"","sources":["../../src/atomic-swap/refund.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAMtD,KAAK,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AA0BjE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,qBAAqB,CA4BpF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,wBAAwB,CA6C7F;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,CAuEtE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAapD;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAehD;AAqBD,yCAAyC;AACzC,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI/C"}