@miradexio/client 0.1.1 → 0.1.3

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 (317) hide show
  1. package/README.md +57 -292
  2. package/dist/address/base58.d.ts.map +1 -1
  3. package/dist/address/base58.js +1 -2
  4. package/dist/address/base58.js.map +1 -1
  5. package/dist/address/bech32.d.ts +0 -8
  6. package/dist/address/bech32.d.ts.map +1 -1
  7. package/dist/address/bech32.js +3 -9
  8. package/dist/address/bech32.js.map +1 -1
  9. package/dist/address/evm.d.ts.map +1 -1
  10. package/dist/address/evm.js +1 -2
  11. package/dist/address/evm.js.map +1 -1
  12. package/dist/address/index.d.ts +0 -6
  13. package/dist/address/index.d.ts.map +1 -1
  14. package/dist/address/index.js +6 -9
  15. package/dist/address/index.js.map +1 -1
  16. package/dist/address/monero.d.ts +0 -10
  17. package/dist/address/monero.d.ts.map +1 -1
  18. package/dist/address/monero.js +4 -10
  19. package/dist/address/monero.js.map +1 -1
  20. package/dist/address/polkadot.d.ts +0 -5
  21. package/dist/address/polkadot.d.ts.map +1 -1
  22. package/dist/address/polkadot.js +2 -6
  23. package/dist/address/polkadot.js.map +1 -1
  24. package/dist/address/ton.d.ts +0 -6
  25. package/dist/address/ton.d.ts.map +1 -1
  26. package/dist/address/ton.js +3 -8
  27. package/dist/address/ton.js.map +1 -1
  28. package/dist/api/index.d.ts +0 -19
  29. package/dist/api/index.d.ts.map +1 -1
  30. package/dist/api/index.js +18 -37
  31. package/dist/api/index.js.map +1 -1
  32. package/dist/atomic-swap/drive.d.ts +0 -13
  33. package/dist/atomic-swap/drive.d.ts.map +1 -1
  34. package/dist/atomic-swap/drive.js +72 -114
  35. package/dist/atomic-swap/drive.js.map +1 -1
  36. package/dist/atomic-swap/extract.d.ts +0 -23
  37. package/dist/atomic-swap/extract.d.ts.map +1 -1
  38. package/dist/atomic-swap/extract.js +6 -16
  39. package/dist/atomic-swap/extract.js.map +1 -1
  40. package/dist/atomic-swap/index.d.ts +0 -7
  41. package/dist/atomic-swap/index.d.ts.map +1 -1
  42. package/dist/atomic-swap/index.js +1 -7
  43. package/dist/atomic-swap/index.js.map +1 -1
  44. package/dist/atomic-swap/monero-sweep/errors.d.ts.map +1 -1
  45. package/dist/atomic-swap/monero-sweep/errors.js +5 -20
  46. package/dist/atomic-swap/monero-sweep/errors.js.map +1 -1
  47. package/dist/atomic-swap/monero-sweep/index.d.ts +1 -13
  48. package/dist/atomic-swap/monero-sweep/index.d.ts.map +1 -1
  49. package/dist/atomic-swap/monero-sweep/index.js +36 -65
  50. package/dist/atomic-swap/monero-sweep/index.js.map +1 -1
  51. package/dist/atomic-swap/monero-sweep/ring-select.d.ts +0 -4
  52. package/dist/atomic-swap/monero-sweep/ring-select.d.ts.map +1 -1
  53. package/dist/atomic-swap/monero-sweep/ring-select.js +9 -21
  54. package/dist/atomic-swap/monero-sweep/ring-select.js.map +1 -1
  55. package/dist/atomic-swap/presign.d.ts +0 -63
  56. package/dist/atomic-swap/presign.d.ts.map +1 -1
  57. package/dist/atomic-swap/presign.js +30 -90
  58. package/dist/atomic-swap/presign.js.map +1 -1
  59. package/dist/atomic-swap/refund.d.ts +0 -18
  60. package/dist/atomic-swap/refund.d.ts.map +1 -1
  61. package/dist/atomic-swap/refund.js +16 -32
  62. package/dist/atomic-swap/refund.js.map +1 -1
  63. package/dist/atomic-swap/run.d.ts +0 -17
  64. package/dist/atomic-swap/run.d.ts.map +1 -1
  65. package/dist/atomic-swap/run.js +11 -25
  66. package/dist/atomic-swap/run.js.map +1 -1
  67. package/dist/atomic-swap/snapshot.d.ts +0 -30
  68. package/dist/atomic-swap/snapshot.d.ts.map +1 -1
  69. package/dist/atomic-swap/snapshot.js +8 -23
  70. package/dist/atomic-swap/snapshot.js.map +1 -1
  71. package/dist/atomic-swap/submit-encsig.d.ts +0 -7
  72. package/dist/atomic-swap/submit-encsig.d.ts.map +1 -1
  73. package/dist/atomic-swap/submit-encsig.js +8 -15
  74. package/dist/atomic-swap/submit-encsig.js.map +1 -1
  75. package/dist/atomic-swap/types.d.ts +2 -55
  76. package/dist/atomic-swap/types.d.ts.map +1 -1
  77. package/dist/atomic-swap/types.js +2 -3
  78. package/dist/atomic-swap/types.js.map +1 -1
  79. package/dist/blockchain/quorum-provider.d.ts +0 -15
  80. package/dist/blockchain/quorum-provider.d.ts.map +1 -1
  81. package/dist/blockchain/quorum-provider.js +7 -9
  82. package/dist/blockchain/quorum-provider.js.map +1 -1
  83. package/dist/cooperative-redeem.d.ts +5 -14
  84. package/dist/cooperative-redeem.d.ts.map +1 -1
  85. package/dist/cooperative-redeem.js +3 -20
  86. package/dist/cooperative-redeem.js.map +1 -1
  87. package/dist/engine/blockchain-querier.d.ts +0 -22
  88. package/dist/engine/blockchain-querier.d.ts.map +1 -1
  89. package/dist/engine/engine-state.d.ts +0 -8
  90. package/dist/engine/engine-state.d.ts.map +1 -1
  91. package/dist/engine/engine-state.js.map +1 -1
  92. package/dist/engine/flow-context.d.ts +0 -20
  93. package/dist/engine/flow-context.d.ts.map +1 -1
  94. package/dist/engine/flow-context.js +17 -41
  95. package/dist/engine/flow-context.js.map +1 -1
  96. package/dist/engine/flows/atomic-flow-state.d.ts +8 -1
  97. package/dist/engine/flows/atomic-flow-state.d.ts.map +1 -1
  98. package/dist/engine/flows/atomic-flow.d.ts +1 -28
  99. package/dist/engine/flows/atomic-flow.d.ts.map +1 -1
  100. package/dist/engine/flows/atomic-flow.js +98 -128
  101. package/dist/engine/flows/atomic-flow.js.map +1 -1
  102. package/dist/engine/flows/error-routing.d.ts +11 -0
  103. package/dist/engine/flows/error-routing.d.ts.map +1 -0
  104. package/dist/engine/flows/error-routing.js +17 -0
  105. package/dist/engine/flows/error-routing.js.map +1 -0
  106. package/dist/engine/flows/swap-flow.d.ts +0 -19
  107. package/dist/engine/flows/swap-flow.d.ts.map +1 -1
  108. package/dist/engine/flows/swap-flow.js +41 -83
  109. package/dist/engine/flows/swap-flow.js.map +1 -1
  110. package/dist/engine/miradex-engine.d.ts +1 -62
  111. package/dist/engine/miradex-engine.d.ts.map +1 -1
  112. package/dist/engine/miradex-engine.js +18 -50
  113. package/dist/engine/miradex-engine.js.map +1 -1
  114. package/dist/engine/pipeline.d.ts +0 -11
  115. package/dist/engine/pipeline.d.ts.map +1 -1
  116. package/dist/engine/pipeline.js +11 -21
  117. package/dist/engine/pipeline.js.map +1 -1
  118. package/dist/engine/platform.d.ts +0 -160
  119. package/dist/engine/platform.d.ts.map +1 -1
  120. package/dist/engine/platform.js +2 -0
  121. package/dist/engine/platform.js.map +1 -1
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +7 -11
  124. package/dist/index.js.map +1 -1
  125. package/dist/interfaces/blockchain.d.ts +1 -13
  126. package/dist/interfaces/blockchain.d.ts.map +1 -1
  127. package/dist/interfaces/blockchain.js +1 -0
  128. package/dist/interfaces/blockchain.js.map +1 -1
  129. package/dist/interfaces/logger.d.ts +0 -6
  130. package/dist/interfaces/logger.d.ts.map +1 -1
  131. package/dist/interfaces/logger.js.map +1 -1
  132. package/dist/lib/bitcoin/deposit-watcher.d.ts +0 -23
  133. package/dist/lib/bitcoin/deposit-watcher.d.ts.map +1 -1
  134. package/dist/lib/bitcoin/deposit-watcher.js +7 -31
  135. package/dist/lib/bitcoin/deposit-watcher.js.map +1 -1
  136. package/dist/lib/bitcoin/script-hash.d.ts.map +1 -1
  137. package/dist/lib/bitcoin/script-hash.js +2 -6
  138. package/dist/lib/bitcoin/script-hash.js.map +1 -1
  139. package/dist/lib/bitcoin/sweep.d.ts +0 -30
  140. package/dist/lib/bitcoin/sweep.d.ts.map +1 -1
  141. package/dist/lib/bitcoin/sweep.js +11 -40
  142. package/dist/lib/bitcoin/sweep.js.map +1 -1
  143. package/dist/lib/bitcoin/tx-verify.d.ts +0 -28
  144. package/dist/lib/bitcoin/tx-verify.d.ts.map +1 -1
  145. package/dist/lib/bitcoin/tx-verify.js +20 -61
  146. package/dist/lib/bitcoin/tx-verify.js.map +1 -1
  147. package/dist/lib/bitcoin/wallet.d.ts +0 -38
  148. package/dist/lib/bitcoin/wallet.d.ts.map +1 -1
  149. package/dist/lib/bitcoin/wallet.js +13 -38
  150. package/dist/lib/bitcoin/wallet.js.map +1 -1
  151. package/dist/lib/crypto/bytes.d.ts +0 -14
  152. package/dist/lib/crypto/bytes.d.ts.map +1 -1
  153. package/dist/lib/crypto/bytes.js +5 -14
  154. package/dist/lib/crypto/bytes.js.map +1 -1
  155. package/dist/lib/crypto/errors.d.ts +0 -5
  156. package/dist/lib/crypto/errors.d.ts.map +1 -1
  157. package/dist/lib/crypto/errors.js +2 -5
  158. package/dist/lib/crypto/errors.js.map +1 -1
  159. package/dist/lib/crypto/libp2p-identity.d.ts +0 -15
  160. package/dist/lib/crypto/libp2p-identity.d.ts.map +1 -1
  161. package/dist/lib/crypto/libp2p-identity.js +16 -28
  162. package/dist/lib/crypto/libp2p-identity.js.map +1 -1
  163. package/dist/lib/crypto/mnemonic.d.ts +0 -9
  164. package/dist/lib/crypto/mnemonic.d.ts.map +1 -1
  165. package/dist/lib/crypto/mnemonic.js +11 -27
  166. package/dist/lib/crypto/mnemonic.js.map +1 -1
  167. package/dist/lib/crypto/platform.d.ts +0 -6
  168. package/dist/lib/crypto/platform.d.ts.map +1 -1
  169. package/dist/lib/crypto/platform.js +2 -6
  170. package/dist/lib/crypto/platform.js.map +1 -1
  171. package/dist/lib/crypto/scalars.d.ts +0 -23
  172. package/dist/lib/crypto/scalars.d.ts.map +1 -1
  173. package/dist/lib/crypto/scalars.js +10 -23
  174. package/dist/lib/crypto/scalars.js.map +1 -1
  175. package/dist/lib/crypto/types.d.ts +0 -4
  176. package/dist/lib/crypto/types.d.ts.map +1 -1
  177. package/dist/lib/crypto/wasm.d.ts +0 -23
  178. package/dist/lib/crypto/wasm.d.ts.map +1 -1
  179. package/dist/lib/crypto/wasm.js +9 -16
  180. package/dist/lib/crypto/wasm.js.map +1 -1
  181. package/dist/lib/default-config.d.ts +1 -59
  182. package/dist/lib/default-config.d.ts.map +1 -1
  183. package/dist/lib/default-config.js +22 -61
  184. package/dist/lib/default-config.js.map +1 -1
  185. package/dist/lib/errors.d.ts +0 -54
  186. package/dist/lib/errors.d.ts.map +1 -1
  187. package/dist/lib/errors.js +12 -35
  188. package/dist/lib/errors.js.map +1 -1
  189. package/dist/lib/keystore.d.ts +0 -24
  190. package/dist/lib/keystore.d.ts.map +1 -1
  191. package/dist/lib/keystore.js +3 -10
  192. package/dist/lib/keystore.js.map +1 -1
  193. package/dist/lib/monero/output-scanner.d.ts +0 -18
  194. package/dist/lib/monero/output-scanner.d.ts.map +1 -1
  195. package/dist/lib/monero/output-scanner.js +17 -40
  196. package/dist/lib/monero/output-scanner.js.map +1 -1
  197. package/dist/lib/monero/rpc.d.ts +0 -64
  198. package/dist/lib/monero/rpc.d.ts.map +1 -1
  199. package/dist/lib/monero/rpc.js +17 -59
  200. package/dist/lib/monero/rpc.js.map +1 -1
  201. package/dist/lib/monero/verify-lock.d.ts +0 -12
  202. package/dist/lib/monero/verify-lock.d.ts.map +1 -1
  203. package/dist/lib/monero/verify-lock.js +9 -24
  204. package/dist/lib/monero/verify-lock.js.map +1 -1
  205. package/dist/lib/monero/verify-sweep.d.ts +0 -20
  206. package/dist/lib/monero/verify-sweep.d.ts.map +1 -1
  207. package/dist/lib/monero/verify-sweep.js +7 -25
  208. package/dist/lib/monero/verify-sweep.js.map +1 -1
  209. package/dist/lib/pow-solver.d.ts.map +1 -1
  210. package/dist/lib/pow-solver.js +3 -8
  211. package/dist/lib/pow-solver.js.map +1 -1
  212. package/dist/lib/retry.d.ts +7 -64
  213. package/dist/lib/retry.d.ts.map +1 -1
  214. package/dist/lib/retry.js +13 -13
  215. package/dist/lib/retry.js.map +1 -1
  216. package/dist/portable.d.ts.map +1 -1
  217. package/dist/portable.js +3 -4
  218. package/dist/portable.js.map +1 -1
  219. package/dist/quote-binding.d.ts +0 -13
  220. package/dist/quote-binding.d.ts.map +1 -1
  221. package/dist/quote-binding.js +3 -18
  222. package/dist/quote-binding.js.map +1 -1
  223. package/dist/swap-executor.d.ts +1 -5
  224. package/dist/swap-executor.d.ts.map +1 -1
  225. package/dist/swap-executor.js +1 -1
  226. package/dist/swap-executor.js.map +1 -1
  227. package/dist/types/api.d.ts +0 -6
  228. package/dist/types/api.d.ts.map +1 -1
  229. package/dist/types/api.js +6 -9
  230. package/dist/types/api.js.map +1 -1
  231. package/dist/types/errors.d.ts +0 -7
  232. package/dist/types/errors.d.ts.map +1 -1
  233. package/dist/types/errors.js +2 -7
  234. package/dist/types/errors.js.map +1 -1
  235. package/dist/types/index.js +1 -1
  236. package/dist/types/index.js.map +1 -1
  237. package/dist/types/keys.d.ts +0 -15
  238. package/dist/types/keys.d.ts.map +1 -1
  239. package/dist/types/protocol.d.ts +0 -51
  240. package/dist/types/protocol.d.ts.map +1 -1
  241. package/dist/types/protocol.js +3 -8
  242. package/dist/types/protocol.js.map +1 -1
  243. package/dist/types/status.d.ts +2 -0
  244. package/dist/types/status.d.ts.map +1 -1
  245. package/dist/types/status.js +17 -14
  246. package/dist/types/status.js.map +1 -1
  247. package/dist/types/verification.d.ts +0 -10
  248. package/dist/types/verification.d.ts.map +1 -1
  249. package/dist/types/verification.js +7 -15
  250. package/dist/types/verification.js.map +1 -1
  251. package/dist/verification/chainflip-networks.d.ts +2 -35
  252. package/dist/verification/chainflip-networks.d.ts.map +1 -1
  253. package/dist/verification/chainflip-networks.js +12 -4
  254. package/dist/verification/chainflip-networks.js.map +1 -1
  255. package/dist/verification/chainflip.d.ts +0 -40
  256. package/dist/verification/chainflip.d.ts.map +1 -1
  257. package/dist/verification/chainflip.js +49 -129
  258. package/dist/verification/chainflip.js.map +1 -1
  259. package/dist/verification/constants.d.ts +0 -40
  260. package/dist/verification/constants.d.ts.map +1 -1
  261. package/dist/verification/constants.js +14 -40
  262. package/dist/verification/constants.js.map +1 -1
  263. package/dist/verification/index.d.ts +0 -26
  264. package/dist/verification/index.d.ts.map +1 -1
  265. package/dist/verification/index.js +8 -12
  266. package/dist/verification/index.js.map +1 -1
  267. package/dist/verification/memo.d.ts +0 -15
  268. package/dist/verification/memo.d.ts.map +1 -1
  269. package/dist/verification/memo.js +9 -27
  270. package/dist/verification/memo.js.map +1 -1
  271. package/dist/verification/near-intents.d.ts +0 -63
  272. package/dist/verification/near-intents.d.ts.map +1 -1
  273. package/dist/verification/near-intents.js +25 -67
  274. package/dist/verification/near-intents.js.map +1 -1
  275. package/dist/verification/rate-oracle.d.ts +0 -22
  276. package/dist/verification/rate-oracle.d.ts.map +1 -1
  277. package/dist/verification/rate-oracle.js +6 -11
  278. package/dist/verification/rate-oracle.js.map +1 -1
  279. package/dist/verification/thorchain-networks.d.ts +0 -27
  280. package/dist/verification/thorchain-networks.d.ts.map +1 -1
  281. package/dist/verification/thorchain-networks.js +13 -15
  282. package/dist/verification/thorchain-networks.js.map +1 -1
  283. package/dist/verification/thorchain.d.ts +0 -30
  284. package/dist/verification/thorchain.d.ts.map +1 -1
  285. package/dist/verification/thorchain.js +24 -47
  286. package/dist/verification/thorchain.js.map +1 -1
  287. package/dist/wasm-pins.d.ts +3 -3
  288. package/dist/wasm-pins.js +1 -1
  289. package/dist/wire/near-intents.zod.d.ts +0 -27
  290. package/dist/wire/near-intents.zod.d.ts.map +1 -1
  291. package/dist/wire/near-intents.zod.js +15 -23
  292. package/dist/wire/near-intents.zod.js.map +1 -1
  293. package/dist/wire/server/action.zod.d.ts +0 -10
  294. package/dist/wire/server/action.zod.d.ts.map +1 -1
  295. package/dist/wire/server/action.zod.js +8 -14
  296. package/dist/wire/server/action.zod.js.map +1 -1
  297. package/dist/wire/server/common.zod.d.ts +0 -13
  298. package/dist/wire/server/common.zod.d.ts.map +1 -1
  299. package/dist/wire/server/common.zod.js +6 -14
  300. package/dist/wire/server/common.zod.js.map +1 -1
  301. package/dist/wire/server/quotes.zod.d.ts +35 -20
  302. package/dist/wire/server/quotes.zod.d.ts.map +1 -1
  303. package/dist/wire/server/quotes.zod.js +1 -0
  304. package/dist/wire/server/quotes.zod.js.map +1 -1
  305. package/dist/wire/server/swap.zod.d.ts +0 -42
  306. package/dist/wire/server/swap.zod.d.ts.map +1 -1
  307. package/dist/wire/server/swap.zod.js +12 -26
  308. package/dist/wire/server/swap.zod.js.map +1 -1
  309. package/dist/wire/thorchain.zod.d.ts +0 -8
  310. package/dist/wire/thorchain.zod.d.ts.map +1 -1
  311. package/dist/wire/thorchain.zod.js +3 -8
  312. package/dist/wire/thorchain.zod.js.map +1 -1
  313. package/package.json +4 -4
  314. package/wasm/miradex-rust/README.md +3 -4
  315. package/wasm/miradex-rust/miradex_rust.d.ts +4 -6
  316. package/wasm/miradex-rust/miradex_rust.js +4 -6
  317. package/wasm/miradex-rust/miradex_rust_bg.wasm +0 -0
@@ -12,45 +12,15 @@ export interface SweepResult {
12
12
  readonly sendSats: number;
13
13
  readonly feeSats: number;
14
14
  }
15
- /**
16
- * Estimate the fee and output amount for a sweep transaction.
17
- *
18
- * Uses the same Electrum → mempool.space → fallback chain as lock tx fee.
19
- * Supports multiple UTXOs — fee scales with input count.
20
- */
21
15
  export declare function estimateSweep(deposit: DetectedDeposit, fromAddress: string, destAddress: string, network?: 'mainnet' | 'testnet' | 'regtest', fetchFn?: typeof globalThis.fetch, blockchain?: BlockchainDataProvider): Promise<SweepEstimate>;
22
- /**
23
- * Build and sign the sweep transaction. Returns raw hex ready for broadcast.
24
- *
25
- * Consolidates all UTXOs (via `deposit.utxos` or the single deposit itself)
26
- * into a single output to `destAddress`.
27
- */
28
16
  export declare function buildSweepTx(wif: string, deposit: DetectedDeposit, destAddress: string, sendSats: number, network?: 'mainnet' | 'testnet' | 'regtest'): string;
29
- /**
30
- * Broadcast a raw transaction via Electrum (primary) then mempool.space (fallback).
31
- */
32
17
  export declare function broadcastSweep(rawHex: string, network?: 'mainnet' | 'testnet' | 'regtest', fetchFn?: typeof globalThis.fetch, blockchain?: BlockchainDataProvider): Promise<string>;
33
- /**
34
- * Fetch the confirmed UTXO list for a BTC address from the injected
35
- * blockchain provider. Returns an empty array when the provider is absent or
36
- * no UTXOs exist.
37
- */
38
18
  export declare function listConfirmedUtxos(input: {
39
19
  readonly address: string;
40
20
  readonly network: 'mainnet' | 'testnet' | 'regtest';
41
21
  readonly blockchain?: BlockchainDataProvider;
42
22
  }): Promise<readonly Utxo[]>;
43
- /** Pick the UTXO that best represents the "primary" deposit (largest value). */
44
23
  export declare function pickPrimaryUtxo(utxos: readonly Utxo[]): Utxo | null;
45
- /**
46
- * Aggregate a UTXO list into a `DetectedDeposit` summary (sum of values, min
47
- * confirmations, primary UTXO). Throws `E_DEPOSIT_TOO_MANY_UTXOS` when the
48
- * list exceeds `MAX_DEPOSIT_UTXOS` (AV-A.20 dust-storm guard).
49
- */
50
24
  export declare function aggregateUtxosAsDeposit(utxos: readonly Utxo[]): DetectedDeposit | null;
51
- /**
52
- * Fetch all UTXOs for a BTC address and aggregate them into a
53
- * `DetectedDeposit`. Composes `listConfirmedUtxos` + `aggregateUtxosAsDeposit`.
54
- */
55
25
  export declare function fetchUtxo(address: string, network?: 'mainnet' | 'testnet' | 'regtest', blockchain?: BlockchainDataProvider): Promise<DetectedDeposit | null>;
56
26
  //# sourceMappingURL=sweep.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sweep.d.ts","sourceRoot":"","sources":["../../../src/lib/bitcoin/sweep.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,sBAAsB,CAAC;AAS/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAaD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,OAAO,GAAE,OAAO,UAAU,CAAC,KAAwB,EACnD,UAAU,CAAC,EAAE,sBAAsB,GAClC,OAAO,CAAC,aAAa,CAAC,CAaxB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,MAAM,CAqDR;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,OAAO,GAAE,OAAO,UAAU,CAAC,KAAwB,EACnD,UAAU,CAAC,EAAE,sBAAsB,GAClC,OAAO,CAAC,MAAM,CAAC,CASjB;AAkCD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC;CAC9C,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAQ3B;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAGnE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,eAAe,GAAG,IAAI,CAyBtF;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,UAAU,CAAC,EAAE,sBAAsB,GAClC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQjC"}
1
+ {"version":3,"file":"sweep.d.ts","sourceRoot":"","sources":["../../../src/lib/bitcoin/sweep.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,sBAAsB,CAAC;AAS/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAYD,wBAAsB,aAAa,CACjC,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,OAAO,GAAE,OAAO,UAAU,CAAC,KAAwB,EACnD,UAAU,CAAC,EAAE,sBAAsB,GAClC,OAAO,CAAC,aAAa,CAAC,CAaxB;AAID,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,MAAM,CAqDR;AAGD,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,OAAO,GAAE,OAAO,UAAU,CAAC,KAAwB,EACnD,UAAU,CAAC,EAAE,sBAAsB,GAClC,OAAO,CAAC,MAAM,CAAC,CAMjB;AAmCD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC;CAC9C,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAQ3B;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAGnE;AAGD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,eAAe,GAAG,IAAI,CAyBtF;AAGD,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,UAAU,CAAC,EAAE,sBAAsB,GAClC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQjC"}
@@ -1,28 +1,18 @@
1
- /**
2
- * Build, sign, and broadcast a sweep transaction from a keystore UTXO.
3
- *
4
- * Sends the entire UTXO balance (minus fee) to a user-specified destination.
5
- */
1
+ // Sweep keystore UTXO(s) to a user-specified destination, full balance minus fee.
6
2
  import * as bitcoin from 'bitcoinjs-lib';
7
3
  import { walletFromWif } from './wallet.js';
8
4
  import { addressToScriptHash } from './script-hash.js';
9
5
  import { estimateLockTxFee } from './deposit-watcher.js';
10
6
  import { MEMPOOL_API, MEMPOOL_TESTNET_API, MAX_DEPOSIT_UTXOS, BROADCAST_TIMEOUT_MS, } from '../default-config.js';
11
7
  import { VerificationError, DEFAULT_DUST_POLICY } from '../../types/index.js';
12
- /** P2WPKH input weight in vbytes. */
13
8
  const P2WPKH_INPUT_VBYTES = 68;
14
- /** Transaction overhead + single P2WPKH output in vbytes. */
9
+ // Tx overhead + single P2WPKH output.
15
10
  const TX_OVERHEAD_VBYTES = 42;
16
- /** Estimate vbytes for a P2WPKH sweep with N inputs and 1 output. */
17
11
  function estimateSweepVbytes(inputCount) {
18
12
  return P2WPKH_INPUT_VBYTES * inputCount + TX_OVERHEAD_VBYTES;
19
13
  }
20
- /**
21
- * Estimate the fee and output amount for a sweep transaction.
22
- *
23
- * Uses the same Electrum → mempool.space → fallback chain as lock tx fee.
24
- * Supports multiple UTXOs — fee scales with input count.
25
- */
14
+ // Same Electrum -> mempool.space -> fallback chain as the lock-tx fee path.
15
+ // Fee scales with input count.
26
16
  export async function estimateSweep(deposit, fromAddress, destAddress, network = 'mainnet', fetchFn = globalThis.fetch, blockchain) {
27
17
  const { feeRate } = await estimateLockTxFee({ network, fetchFn, blockchain });
28
18
  const inputCount = deposit.utxos ? deposit.utxos.length : 1;
@@ -33,12 +23,8 @@ export async function estimateSweep(deposit, fromAddress, destAddress, network =
33
23
  }
34
24
  return { sendSats, feeSats, feeRate, destAddress, fromAddress };
35
25
  }
36
- /**
37
- * Build and sign the sweep transaction. Returns raw hex ready for broadcast.
38
- *
39
- * Consolidates all UTXOs (via `deposit.utxos` or the single deposit itself)
40
- * into a single output to `destAddress`.
41
- */
26
+ // Consolidates all UTXOs (deposit.utxos or the deposit itself) into one
27
+ // output to destAddress. Returns raw hex ready to broadcast.
42
28
  export function buildSweepTx(wif, deposit, destAddress, sendSats, network = 'mainnet') {
43
29
  const net = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
44
30
  try {
@@ -80,17 +66,13 @@ export function buildSweepTx(wif, deposit, destAddress, sendSats, network = 'mai
80
66
  psbt.finalizeAllInputs();
81
67
  return psbt.extractTransaction().toHex();
82
68
  }
83
- /**
84
- * Broadcast a raw transaction via Electrum (primary) then mempool.space (fallback).
85
- */
69
+ // Electrum primary, mempool.space fallback.
86
70
  export async function broadcastSweep(rawHex, network = 'mainnet', fetchFn = globalThis.fetch, blockchain) {
87
- // Try blockchain provider
88
71
  if (blockchain) {
89
72
  const txid = await broadcastViaProvider(rawHex, blockchain);
90
73
  if (txid)
91
74
  return txid;
92
75
  }
93
- // Fallback to mempool.space
94
76
  return broadcastViaMempool(rawHex, network, fetchFn);
95
77
  }
96
78
  async function broadcastViaProvider(rawHex, blockchain) {
@@ -115,11 +97,7 @@ async function broadcastViaMempool(rawHex, network, fetchFn) {
115
97
  }
116
98
  return (await res.text()).trim();
117
99
  }
118
- /**
119
- * Fetch the confirmed UTXO list for a BTC address from the injected
120
- * blockchain provider. Returns an empty array when the provider is absent or
121
- * no UTXOs exist.
122
- */
100
+ // Empty array when the provider is absent or there are no UTXOs.
123
101
  export async function listConfirmedUtxos(input) {
124
102
  if (!input.blockchain)
125
103
  return [];
@@ -131,17 +109,13 @@ export async function listConfirmedUtxos(input) {
131
109
  return [];
132
110
  }
133
111
  }
134
- /** Pick the UTXO that best represents the "primary" deposit (largest value). */
112
+ // Largest-value UTXO is "primary" for display.
135
113
  export function pickPrimaryUtxo(utxos) {
136
114
  if (utxos.length === 0)
137
115
  return null;
138
116
  return utxos.reduce((best, u) => (u.value > best.value ? u : best));
139
117
  }
140
- /**
141
- * Aggregate a UTXO list into a `DetectedDeposit` summary (sum of values, min
142
- * confirmations, primary UTXO). Throws `E_DEPOSIT_TOO_MANY_UTXOS` when the
143
- * list exceeds `MAX_DEPOSIT_UTXOS` (AV-A.20 dust-storm guard).
144
- */
118
+ // AV-A.20: throws E_DEPOSIT_TOO_MANY_UTXOS above MAX_DEPOSIT_UTXOS.
145
119
  export function aggregateUtxosAsDeposit(utxos) {
146
120
  if (utxos.length === 0)
147
121
  return null;
@@ -167,10 +141,7 @@ export function aggregateUtxosAsDeposit(utxos) {
167
141
  })),
168
142
  };
169
143
  }
170
- /**
171
- * Fetch all UTXOs for a BTC address and aggregate them into a
172
- * `DetectedDeposit`. Composes `listConfirmedUtxos` + `aggregateUtxosAsDeposit`.
173
- */
144
+ // Composes listConfirmedUtxos + aggregateUtxosAsDeposit.
174
145
  export async function fetchUtxo(address, network = 'mainnet', blockchain) {
175
146
  const utxos = await listConfirmedUtxos({ address, network, blockchain });
176
147
  if (utxos.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../../src/lib/bitcoin/sweep.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAwB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAgB9E,qCAAqC;AACrC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,6DAA6D;AAC7D,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,qEAAqE;AACrE,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,OAAO,mBAAmB,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAwB,EACxB,WAAmB,EACnB,WAAmB,EACnB,UAA6C,SAAS,EACtD,UAAmC,UAAU,CAAC,KAAK,EACnD,UAAmC;IAEnC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;IAEzC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,UAAU,CAC3F,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAW,EACX,OAAwB,EACxB,WAAmB,EACnB,QAAgB,EAChB,UAA6C,SAAS;IAEtD,MAAM,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7I,IAAI,CAAC;QAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAAC,CAAC;IACzD,MAAM,CAAC;QACL,MAAM,IAAI,iBAAiB,CACzB,qBAAqB,EACrB,eAAe,WAAW,mBAAmB,OAAO,EAAE,CACvD,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACtC,MAAM,IAAI,iBAAiB,CACzB,0BAA0B,EAC1B,iBAAiB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,MAAM,CAAC,iBAAiB,CAAC,+BAA+B,CAC/G,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,cAAc,EAAE,CAAC;QAC1D,MAAM,IAAI,iBAAiB,CACzB,cAAc,EACd,gBAAgB,MAAM,CAAC,QAAQ,CAAC,qBAAqB,mBAAmB,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CACrG,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7C,OAAO,EAAE,GAAG;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAEtE,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEhD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,WAAW,EAAE;gBACX,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aAC1B;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;KACxB,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAEzB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,UAA6C,SAAS,EACtD,UAAmC,UAAU,CAAC,KAAK,EACnD,UAAmC;IAEnC,0BAA0B;IAC1B,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IAED,4BAA4B;IAC5B,OAAO,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,MAAc,EACd,UAAkC;IAElC,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,MAAc,EACd,OAA0C,EAC1C,OAAgC;IAEhC,MAAM,OAAO,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC1E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE;QACzC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;QACzC,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC;KAClD,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAIxC;IACC,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrE,OAAO,MAAM,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAAC,KAAsB;IACpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAsB;IAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACrC,MAAM,IAAI,iBAAiB,CACzB,0BAA0B,EAC1B,iBAAiB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,MAAM,CAAC,iBAAiB,CAAC,+BAA+B,CAC9G,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC;IAC5D,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,UAAU;QACjB,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;QAC5C,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC;SACtB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAe,EACf,UAA6C,SAAS,EACtD,UAAmC;IAEnC,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../../src/lib/bitcoin/sweep.ts"],"names":[],"mappings":"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"}
@@ -9,35 +9,7 @@ export interface TxCancelVerification {
9
9
  /** Block height at which TxCancel confirmed, present on the success path. */
10
10
  readonly blockHeight?: number;
11
11
  }
12
- /**
13
- * Verify a TxCancel transaction on-chain before sharing s_b.
14
- *
15
- * @param blockchain Connected blockchain data provider
16
- * @param txCancelTxid Transaction ID from the server's cancel response
17
- * @param txCancelHex Raw transaction hex from the server
18
- * @param lockAddress The P2WSH lock address our BTC was funded to
19
- * @param network Bitcoin network
20
- */
21
12
  export declare function verifyTxCancel(blockchain: BlockchainDataProvider, txCancelTxid: string, txCancelHex: string, lockAddress: string, network: 'mainnet' | 'testnet' | 'regtest'): Promise<TxCancelVerification>;
22
- /**
23
- * Additional check: verify the lock address has been spent (no remaining UTXOs).
24
- * This is a secondary confirmation that TxCancel actually consumed the locked funds.
25
- */
26
13
  export declare function verifyLockAddressSpent(blockchain: BlockchainDataProvider, lockAddress: string, network: 'mainnet' | 'testnet' | 'regtest'): Promise<boolean>;
27
- /**
28
- * Discover and verify TxCancel entirely from on-chain data.
29
- *
30
- * Zero server trust — finds TxCancel by querying the lock address's transaction
31
- * history via Electrum. The lock address will have exactly 2 transactions:
32
- * TxLock (the deposit) and TxCancel (the spend).
33
- *
34
- * If depositTxid is known, we filter it out. If not, we identify TxCancel by
35
- * checking which transaction spends FROM the lock address (has it as an input).
36
- *
37
- * @param blockchain Connected blockchain data provider
38
- * @param lockAddress The P2WSH lock address
39
- * @param depositTxid The known deposit (TxLock) txid, or empty string if unknown
40
- * @param network Bitcoin network
41
- */
42
14
  export declare function discoverAndVerifyTxCancel(blockchain: BlockchainDataProvider, lockAddress: string, depositTxid: string, network: 'mainnet' | 'testnet' | 'regtest'): Promise<TxCancelVerification>;
43
15
  //# sourceMappingURL=tx-verify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tx-verify.d.ts","sourceRoot":"","sources":["../../../src/lib/bitcoin/tx-verify.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAI7E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,sBAAsB,EAClC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GACzC,OAAO,CAAC,oBAAoB,CAAC,CAuC/B;AAsDD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,sBAAsB,EAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GACzC,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,sBAAsB,EAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GACzC,OAAO,CAAC,oBAAoB,CAAC,CA6E/B"}
1
+ {"version":3,"file":"tx-verify.d.ts","sourceRoot":"","sources":["../../../src/lib/bitcoin/tx-verify.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAI7E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,sBAAsB,EAClC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GACzC,OAAO,CAAC,oBAAoB,CAAC,CAuC/B;AA6CD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,sBAAsB,EAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GACzC,OAAO,CAAC,OAAO,CAAC,CAQlB;AAKD,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,sBAAsB,EAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GACzC,OAAO,CAAC,oBAAoB,CAAC,CA2E/B"}
@@ -1,29 +1,15 @@
1
- /**
2
- * Independent on-chain verification of TxCancel before sharing s_b.
3
- *
4
- * Prevents the collusion attack where the server lies about TxCancel being
5
- * confirmed in order to trick the client into revealing s_b. If s_b is leaked
6
- * without a confirmed TxCancel, the maker can combine s_a + s_b to sweep
7
- * the XMR while keeping the BTC locked (punishing the client).
8
- *
9
- * Verification steps:
10
- * 1. Fetch raw tx from Electrum independently (not from the server)
11
- * 2. Confirm the server's hex matches the on-chain hex
12
- * 3. Decode the tx and verify it spends from our known lock address
13
- * 4. Confirm the tx is included in a block (height > 0)
14
- */
1
+ // Verify TxCancel on-chain before sharing s_b. Without this, a server lying
2
+ // about a confirmed TxCancel can trick us into leaking s_b; the maker then
3
+ // combines s_a + s_b to sweep XMR while leaving BTC locked.
4
+ //
5
+ // Steps:
6
+ // 1. fetch raw tx from Electrum independently
7
+ // 2. confirm server-supplied hex matches on-chain hex
8
+ // 3. decode + verify the tx spends from the known lock address
9
+ // 4. confirm block inclusion (height > 0)
15
10
  import * as bitcoin from 'bitcoinjs-lib';
16
11
  import { addressToScriptHash } from './script-hash.js';
17
12
  import { uint8ArrayEquals } from '../crypto/bytes.js';
18
- /**
19
- * Verify a TxCancel transaction on-chain before sharing s_b.
20
- *
21
- * @param blockchain Connected blockchain data provider
22
- * @param txCancelTxid Transaction ID from the server's cancel response
23
- * @param txCancelHex Raw transaction hex from the server
24
- * @param lockAddress The P2WSH lock address our BTC was funded to
25
- * @param network Bitcoin network
26
- */
27
13
  export async function verifyTxCancel(blockchain, txCancelTxid, txCancelHex, lockAddress, network) {
28
14
  const onChainHex = await blockchain.getTransaction(txCancelTxid);
29
15
  if (!onChainHex) {
@@ -59,33 +45,22 @@ export async function verifyTxCancel(blockchain, txCancelTxid, txCancelHex, lock
59
45
  blockHeight: height,
60
46
  };
61
47
  }
62
- /**
63
- * Decode a raw Bitcoin transaction and check that at least one input
64
- * spends from the given address (the P2WSH lock address).
65
- *
66
- * For P2WSH inputs, the previous output script is not directly in the tx.
67
- * Instead, we verify using the script hash of the lock address against
68
- * the Electrum UTXO list. As a belt-and-suspenders check, we also verify
69
- * the lock address has no remaining UTXOs (the TxCancel spent them).
70
- */
48
+ // P2WSH inputs don't carry the previous output script. Re-derive the
49
+ // P2WSH from the witness script (last witness element) and compare to the
50
+ // lock address scriptPubKey.
71
51
  function verifyTxSpendsFromAddress(rawHex, lockAddress, network) {
72
52
  try {
73
53
  const tx = bitcoin.Transaction.fromHex(rawHex);
74
54
  const btcNetwork = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
75
- // For P2WSH, the witness script's last push is the redeem script.
76
- // We can derive the expected scriptPubKey from the lock address and compare.
77
55
  const expectedOutput = bitcoin.address.toOutputScript(lockAddress, btcNetwork);
78
- // In the atomic swap protocol, TxCancel spends the TxLock output which
79
- // was sent to the P2WSH lock address. The witness contains the redeem script
80
- // as the last element; hashing it with OP_0 <SHA256> gives us the scriptPubKey.
56
+ // For each input, the last witness element is the witness script for
57
+ // P2WSH. Re-derive its P2WSH scriptPubKey and compare to the lock.
81
58
  for (const input of tx.ins) {
82
59
  if (!input.witness || input.witness.length === 0)
83
60
  continue;
84
- // The last witness element for P2WSH is the witness script
85
61
  const witnessScript = input.witness[input.witness.length - 1];
86
62
  if (!witnessScript || witnessScript.length === 0)
87
63
  continue;
88
- // Derive P2WSH scriptPubKey from the witness script
89
64
  const p2wsh = bitcoin.payments.p2wsh({
90
65
  redeem: { output: witnessScript },
91
66
  network: btcNetwork,
@@ -101,10 +76,8 @@ function verifyTxSpendsFromAddress(rawHex, lockAddress, network) {
101
76
  return false;
102
77
  }
103
78
  }
104
- /**
105
- * Additional check: verify the lock address has been spent (no remaining UTXOs).
106
- * This is a secondary confirmation that TxCancel actually consumed the locked funds.
107
- */
79
+ // Belt-and-suspenders: confirm the lock address has no remaining UTXOs
80
+ // (the TxCancel actually consumed them).
108
81
  export async function verifyLockAddressSpent(blockchain, lockAddress, network) {
109
82
  try {
110
83
  const scriptHash = addressToScriptHash(lockAddress, network);
@@ -115,21 +88,9 @@ export async function verifyLockAddressSpent(blockchain, lockAddress, network) {
115
88
  return false;
116
89
  }
117
90
  }
118
- /**
119
- * Discover and verify TxCancel entirely from on-chain data.
120
- *
121
- * Zero server trust — finds TxCancel by querying the lock address's transaction
122
- * history via Electrum. The lock address will have exactly 2 transactions:
123
- * TxLock (the deposit) and TxCancel (the spend).
124
- *
125
- * If depositTxid is known, we filter it out. If not, we identify TxCancel by
126
- * checking which transaction spends FROM the lock address (has it as an input).
127
- *
128
- * @param blockchain Connected blockchain data provider
129
- * @param lockAddress The P2WSH lock address
130
- * @param depositTxid The known deposit (TxLock) txid, or empty string if unknown
131
- * @param network Bitcoin network
132
- */
91
+ // Zero server trust: discover TxCancel by querying the lock address's
92
+ // Electrum history. The address has exactly 2 txs (TxLock + TxCancel); filter
93
+ // out the known depositTxid, otherwise find the tx that spends FROM the lock.
133
94
  export async function discoverAndVerifyTxCancel(blockchain, lockAddress, depositTxid, network) {
134
95
  const scriptHash = addressToScriptHash(lockAddress, network);
135
96
  const history = await blockchain.getHistory(scriptHash);
@@ -139,8 +100,6 @@ export async function discoverAndVerifyTxCancel(blockchain, lockAddress, deposit
139
100
  reason: `Lock address has ${String(history.length)} transaction(s) — TxCancel not yet broadcast`,
140
101
  };
141
102
  }
142
- // Strategy A: If we know the deposit txid, filter it out
143
- // Strategy B: If we don't, check each tx to find the one that spends FROM the lock address
144
103
  let cancelTxid = '';
145
104
  let cancelHeight = 0;
146
105
  if (depositTxid) {
@@ -150,7 +109,7 @@ export async function discoverAndVerifyTxCancel(blockchain, lockAddress, deposit
150
109
  cancelHeight = cancelEntry.height;
151
110
  }
152
111
  }
153
- // Fallback: iterate history and find the tx that spends from the lock address
112
+ // No depositTxid: scan history for the tx that spends from the lock.
154
113
  if (!cancelTxid) {
155
114
  for (const entry of history) {
156
115
  const hex = await blockchain.getTransaction(entry.tx_hash);
@@ -1 +1 @@
1
- {"version":3,"file":"tx-verify.js","sourceRoot":"","sources":["../../../src/lib/bitcoin/tx-verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tx-verify.js","sourceRoot":"","sources":["../../../src/lib/bitcoin/tx-verify.ts"],"names":[],"mappings":"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"}
@@ -5,23 +5,8 @@ export interface TempBtcWallet {
5
5
  readonly publicKey: Buffer;
6
6
  readonly wif: string;
7
7
  }
8
- /**
9
- * Create an ephemeral P2WPKH wallet. The private key is held in memory only
10
- * and must be persisted via `createKeystore` if the caller needs to resume.
11
- */
12
8
  export declare function createTempWallet(network?: 'mainnet' | 'testnet' | 'regtest'): TempBtcWallet;
13
- /**
14
- * Sign every input of a PSBT with the wallet's key pair and finalise.
15
- * Returns the base64-encoded signed PSBT.
16
- */
17
9
  export declare function signPsbt(psbtBase64: string, wallet: TempBtcWallet, network?: 'mainnet' | 'testnet' | 'regtest'): string;
18
- /**
19
- * Identity of the lock transaction derivable from an unsigned PSBT.
20
- *
21
- * Segwit txid is invariant to signing — it's hash(version, inputs, outputs,
22
- * locktime) without witnesses — so callers can trust this matches what the
23
- * sidecar will broadcast after `signFundingPsbt`.
24
- */
25
10
  export interface UnsignedFundingPsbt {
26
11
  /** Base64-encoded UNSIGNED PSBT, ready to send to the sidecar in /presigs. */
27
12
  readonly psbtBase64: string;
@@ -32,40 +17,17 @@ export interface UnsignedFundingPsbt {
32
17
  /** Lock-output value in satoshis. */
33
18
  readonly amountSats: number;
34
19
  }
35
- /**
36
- * Build an UNSIGNED PSBT that pays from the wallet's UTXOs to a lock address.
37
- *
38
- * Returns the unsigned PSBT plus the deterministic txid+vout+value the sidecar
39
- * uses to drive the libp2p protocol's Message2/3 with Alice. Sign later with
40
- * `signFundingPsbt` once the encsig has been received and a snapshot persisted.
41
- *
42
- * @param lockAmountSats — Exact output amount the protocol negotiated. MUST
43
- * match what Alice expects in Message2; mismatches cause rejection. When
44
- * omitted, falls back to the total UTXO value (zero mining fee — testing only).
45
- */
46
20
  export declare function buildUnsignedFundingPsbt(wallet: TempBtcWallet, utxos: readonly {
47
21
  readonly txid: string;
48
22
  readonly vout: number;
49
23
  readonly value: number;
50
24
  }[], lockAddress: string, network?: 'mainnet' | 'testnet' | 'regtest', lockAmountSats?: number): UnsignedFundingPsbt;
51
- /**
52
- * Sign a previously-built unsigned funding PSBT. Returns the base64 of the
53
- * fully-signed, finalized PSBT, ready to broadcast (or to forward to the
54
- * sidecar's /fund endpoint).
55
- */
56
25
  export declare function signFundingPsbt(unsignedPsbtBase64: string, wallet: TempBtcWallet, network?: 'mainnet' | 'testnet' | 'regtest'): string;
57
- /**
58
- * Backwards-compatible build+sign in one call. Prefer `buildUnsignedFundingPsbt`
59
- * + `signFundingPsbt` so the snapshot can be written between the two steps.
60
- */
61
26
  export declare function buildAndSignFundingPsbt(wallet: TempBtcWallet, utxos: readonly {
62
27
  readonly txid: string;
63
28
  readonly vout: number;
64
29
  readonly value: number;
65
30
  }[], lockAddress: string, network?: 'mainnet' | 'testnet' | 'regtest', lockAmountSats?: number): string;
66
- /**
67
- * Recover a wallet instance from a WIF-encoded private key.
68
- */
69
31
  export declare function walletFromWif(wif: string, network?: 'mainnet' | 'testnet' | 'regtest'): TempBtcWallet;
70
32
  export {};
71
33
  //# sourceMappingURL=wallet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/lib/bitcoin/wallet.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,KAAqB,CAAC;AAElC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GAAG,aAAa,CAiBtG;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,MAAM,CAQR;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1F,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,cAAc,CAAC,EAAE,MAAM,GACtB,mBAAmB,CA6DrB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1F,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,aAAa,CAiBf"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/lib/bitcoin/wallet.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,KAAqB,CAAC;AAElC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GAAG,aAAa,CAiBtG;AAGD,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,MAAM,CAQR;AAID,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAMD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1F,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,cAAc,CAAC,EAAE,MAAM,GACtB,mBAAmB,CA4DrB;AAGD,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,MAAM,CAER;AAID,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1F,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAGR;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,aAAa,CAiBf"}
@@ -1,17 +1,12 @@
1
- /**
2
- * Ephemeral P2WPKH wallet for atomic swap lock transactions.
3
- * Keys are generated in-memory and persisted only via the keystore file.
4
- */
1
+ // Ephemeral P2WPKH wallet for the atomic-swap lock tx; keys live in memory
2
+ // only and persist via the keystore file.
5
3
  import * as bitcoin from 'bitcoinjs-lib';
6
4
  import { ECPairFactory } from 'ecpair';
7
5
  import * as ecc from 'tiny-secp256k1';
8
6
  import { VerificationError } from '../../types/index.js';
9
7
  bitcoin.initEccLib(ecc);
10
8
  const ECPair = ECPairFactory(ecc);
11
- /**
12
- * Create an ephemeral P2WPKH wallet. The private key is held in memory only
13
- * and must be persisted via `createKeystore` if the caller needs to resume.
14
- */
9
+ // Persist via createKeystore if the caller needs resume.
15
10
  export function createTempWallet(network = 'mainnet') {
16
11
  const net = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
17
12
  const keyPair = ECPair.makeRandom({ network: net });
@@ -28,10 +23,7 @@ export function createTempWallet(network = 'mainnet') {
28
23
  wif: keyPair.toWIF(),
29
24
  };
30
25
  }
31
- /**
32
- * Sign every input of a PSBT with the wallet's key pair and finalise.
33
- * Returns the base64-encoded signed PSBT.
34
- */
26
+ // Sign every input with the wallet's keypair, finalise, return base64.
35
27
  export function signPsbt(psbtBase64, wallet, network = 'mainnet') {
36
28
  const net = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
37
29
  const psbt = bitcoin.Psbt.fromBase64(psbtBase64, { network: net });
@@ -39,17 +31,10 @@ export function signPsbt(psbtBase64, wallet, network = 'mainnet') {
39
31
  psbt.finalizeAllInputs();
40
32
  return psbt.toBase64();
41
33
  }
42
- /**
43
- * Build an UNSIGNED PSBT that pays from the wallet's UTXOs to a lock address.
44
- *
45
- * Returns the unsigned PSBT plus the deterministic txid+vout+value the sidecar
46
- * uses to drive the libp2p protocol's Message2/3 with Alice. Sign later with
47
- * `signFundingPsbt` once the encsig has been received and a snapshot persisted.
48
- *
49
- * @param lockAmountSats — Exact output amount the protocol negotiated. MUST
50
- * match what Alice expects in Message2; mismatches cause rejection. When
51
- * omitted, falls back to the total UTXO value (zero mining fee — testing only).
52
- */
34
+ // Build an unsigned PSBT paying from the wallet's UTXOs to lockAddress.
35
+ // Returns the deterministic txid+vout+value the sidecar uses for Message2/3.
36
+ // Sign later with signFundingPsbt, after encsig + snapshot.
37
+ // lockAmountSats MUST match Message2; omitted = full UTXO value (testing only).
53
38
  export function buildUnsignedFundingPsbt(wallet, utxos, lockAddress, network = 'mainnet', lockAmountSats) {
54
39
  if (utxos.length === 0)
55
40
  throw new Error('At least one UTXO is required');
@@ -83,9 +68,8 @@ export function buildUnsignedFundingPsbt(wallet, utxos, lockAddress, network = '
83
68
  address: lockAddress,
84
69
  value: BigInt(outputSats),
85
70
  });
86
- // Read txid from the unsigned tx; segwit txid is fixed once inputs/outputs
87
- // are set. bitcoinjs-lib doesn't expose an unsigned-Transaction accessor on
88
- // Psbt, so reconstruct one from the public input/output lists.
71
+ // Segwit txid is fixed once inputs/outputs are set, but bitcoinjs-lib
72
+ // doesn't expose an unsigned-tx accessor on Psbt. Rebuild manually.
89
73
  const tx = new bitcoin.Transaction();
90
74
  tx.version = 2;
91
75
  tx.locktime = 0;
@@ -103,25 +87,16 @@ export function buildUnsignedFundingPsbt(wallet, utxos, lockAddress, network = '
103
87
  amountSats: outputSats,
104
88
  };
105
89
  }
106
- /**
107
- * Sign a previously-built unsigned funding PSBT. Returns the base64 of the
108
- * fully-signed, finalized PSBT, ready to broadcast (or to forward to the
109
- * sidecar's /fund endpoint).
110
- */
90
+ // Returns base64 of the fully-signed PSBT, ready to broadcast or POST /fund.
111
91
  export function signFundingPsbt(unsignedPsbtBase64, wallet, network = 'mainnet') {
112
92
  return signPsbt(unsignedPsbtBase64, wallet, network);
113
93
  }
114
- /**
115
- * Backwards-compatible build+sign in one call. Prefer `buildUnsignedFundingPsbt`
116
- * + `signFundingPsbt` so the snapshot can be written between the two steps.
117
- */
94
+ // Back-compat helper. Prefer build + sign separately so the snapshot can
95
+ // be written between the two.
118
96
  export function buildAndSignFundingPsbt(wallet, utxos, lockAddress, network = 'mainnet', lockAmountSats) {
119
97
  const unsigned = buildUnsignedFundingPsbt(wallet, utxos, lockAddress, network, lockAmountSats);
120
98
  return signFundingPsbt(unsigned.psbtBase64, wallet, network);
121
99
  }
122
- /**
123
- * Recover a wallet instance from a WIF-encoded private key.
124
- */
125
100
  export function walletFromWif(wif, network = 'mainnet') {
126
101
  const net = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
127
102
  const keyPair = ECPair.fromWIF(wif, net);
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/lib/bitcoin/wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/lib/bitcoin/wallet.ts"],"names":[],"mappings":"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"}
@@ -2,20 +2,6 @@ import { bytesToHex as toHex, hexToBytes as fromHex } from '@noble/hashes/utils.
2
2
  export { toHex as bytesToHex, fromHex as hexToBytes };
3
3
  /** Byte-wise equality for two `Uint8Array`s of any length. */
4
4
  export declare function uint8ArrayEquals(a: Uint8Array, b: Uint8Array): boolean;
5
- /**
6
- * Constant-time equality over two equal-length hex strings. Canonical
7
- * comparator for hex-encoded bytes in the client; used for digest, pubkey, and
8
- * txid equality checks.
9
- *
10
- * @remarks Hex itself is not secret at the boundaries this function is used
11
- * today, but keeping one comparator avoids footguns when future code compares
12
- * a secret-dependent hex value.
13
- */
14
5
  export declare function constantTimeEqualHex(a: string, b: string): boolean;
15
- /**
16
- * Zero-fill a buffer holding secret bytes. Best-effort; V8 may copy buffers
17
- * internally, so this is a defence-in-depth mechanism alongside minimising
18
- * secret lifetime (AV-G.2).
19
- */
20
6
  export declare function wipe(buf: Uint8Array): void;
21
7
  //# sourceMappingURL=bytes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,OAAO,IAAI,UAAU,EAAE,CAAC;AAEtD,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAMtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAOlE;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAE1C"}
1
+ {"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,OAAO,IAAI,UAAU,EAAE,CAAC;AAEtD,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAMtE;AAKD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAOlE;AAID,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAE1C"}