@atomicfinance/bitcoin-dlc-provider 4.0.0 → 4.0.1

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 (802) hide show
  1. package/.turbo/turbo-lint.log +1 -0
  2. package/.yalc/@node-dlc/bitcoin/.nyc_output/982e80bf-a70c-452f-b63d-d749ae385531.json +1 -0
  3. package/.yalc/@node-dlc/bitcoin/.nyc_output/processinfo/982e80bf-a70c-452f-b63d-d749ae385531.json +1 -0
  4. package/.yalc/@node-dlc/bitcoin/.nyc_output/processinfo/index.json +1 -0
  5. package/.yalc/@node-dlc/bitcoin/README.md +11 -0
  6. package/.yalc/@node-dlc/bitcoin/__tests__/bitcoin/amount.spec.ts +330 -0
  7. package/.yalc/@node-dlc/bitcoin/__tests__/bitcoin/value.spec.ts +320 -0
  8. package/.yalc/@node-dlc/bitcoin/__tests__/tsconfig.json +8 -0
  9. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Amount.ts.html +290 -0
  10. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Base58.ts.html +269 -0
  11. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Base58Check.ts.html +182 -0
  12. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/BitcoinError.ts.html +173 -0
  13. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/BitcoinErrorCode.ts.html +110 -0
  14. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/HashByteOrder.ts.html +143 -0
  15. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/HashValue.ts.html +350 -0
  16. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/LexicographicalSorters.ts.html +191 -0
  17. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/LockTime.ts.html +386 -0
  18. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/OpCodes.ts.html +437 -0
  19. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/OutPoint.ts.html +383 -0
  20. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Script.ts.html +1607 -0
  21. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Sequence.ts.html +713 -0
  22. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/SigHashType.ts.html +137 -0
  23. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Stack.ts.html +323 -0
  24. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TimeLockMode.ts.html +128 -0
  25. package/.yalc/@node-dlc/{messaging/coverage/lcov-report/lib/serde/SerdeUtils.ts.html → bitcoin/coverage/lcov-report/Tx.ts.html} +617 -491
  26. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TxBuilder.ts.html +971 -0
  27. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TxIn.ts.html +425 -0
  28. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TxOut.ts.html +341 -0
  29. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Value.ts.html +683 -0
  30. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Wif.ts.html +311 -0
  31. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Witness.ts.html +275 -0
  32. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/base.css +224 -0
  33. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/block-navigation.js +79 -0
  34. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/favicon.png +0 -0
  35. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/index.html +126 -0
  36. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/index.ts.html +164 -0
  37. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/prettify.css +1 -0
  38. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/prettify.js +2 -0
  39. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  40. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/sorter.js +170 -0
  41. package/.yalc/@node-dlc/bitcoin/coverage/lcov.info +123 -0
  42. package/.yalc/@node-dlc/bitcoin/dist/Amount.d.ts +48 -0
  43. package/.yalc/@node-dlc/bitcoin/dist/Amount.js +68 -0
  44. package/.yalc/@node-dlc/bitcoin/dist/Amount.js.map +1 -0
  45. package/.yalc/@node-dlc/bitcoin/dist/Base58.d.ts +22 -0
  46. package/.yalc/@node-dlc/bitcoin/dist/Base58.js +62 -0
  47. package/.yalc/@node-dlc/bitcoin/dist/Base58.js.map +1 -0
  48. package/.yalc/@node-dlc/bitcoin/dist/Base58Check.d.ts +14 -0
  49. package/.yalc/@node-dlc/bitcoin/dist/Base58Check.js +36 -0
  50. package/.yalc/@node-dlc/bitcoin/dist/Base58Check.js.map +1 -0
  51. package/.yalc/@node-dlc/bitcoin/dist/BitcoinError.d.ts +6 -0
  52. package/.yalc/@node-dlc/bitcoin/dist/BitcoinError.js +36 -0
  53. package/.yalc/@node-dlc/bitcoin/dist/BitcoinError.js.map +1 -0
  54. package/.yalc/@node-dlc/bitcoin/dist/BitcoinErrorCode.d.ts +10 -0
  55. package/.yalc/@node-dlc/bitcoin/dist/BitcoinErrorCode.js +15 -0
  56. package/.yalc/@node-dlc/bitcoin/dist/BitcoinErrorCode.js.map +1 -0
  57. package/.yalc/@node-dlc/bitcoin/dist/Block.d.ts +19 -0
  58. package/.yalc/@node-dlc/bitcoin/dist/Block.js +3 -0
  59. package/.yalc/@node-dlc/bitcoin/dist/Block.js.map +1 -0
  60. package/.yalc/@node-dlc/bitcoin/dist/HashByteOrder.d.ts +20 -0
  61. package/.yalc/@node-dlc/bitcoin/dist/HashByteOrder.js +25 -0
  62. package/.yalc/@node-dlc/bitcoin/dist/HashByteOrder.js.map +1 -0
  63. package/.yalc/@node-dlc/bitcoin/dist/HashValue.d.ts +55 -0
  64. package/.yalc/@node-dlc/bitcoin/dist/HashValue.js +82 -0
  65. package/.yalc/@node-dlc/bitcoin/dist/HashValue.js.map +1 -0
  66. package/.yalc/@node-dlc/bitcoin/dist/ICloneable.d.ts +3 -0
  67. package/.yalc/@node-dlc/bitcoin/dist/ICloneable.js +3 -0
  68. package/.yalc/@node-dlc/bitcoin/dist/ICloneable.js.map +1 -0
  69. package/.yalc/@node-dlc/bitcoin/dist/LexicographicalSorters.d.ts +18 -0
  70. package/.yalc/@node-dlc/bitcoin/dist/LexicographicalSorters.js +41 -0
  71. package/.yalc/@node-dlc/bitcoin/dist/LexicographicalSorters.js.map +1 -0
  72. package/.yalc/@node-dlc/bitcoin/dist/LockTime.d.ts +61 -0
  73. package/.yalc/@node-dlc/bitcoin/dist/LockTime.js +94 -0
  74. package/.yalc/@node-dlc/bitcoin/dist/LockTime.js.map +1 -0
  75. package/.yalc/@node-dlc/bitcoin/dist/OpCodes.d.ts +102 -0
  76. package/.yalc/@node-dlc/bitcoin/dist/OpCodes.js +116 -0
  77. package/.yalc/@node-dlc/bitcoin/dist/OpCodes.js.map +1 -0
  78. package/.yalc/@node-dlc/bitcoin/dist/OutPoint.d.ts +57 -0
  79. package/.yalc/@node-dlc/bitcoin/dist/OutPoint.js +88 -0
  80. package/.yalc/@node-dlc/bitcoin/dist/OutPoint.js.map +1 -0
  81. package/.yalc/@node-dlc/bitcoin/dist/Script.d.ts +185 -0
  82. package/.yalc/@node-dlc/bitcoin/dist/Script.js +404 -0
  83. package/.yalc/@node-dlc/bitcoin/dist/Script.js.map +1 -0
  84. package/.yalc/@node-dlc/bitcoin/dist/ScriptCmd.d.ts +3 -0
  85. package/.yalc/@node-dlc/bitcoin/dist/ScriptCmd.js +3 -0
  86. package/.yalc/@node-dlc/bitcoin/dist/ScriptCmd.js.map +1 -0
  87. package/.yalc/@node-dlc/bitcoin/dist/Sequence.d.ts +116 -0
  88. package/.yalc/@node-dlc/bitcoin/dist/Sequence.js +187 -0
  89. package/.yalc/@node-dlc/bitcoin/dist/Sequence.js.map +1 -0
  90. package/.yalc/@node-dlc/bitcoin/dist/SigHashType.d.ts +7 -0
  91. package/.yalc/@node-dlc/bitcoin/dist/SigHashType.js +27 -0
  92. package/.yalc/@node-dlc/bitcoin/dist/SigHashType.js.map +1 -0
  93. package/.yalc/@node-dlc/bitcoin/dist/SizeResult.d.ts +5 -0
  94. package/.yalc/@node-dlc/bitcoin/dist/SizeResult.js +3 -0
  95. package/.yalc/@node-dlc/bitcoin/dist/SizeResult.js.map +1 -0
  96. package/.yalc/@node-dlc/bitcoin/dist/Sorter.d.ts +1 -0
  97. package/.yalc/@node-dlc/bitcoin/dist/Sorter.js +3 -0
  98. package/.yalc/@node-dlc/bitcoin/dist/Sorter.js.map +1 -0
  99. package/.yalc/@node-dlc/bitcoin/dist/Stack.d.ts +15 -0
  100. package/.yalc/@node-dlc/bitcoin/dist/Stack.js +77 -0
  101. package/.yalc/@node-dlc/bitcoin/dist/Stack.js.map +1 -0
  102. package/.yalc/@node-dlc/bitcoin/dist/TimeLockMode.d.ts +15 -0
  103. package/.yalc/@node-dlc/bitcoin/dist/TimeLockMode.js +20 -0
  104. package/.yalc/@node-dlc/bitcoin/dist/TimeLockMode.js.map +1 -0
  105. package/.yalc/@node-dlc/bitcoin/dist/Tx.d.ts +150 -0
  106. package/.yalc/@node-dlc/bitcoin/dist/Tx.js +408 -0
  107. package/.yalc/@node-dlc/bitcoin/dist/Tx.js.map +1 -0
  108. package/.yalc/@node-dlc/bitcoin/dist/TxBuilder.d.ts +110 -0
  109. package/.yalc/@node-dlc/bitcoin/dist/TxBuilder.js +238 -0
  110. package/.yalc/@node-dlc/bitcoin/dist/TxBuilder.js.map +1 -0
  111. package/.yalc/@node-dlc/bitcoin/dist/TxIn.d.ts +71 -0
  112. package/.yalc/@node-dlc/bitcoin/dist/TxIn.js +79 -0
  113. package/.yalc/@node-dlc/bitcoin/dist/TxIn.js.map +1 -0
  114. package/.yalc/@node-dlc/bitcoin/dist/TxOut.d.ts +57 -0
  115. package/.yalc/@node-dlc/bitcoin/dist/TxOut.js +68 -0
  116. package/.yalc/@node-dlc/bitcoin/dist/TxOut.js.map +1 -0
  117. package/.yalc/@node-dlc/bitcoin/dist/Value.d.ts +122 -0
  118. package/.yalc/@node-dlc/bitcoin/dist/Value.js +180 -0
  119. package/.yalc/@node-dlc/bitcoin/dist/Value.js.map +1 -0
  120. package/.yalc/@node-dlc/bitcoin/dist/Wif.d.ts +41 -0
  121. package/.yalc/@node-dlc/bitcoin/dist/Wif.js +62 -0
  122. package/.yalc/@node-dlc/bitcoin/dist/Wif.js.map +1 -0
  123. package/.yalc/@node-dlc/bitcoin/dist/Witness.d.ts +41 -0
  124. package/.yalc/@node-dlc/bitcoin/dist/Witness.js +63 -0
  125. package/.yalc/@node-dlc/bitcoin/dist/Witness.js.map +1 -0
  126. package/.yalc/@node-dlc/bitcoin/dist/index.d.ts +28 -0
  127. package/.yalc/@node-dlc/bitcoin/dist/index.js +45 -0
  128. package/.yalc/@node-dlc/bitcoin/dist/index.js.map +1 -0
  129. package/.yalc/@node-dlc/bitcoin/lib/Amount.ts +70 -0
  130. package/.yalc/@node-dlc/bitcoin/lib/Base58.ts +63 -0
  131. package/.yalc/@node-dlc/bitcoin/lib/Base58Check.ts +34 -0
  132. package/.yalc/@node-dlc/bitcoin/lib/BitcoinError.ts +31 -0
  133. package/.yalc/@node-dlc/bitcoin/lib/BitcoinErrorCode.ts +10 -0
  134. package/.yalc/@node-dlc/bitcoin/lib/Block.ts +20 -0
  135. package/.yalc/@node-dlc/bitcoin/lib/HashByteOrder.ts +21 -0
  136. package/.yalc/@node-dlc/bitcoin/lib/HashValue.ts +90 -0
  137. package/.yalc/@node-dlc/bitcoin/lib/ICloneable.ts +3 -0
  138. package/.yalc/@node-dlc/bitcoin/lib/LexicographicalSorters.ts +37 -0
  139. package/.yalc/@node-dlc/bitcoin/lib/LockTime.ts +102 -0
  140. package/.yalc/@node-dlc/bitcoin/lib/OpCodes.ts +119 -0
  141. package/.yalc/@node-dlc/bitcoin/lib/OutPoint.ts +101 -0
  142. package/.yalc/@node-dlc/bitcoin/lib/Script.ts +509 -0
  143. package/.yalc/@node-dlc/bitcoin/lib/ScriptCmd.ts +3 -0
  144. package/.yalc/@node-dlc/bitcoin/lib/Sequence.ts +211 -0
  145. package/.yalc/@node-dlc/bitcoin/lib/SigHashType.ts +19 -0
  146. package/.yalc/@node-dlc/bitcoin/lib/SizeResult.ts +5 -0
  147. package/.yalc/@node-dlc/bitcoin/lib/Sorter.ts +1 -0
  148. package/.yalc/@node-dlc/bitcoin/lib/Stack.ts +81 -0
  149. package/.yalc/@node-dlc/bitcoin/lib/TimeLockMode.ts +16 -0
  150. package/.yalc/@node-dlc/bitcoin/lib/Tx.ts +480 -0
  151. package/.yalc/@node-dlc/bitcoin/lib/TxBuilder.ts +297 -0
  152. package/.yalc/@node-dlc/bitcoin/lib/TxIn.ts +115 -0
  153. package/.yalc/@node-dlc/bitcoin/lib/TxOut.ts +87 -0
  154. package/.yalc/@node-dlc/bitcoin/lib/Value.ts +201 -0
  155. package/.yalc/@node-dlc/bitcoin/lib/Wif.ts +77 -0
  156. package/.yalc/@node-dlc/bitcoin/lib/Witness.ts +65 -0
  157. package/.yalc/@node-dlc/bitcoin/lib/index.ts +28 -0
  158. package/.yalc/@node-dlc/bitcoin/package.json +31 -0
  159. package/.yalc/@node-dlc/bitcoin/tsconfig.json +8 -0
  160. package/.yalc/@node-dlc/bitcoin/yalc.sig +1 -0
  161. package/.yalc/@node-dlc/bufio/.eslintrc +6 -0
  162. package/.yalc/@node-dlc/bufio/.nyc_output/3c26c5b3-2a5e-4a53-88d4-06f4a5c339f7.json +1 -0
  163. package/.yalc/@node-dlc/bufio/.nyc_output/processinfo/3c26c5b3-2a5e-4a53-88d4-06f4a5c339f7.json +1 -0
  164. package/.yalc/@node-dlc/bufio/.nyc_output/processinfo/index.json +1 -0
  165. package/.yalc/@node-dlc/bufio/README.md +68 -0
  166. package/.yalc/@node-dlc/bufio/__tests__/BufferReader.spec.ts +548 -0
  167. package/.yalc/@node-dlc/bufio/__tests__/BufferWriter.spec.ts +530 -0
  168. package/.yalc/@node-dlc/bufio/__tests__/Hex.spec.ts +51 -0
  169. package/.yalc/@node-dlc/bufio/__tests__/StreamReader.spec.ts +133 -0
  170. package/.yalc/@node-dlc/bufio/__tests__/bigFromBufBE.spec.ts +14 -0
  171. package/.yalc/@node-dlc/bufio/__tests__/bigFromBufLE.spec.ts +14 -0
  172. package/.yalc/@node-dlc/bufio/__tests__/bigToBufBE.spec.ts +15 -0
  173. package/.yalc/@node-dlc/bufio/__tests__/bigToBufLE.spec.ts +14 -0
  174. package/.yalc/@node-dlc/bufio/__tests__/encodeVarInt.spec.ts +25 -0
  175. package/.yalc/@node-dlc/bufio/__tests__/tsconfig.json +7 -0
  176. package/.yalc/@node-dlc/bufio/__tests__/varIntBytes.spec.ts +34 -0
  177. package/.yalc/@node-dlc/bufio/coverage/lcov-report/BufferReader.ts.html +1142 -0
  178. package/.yalc/@node-dlc/bufio/coverage/lcov-report/BufferWriter.ts.html +953 -0
  179. package/.yalc/@node-dlc/bufio/coverage/lcov-report/Hex.ts.html +323 -0
  180. package/.yalc/@node-dlc/bufio/coverage/lcov-report/StreamReader.ts.html +620 -0
  181. package/.yalc/@node-dlc/bufio/coverage/lcov-report/base.css +224 -0
  182. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigFromBufBE.ts.html +89 -0
  183. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigFromBufLE.ts.html +95 -0
  184. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigToBufBE.ts.html +98 -0
  185. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigToBufLE.ts.html +95 -0
  186. package/.yalc/@node-dlc/bufio/coverage/lcov-report/block-navigation.js +79 -0
  187. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bufToStream.ts.html +113 -0
  188. package/.yalc/@node-dlc/bufio/coverage/lcov-report/encodeVarInt.ts.html +203 -0
  189. package/.yalc/@node-dlc/bufio/coverage/lcov-report/favicon.png +0 -0
  190. package/.yalc/@node-dlc/bufio/coverage/lcov-report/index.html +261 -0
  191. package/.yalc/@node-dlc/bufio/coverage/lcov-report/prettify.css +1 -0
  192. package/.yalc/@node-dlc/bufio/coverage/lcov-report/prettify.js +2 -0
  193. package/.yalc/@node-dlc/bufio/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  194. package/.yalc/@node-dlc/bufio/coverage/lcov-report/sorter.js +170 -0
  195. package/.yalc/@node-dlc/bufio/coverage/lcov-report/varIntBytes.ts.html +116 -0
  196. package/.yalc/@node-dlc/bufio/coverage/lcov.info +747 -0
  197. package/.yalc/@node-dlc/bufio/dist/BufferReader.d.ts +155 -0
  198. package/.yalc/@node-dlc/bufio/dist/BufferReader.js +346 -0
  199. package/.yalc/@node-dlc/bufio/dist/BufferReader.js.map +1 -0
  200. package/.yalc/@node-dlc/bufio/dist/BufferWriter.d.ts +143 -0
  201. package/.yalc/@node-dlc/bufio/dist/BufferWriter.js +279 -0
  202. package/.yalc/@node-dlc/bufio/dist/BufferWriter.js.map +1 -0
  203. package/.yalc/@node-dlc/bufio/dist/Hex.d.ts +13 -0
  204. package/.yalc/@node-dlc/bufio/dist/Hex.js +78 -0
  205. package/.yalc/@node-dlc/bufio/dist/Hex.js.map +1 -0
  206. package/.yalc/@node-dlc/bufio/dist/StreamReader.d.ts +111 -0
  207. package/.yalc/@node-dlc/bufio/dist/StreamReader.js +180 -0
  208. package/.yalc/@node-dlc/bufio/dist/StreamReader.js.map +1 -0
  209. package/.yalc/@node-dlc/bufio/dist/bigFromBufBE.d.ts +2 -0
  210. package/.yalc/@node-dlc/bufio/dist/bigFromBufBE.js +8 -0
  211. package/.yalc/@node-dlc/bufio/dist/bigFromBufBE.js.map +1 -0
  212. package/.yalc/@node-dlc/bufio/dist/bigFromBufLE.d.ts +2 -0
  213. package/.yalc/@node-dlc/bufio/dist/bigFromBufLE.js +9 -0
  214. package/.yalc/@node-dlc/bufio/dist/bigFromBufLE.js.map +1 -0
  215. package/.yalc/@node-dlc/bufio/dist/bigToBufBE.d.ts +2 -0
  216. package/.yalc/@node-dlc/bufio/dist/bigToBufBE.js +13 -0
  217. package/.yalc/@node-dlc/bufio/dist/bigToBufBE.js.map +1 -0
  218. package/.yalc/@node-dlc/bufio/dist/bigToBufLE.d.ts +2 -0
  219. package/.yalc/@node-dlc/bufio/dist/bigToBufLE.js +9 -0
  220. package/.yalc/@node-dlc/bufio/dist/bigToBufLE.js.map +1 -0
  221. package/.yalc/@node-dlc/bufio/dist/bufToStream.d.ts +7 -0
  222. package/.yalc/@node-dlc/bufio/dist/bufToStream.js +15 -0
  223. package/.yalc/@node-dlc/bufio/dist/bufToStream.js.map +1 -0
  224. package/.yalc/@node-dlc/bufio/dist/encodeVarInt.d.ts +12 -0
  225. package/.yalc/@node-dlc/bufio/dist/encodeVarInt.js +46 -0
  226. package/.yalc/@node-dlc/bufio/dist/encodeVarInt.js.map +1 -0
  227. package/.yalc/@node-dlc/bufio/dist/index.d.ts +11 -0
  228. package/.yalc/@node-dlc/bufio/dist/index.js +28 -0
  229. package/.yalc/@node-dlc/bufio/dist/index.js.map +1 -0
  230. package/.yalc/@node-dlc/bufio/dist/varIntBytes.d.ts +5 -0
  231. package/.yalc/@node-dlc/bufio/dist/varIntBytes.js +22 -0
  232. package/.yalc/@node-dlc/bufio/dist/varIntBytes.js.map +1 -0
  233. package/.yalc/@node-dlc/bufio/lib/BufferReader.ts +354 -0
  234. package/.yalc/@node-dlc/bufio/lib/BufferWriter.ts +291 -0
  235. package/.yalc/@node-dlc/bufio/lib/Hex.ts +81 -0
  236. package/.yalc/@node-dlc/bufio/lib/StreamReader.ts +180 -0
  237. package/.yalc/@node-dlc/bufio/lib/bigFromBufBE.ts +3 -0
  238. package/.yalc/@node-dlc/bufio/lib/bigFromBufLE.ts +5 -0
  239. package/.yalc/@node-dlc/bufio/lib/bigToBufBE.ts +6 -0
  240. package/.yalc/@node-dlc/bufio/lib/bigToBufLE.ts +5 -0
  241. package/.yalc/@node-dlc/bufio/lib/bufToStream.ts +11 -0
  242. package/.yalc/@node-dlc/bufio/lib/encodeVarInt.ts +41 -0
  243. package/.yalc/@node-dlc/bufio/lib/index.ts +11 -0
  244. package/.yalc/@node-dlc/bufio/lib/varIntBytes.ts +12 -0
  245. package/.yalc/@node-dlc/bufio/package.json +27 -0
  246. package/.yalc/@node-dlc/bufio/tsconfig-build.json +7 -0
  247. package/.yalc/@node-dlc/bufio/tsconfig.json +7 -0
  248. package/.yalc/@node-dlc/bufio/yalc.sig +1 -0
  249. package/.yalc/@node-dlc/core/.nyc_output/687a3c14-9765-45fd-a1fe-f7db3d56fee4.json +1 -0
  250. package/.yalc/@node-dlc/core/.nyc_output/processinfo/687a3c14-9765-45fd-a1fe-f7db3d56fee4.json +1 -0
  251. package/.yalc/@node-dlc/core/.nyc_output/processinfo/index.json +1 -0
  252. package/.yalc/@node-dlc/core/README.md +11 -0
  253. package/.yalc/@node-dlc/core/__tests__/core.spec.ts +7 -0
  254. package/.yalc/@node-dlc/core/__tests__/dlc/CETCalculator.spec.ts +1029 -0
  255. package/.yalc/@node-dlc/core/__tests__/dlc/CoinSelect.spec.ts +179 -0
  256. package/.yalc/@node-dlc/core/__tests__/dlc/PolynomialPayoutCurve.spec.ts +345 -0
  257. package/.yalc/@node-dlc/core/__tests__/dlc/TxBuilder.spec.ts +424 -0
  258. package/.yalc/@node-dlc/core/__tests__/dlc/finance/Builder.spec.ts +492 -0
  259. package/.yalc/@node-dlc/core/__tests__/dlc/finance/CoveredCall.spec.ts +112 -0
  260. package/.yalc/@node-dlc/core/__tests__/dlc/finance/CsoInfo.spec.ts +1124 -0
  261. package/.yalc/@node-dlc/core/__tests__/dlc/finance/LongCall.spec.ts +55 -0
  262. package/.yalc/@node-dlc/core/__tests__/dlc/finance/LongPut.spec.ts +55 -0
  263. package/.yalc/@node-dlc/core/__tests__/dlc/finance/OptionInfo.spec.ts +226 -0
  264. package/.yalc/@node-dlc/core/__tests__/dlc/finance/ShortPut.spec.ts +62 -0
  265. package/.yalc/@node-dlc/core/__tests__/tsconfig.json +8 -0
  266. package/.yalc/@node-dlc/core/__tests__/utils/precision.spec.ts +40 -0
  267. package/.yalc/@node-dlc/core/coverage/lcov-report/base.css +224 -0
  268. package/.yalc/@node-dlc/core/coverage/lcov-report/block-navigation.js +79 -0
  269. package/.yalc/@node-dlc/core/coverage/lcov-report/favicon.png +0 -0
  270. package/.yalc/@node-dlc/core/coverage/lcov-report/index.html +171 -0
  271. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/AsyncProcessingQueue.ts.html +269 -0
  272. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/Base32.ts.html +86 -0
  273. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/BigIntUtils.ts.html +86 -0
  274. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/BitField.ts.html +86 -0
  275. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/ChannelId.ts.html +86 -0
  276. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/LinkedList.ts.html +413 -0
  277. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/LinkedListNode.ts.html +122 -0
  278. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/Queue.ts.html +188 -0
  279. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/ShortChannelId.ts.html +86 -0
  280. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/ShortChannelIdUtils.ts.html +107 -0
  281. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/CETCalculator.ts.html +1430 -0
  282. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/CoinSelect.ts.html +431 -0
  283. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/HyperbolaPayoutCurve.ts.html +644 -0
  284. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/PolynomialPayoutCurve.ts.html +878 -0
  285. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/TxBuilder.ts.html +1088 -0
  286. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/TxFinalizer.ts.html +731 -0
  287. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/Builder.ts.html +2270 -0
  288. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/CoveredCall.ts.html +410 -0
  289. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/CsoInfo.ts.html +1574 -0
  290. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/LinearPayout.ts.html +362 -0
  291. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/LongCall.ts.html +302 -0
  292. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/LongPut.ts.html +302 -0
  293. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/OptionInfo.ts.html +626 -0
  294. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/ShortPut.ts.html +305 -0
  295. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/index.html +216 -0
  296. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/index.html +186 -0
  297. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/index.html +261 -0
  298. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/index.ts.html +278 -0
  299. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/ChannelId.ts.html +242 -0
  300. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/ChannelKeys.ts.html +407 -0
  301. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/CommitmentNumber.ts.html +362 -0
  302. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/CommitmentSecret.ts.html +203 -0
  303. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/CommitmentSecretStore.ts.html +332 -0
  304. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/Htlc.ts.html +236 -0
  305. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/HtlcDirection.ts.html +131 -0
  306. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/ScriptFactory.ts.html +530 -0
  307. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/TxFactory.ts.html +1094 -0
  308. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/index.html +231 -0
  309. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/utils/BigIntUtils.ts.html +272 -0
  310. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/utils/Precision.ts.html +149 -0
  311. package/.yalc/@node-dlc/{messaging/coverage/lcov-report/lib/serde → core/coverage/lcov-report/lib/utils}/index.html +37 -22
  312. package/.yalc/@node-dlc/core/coverage/lcov-report/prettify.css +1 -0
  313. package/.yalc/@node-dlc/core/coverage/lcov-report/prettify.js +2 -0
  314. package/.yalc/@node-dlc/core/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  315. package/.yalc/@node-dlc/core/coverage/lcov-report/sorter.js +170 -0
  316. package/.yalc/@node-dlc/core/coverage/lcov.info +2426 -0
  317. package/.yalc/@node-dlc/core/dist/AsyncProcessingQueue.d.ts +22 -0
  318. package/.yalc/@node-dlc/core/dist/AsyncProcessingQueue.js +55 -0
  319. package/.yalc/@node-dlc/core/dist/AsyncProcessingQueue.js.map +1 -0
  320. package/.yalc/@node-dlc/core/dist/Base32.d.ts +1 -0
  321. package/.yalc/@node-dlc/core/dist/Base32.js +7 -0
  322. package/.yalc/@node-dlc/core/dist/Base32.js.map +1 -0
  323. package/.yalc/@node-dlc/core/dist/BigIntUtils.d.ts +1 -0
  324. package/.yalc/@node-dlc/core/dist/BigIntUtils.js +8 -0
  325. package/.yalc/@node-dlc/core/dist/BigIntUtils.js.map +1 -0
  326. package/.yalc/@node-dlc/core/dist/BitField.d.ts +1 -0
  327. package/.yalc/@node-dlc/core/dist/BitField.js +7 -0
  328. package/.yalc/@node-dlc/core/dist/BitField.js.map +1 -0
  329. package/.yalc/@node-dlc/core/dist/ChannelId.d.ts +1 -0
  330. package/.yalc/@node-dlc/core/dist/ChannelId.js +7 -0
  331. package/.yalc/@node-dlc/core/dist/ChannelId.js.map +1 -0
  332. package/.yalc/@node-dlc/core/dist/LinkedList.d.ts +30 -0
  333. package/.yalc/@node-dlc/core/dist/LinkedList.js +104 -0
  334. package/.yalc/@node-dlc/core/dist/LinkedList.js.map +1 -0
  335. package/.yalc/@node-dlc/core/dist/LinkedListNode.d.ts +9 -0
  336. package/.yalc/@node-dlc/core/dist/LinkedListNode.js +15 -0
  337. package/.yalc/@node-dlc/core/dist/LinkedListNode.js.map +1 -0
  338. package/.yalc/@node-dlc/core/dist/Queue.d.ts +22 -0
  339. package/.yalc/@node-dlc/core/dist/Queue.js +38 -0
  340. package/.yalc/@node-dlc/core/dist/Queue.js.map +1 -0
  341. package/.yalc/@node-dlc/core/dist/ShortChannelId.d.ts +1 -0
  342. package/.yalc/@node-dlc/core/dist/ShortChannelId.js +7 -0
  343. package/.yalc/@node-dlc/core/dist/ShortChannelId.js.map +1 -0
  344. package/.yalc/@node-dlc/core/dist/ShortChannelIdUtils.d.ts +1 -0
  345. package/.yalc/@node-dlc/core/dist/ShortChannelIdUtils.js +12 -0
  346. package/.yalc/@node-dlc/core/dist/ShortChannelIdUtils.js.map +1 -0
  347. package/.yalc/@node-dlc/core/dist/dlc/CETCalculator.d.ts +50 -0
  348. package/.yalc/@node-dlc/core/dist/dlc/CETCalculator.js +332 -0
  349. package/.yalc/@node-dlc/core/dist/dlc/CETCalculator.js.map +1 -0
  350. package/.yalc/@node-dlc/core/dist/dlc/CoinSelect.d.ts +23 -0
  351. package/.yalc/@node-dlc/core/dist/dlc/CoinSelect.js +77 -0
  352. package/.yalc/@node-dlc/core/dist/dlc/CoinSelect.js.map +1 -0
  353. package/.yalc/@node-dlc/core/dist/dlc/HyperbolaPayoutCurve.d.ts +20 -0
  354. package/.yalc/@node-dlc/core/dist/dlc/HyperbolaPayoutCurve.js +117 -0
  355. package/.yalc/@node-dlc/core/dist/dlc/HyperbolaPayoutCurve.js.map +1 -0
  356. package/.yalc/@node-dlc/core/dist/dlc/PayoutCurve.d.ts +5 -0
  357. package/.yalc/@node-dlc/core/dist/dlc/PayoutCurve.js +3 -0
  358. package/.yalc/@node-dlc/core/dist/dlc/PayoutCurve.js.map +1 -0
  359. package/.yalc/@node-dlc/core/dist/dlc/PolynomialPayoutCurve.d.ts +52 -0
  360. package/.yalc/@node-dlc/core/dist/dlc/PolynomialPayoutCurve.js +173 -0
  361. package/.yalc/@node-dlc/core/dist/dlc/PolynomialPayoutCurve.js.map +1 -0
  362. package/.yalc/@node-dlc/core/dist/dlc/TxBuilder.d.ts +55 -0
  363. package/.yalc/@node-dlc/core/dist/dlc/TxBuilder.js +217 -0
  364. package/.yalc/@node-dlc/core/dist/dlc/TxBuilder.js.map +1 -0
  365. package/.yalc/@node-dlc/core/dist/dlc/TxFinalizer.d.ts +40 -0
  366. package/.yalc/@node-dlc/core/dist/dlc/TxFinalizer.js +146 -0
  367. package/.yalc/@node-dlc/core/dist/dlc/TxFinalizer.js.map +1 -0
  368. package/.yalc/@node-dlc/core/dist/dlc/finance/Builder.d.ts +193 -0
  369. package/.yalc/@node-dlc/core/dist/dlc/finance/Builder.js +422 -0
  370. package/.yalc/@node-dlc/core/dist/dlc/finance/Builder.js.map +1 -0
  371. package/.yalc/@node-dlc/core/dist/dlc/finance/CoveredCall.d.ts +13 -0
  372. package/.yalc/@node-dlc/core/dist/dlc/finance/CoveredCall.js +67 -0
  373. package/.yalc/@node-dlc/core/dist/dlc/finance/CoveredCall.js.map +1 -0
  374. package/.yalc/@node-dlc/core/dist/dlc/finance/CsoInfo.d.ts +114 -0
  375. package/.yalc/@node-dlc/core/dist/dlc/finance/CsoInfo.js +290 -0
  376. package/.yalc/@node-dlc/core/dist/dlc/finance/CsoInfo.js.map +1 -0
  377. package/.yalc/@node-dlc/core/dist/dlc/finance/LinearPayout.d.ts +6 -0
  378. package/.yalc/@node-dlc/core/dist/dlc/finance/LinearPayout.js +79 -0
  379. package/.yalc/@node-dlc/core/dist/dlc/finance/LinearPayout.js.map +1 -0
  380. package/.yalc/@node-dlc/core/dist/dlc/finance/LongCall.d.ts +13 -0
  381. package/.yalc/@node-dlc/core/dist/dlc/finance/LongCall.js +47 -0
  382. package/.yalc/@node-dlc/core/dist/dlc/finance/LongCall.js.map +1 -0
  383. package/.yalc/@node-dlc/core/dist/dlc/finance/LongPut.d.ts +13 -0
  384. package/.yalc/@node-dlc/core/dist/dlc/finance/LongPut.js +47 -0
  385. package/.yalc/@node-dlc/core/dist/dlc/finance/LongPut.js.map +1 -0
  386. package/.yalc/@node-dlc/core/dist/dlc/finance/OptionInfo.d.ts +20 -0
  387. package/.yalc/@node-dlc/core/dist/dlc/finance/OptionInfo.js +101 -0
  388. package/.yalc/@node-dlc/core/dist/dlc/finance/OptionInfo.js.map +1 -0
  389. package/.yalc/@node-dlc/core/dist/dlc/finance/ShortPut.d.ts +12 -0
  390. package/.yalc/@node-dlc/core/dist/dlc/finance/ShortPut.js +46 -0
  391. package/.yalc/@node-dlc/core/dist/dlc/finance/ShortPut.js.map +1 -0
  392. package/.yalc/@node-dlc/core/dist/index.d.ts +39 -0
  393. package/.yalc/@node-dlc/core/dist/index.js +78 -0
  394. package/.yalc/@node-dlc/core/dist/index.js.map +1 -0
  395. package/.yalc/@node-dlc/core/dist/lightning/ChannelId.d.ts +31 -0
  396. package/.yalc/@node-dlc/core/dist/lightning/ChannelId.js +52 -0
  397. package/.yalc/@node-dlc/core/dist/lightning/ChannelId.js.map +1 -0
  398. package/.yalc/@node-dlc/core/dist/lightning/ChannelKeys.d.ts +55 -0
  399. package/.yalc/@node-dlc/core/dist/lightning/ChannelKeys.js +105 -0
  400. package/.yalc/@node-dlc/core/dist/lightning/ChannelKeys.js.map +1 -0
  401. package/.yalc/@node-dlc/core/dist/lightning/CommitmentNumber.d.ts +55 -0
  402. package/.yalc/@node-dlc/core/dist/lightning/CommitmentNumber.js +76 -0
  403. package/.yalc/@node-dlc/core/dist/lightning/CommitmentNumber.js.map +1 -0
  404. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecret.d.ts +26 -0
  405. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecret.js +44 -0
  406. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecret.js.map +1 -0
  407. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecretStore.d.ts +41 -0
  408. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecretStore.js +79 -0
  409. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecretStore.js.map +1 -0
  410. package/.yalc/@node-dlc/core/dist/lightning/Htlc.d.ts +46 -0
  411. package/.yalc/@node-dlc/core/dist/lightning/Htlc.js +46 -0
  412. package/.yalc/@node-dlc/core/dist/lightning/Htlc.js.map +1 -0
  413. package/.yalc/@node-dlc/core/dist/lightning/HtlcDirection.d.ts +16 -0
  414. package/.yalc/@node-dlc/core/dist/lightning/HtlcDirection.js +21 -0
  415. package/.yalc/@node-dlc/core/dist/lightning/HtlcDirection.js.map +1 -0
  416. package/.yalc/@node-dlc/core/dist/lightning/ScriptFactory.d.ts +76 -0
  417. package/.yalc/@node-dlc/core/dist/lightning/ScriptFactory.js +102 -0
  418. package/.yalc/@node-dlc/core/dist/lightning/ScriptFactory.js.map +1 -0
  419. package/.yalc/@node-dlc/core/dist/lightning/TxFactory.d.ts +83 -0
  420. package/.yalc/@node-dlc/core/dist/lightning/TxFactory.js +222 -0
  421. package/.yalc/@node-dlc/core/dist/lightning/TxFactory.js.map +1 -0
  422. package/.yalc/@node-dlc/core/dist/utils/BigIntUtils.d.ts +9 -0
  423. package/.yalc/@node-dlc/core/dist/utils/BigIntUtils.js +59 -0
  424. package/.yalc/@node-dlc/core/dist/utils/BigIntUtils.js.map +1 -0
  425. package/.yalc/@node-dlc/core/dist/utils/Precision.d.ts +13 -0
  426. package/.yalc/@node-dlc/core/dist/utils/Precision.js +28 -0
  427. package/.yalc/@node-dlc/core/dist/utils/Precision.js.map +1 -0
  428. package/.yalc/@node-dlc/core/lib/AsyncProcessingQueue.ts +63 -0
  429. package/.yalc/@node-dlc/core/lib/Base32.ts +2 -0
  430. package/.yalc/@node-dlc/core/lib/BigIntUtils.ts +2 -0
  431. package/.yalc/@node-dlc/core/lib/BitField.ts +2 -0
  432. package/.yalc/@node-dlc/core/lib/ChannelId.ts +2 -0
  433. package/.yalc/@node-dlc/core/lib/LinkedList.ts +111 -0
  434. package/.yalc/@node-dlc/core/lib/LinkedListNode.ts +14 -0
  435. package/.yalc/@node-dlc/core/lib/Queue.ts +36 -0
  436. package/.yalc/@node-dlc/core/lib/ShortChannelId.ts +2 -0
  437. package/.yalc/@node-dlc/core/lib/ShortChannelIdUtils.ts +9 -0
  438. package/.yalc/@node-dlc/core/lib/dlc/CETCalculator.ts +450 -0
  439. package/.yalc/@node-dlc/core/lib/dlc/CoinSelect.ts +117 -0
  440. package/.yalc/@node-dlc/core/lib/dlc/HyperbolaPayoutCurve.ts +188 -0
  441. package/.yalc/@node-dlc/core/lib/dlc/PayoutCurve.ts +6 -0
  442. package/.yalc/@node-dlc/core/lib/dlc/PolynomialPayoutCurve.ts +266 -0
  443. package/.yalc/@node-dlc/core/lib/dlc/TxBuilder.ts +336 -0
  444. package/.yalc/@node-dlc/core/lib/dlc/TxFinalizer.ts +217 -0
  445. package/.yalc/@node-dlc/core/lib/dlc/finance/Builder.ts +730 -0
  446. package/.yalc/@node-dlc/core/lib/dlc/finance/CoveredCall.ts +110 -0
  447. package/.yalc/@node-dlc/core/lib/dlc/finance/CsoInfo.ts +498 -0
  448. package/.yalc/@node-dlc/core/lib/dlc/finance/LinearPayout.ts +94 -0
  449. package/.yalc/@node-dlc/core/lib/dlc/finance/LongCall.ts +74 -0
  450. package/.yalc/@node-dlc/core/lib/dlc/finance/LongPut.ts +74 -0
  451. package/.yalc/@node-dlc/core/lib/dlc/finance/OptionInfo.ts +182 -0
  452. package/.yalc/@node-dlc/core/lib/dlc/finance/ShortPut.ts +75 -0
  453. package/.yalc/@node-dlc/core/lib/index.ts +66 -0
  454. package/.yalc/@node-dlc/core/lib/lightning/ChannelId.ts +54 -0
  455. package/.yalc/@node-dlc/core/lib/lightning/ChannelKeys.ts +109 -0
  456. package/.yalc/@node-dlc/core/lib/lightning/CommitmentNumber.ts +94 -0
  457. package/.yalc/@node-dlc/core/lib/lightning/CommitmentSecret.ts +41 -0
  458. package/.yalc/@node-dlc/core/lib/lightning/CommitmentSecretStore.ts +84 -0
  459. package/.yalc/@node-dlc/core/lib/lightning/Htlc.ts +52 -0
  460. package/.yalc/@node-dlc/core/lib/lightning/HtlcDirection.ts +17 -0
  461. package/.yalc/@node-dlc/core/lib/lightning/ScriptFactory.ts +150 -0
  462. package/.yalc/@node-dlc/core/lib/lightning/TxFactory.ts +338 -0
  463. package/.yalc/@node-dlc/core/lib/utils/BigIntUtils.ts +64 -0
  464. package/.yalc/@node-dlc/core/lib/utils/Precision.ts +23 -0
  465. package/.yalc/@node-dlc/core/package.json +38 -0
  466. package/.yalc/@node-dlc/core/tsconfig.json +8 -0
  467. package/.yalc/@node-dlc/core/yalc.sig +1 -0
  468. package/.yalc/@node-dlc/crypto/.eslintrc +6 -0
  469. package/.yalc/@node-dlc/crypto/.nyc_output/de03e0b4-d482-4f61-b680-59411360f56e.json +1 -0
  470. package/.yalc/@node-dlc/crypto/.nyc_output/processinfo/de03e0b4-d482-4f61-b680-59411360f56e.json +1 -0
  471. package/.yalc/@node-dlc/crypto/.nyc_output/processinfo/index.json +1 -0
  472. package/.yalc/@node-dlc/crypto/README.md +13 -0
  473. package/.yalc/@node-dlc/crypto/__tests__/chacha.spec.ts +29 -0
  474. package/.yalc/@node-dlc/crypto/__tests__/chachapoly.spec.ts +78 -0
  475. package/.yalc/@node-dlc/crypto/__tests__/hkdf.spec.ts +131 -0
  476. package/.yalc/@node-dlc/crypto/__tests__/key.spec.ts +125 -0
  477. package/.yalc/@node-dlc/crypto/__tests__/secp256k1.spec.ts +194 -0
  478. package/.yalc/@node-dlc/crypto/__tests__/xor.spec.ts +28 -0
  479. package/.yalc/@node-dlc/crypto/coverage/lcov-report/base.css +224 -0
  480. package/.yalc/@node-dlc/crypto/coverage/lcov-report/block-navigation.js +79 -0
  481. package/.yalc/@node-dlc/crypto/coverage/lcov-report/chacha.ts.html +119 -0
  482. package/.yalc/@node-dlc/crypto/coverage/lcov-report/chachapoly.ts.html +275 -0
  483. package/.yalc/@node-dlc/crypto/coverage/lcov-report/favicon.png +0 -0
  484. package/.yalc/@node-dlc/crypto/coverage/lcov-report/hkdf.ts.html +236 -0
  485. package/.yalc/@node-dlc/crypto/coverage/lcov-report/index.html +186 -0
  486. package/.yalc/@node-dlc/crypto/coverage/lcov-report/key.ts.html +272 -0
  487. package/.yalc/@node-dlc/crypto/coverage/lcov-report/prettify.css +1 -0
  488. package/.yalc/@node-dlc/crypto/coverage/lcov-report/prettify.js +2 -0
  489. package/.yalc/@node-dlc/crypto/coverage/lcov-report/secp256k1.ts.html +680 -0
  490. package/.yalc/@node-dlc/crypto/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  491. package/.yalc/@node-dlc/crypto/coverage/lcov-report/sorter.js +170 -0
  492. package/.yalc/@node-dlc/crypto/coverage/lcov-report/xor.ts.html +116 -0
  493. package/.yalc/@node-dlc/crypto/coverage/lcov.info +221 -0
  494. package/.yalc/@node-dlc/crypto/dist/aes-key.d.ts +6 -0
  495. package/.yalc/@node-dlc/crypto/dist/aes-key.js +3 -0
  496. package/.yalc/@node-dlc/crypto/dist/aes-key.js.map +1 -0
  497. package/.yalc/@node-dlc/crypto/dist/aes.d.ts +34 -0
  498. package/.yalc/@node-dlc/crypto/dist/aes.js +62 -0
  499. package/.yalc/@node-dlc/crypto/dist/aes.js.map +1 -0
  500. package/.yalc/@node-dlc/crypto/dist/chacha.d.ts +4 -0
  501. package/.yalc/@node-dlc/crypto/dist/chacha.js +40 -0
  502. package/.yalc/@node-dlc/crypto/dist/chacha.js.map +1 -0
  503. package/.yalc/@node-dlc/crypto/dist/chachapoly.d.ts +24 -0
  504. package/.yalc/@node-dlc/crypto/dist/chachapoly.js +61 -0
  505. package/.yalc/@node-dlc/crypto/dist/chachapoly.js.map +1 -0
  506. package/.yalc/@node-dlc/crypto/dist/hash.d.ts +29 -0
  507. package/.yalc/@node-dlc/crypto/dist/hash.js +51 -0
  508. package/.yalc/@node-dlc/crypto/dist/hash.js.map +1 -0
  509. package/.yalc/@node-dlc/crypto/dist/hkdf.d.ts +20 -0
  510. package/.yalc/@node-dlc/crypto/dist/hkdf.js +50 -0
  511. package/.yalc/@node-dlc/crypto/dist/hkdf.js.map +1 -0
  512. package/.yalc/@node-dlc/crypto/dist/hmac.d.ts +3 -0
  513. package/.yalc/@node-dlc/crypto/dist/hmac.js +14 -0
  514. package/.yalc/@node-dlc/crypto/dist/hmac.js.map +1 -0
  515. package/.yalc/@node-dlc/crypto/dist/index.d.ts +11 -0
  516. package/.yalc/@node-dlc/crypto/dist/index.js +30 -0
  517. package/.yalc/@node-dlc/crypto/dist/index.js.map +1 -0
  518. package/.yalc/@node-dlc/crypto/dist/key.d.ts +37 -0
  519. package/.yalc/@node-dlc/crypto/dist/key.js +72 -0
  520. package/.yalc/@node-dlc/crypto/dist/key.js.map +1 -0
  521. package/.yalc/@node-dlc/crypto/dist/secp256k1.d.ts +120 -0
  522. package/.yalc/@node-dlc/crypto/dist/secp256k1.js +184 -0
  523. package/.yalc/@node-dlc/crypto/dist/secp256k1.js.map +1 -0
  524. package/.yalc/@node-dlc/crypto/dist/xor.d.ts +8 -0
  525. package/.yalc/@node-dlc/crypto/dist/xor.js +17 -0
  526. package/.yalc/@node-dlc/crypto/dist/xor.js.map +1 -0
  527. package/.yalc/@node-dlc/crypto/lib/aes-key.ts +4 -0
  528. package/.yalc/@node-dlc/crypto/lib/aes.ts +81 -0
  529. package/.yalc/@node-dlc/crypto/lib/chacha.ts +13 -0
  530. package/.yalc/@node-dlc/crypto/lib/chachapoly.ts +65 -0
  531. package/.yalc/@node-dlc/crypto/lib/hash.ts +44 -0
  532. package/.yalc/@node-dlc/crypto/lib/hkdf.ts +52 -0
  533. package/.yalc/@node-dlc/crypto/lib/hmac.ts +7 -0
  534. package/.yalc/@node-dlc/crypto/lib/index.ts +11 -0
  535. package/.yalc/@node-dlc/crypto/lib/key.ts +64 -0
  536. package/.yalc/@node-dlc/crypto/lib/secp256k1.ts +200 -0
  537. package/.yalc/@node-dlc/crypto/lib/xor.ts +12 -0
  538. package/.yalc/@node-dlc/crypto/package.json +34 -0
  539. package/.yalc/@node-dlc/crypto/tsconfig-build.json +7 -0
  540. package/.yalc/@node-dlc/crypto/tsconfig.json +4 -0
  541. package/.yalc/@node-dlc/crypto/yalc.sig +1 -0
  542. package/.yalc/@node-dlc/messaging/.nyc_output/83d37f9d-cecf-4c52-a753-115ff80bbca0.json +1 -0
  543. package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/83d37f9d-cecf-4c52-a753-115ff80bbca0.json +1 -0
  544. package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/index.json +1 -1
  545. package/.yalc/@node-dlc/messaging/__tests__/_test-utils.ts +1 -0
  546. package/.yalc/@node-dlc/messaging/__tests__/compatibility/dlcspecs-compatibility.spec.ts +13 -47
  547. package/.yalc/@node-dlc/messaging/__tests__/compatibility/rust-dlc-cross-language.spec.ts +166 -253
  548. package/.yalc/@node-dlc/messaging/__tests__/compatibility/true-serialization-compatibility.spec.ts +214 -483
  549. package/.yalc/@node-dlc/messaging/__tests__/messages/ContractDescriptor.spec.ts +3 -1
  550. package/.yalc/@node-dlc/messaging/__tests__/messages/ContractInfo.spec.ts +1 -1
  551. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcAccept.spec.ts +72 -0
  552. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcInput.spec.ts +111 -0
  553. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcOffer.spec.ts +99 -37
  554. package/.yalc/@node-dlc/messaging/__tests__/messages/FundingInput.spec.ts +148 -63
  555. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleAttestation.spec.ts +2 -4
  556. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderAccept.spec.ts +7 -9
  557. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderNegotiationFields.spec.ts +135 -52
  558. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderPositionInfo.spec.ts +6 -6
  559. package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutCurvePiece.spec.ts +1 -1
  560. package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutFunction.spec.ts +1 -1
  561. package/.yalc/@node-dlc/messaging/__tests__/serialize/F64.spec.ts +1 -0
  562. package/.yalc/@node-dlc/messaging/coverage/lcov-report/index.html +31 -31
  563. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/MessageType.ts.html +11 -5
  564. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainManager.ts.html +6 -3
  565. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainMemoryStore.ts.html +1 -1
  566. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/index.html +1 -1
  567. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/Address.ts.html +1 -1
  568. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/index.html +1 -1
  569. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.html +9 -9
  570. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.ts.html +11 -8
  571. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/IrcMessage.ts.html +1 -1
  572. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/index.html +1 -1
  573. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/AddressCache.ts.html +1 -1
  574. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/BatchFundingGroup.ts.html +1 -1
  575. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignatures.ts.html +22 -22
  576. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignaturesV0.ts.html +46 -37
  577. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CloseTLV.ts.html +344 -0
  578. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractDescriptor.ts.html +61 -70
  579. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractInfo.ts.html +59 -44
  580. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcAccept.ts.html +251 -119
  581. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCancel.ts.html +1 -1
  582. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcClose.ts.html +12 -3
  583. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCloseMetadata.ts.html +2 -11
  584. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcIds.ts.html +1 -1
  585. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcInfo.ts.html +1 -1
  586. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcInput.ts.html +581 -0
  587. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcMessage.ts.html +1 -1
  588. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcOffer.ts.html +307 -127
  589. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcSign.ts.html +61 -46
  590. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcTransactions.ts.html +1 -1
  591. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/EventDescriptor.ts.html +67 -52
  592. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingInput.ts.html +202 -70
  593. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignatures.ts.html +15 -15
  594. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignaturesV0.ts.html +47 -77
  595. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NegotiationFields.ts.html +16 -4
  596. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NodeAnnouncementMessage.ts.html +3 -3
  597. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncement.ts.html +22 -22
  598. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncementV0.ts.html +48 -270
  599. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestation.ts.html +1 -1
  600. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestationV0.ts.html +113 -404
  601. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEvent.ts.html +49 -49
  602. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainer.ts.html +1 -1
  603. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainerV0.ts.html +22 -22
  604. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventV0.ts.html +61 -385
  605. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifier.ts.html +1 -1
  606. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifierV0.ts.html +1 -1
  607. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfo.ts.html +46 -25
  608. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfoV0.ts.html +55 -1378
  609. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderAccept.ts.html +68 -23
  610. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderIrcInfo.ts.html +1 -1
  611. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderMetadata.ts.html +1 -1
  612. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderNegotiationFields.ts.html +266 -107
  613. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderOffer.ts.html +31 -34
  614. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderPositionInfo.ts.html +19 -88
  615. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutCurvePiece.ts.html +36 -21
  616. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutFunction.ts.html +34 -28
  617. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervals.ts.html +18 -15
  618. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervalsV0.ts.html +75 -129
  619. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ScriptWitnessV0.ts.html +6 -6
  620. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/index.html +84 -69
  621. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/F64.ts.html +8 -53
  622. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/deserializeTlv.ts.html +1 -1
  623. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/getTlv.ts.html +9 -9
  624. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/index.html +15 -15
  625. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/util.ts.html +22 -10
  626. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/index.html +1 -1
  627. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/validate.ts.html +1 -1
  628. package/.yalc/@node-dlc/messaging/coverage/lcov.info +3049 -2826
  629. package/.yalc/@node-dlc/messaging/dist/MessageType.d.ts +2 -1
  630. package/.yalc/@node-dlc/messaging/dist/MessageType.js +2 -1
  631. package/.yalc/@node-dlc/messaging/dist/MessageType.js.map +1 -1
  632. package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js +1 -0
  633. package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js.map +1 -1
  634. package/.yalc/@node-dlc/messaging/dist/index.d.ts +5 -4
  635. package/.yalc/@node-dlc/messaging/dist/index.js +5 -4
  636. package/.yalc/@node-dlc/messaging/dist/index.js.map +1 -1
  637. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignaturesV0.d.ts +42 -0
  638. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignaturesV0.js +68 -0
  639. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignaturesV0.js.map +1 -0
  640. package/.yalc/@node-dlc/messaging/dist/messages/CloseTLV.d.ts +38 -0
  641. package/.yalc/@node-dlc/messaging/dist/messages/CloseTLV.js +59 -0
  642. package/.yalc/@node-dlc/messaging/dist/messages/CloseTLV.js.map +1 -0
  643. package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.d.ts +11 -12
  644. package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js +0 -1
  645. package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js.map +1 -1
  646. package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.d.ts +10 -10
  647. package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js +5 -1
  648. package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js.map +1 -1
  649. package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.d.ts +15 -0
  650. package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js +46 -5
  651. package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js.map +1 -1
  652. package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js +6 -2
  653. package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js.map +1 -1
  654. package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.js.map +1 -1
  655. package/.yalc/@node-dlc/messaging/dist/messages/DlcInput.d.ts +56 -0
  656. package/.yalc/@node-dlc/messaging/dist/messages/DlcInput.js +135 -0
  657. package/.yalc/@node-dlc/messaging/dist/messages/DlcInput.js.map +1 -0
  658. package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.d.ts +16 -1
  659. package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js +50 -5
  660. package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js.map +1 -1
  661. package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js +11 -3
  662. package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js.map +1 -1
  663. package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.d.ts +7 -6
  664. package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js +3 -0
  665. package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js.map +1 -1
  666. package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.d.ts +7 -0
  667. package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js +31 -1
  668. package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js.map +1 -1
  669. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignaturesV0.d.ts +34 -0
  670. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignaturesV0.js +72 -0
  671. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignaturesV0.js.map +1 -0
  672. package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.d.ts +2 -2
  673. package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js +4 -0
  674. package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js.map +1 -1
  675. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncementV0.d.ts +47 -0
  676. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncementV0.js +76 -0
  677. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncementV0.js.map +1 -0
  678. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestationV0.d.ts +48 -0
  679. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestationV0.js +100 -0
  680. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestationV0.js.map +1 -0
  681. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainerV0.d.ts +32 -0
  682. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainerV0.js +67 -0
  683. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainerV0.js.map +1 -0
  684. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventV0.d.ts +54 -0
  685. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventV0.js +100 -0
  686. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventV0.js.map +1 -0
  687. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.d.ts +8 -6
  688. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js +3 -0
  689. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js.map +1 -1
  690. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.d.ts +15 -141
  691. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js +21 -350
  692. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js.map +1 -1
  693. package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.d.ts +3 -2
  694. package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js +22 -7
  695. package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js.map +1 -1
  696. package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.d.ts +48 -36
  697. package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js +97 -50
  698. package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js.map +1 -1
  699. package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.d.ts +1 -1
  700. package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js +1 -1
  701. package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js.map +1 -1
  702. package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.d.ts +7 -13
  703. package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js +11 -25
  704. package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js.map +1 -1
  705. package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js +5 -0
  706. package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js.map +1 -1
  707. package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js +4 -1
  708. package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js.map +1 -1
  709. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js +1 -0
  710. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js.map +1 -1
  711. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervalsV0.d.ts +47 -0
  712. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervalsV0.js +86 -0
  713. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervalsV0.js.map +1 -0
  714. package/.yalc/@node-dlc/messaging/dist/serialize/F64.d.ts +0 -8
  715. package/.yalc/@node-dlc/messaging/dist/serialize/F64.js +0 -13
  716. package/.yalc/@node-dlc/messaging/dist/serialize/F64.js.map +1 -1
  717. package/.yalc/@node-dlc/messaging/dist/util.d.ts +1 -1
  718. package/.yalc/@node-dlc/messaging/dist/util.js +2 -0
  719. package/.yalc/@node-dlc/messaging/dist/util.js.map +1 -1
  720. package/.yalc/@node-dlc/messaging/lib/MessageType.ts +3 -1
  721. package/.yalc/@node-dlc/messaging/lib/chain/ChainManager.ts +1 -0
  722. package/.yalc/@node-dlc/messaging/lib/index.ts +5 -4
  723. package/.yalc/@node-dlc/messaging/lib/messages/ContractDescriptor.ts +15 -16
  724. package/.yalc/@node-dlc/messaging/lib/messages/ContractInfo.ts +17 -12
  725. package/.yalc/@node-dlc/messaging/lib/messages/DlcAccept.ts +50 -6
  726. package/.yalc/@node-dlc/messaging/lib/messages/DlcClose.ts +4 -1
  727. package/.yalc/@node-dlc/messaging/lib/messages/DlcCloseMetadata.ts +0 -3
  728. package/.yalc/@node-dlc/messaging/lib/messages/DlcInput.ts +167 -0
  729. package/.yalc/@node-dlc/messaging/lib/messages/DlcOffer.ts +67 -7
  730. package/.yalc/@node-dlc/messaging/lib/messages/DlcSign.ts +5 -0
  731. package/.yalc/@node-dlc/messaging/lib/messages/EventDescriptor.ts +12 -7
  732. package/.yalc/@node-dlc/messaging/lib/messages/FundingInput.ts +45 -1
  733. package/.yalc/@node-dlc/messaging/lib/messages/NegotiationFields.ts +6 -2
  734. package/.yalc/@node-dlc/messaging/lib/messages/NodeAnnouncementMessage.ts +2 -2
  735. package/.yalc/@node-dlc/messaging/lib/messages/OracleInfo.ts +15 -8
  736. package/.yalc/@node-dlc/messaging/lib/messages/OrderAccept.ts +28 -13
  737. package/.yalc/@node-dlc/messaging/lib/messages/OrderNegotiationFields.ts +127 -74
  738. package/.yalc/@node-dlc/messaging/lib/messages/OrderOffer.ts +2 -3
  739. package/.yalc/@node-dlc/messaging/lib/messages/OrderPositionInfo.ts +10 -33
  740. package/.yalc/@node-dlc/messaging/lib/messages/PayoutCurvePiece.ts +5 -0
  741. package/.yalc/@node-dlc/messaging/lib/messages/PayoutFunction.ts +2 -0
  742. package/.yalc/@node-dlc/messaging/lib/messages/RoundingIntervals.ts +1 -0
  743. package/.yalc/@node-dlc/messaging/lib/serialize/F64.ts +0 -15
  744. package/.yalc/@node-dlc/messaging/lib/serialize/readTlvs.ts +1 -1
  745. package/.yalc/@node-dlc/messaging/lib/util.ts +5 -1
  746. package/.yalc/@node-dlc/messaging/package.json +8 -8
  747. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_3_test.json +76 -74
  748. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_5_test.json +90 -88
  749. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_3_of_5_test.json +162 -160
  750. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_5_of_5_test.json +162 -160
  751. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_3_of_5_test.json +164 -162
  752. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_5_of_5_test.json +164 -162
  753. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_single_oracle_test.json +60 -58
  754. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_hyperbola_test.json +71 -69
  755. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_test.json +71 -69
  756. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_five_oracle_numerical_with_diff_test.json +119 -117
  757. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_test.json +95 -93
  758. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_with_diff_test.json +97 -95
  759. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_test.json +117 -115
  760. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_with_diff_test.json +119 -117
  761. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_3_of_3_test.json +210 -0
  762. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_3_of_5_test.json +468 -0
  763. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_3_of_5_test.json +1517 -0
  764. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_5_of_5_test.json +545 -0
  765. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_with_diff_3_of_5_test.json +4761 -0
  766. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_with_diff_5_of_5_test.json +2169 -0
  767. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_single_oracle_test.json +164 -0
  768. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/single_oracle_numerical_hyperbola_test.json +502 -0
  769. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/single_oracle_numerical_test.json +262 -0
  770. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/three_of_five_oracle_numerical_with_diff_test.json +4382 -0
  771. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/three_of_three_oracle_numerical_test.json +324 -0
  772. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/three_of_three_oracle_numerical_with_diff_test.json +652 -0
  773. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/two_of_five_oracle_numerical_test.json +1138 -0
  774. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/two_of_five_oracle_numerical_with_diff_test.json +2222 -0
  775. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_3_of_3_test.json +212 -0
  776. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_3_of_5_test.json +470 -0
  777. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_3_of_5_test.json +1519 -0
  778. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_5_of_5_test.json +547 -0
  779. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_with_diff_3_of_5_test.json +4763 -0
  780. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_with_diff_5_of_5_test.json +2171 -0
  781. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_single_oracle_test.json +166 -0
  782. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/single_oracle_numerical_hyperbola_test.json +504 -0
  783. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/single_oracle_numerical_test.json +264 -0
  784. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/three_of_five_oracle_numerical_with_diff_test.json +4384 -0
  785. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/three_of_three_oracle_numerical_test.json +326 -0
  786. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/three_of_three_oracle_numerical_with_diff_test.json +654 -0
  787. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/two_of_five_oracle_numerical_test.json +1140 -0
  788. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/two_of_five_oracle_numerical_with_diff_test.json +2224 -0
  789. package/.yalc/@node-dlc/messaging/yalc.sig +1 -1
  790. package/CHANGELOG.md +47 -5
  791. package/README.md +48 -0
  792. package/dist/BitcoinDlcProvider.d.ts +34 -5
  793. package/dist/BitcoinDlcProvider.js +622 -155
  794. package/dist/BitcoinDlcProvider.js.map +1 -1
  795. package/dist/utils/Utils.js +5 -1
  796. package/dist/utils/Utils.js.map +1 -1
  797. package/lib/BitcoinDlcProvider.ts +899 -204
  798. package/lib/utils/Utils.ts +2 -0
  799. package/package.json +10 -10
  800. package/yalc.lock +22 -2
  801. package/.yalc/@node-dlc/messaging/.nyc_output/2cf48009-1094-4275-bb91-c164c932feb6.json +0 -1
  802. package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/2cf48009-1094-4275-bb91-c164c932feb6.json +0 -1
@@ -6,6 +6,7 @@ import {
6
6
  AddSignaturesToRefundTxResponse,
7
7
  AddSignatureToFundTransactionRequest,
8
8
  AddSignatureToFundTransactionResponse,
9
+ Amount,
9
10
  CalculateEcSignatureRequest,
10
11
  CreateBatchDlcTransactionsRequest,
11
12
  CreateBatchDlcTransactionsResponse,
@@ -25,7 +26,12 @@ import {
25
26
  CreateRefundTransactionRequest,
26
27
  CreateRefundTransactionResponse,
27
28
  CreateSignatureHashRequest,
29
+ CreateSplicedDlcTransactionsRequest,
30
+ CreateSplicedDlcTransactionsResponse,
31
+ DlcInputInfoRequest,
28
32
  DlcProvider,
33
+ GetRawDlcFundingInputSignatureRequest,
34
+ GetRawDlcFundingInputSignatureResponse,
29
35
  GetRawFundTxSignatureRequest,
30
36
  GetRawFundTxSignatureResponse,
31
37
  GetRawRefundTxSignatureRequest,
@@ -35,6 +41,8 @@ import {
35
41
  PayoutRequest,
36
42
  SignCetRequest,
37
43
  SignCetResponse,
44
+ SignDlcFundingInputRequest,
45
+ SignDlcFundingInputResponse,
38
46
  SignFundTransactionRequest,
39
47
  SignFundTransactionResponse,
40
48
  Utxo,
@@ -42,15 +50,22 @@ import {
42
50
  VerifyCetAdaptorSignatureResponse,
43
51
  VerifyCetAdaptorSignaturesRequest,
44
52
  VerifyCetAdaptorSignaturesResponse,
53
+ VerifyDlcFundingInputSignatureRequest,
54
+ VerifyDlcFundingInputSignatureResponse,
45
55
  VerifyFundTxSignatureRequest,
46
56
  VerifyFundTxSignatureResponse,
47
57
  VerifyRefundTxSignatureRequest,
48
58
  VerifyRefundTxSignatureResponse,
49
59
  VerifySignatureRequest,
50
60
  } from '@atomicfinance/types';
61
+ import {
62
+ DlcInputInfo,
63
+ InputSupplementationMode,
64
+ } from '@atomicfinance/types/lib/models/Input';
51
65
  import { sleep } from '@atomicfinance/utils';
52
66
  import { Script, Sequence, Tx } from '@node-dlc/bitcoin';
53
67
  import { StreamReader } from '@node-dlc/bufio';
68
+ import { BatchDlcTxBuilder } from '@node-dlc/core';
54
69
  import {
55
70
  DualClosingTxFinalizer,
56
71
  DualFundingTxFinalizer,
@@ -71,6 +86,7 @@ import {
71
86
  DlcAccept,
72
87
  DlcClose,
73
88
  DlcCloseMetadata,
89
+ DlcInput,
74
90
  DlcOffer,
75
91
  DlcSign,
76
92
  DlcTransactions,
@@ -115,8 +131,10 @@ export default class BitcoinDlcProvider
115
131
  implements Partial<DlcProvider>
116
132
  {
117
133
  _network: BitcoinNetwork;
134
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
135
  _cfdDlcJs: any;
119
136
 
137
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
138
  constructor(network: BitcoinNetwork, cfdDlcJs?: any) {
121
139
  super();
122
140
 
@@ -130,22 +148,110 @@ export default class BitcoinDlcProvider
130
148
  }
131
149
  }
132
150
 
151
+ /**
152
+ * Find private key for DLC funding pubkey by deriving wallet addresses
153
+ */
154
+ private async findDlcFundingPrivateKey(
155
+ localFundPubkey: string,
156
+ remoteFundPubkey: string,
157
+ ): Promise<string> {
158
+ const targetPubkeys = [localFundPubkey, remoteFundPubkey];
159
+
160
+ // First check existing wallet addresses
161
+ const addresses = await this.getMethod('getAddresses')();
162
+
163
+ for (const addressInfo of addresses) {
164
+ if (addressInfo.derivationPath) {
165
+ try {
166
+ const keyPair = await this.getMethod('keyPair')(
167
+ addressInfo.derivationPath,
168
+ );
169
+ const pubkey = Buffer.from(keyPair.publicKey);
170
+ const pubkeyHex = pubkey.toString('hex');
171
+
172
+ if (targetPubkeys.includes(pubkeyHex)) {
173
+ return Buffer.from(keyPair.privateKey).toString('hex');
174
+ }
175
+ } catch (error) {
176
+ continue;
177
+ }
178
+ }
179
+ }
180
+
181
+ // If not found in existing addresses, do comprehensive search
182
+ // For DLC splicing, funding pubkeys can be at much higher derivation paths
183
+ console.log('Searching extensively for DLC funding private key...');
184
+
185
+ for (const isChange of [false, true]) {
186
+ for (let i = 0; i < 1000; i++) {
187
+ // Search up to 1000 addresses for DLC keys
188
+ try {
189
+ const address = await this.client.wallet.getAddresses(i, 1, isChange);
190
+ if (address && address.length > 0) {
191
+ const addressInfo = address[0];
192
+
193
+ if (addressInfo.derivationPath) {
194
+ const keyPair = await this.getMethod('keyPair')(
195
+ addressInfo.derivationPath,
196
+ );
197
+ const pubkey = Buffer.from(keyPair.publicKey);
198
+ const pubkeyHex = pubkey.toString('hex');
199
+
200
+ if (targetPubkeys.includes(pubkeyHex)) {
201
+ console.log(
202
+ `Found DLC funding key at derivation path: ${addressInfo.derivationPath}`,
203
+ );
204
+ return Buffer.from(keyPair.privateKey).toString('hex');
205
+ }
206
+ }
207
+ }
208
+ } catch (error) {
209
+ continue;
210
+ }
211
+ }
212
+ }
213
+
214
+ throw new Error(
215
+ `Could not find private key for DLC funding pubkeys: local=${localFundPubkey}, remote=${remoteFundPubkey}`,
216
+ );
217
+ }
218
+
133
219
  private async GetPrivKeysForInputs(inputs: Input[]): Promise<string[]> {
134
220
  const privKeys: string[] = [];
135
221
 
136
222
  for (let i = 0; i < inputs.length; i++) {
137
223
  const input = inputs[i];
138
- let derivationPath = input.derivationPath;
139
224
 
140
- if (!derivationPath) {
141
- derivationPath = (
142
- await this.getMethod('getWalletAddress')(input.address)
143
- ).derivationPath;
144
- }
225
+ if (input.isDlcInput()) {
226
+ // Handle DLC input - use the dedicated method to find the funding private key
227
+ const dlcInput = input.dlcInput!;
228
+ const foundPrivKey = await this.findDlcFundingPrivateKey(
229
+ dlcInput.localFundPubkey,
230
+ dlcInput.remoteFundPubkey,
231
+ );
232
+ privKeys.push(foundPrivKey);
233
+ } else {
234
+ // Handle regular input
235
+ let derivationPath = input.derivationPath;
236
+
237
+ if (!derivationPath) {
238
+ try {
239
+ derivationPath = (
240
+ await this.getMethod('getWalletAddress')(input.address)
241
+ ).derivationPath;
242
+ } catch (error) {
243
+ throw new Error(
244
+ `Unable to find address ${input.address} in wallet. ` +
245
+ `This may happen when using derivation paths outside the normal range. ` +
246
+ `Error: ${error.message}`,
247
+ );
248
+ }
249
+ }
145
250
 
146
- const keyPair = await this.getMethod('keyPair')(derivationPath);
147
- const privKey = Buffer.from(keyPair.__D).toString('hex');
148
- privKeys.push(privKey);
251
+ const keyPair = await this.getMethod('keyPair')(derivationPath);
252
+ const privKey = Buffer.from(keyPair.__D).toString('hex');
253
+ privKeys.push(privKey);
254
+ }
149
255
  }
150
256
 
151
257
  return privKeys;
@@ -164,6 +270,46 @@ export default class BitcoinDlcProvider
164
270
  }
165
271
  }
166
272
 
273
+ /**
274
+ * Get inputs for amount with explicit supplementation control
275
+ */
276
+ async GetInputsForAmountWithMode(
277
+ amounts: bigint[],
278
+ feeRatePerVb: bigint,
279
+ fixedInputs: Input[] = [],
280
+ supplementation: InputSupplementationMode = InputSupplementationMode.Required,
281
+ ): Promise<Input[]> {
282
+ if (amounts.length === 0) return [];
283
+
284
+ // For "none" mode, use exactly the provided inputs
285
+ if (supplementation === InputSupplementationMode.None) {
286
+ return fixedInputs;
287
+ }
288
+
289
+ // For "required" and "optional" modes, attempt supplementation
290
+ const fixedUtxos = fixedInputs.map((input) => input.toUtxo());
291
+
292
+ try {
293
+ const inputsForAmount: InputsForDualAmountResponse = await this.getMethod(
294
+ 'getInputsForDualFunding',
295
+ )(amounts, feeRatePerVb, fixedUtxos);
296
+
297
+ // Convert UTXO objects to Input class instances
298
+ return inputsForAmount.inputs.map((utxo) => Input.fromUTXO(utxo));
299
+ } catch (e) {
300
+ const errorMessage = e instanceof Error ? e.message : 'Unknown error';
301
+
302
+ if (supplementation === InputSupplementationMode.Required) {
303
+ throw Error(
304
+ `Not enough balance GetInputsForAmountWithMode. Error: ${errorMessage}`,
305
+ );
306
+ } else {
307
+ // Optional mode: fallback to provided inputs
308
+ return fixedInputs;
309
+ }
310
+ }
311
+ }
312
+
167
313
  async GetInputsForAmount(
168
314
  amounts: bigint[],
169
315
  feeRatePerVb: bigint,
@@ -179,7 +325,8 @@ export default class BitcoinDlcProvider
179
325
  'getInputsForDualFunding',
180
326
  )(amounts, feeRatePerVb, fixedUtxos);
181
327
 
182
- inputs = inputsForAmount.inputs;
328
+ // Convert UTXO objects to Input class instances
329
+ inputs = inputsForAmount.inputs.map((utxo) => Input.fromUTXO(utxo));
183
330
  } catch (e) {
184
331
  const errorMessage = e instanceof Error ? e.message : 'Unknown error';
185
332
  if (fixedInputs.length === 0) {
@@ -198,6 +345,7 @@ export default class BitcoinDlcProvider
198
345
  collateral: bigint,
199
346
  feeRatePerVb: bigint,
200
347
  fixedInputs: Input[],
348
+ inputSupplementationMode: InputSupplementationMode = InputSupplementationMode.Required,
201
349
  ): Promise<InitializeResponse> {
202
350
  const network = await this.getConnectedNetwork();
203
351
  const payoutAddress: Address =
@@ -220,10 +368,11 @@ export default class BitcoinDlcProvider
220
368
  if (fundingAddress.address === payoutAddress.address)
221
369
  throw Error('Address reuse');
222
370
 
223
- const inputs: Input[] = await this.GetInputsForAmount(
371
+ const inputs: Input[] = await this.GetInputsForAmountWithMode(
224
372
  [collateral],
225
373
  feeRatePerVb,
226
374
  fixedInputs,
375
+ inputSupplementationMode,
227
376
  );
228
377
  const fundingInputs: FundingInput[] = await Promise.all(
229
378
  inputs.map(async (input) => {
@@ -251,10 +400,11 @@ export default class BitcoinDlcProvider
251
400
  ): Promise<BatchInitializeResponse> {
252
401
  const network = await this.getConnectedNetwork();
253
402
 
254
- const inputs: Input[] = await this.GetInputsForAmount(
403
+ const inputs: Input[] = await this.GetInputsForAmountWithMode(
255
404
  collaterals,
256
405
  feeRatePerVb,
257
406
  fixedInputs,
407
+ InputSupplementationMode.Required,
258
408
  );
259
409
 
260
410
  const fundingInputs: FundingInput[] = await Promise.all(
@@ -556,13 +706,45 @@ export default class BitcoinDlcProvider
556
706
  const localChangeScriptPubkey = dlcOffer.changeSpk.toString('hex');
557
707
  const remoteChangeScriptPubkey = dlcAccept.changeSpk.toString('hex');
558
708
 
559
- const localInputs: Utxo[] = await Promise.all(
560
- dlcOffer.fundingInputs.map(async (fundingInput) => {
709
+ // Separate regular inputs from DLC inputs (only from offeror side)
710
+ const localRegularInputs: Utxo[] = [];
711
+ const localDlcInputs: {
712
+ fundTxid: string;
713
+ fundVout: number;
714
+ fundAmount: number;
715
+ localFundPubkey: string;
716
+ remoteFundPubkey: string;
717
+ contractId: string;
718
+ maxWitnessLength: number;
719
+ inputSerialId?: bigint;
720
+ }[] = [];
721
+
722
+ for (const fundingInput of dlcOffer.fundingInputs) {
723
+ if (fundingInput.dlcInput) {
724
+ // This is a DLC input for splicing
725
+ // The pubkeys should be from the original DLC to correctly spend its funding output
726
+ localDlcInputs.push({
727
+ fundTxid: fundingInput.prevTx.txId.toString(),
728
+ fundVout: fundingInput.prevTxVout,
729
+ fundAmount: Number(
730
+ fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
731
+ ),
732
+ localFundPubkey:
733
+ fundingInput.dlcInput.localFundPubkey.toString('hex'),
734
+ remoteFundPubkey:
735
+ fundingInput.dlcInput.remoteFundPubkey.toString('hex'),
736
+ contractId: fundingInput.dlcInput.contractId.toString('hex'),
737
+ maxWitnessLength: fundingInput.maxWitnessLen,
738
+ inputSerialId: fundingInput.inputSerialId,
739
+ });
740
+ } else {
741
+ // Regular input
561
742
  const input = await this.fundingInputToInput(fundingInput, false);
562
- return input.toUtxo();
563
- }),
564
- );
743
+ localRegularInputs.push(input.toUtxo());
744
+ }
745
+ }
565
746
 
747
+ // Process remote inputs (no DLC inputs from acceptor side)
566
748
  const remoteInputs: Utxo[] = await Promise.all(
567
749
  dlcAccept.fundingInputs.map(async (fundingInput) => {
568
750
  const input = await this.fundingInputToInput(fundingInput, false);
@@ -570,7 +752,8 @@ export default class BitcoinDlcProvider
570
752
  }),
571
753
  );
572
754
 
573
- const localInputAmount = localInputs.reduce<number>(
755
+ // Calculate input amounts
756
+ const localInputAmount = localRegularInputs.reduce<number>(
574
757
  (prev, cur) => prev + cur.amount.GetSatoshiAmount(),
575
758
  0,
576
759
  );
@@ -609,47 +792,117 @@ export default class BitcoinDlcProvider
609
792
  messagesList = tempMessagesList;
610
793
  }
611
794
 
612
- const dlcTxRequest: CreateDlcTransactionsRequest = {
613
- payouts,
614
- localFundPubkey,
615
- localFinalScriptPubkey,
616
- remoteFundPubkey,
617
- remoteFinalScriptPubkey,
618
- localInputAmount,
619
- localCollateralAmount: dlcOffer.offerCollateral,
620
- localPayoutSerialId: dlcOffer.payoutSerialId,
621
- localChangeSerialId: dlcOffer.changeSerialId,
622
- remoteInputAmount,
623
- remoteCollateralAmount: dlcAccept.acceptCollateral,
624
- remotePayoutSerialId: dlcAccept.payoutSerialId,
625
- remoteChangeSerialId: dlcAccept.changeSerialId,
626
- refundLocktime: dlcOffer.refundLocktime,
627
- localInputs,
628
- remoteInputs,
629
- localChangeScriptPubkey,
630
- remoteChangeScriptPubkey,
631
- feeRate: Number(dlcOffer.feeRatePerVb),
632
- cetLockTime: dlcOffer.cetLocktime,
633
- fundOutputSerialId: dlcOffer.fundOutputSerialId,
634
- };
795
+ // Determine whether to use regular or spliced DLC transactions
796
+ const hasDlcInputs = localDlcInputs.length > 0;
797
+
798
+ let dlcTxs:
799
+ | CreateDlcTransactionsResponse
800
+ | CreateSplicedDlcTransactionsResponse;
801
+
802
+ if (hasDlcInputs) {
803
+ // Use spliced DLC transactions when DLC inputs are present
804
+ const splicedDlcTxRequest: CreateSplicedDlcTransactionsRequest = {
805
+ payouts,
806
+ localFundPubkey,
807
+ localFinalScriptPubkey,
808
+ remoteFundPubkey,
809
+ remoteFinalScriptPubkey,
810
+ localInputAmount,
811
+ localCollateralAmount: dlcOffer.offerCollateral,
812
+ localPayoutSerialId: dlcOffer.payoutSerialId,
813
+ localChangeSerialId: dlcOffer.changeSerialId,
814
+ remoteInputAmount,
815
+ remoteCollateralAmount: dlcAccept.acceptCollateral,
816
+ remotePayoutSerialId: dlcAccept.payoutSerialId,
817
+ remoteChangeSerialId: dlcAccept.changeSerialId,
818
+ refundLocktime: dlcOffer.refundLocktime,
819
+ localInputs: localRegularInputs,
820
+ localDlcInputs: localDlcInputs,
821
+ remoteInputs,
822
+ localChangeScriptPubkey,
823
+ remoteChangeScriptPubkey,
824
+ feeRate: Number(dlcOffer.feeRatePerVb),
825
+ cetLockTime: dlcOffer.cetLocktime,
826
+ fundOutputSerialId: dlcOffer.fundOutputSerialId,
827
+ };
828
+
829
+ dlcTxs = await this.CreateSplicedDlcTransactions(splicedDlcTxRequest);
830
+ } else {
831
+ // Use regular DLC transactions when no DLC inputs
832
+ const dlcTxRequest: CreateDlcTransactionsRequest = {
833
+ payouts,
834
+ localFundPubkey,
835
+ localFinalScriptPubkey,
836
+ remoteFundPubkey,
837
+ remoteFinalScriptPubkey,
838
+ localInputAmount,
839
+ localCollateralAmount: dlcOffer.offerCollateral,
840
+ localPayoutSerialId: dlcOffer.payoutSerialId,
841
+ localChangeSerialId: dlcOffer.changeSerialId,
842
+ remoteInputAmount,
843
+ remoteCollateralAmount: dlcAccept.acceptCollateral,
844
+ remotePayoutSerialId: dlcAccept.payoutSerialId,
845
+ remoteChangeSerialId: dlcAccept.changeSerialId,
846
+ refundLocktime: dlcOffer.refundLocktime,
847
+ localInputs: localRegularInputs,
848
+ remoteInputs,
849
+ localChangeScriptPubkey,
850
+ remoteChangeScriptPubkey,
851
+ feeRate: Number(dlcOffer.feeRatePerVb),
852
+ cetLockTime: dlcOffer.cetLocktime,
853
+ fundOutputSerialId: dlcOffer.fundOutputSerialId,
854
+ };
635
855
 
636
- const dlcTxs = await this.CreateDlcTransactions(dlcTxRequest);
856
+ dlcTxs = await this.CreateDlcTransactions(dlcTxRequest);
857
+ }
637
858
 
638
859
  const dlcTransactions = new DlcTransactions();
639
860
  dlcTransactions.fundTx = Tx.decode(StreamReader.fromHex(dlcTxs.fundTxHex));
640
- dlcTransactions.fundTxVout = [
641
- BigInt(dlcOffer.changeSerialId),
642
- BigInt(dlcAccept.changeSerialId),
643
- BigInt(dlcTxRequest.fundOutputSerialId),
644
- ]
861
+
862
+ // Build serial IDs based on actual outputs in the transaction
863
+ const actualOutputs = dlcTransactions.fundTx.outputs;
864
+ const serialIds: bigint[] = [];
865
+
866
+ // Always include the funding output serial ID
867
+ serialIds.push(BigInt(dlcOffer.fundOutputSerialId));
868
+
869
+ // Only include change serial IDs if there are actually change outputs
870
+ // For exact amount DLCs with no change, there will be only 1 output (the funding output)
871
+ if (actualOutputs.length > 1) {
872
+ // Multiple outputs means there are change outputs
873
+ if (dlcOffer.offerCollateral > 0n) {
874
+ serialIds.push(BigInt(dlcOffer.changeSerialId));
875
+ }
876
+ if (dlcAccept.acceptCollateral > 0n) {
877
+ serialIds.push(BigInt(dlcAccept.changeSerialId));
878
+ }
879
+ }
880
+
881
+ dlcTransactions.fundTxVout = serialIds
645
882
  .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
646
- .findIndex((i) => BigInt(i) === BigInt(dlcTxRequest.fundOutputSerialId));
883
+ .findIndex((i) => BigInt(i) === BigInt(dlcOffer.fundOutputSerialId));
884
+
885
+ // Validate that the calculated fundTxVout is valid
886
+ if (
887
+ dlcTransactions.fundTxVout < 0 ||
888
+ dlcTransactions.fundTxVout >= dlcTransactions.fundTx.outputs.length
889
+ ) {
890
+ throw new Error(
891
+ `Invalid fundTxVout calculation: calculated=${dlcTransactions.fundTxVout}, ` +
892
+ `fundTx.outputs.length=${dlcTransactions.fundTx.outputs.length}, ` +
893
+ `fundOutputSerialId=${dlcOffer.fundOutputSerialId}, ` +
894
+ `serialIds=[${serialIds.join(', ')}], ` +
895
+ `offerCollateral=${dlcOffer.offerCollateral}, ` +
896
+ `acceptCollateral=${dlcAccept.acceptCollateral}`,
897
+ );
898
+ }
899
+
900
+ dlcTransactions.cets = dlcTxs.cetsHex.map((cetHex) =>
901
+ Tx.decode(StreamReader.fromHex(cetHex)),
902
+ );
647
903
  dlcTransactions.refundTx = Tx.decode(
648
904
  StreamReader.fromHex(dlcTxs.refundTxHex),
649
905
  );
650
- dlcTransactions.cets = dlcTxs.cetsHex.map((cetHex) => {
651
- return Tx.decode(StreamReader.fromHex(cetHex));
652
- });
653
906
 
654
907
  return { dlcTransactions, messagesList };
655
908
  }
@@ -877,6 +1130,19 @@ export default class BitcoinDlcProvider
877
1130
  }
878
1131
  }
879
1132
 
1133
+ private getFundOutputValueSats(dlcTxs: DlcTransactions): bigint {
1134
+ const fundOutput = dlcTxs.fundTx.outputs[dlcTxs.fundTxVout];
1135
+ if (!fundOutput || !fundOutput.value) {
1136
+ throw new Error(
1137
+ `Invalid fund output at vout ${dlcTxs.fundTxVout}: ` +
1138
+ `outputs.length=${dlcTxs.fundTx.outputs.length}, ` +
1139
+ `output exists=${!!fundOutput}, ` +
1140
+ `output.value exists=${!!(fundOutput && fundOutput.value)}`,
1141
+ );
1142
+ }
1143
+ return fundOutput.value.sats;
1144
+ }
1145
+
880
1146
  private async CreateCetAdaptorAndRefundSigs(
881
1147
  _dlcOffer: DlcOffer,
882
1148
  _dlcAccept: DlcAccept,
@@ -922,7 +1188,7 @@ export default class BitcoinDlcProvider
922
1188
  (dlcOffer.contractInfo as SingleContractInfo).contractDescriptor.type ===
923
1189
  MessageType.ContractDescriptorV0
924
1190
  ) {
925
- for (const [_, { oracleInfo }] of contractOraclePairs.entries()) {
1191
+ for (const { oracleInfo } of contractOraclePairs) {
926
1192
  if (oracleInfo.type !== MessageType.SingleOracleInfo) {
927
1193
  throw new Error('Only SingleOracleInfo supported in this context');
928
1194
  }
@@ -942,7 +1208,7 @@ export default class BitcoinDlcProvider
942
1208
  fundVout: dlcTxs.fundTxVout,
943
1209
  localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
944
1210
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
945
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1211
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
946
1212
  oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
947
1213
  oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map(
948
1214
  (nonce) => nonce.toString('hex'),
@@ -1004,8 +1270,7 @@ export default class BitcoinDlcProvider
1004
1270
  fundVout: dlcTxs.fundTxVout,
1005
1271
  localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
1006
1272
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1007
- fundInputAmount:
1008
- dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1273
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1009
1274
  oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
1010
1275
  oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map(
1011
1276
  (nonce) => nonce.toString('hex'),
@@ -1043,7 +1308,7 @@ export default class BitcoinDlcProvider
1043
1308
  fundVout: dlcTxs.fundTxVout,
1044
1309
  localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
1045
1310
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1046
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1311
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1047
1312
  };
1048
1313
 
1049
1314
  const refundSignature = Buffer.from(
@@ -1083,7 +1348,7 @@ export default class BitcoinDlcProvider
1083
1348
  (dlcOffer.contractInfo as SingleContractInfo).contractDescriptor.type ===
1084
1349
  MessageType.ContractDescriptorV0
1085
1350
  ) {
1086
- for (const [_, { oracleInfo }] of contractOraclePairs.entries()) {
1351
+ for (const { oracleInfo } of contractOraclePairs) {
1087
1352
  if (oracleInfo.type !== MessageType.SingleOracleInfo) {
1088
1353
  throw new Error('Only SingleOracleInfo supported in this context');
1089
1354
  }
@@ -1120,8 +1385,7 @@ export default class BitcoinDlcProvider
1120
1385
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1121
1386
  fundTxId: dlcTxs.fundTx.txId.toString(),
1122
1387
  fundVout: dlcTxs.fundTxVout,
1123
- fundInputAmount:
1124
- dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1388
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1125
1389
  verifyRemote: isOfferer,
1126
1390
  };
1127
1391
 
@@ -1145,7 +1409,7 @@ export default class BitcoinDlcProvider
1145
1409
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1146
1410
  fundTxId: dlcTxs.fundTx.txId.toString(),
1147
1411
  fundVout: dlcTxs.fundTxVout,
1148
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1412
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1149
1413
  verifyRemote: isOfferer,
1150
1414
  };
1151
1415
 
@@ -1209,8 +1473,7 @@ export default class BitcoinDlcProvider
1209
1473
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1210
1474
  fundTxId: dlcTxs.fundTx.txId.toString(),
1211
1475
  fundVout: dlcTxs.fundTxVout,
1212
- fundInputAmount:
1213
- dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1476
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1214
1477
  verifyRemote: isOfferer,
1215
1478
  };
1216
1479
 
@@ -1235,7 +1498,7 @@ export default class BitcoinDlcProvider
1235
1498
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1236
1499
  fundTxId: dlcTxs.fundTx.txId.toString(),
1237
1500
  fundVout: dlcTxs.fundTxVout,
1238
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1501
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1239
1502
  verifyRemote: isOfferer,
1240
1503
  };
1241
1504
 
@@ -1276,15 +1539,34 @@ export default class BitcoinDlcProvider
1276
1539
 
1277
1540
  const fundTxSigs = await Promise.all(
1278
1541
  inputs.map(async (input, index) => {
1279
- const fundTxSignRequest: GetRawFundTxSignatureRequest = {
1280
- fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
1281
- privkey: inputPrivKeys[index],
1282
- prevTxId: input.txid,
1283
- prevVout: input.vout,
1284
- amount: input.value,
1285
- };
1542
+ // Use DLC-specific signing for DLC inputs
1543
+ if (input.isDlcInput()) {
1544
+ const dlcInputInfo = input.dlcInput!;
1545
+
1546
+ const dlcSignRequest: GetRawDlcFundingInputSignatureRequest = {
1547
+ fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
1548
+ fundTxid: input.txid,
1549
+ fundVout: input.vout,
1550
+ fundAmount: input.value,
1551
+ localFundPubkey: dlcInputInfo.localFundPubkey,
1552
+ remoteFundPubkey: dlcInputInfo.remoteFundPubkey,
1553
+ privkey: inputPrivKeys[index],
1554
+ };
1555
+
1556
+ return (await this.GetRawDlcFundingInputSignature(dlcSignRequest))
1557
+ .hex;
1558
+ } else {
1559
+ // Use regular signing for non-DLC inputs
1560
+ const fundTxSignRequest: GetRawFundTxSignatureRequest = {
1561
+ fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
1562
+ privkey: inputPrivKeys[index],
1563
+ prevTxId: input.txid,
1564
+ prevVout: input.vout,
1565
+ amount: input.value,
1566
+ };
1286
1567
 
1287
- return (await this.GetRawFundTxSignature(fundTxSignRequest)).hex;
1568
+ return (await this.GetRawFundTxSignature(fundTxSignRequest)).hex;
1569
+ }
1288
1570
  }),
1289
1571
  );
1290
1572
 
@@ -1332,23 +1614,49 @@ export default class BitcoinDlcProvider
1332
1614
  ? (dlcAccept.fundingInputs[i] as FundingInput)
1333
1615
  : (dlcOffer.fundingInputs[i] as FundingInput);
1334
1616
 
1335
- const verifyFundSigRequest: VerifyFundTxSignatureRequest = {
1336
- fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
1337
- signature,
1338
- pubkey,
1339
- prevTxId: fundingInput.prevTx.txId.toString(),
1340
- prevVout: fundingInput.prevTxVout,
1341
- fundInputAmount:
1342
- fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
1343
- };
1617
+ // Check if this is a DLC input and use appropriate verification
1618
+ if (fundingInput.dlcInput) {
1619
+ const dlcInput = fundingInput.dlcInput;
1620
+ const verifyDlcSigRequest: VerifyDlcFundingInputSignatureRequest = {
1621
+ fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
1622
+ fundTxid: fundingInput.prevTx.txId.toString(),
1623
+ fundVout: fundingInput.prevTxVout,
1624
+ fundAmount: Number(
1625
+ fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
1626
+ ),
1627
+ localFundPubkey: dlcInput.localFundPubkey.toString('hex'),
1628
+ remoteFundPubkey: dlcInput.remoteFundPubkey.toString('hex'),
1629
+ signature,
1630
+ pubkey,
1631
+ };
1344
1632
 
1345
- sigsValidity.push(
1346
- (async () => {
1347
- const response =
1348
- await this.VerifyFundTxSignature(verifyFundSigRequest);
1349
- return response.valid;
1350
- })(),
1351
- );
1633
+ sigsValidity.push(
1634
+ (async () => {
1635
+ const response =
1636
+ await this.VerifyDlcFundingInputSignature(verifyDlcSigRequest);
1637
+ return response.valid;
1638
+ })(),
1639
+ );
1640
+ } else {
1641
+ // Regular input verification
1642
+ const verifyFundSigRequest: VerifyFundTxSignatureRequest = {
1643
+ fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
1644
+ signature,
1645
+ pubkey,
1646
+ prevTxId: fundingInput.prevTx.txId.toString(),
1647
+ prevVout: fundingInput.prevTxVout,
1648
+ fundInputAmount:
1649
+ fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
1650
+ };
1651
+
1652
+ sigsValidity.push(
1653
+ (async () => {
1654
+ const response =
1655
+ await this.VerifyFundTxSignature(verifyFundSigRequest);
1656
+ return response.valid;
1657
+ })(),
1658
+ );
1659
+ }
1352
1660
  }
1353
1661
 
1354
1662
  const areSigsValid = (await Promise.all(sigsValidity)).every((b) => b);
@@ -1376,6 +1684,9 @@ export default class BitcoinDlcProvider
1376
1684
 
1377
1685
  let fundTxHex = dlcTxs.fundTx.serialize().toString('hex');
1378
1686
 
1687
+ // Track processed DLC inputs to avoid double processing
1688
+ const processedDlcInputs = new Set<string>();
1689
+
1379
1690
  await asyncForEach(
1380
1691
  witnessElements,
1381
1692
  async (witnessElement: ScriptWitnessV0, i: number) => {
@@ -1383,16 +1694,49 @@ export default class BitcoinDlcProvider
1383
1694
  const pubkey = witnessElement[1].witness.toString('hex');
1384
1695
 
1385
1696
  const fundingInput = fundingInputs[i] as FundingInput;
1697
+ const inputKey = `${fundingInput.prevTx.txId.toString()}:${fundingInput.prevTxVout}`;
1386
1698
 
1387
- const addSignRequest: AddSignatureToFundTransactionRequest = {
1388
- fundTxHex,
1389
- signature,
1390
- prevTxId: fundingInput.prevTx.txId.toString(),
1391
- prevVout: fundingInput.prevTxVout,
1392
- pubkey,
1393
- };
1394
- fundTxHex = (await this.AddSignatureToFundTransaction(addSignRequest))
1395
- .hex;
1699
+ // Check if this is a DLC input
1700
+ if (fundingInput.dlcInput && !processedDlcInputs.has(inputKey)) {
1701
+ // Mark as processed to avoid double processing
1702
+ processedDlcInputs.add(inputKey);
1703
+
1704
+ // For DLC inputs, use SignDlcFundingInput which properly combines signatures
1705
+ // This is the correct CFD method for DLC funding inputs
1706
+ const dlcInput = fundingInput.dlcInput;
1707
+
1708
+ // Find the private key for this DLC input
1709
+ const privateKey = await this.findDlcFundingPrivateKey(
1710
+ dlcInput.localFundPubkey.toString('hex'),
1711
+ dlcInput.remoteFundPubkey.toString('hex'),
1712
+ );
1713
+
1714
+ const signDlcRequest: SignDlcFundingInputRequest = {
1715
+ fundTxHex,
1716
+ fundTxid: fundingInput.prevTx.txId.toString(),
1717
+ fundVout: fundingInput.prevTxVout,
1718
+ fundAmount: Number(
1719
+ fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
1720
+ ),
1721
+ localFundPubkey: dlcInput.localFundPubkey.toString('hex'),
1722
+ remoteFundPubkey: dlcInput.remoteFundPubkey.toString('hex'),
1723
+ localPrivkey: privateKey,
1724
+ remoteSignature: signature,
1725
+ };
1726
+ fundTxHex = (await this.SignDlcFundingInput(signDlcRequest)).hex;
1727
+ } else if (!fundingInput.dlcInput) {
1728
+ // Regular input - use standard signing
1729
+ const addSignRequest: AddSignatureToFundTransactionRequest = {
1730
+ fundTxHex,
1731
+ signature,
1732
+ prevTxId: fundingInput.prevTx.txId.toString(),
1733
+ prevVout: fundingInput.prevTxVout,
1734
+ pubkey,
1735
+ };
1736
+ fundTxHex = (await this.AddSignatureToFundTransaction(addSignRequest))
1737
+ .hex;
1738
+ }
1739
+ // If it's a DLC input but already processed, skip it
1396
1740
  },
1397
1741
  );
1398
1742
 
@@ -1570,7 +1914,7 @@ Payout Group not found',
1570
1914
  index = 0;
1571
1915
  groupLength = 0;
1572
1916
 
1573
- for (const [i, payoutGroup] of payoutGroups.entries()) {
1917
+ for (const [, payoutGroup] of payoutGroups.entries()) {
1574
1918
  groupIndex = payoutGroup.groups.findIndex((group) => {
1575
1919
  return group.every((msg, j) => msg === outcomesFormatted[j]);
1576
1920
  });
@@ -1794,7 +2138,7 @@ Payout Group not found even with brute force search',
1794
2138
  oracleSignatures: oracleAttestation.signatures.map((sig) =>
1795
2139
  sig.toString('hex'),
1796
2140
  ),
1797
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
2141
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1798
2142
  adaptorSignature: isOfferer
1799
2143
  ? dlcAccept.cetAdaptorSignatures.sigs[
1800
2144
  outcomeIndex
@@ -1824,7 +2168,7 @@ Payout Group not found even with brute force search',
1824
2168
  localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
1825
2169
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1826
2170
  oracleSignatures: oracleSignatures.map((sig) => sig.toString('hex')),
1827
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
2171
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1828
2172
  adaptorSignature: isOfferer
1829
2173
  ? dlcAccept.cetAdaptorSignatures.sigs[
1830
2174
  outcomeIndex
@@ -2044,7 +2388,7 @@ Payout Group not found even with brute force search',
2044
2388
  hex: paymentVariant.redeem.output.toString('hex'),
2045
2389
  type: 'redeem_script',
2046
2390
  },
2047
- amount: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
2391
+ amount: Number(this.getFundOutputValueSats(dlcTxs)),
2048
2392
  hashType: 'p2wsh',
2049
2393
  sighashType: 'all',
2050
2394
  sighashAnyoneCanPay: false,
@@ -2159,7 +2503,7 @@ Payout Group not found even with brute force search',
2159
2503
  hashType: 'p2wsh',
2160
2504
  sighashType: 'all',
2161
2505
  sighashAnyoneCanPay: false,
2162
- amount: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
2506
+ amount: Number(this.getFundOutputValueSats(dlcTxs)),
2163
2507
  },
2164
2508
  };
2165
2509
 
@@ -2229,6 +2573,7 @@ Payout Group not found even with brute force search',
2229
2573
  * @param feeRatePerVb Fee rate in satoshi per virtual byte that both sides use to compute fees in funding tx
2230
2574
  * @param cetLocktime The nLockTime to be put on CETs
2231
2575
  * @param refundLocktime The nLockTime to be put on the refund transaction
2576
+ * @param fixedInputs Optional fixed inputs - can be Input[] for regular inputs or FundingInput[] for DLC inputs
2232
2577
  * @returns {Promise<DlcOffer>}
2233
2578
  */
2234
2579
  async createDlcOffer(
@@ -2237,7 +2582,8 @@ Payout Group not found even with brute force search',
2237
2582
  feeRatePerVb: bigint,
2238
2583
  cetLocktime: number,
2239
2584
  refundLocktime: number,
2240
- fixedInputs?: Input[],
2585
+ fixedInputs?: Input[] | FundingInput[],
2586
+ inputSupplementationMode?: InputSupplementationMode,
2241
2587
  ): Promise<DlcOffer> {
2242
2588
  contractInfo.validate();
2243
2589
  const network = await this.getConnectedNetwork();
@@ -2247,18 +2593,56 @@ Payout Group not found even with brute force search',
2247
2593
  // Generate a random 32-byte temporary contract ID
2248
2594
  dlcOffer.temporaryContractId = crypto.randomBytes(32);
2249
2595
 
2250
- const {
2251
- fundingPubKey,
2252
- payoutSPK,
2253
- payoutSerialId,
2254
- fundingInputs: _fundingInputs,
2255
- changeSPK,
2256
- changeSerialId,
2257
- } = await this.Initialize(
2258
- offerCollateralSatoshis,
2259
- feeRatePerVb,
2260
- fixedInputs,
2261
- );
2596
+ // Check if we have FundingInput[] (DLC inputs) or Input[] (regular inputs)
2597
+ const hasFundingInputs =
2598
+ fixedInputs && fixedInputs.length > 0 && 'prevTx' in fixedInputs[0]; // FundingInput has prevTx, Input doesn't
2599
+
2600
+ let fundingPubKey: Buffer;
2601
+ let payoutSPK: Buffer;
2602
+ let payoutSerialId: bigint;
2603
+ let _fundingInputs: FundingInput[];
2604
+ let changeSPK: Buffer;
2605
+ let changeSerialId: bigint;
2606
+
2607
+ if (hasFundingInputs) {
2608
+ // Handle FundingInput[] directly (for DLC inputs)
2609
+ const fundingInputs = fixedInputs as FundingInput[];
2610
+
2611
+ // Generate addresses directly since we're bypassing Initialize()
2612
+ const payoutAddress: Address =
2613
+ await this.client.wallet.getUnusedAddress(false);
2614
+ payoutSPK = address.toOutputScript(payoutAddress.address, network);
2615
+
2616
+ const changeAddress: Address =
2617
+ await this.client.wallet.getUnusedAddress(true);
2618
+ changeSPK = address.toOutputScript(changeAddress.address, network);
2619
+
2620
+ const fundingAddress: Address =
2621
+ await this.client.wallet.getUnusedAddress(false);
2622
+ fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
2623
+
2624
+ if (fundingAddress.address === payoutAddress.address)
2625
+ throw Error('Address reuse');
2626
+
2627
+ payoutSerialId = generateSerialId();
2628
+ changeSerialId = generateSerialId();
2629
+ _fundingInputs = fundingInputs;
2630
+ } else {
2631
+ // Handle Input[] through existing Initialize() flow
2632
+ const initResult = await this.Initialize(
2633
+ offerCollateralSatoshis,
2634
+ feeRatePerVb,
2635
+ fixedInputs as Input[],
2636
+ inputSupplementationMode || InputSupplementationMode.Required,
2637
+ );
2638
+
2639
+ fundingPubKey = initResult.fundingPubKey;
2640
+ payoutSPK = initResult.payoutSPK;
2641
+ payoutSerialId = initResult.payoutSerialId;
2642
+ _fundingInputs = initResult.fundingInputs;
2643
+ changeSPK = initResult.changeSPK;
2644
+ changeSerialId = initResult.changeSerialId;
2645
+ }
2262
2646
 
2263
2647
  _fundingInputs.forEach((input) =>
2264
2648
  assert(
@@ -2298,6 +2682,10 @@ Payout Group not found even with brute force search',
2298
2682
  dlcOffer.cetLocktime = cetLocktime;
2299
2683
  dlcOffer.refundLocktime = refundLocktime;
2300
2684
 
2685
+ if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
2686
+ dlcOffer.markAsSingleFunded();
2687
+ }
2688
+
2301
2689
  assert(
2302
2690
  (() => {
2303
2691
  const finalizer = new DualFundingTxFinalizer(
@@ -2400,6 +2788,10 @@ Payout Group not found even with brute force search',
2400
2788
  dlcOffer.cetLocktime = cetLocktime;
2401
2789
  dlcOffer.refundLocktime = refundLocktime;
2402
2790
 
2791
+ if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
2792
+ dlcOffer.markAsSingleFunded();
2793
+ }
2794
+
2403
2795
  assert(
2404
2796
  (() => {
2405
2797
  const finalizer = new DualFundingTxFinalizer(
@@ -2429,14 +2821,14 @@ Payout Group not found even with brute force search',
2429
2821
  }
2430
2822
 
2431
2823
  /**
2432
- * Accept DLC Offer
2824
+ * Accept DLC Offer (supports single-funded DLCs when accept collateral is 0)
2433
2825
  * @param _dlcOffer Dlc Offer Message
2434
2826
  * @param fixedInputs Optional inputs to use for Funding Inputs
2435
2827
  * @returns {Promise<AcceptDlcOfferResponse}
2436
2828
  */
2437
2829
  async acceptDlcOffer(
2438
2830
  _dlcOffer: DlcOffer,
2439
- fixedInputs?: Input[],
2831
+ fixedInputs?: Input[] | FundingInput[],
2440
2832
  ): Promise<AcceptDlcOfferResponse> {
2441
2833
  const { dlcOffer } = checkTypes({ _dlcOffer });
2442
2834
  dlcOffer.validate();
@@ -2450,37 +2842,130 @@ Payout Group not found even with brute force search',
2450
2842
  'acceptCollaterialSatoshis should equal totalCollateral - offerCollateralSatoshis',
2451
2843
  );
2452
2844
 
2453
- const {
2454
- fundingPubKey,
2455
- payoutSPK,
2456
- payoutSerialId,
2457
- fundingInputs: _fundingInputs,
2458
- changeSPK,
2459
- changeSerialId,
2460
- } = await this.Initialize(
2461
- acceptCollateralSatoshis,
2462
- dlcOffer.feeRatePerVb,
2463
- fixedInputs,
2464
- );
2845
+ let fundingPubKey: Buffer;
2846
+ let payoutSPK: Buffer;
2847
+ let payoutSerialId: bigint;
2848
+ let fundingInputs: FundingInput[];
2849
+ let changeSPK: Buffer;
2850
+ let changeSerialId: bigint;
2465
2851
 
2466
- assert(
2467
- Buffer.compare(dlcOffer.fundingPubkey, fundingPubKey) !== 0,
2468
- 'DlcOffer and DlcAccept FundingPubKey cannot be the same',
2469
- );
2852
+ if (acceptCollateralSatoshis === BigInt(0)) {
2853
+ // Single-funded DLC: accept side provides no funding
2854
+ const network = await this.getConnectedNetwork();
2470
2855
 
2471
- _fundingInputs.forEach((input) =>
2472
- assert(
2473
- input.type === MessageType.FundingInput,
2474
- 'FundingInput must be V0',
2475
- ),
2476
- );
2856
+ // Still need payout address for receiving DLC outcomes
2857
+ const payoutAddress: Address =
2858
+ await this.client.wallet.getUnusedAddress(false);
2859
+ payoutSPK = address.toOutputScript(payoutAddress.address, network);
2477
2860
 
2478
- const fundingInputs: FundingInput[] = _fundingInputs.map(
2479
- (input) => input as FundingInput,
2480
- );
2861
+ // Generate funding pubkey for DLC contract construction
2862
+ const fundingAddress: Address =
2863
+ await this.client.wallet.getUnusedAddress(false);
2864
+ fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
2481
2865
 
2482
- fundingInputs.sort(
2483
- (a, b) => Number(a.inputSerialId) - Number(b.inputSerialId),
2866
+ // Generate change address (even though not used)
2867
+ const changeAddress: Address =
2868
+ await this.client.wallet.getUnusedAddress(true);
2869
+ changeSPK = address.toOutputScript(changeAddress.address, network);
2870
+
2871
+ if (fundingAddress.address === payoutAddress.address)
2872
+ throw Error('Address reuse');
2873
+
2874
+ // Generate serial IDs
2875
+ payoutSerialId = generateSerialId();
2876
+ changeSerialId = generateSerialId();
2877
+
2878
+ // No funding inputs for single-funded DLC
2879
+ fundingInputs = [];
2880
+ } else {
2881
+ // Standard DLC: accept side provides funding
2882
+
2883
+ // Check if we have FundingInput[] (DLC inputs) or Input[] (regular inputs)
2884
+ const hasFundingInputs =
2885
+ fixedInputs && fixedInputs.length > 0 && 'prevTx' in fixedInputs[0]; // FundingInput has prevTx, Input doesn't
2886
+
2887
+ let initResult: InitializeResponse;
2888
+
2889
+ if (hasFundingInputs) {
2890
+ // Handle FundingInput[] directly (for DLC inputs)
2891
+ const fundingInputs = fixedInputs as FundingInput[];
2892
+ const network = await this.getConnectedNetwork();
2893
+
2894
+ // Generate addresses directly since we're bypassing Initialize()
2895
+ const payoutAddress: Address =
2896
+ await this.client.wallet.getUnusedAddress(false);
2897
+ const payoutSPK = address.toOutputScript(
2898
+ payoutAddress.address,
2899
+ network,
2900
+ );
2901
+
2902
+ const changeAddress: Address =
2903
+ await this.client.wallet.getUnusedAddress(true);
2904
+ const changeSPK = address.toOutputScript(
2905
+ changeAddress.address,
2906
+ network,
2907
+ );
2908
+
2909
+ const fundingAddress: Address =
2910
+ await this.client.wallet.getUnusedAddress(false);
2911
+ const fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
2912
+
2913
+ if (fundingAddress.address === payoutAddress.address)
2914
+ throw Error('Address reuse');
2915
+
2916
+ const payoutSerialId = generateSerialId();
2917
+ const changeSerialId = generateSerialId();
2918
+
2919
+ initResult = {
2920
+ fundingPubKey,
2921
+ payoutSPK,
2922
+ payoutSerialId,
2923
+ fundingInputs,
2924
+ changeSPK,
2925
+ changeSerialId,
2926
+ };
2927
+ } else {
2928
+ // Handle Input[] through existing Initialize() flow
2929
+ // Use InputSupplementationMode.None when fixed inputs are provided
2930
+ // to avoid wallet lookup issues with unusual addresses
2931
+ const supplementationMode =
2932
+ fixedInputs && fixedInputs.length > 0
2933
+ ? InputSupplementationMode.None
2934
+ : InputSupplementationMode.Required;
2935
+
2936
+ initResult = await this.Initialize(
2937
+ acceptCollateralSatoshis,
2938
+ dlcOffer.feeRatePerVb,
2939
+ fixedInputs as Input[],
2940
+ supplementationMode,
2941
+ );
2942
+ }
2943
+
2944
+ fundingPubKey = initResult.fundingPubKey;
2945
+ payoutSPK = initResult.payoutSPK;
2946
+ payoutSerialId = initResult.payoutSerialId;
2947
+ changeSPK = initResult.changeSPK;
2948
+ changeSerialId = initResult.changeSerialId;
2949
+
2950
+ const _fundingInputs = initResult.fundingInputs;
2951
+
2952
+ _fundingInputs.forEach((input) =>
2953
+ assert(
2954
+ input.type === MessageType.FundingInput,
2955
+ 'FundingInput must be V0',
2956
+ ),
2957
+ );
2958
+
2959
+ fundingInputs = _fundingInputs.map((input) => input as FundingInput);
2960
+
2961
+ fundingInputs.sort(
2962
+ (a, b) => Number(a.inputSerialId) - Number(b.inputSerialId),
2963
+ );
2964
+ }
2965
+
2966
+ assert(
2967
+ Buffer.compare(dlcOffer.fundingPubkey, fundingPubKey) !== 0,
2968
+ 'DlcOffer and DlcAccept FundingPubKey cannot be the same',
2484
2969
  );
2485
2970
 
2486
2971
  const dlcAccept = new DlcAccept();
@@ -2516,27 +3001,32 @@ Payout Group not found even with brute force search',
2516
3001
  'offer.changeSerialID, accept.changeSerialId and fundOutputSerialId must be unique',
2517
3002
  );
2518
3003
 
3004
+ if (dlcOffer.singleFunded) dlcAccept.markAsSingleFunded();
3005
+
2519
3006
  dlcAccept.validate();
2520
3007
 
2521
- assert(
2522
- (() => {
2523
- const finalizer = new DualFundingTxFinalizer(
2524
- dlcOffer.fundingInputs,
2525
- dlcOffer.payoutSpk,
2526
- dlcOffer.changeSpk,
2527
- dlcAccept.fundingInputs,
2528
- dlcAccept.payoutSpk,
2529
- dlcAccept.changeSpk,
2530
- dlcOffer.feeRatePerVb,
2531
- );
2532
- const funding = fundingInputs.reduce((total, input) => {
2533
- return total + input.prevTx.outputs[input.prevTxVout].value.sats;
2534
- }, BigInt(0));
3008
+ // Only validate funding requirements if accept side is providing collateral
3009
+ if (acceptCollateralSatoshis > BigInt(0)) {
3010
+ assert(
3011
+ (() => {
3012
+ const finalizer = new DualFundingTxFinalizer(
3013
+ dlcOffer.fundingInputs,
3014
+ dlcOffer.payoutSpk,
3015
+ dlcOffer.changeSpk,
3016
+ dlcAccept.fundingInputs,
3017
+ dlcAccept.payoutSpk,
3018
+ dlcAccept.changeSpk,
3019
+ dlcOffer.feeRatePerVb,
3020
+ );
3021
+ const funding = fundingInputs.reduce((total, input) => {
3022
+ return total + input.prevTx.outputs[input.prevTxVout].value.sats;
3023
+ }, BigInt(0));
2535
3024
 
2536
- return funding >= acceptCollateralSatoshis + finalizer.acceptFees;
2537
- })(),
2538
- 'fundingInputs for dlcAccept must be greater than acceptCollateralSatoshis plus acceptFees',
2539
- );
3025
+ return funding >= acceptCollateralSatoshis + finalizer.acceptFees;
3026
+ })(),
3027
+ 'fundingInputs for dlcAccept must be greater than acceptCollateralSatoshis plus acceptFees',
3028
+ );
3029
+ }
2540
3030
 
2541
3031
  const { dlcTransactions, messagesList } = await this.createDlcTxs(
2542
3032
  dlcOffer,
@@ -2725,13 +3215,9 @@ Payout Group not found even with brute force search',
2725
3215
  * @returns {Promise<SignDlcAcceptResponse}
2726
3216
  */
2727
3217
  async signDlcAccept(
2728
- _dlcOffer: DlcOffer,
2729
- _dlcAccept: DlcAccept,
3218
+ dlcOffer: DlcOffer,
3219
+ dlcAccept: DlcAccept,
2730
3220
  ): Promise<SignDlcAcceptResponse> {
2731
- const { dlcOffer, dlcAccept } = checkTypes({
2732
- _dlcOffer,
2733
- _dlcAccept,
2734
- });
2735
3221
  dlcOffer.validate();
2736
3222
  dlcAccept.validate();
2737
3223
 
@@ -3144,28 +3630,46 @@ Payout Group not found even with brute force search',
3144
3630
  // Initiate and build PSBT
3145
3631
  let inputs: Input[] = _inputs;
3146
3632
  if (!_inputs) {
3147
- const tempInputs = await this.GetInputsForAmount(
3633
+ const tempInputs = await this.GetInputsForAmountWithMode(
3148
3634
  [BigInt(20000)],
3149
3635
  dlcOffer.feeRatePerVb,
3150
- _inputs,
3636
+ _inputs || [],
3637
+ InputSupplementationMode.Required,
3151
3638
  );
3152
3639
  _inputs = tempInputs;
3153
3640
  }
3154
- inputs = _inputs.map((input) => {
3155
- return {
3156
- ...input,
3157
- inputSerialId: input.inputSerialId || generateSerialId(),
3158
- toUtxo: input.toUtxo,
3159
- };
3160
- });
3641
+ // Ensure all inputs have derivation paths by fetching from wallet
3642
+ const inputsWithPaths: { input: Input; address: Address }[] =
3643
+ await Promise.all(
3644
+ _inputs.map(async (input) => {
3645
+ const address: Address = await this.getMethod('getWalletAddress')(
3646
+ input.address,
3647
+ );
3648
+ const inputWithPath = new Input(
3649
+ input.txid,
3650
+ input.vout,
3651
+ input.address,
3652
+ input.amount,
3653
+ input.value,
3654
+ input.derivationPath || address.derivationPath, // Use derivationPath from wallet if not set
3655
+ input.maxWitnessLength,
3656
+ input.redeemScript,
3657
+ input.inputSerialId || generateSerialId(),
3658
+ input.scriptPubKey,
3659
+ input.label,
3660
+ input.confirmations,
3661
+ input.spendable,
3662
+ input.solvable,
3663
+ input.safe,
3664
+ input.dlcInput,
3665
+ );
3666
+ return { input: inputWithPath, address };
3667
+ }),
3668
+ );
3161
3669
 
3162
- const pubkeys: Buffer[] = await Promise.all(
3163
- inputs.map(async (input) => {
3164
- const address: Address = await this.getMethod('getWalletAddress')(
3165
- input.address,
3166
- );
3167
- return Buffer.from(address.publicKey, 'hex');
3168
- }),
3670
+ inputs = inputsWithPaths.map((item) => item.input);
3671
+ const pubkeys: Buffer[] = inputsWithPaths.map((item) =>
3672
+ Buffer.from(item.address.publicKey, 'hex'),
3169
3673
  );
3170
3674
 
3171
3675
  const fundingInputSerialId = generateSerialId();
@@ -3179,7 +3683,7 @@ Payout Group not found even with brute force search',
3179
3683
  sequence: 0,
3180
3684
  witnessUtxo: {
3181
3685
  script: paymentVariant.output,
3182
- value: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
3686
+ value: Number(this.getFundOutputValueSats(dlcTxs)),
3183
3687
  },
3184
3688
  witnessScript: paymentVariant.redeem.output,
3185
3689
  inputSerialId: fundingInputSerialId,
@@ -3217,7 +3721,7 @@ Payout Group not found even with brute force search',
3217
3721
  );
3218
3722
 
3219
3723
  // add to psbt
3220
- sortedPsbtInputs.forEach((input, i) => psbt.addInput(input));
3724
+ sortedPsbtInputs.forEach((input) => psbt.addInput(input));
3221
3725
 
3222
3726
  const fundingInputs: FundingInput[] = await Promise.all(
3223
3727
  inputs.map(async (input) => {
@@ -3282,6 +3786,9 @@ Payout Group not found even with brute force search',
3282
3786
  if (i === fundingInputIndex) return;
3283
3787
 
3284
3788
  // derive keypair
3789
+ if (!input.derivationPath) {
3790
+ throw new Error(`Missing derivation path for input ${i}`);
3791
+ }
3285
3792
  const keyPair = await this.getMethod('keyPair')(input.derivationPath);
3286
3793
  psbt.signInput(i, keyPair);
3287
3794
  }),
@@ -3581,14 +4088,14 @@ Payout Group not found even with brute force search',
3581
4088
  sequence: 0,
3582
4089
  witnessUtxo: {
3583
4090
  script: paymentVariant.output,
3584
- value: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
4091
+ value: Number(this.getFundOutputValueSats(dlcTxs)),
3585
4092
  },
3586
4093
  witnessScript: paymentVariant.redeem.output,
3587
4094
  inputSerialId: dlcClose.fundInputSerialId,
3588
4095
  });
3589
4096
 
3590
4097
  // add all dlc close inputs
3591
- dlcClose.fundingInputs.forEach((input, i) => {
4098
+ dlcClose.fundingInputs.forEach((input) => {
3592
4099
  psbtInputs.push({
3593
4100
  hash: input.prevTx.txId.serialize(),
3594
4101
  index: input.prevTxVout,
@@ -3643,7 +4150,7 @@ Payout Group not found even with brute force search',
3643
4150
  });
3644
4151
 
3645
4152
  // add to psbt
3646
- sortedPsbtInputs.forEach((input, i) => psbt.addInput(input));
4153
+ sortedPsbtInputs.forEach((input) => psbt.addInput(input));
3647
4154
 
3648
4155
  const offerer = await this.isOfferer(dlcOffer, dlcAccept);
3649
4156
 
@@ -3839,6 +4346,38 @@ Payout Group not found even with brute force search',
3839
4346
  return this._cfdDlcJs.VerifyRefundTxSignature(jsonObject);
3840
4347
  }
3841
4348
 
4349
+ async CreateSplicedDlcTransactions(
4350
+ jsonObject: CreateSplicedDlcTransactionsRequest,
4351
+ ): Promise<CreateSplicedDlcTransactionsResponse> {
4352
+ await this.CfdLoaded();
4353
+
4354
+ return this._cfdDlcJs.CreateSplicedDlcTransactions(jsonObject);
4355
+ }
4356
+
4357
+ async GetRawDlcFundingInputSignature(
4358
+ jsonObject: GetRawDlcFundingInputSignatureRequest,
4359
+ ): Promise<GetRawDlcFundingInputSignatureResponse> {
4360
+ await this.CfdLoaded();
4361
+
4362
+ return this._cfdDlcJs.GetRawDlcFundingInputSignature(jsonObject);
4363
+ }
4364
+
4365
+ async SignDlcFundingInput(
4366
+ jsonObject: SignDlcFundingInputRequest,
4367
+ ): Promise<SignDlcFundingInputResponse> {
4368
+ await this.CfdLoaded();
4369
+
4370
+ return this._cfdDlcJs.SignDlcFundingInput(jsonObject);
4371
+ }
4372
+
4373
+ async VerifyDlcFundingInputSignature(
4374
+ jsonObject: VerifyDlcFundingInputSignatureRequest,
4375
+ ): Promise<VerifyDlcFundingInputSignatureResponse> {
4376
+ await this.CfdLoaded();
4377
+
4378
+ return this._cfdDlcJs.VerifyDlcFundingInputSignature(jsonObject);
4379
+ }
4380
+
3842
4381
  async fundingInputToInput(
3843
4382
  _input: FundingInput,
3844
4383
  findDerivationPath = true,
@@ -3861,21 +4400,36 @@ Payout Group not found even with brute force search',
3861
4400
  }
3862
4401
  }
3863
4402
 
3864
- return {
3865
- txid: prevTx.txId.toString(),
3866
- vout: input.prevTxVout,
3867
- address: _address,
3868
- amount: prevTxOut.value.bitcoin,
3869
- value: Number(prevTxOut.value.sats),
4403
+ // Check if this FundingInput has DLC input information to preserve
4404
+ const dlcInputMessage = input.dlcInput;
4405
+
4406
+ let dlcInputInfo: DlcInputInfo | undefined;
4407
+ if (dlcInputMessage) {
4408
+ dlcInputInfo = {
4409
+ localFundPubkey: dlcInputMessage.localFundPubkey.toString('hex'),
4410
+ remoteFundPubkey: dlcInputMessage.remoteFundPubkey.toString('hex'),
4411
+ contractId: dlcInputMessage.contractId.toString('hex'),
4412
+ };
4413
+ }
4414
+
4415
+ return new Input(
4416
+ prevTx.txId.toString(),
4417
+ input.prevTxVout,
4418
+ _address,
4419
+ prevTxOut.value.bitcoin,
4420
+ Number(prevTxOut.value.sats),
3870
4421
  derivationPath,
3871
- maxWitnessLength: input.maxWitnessLen,
3872
- redeemScript: input.redeemScript
3873
- ? input.redeemScript.toString('hex')
3874
- : '',
3875
- scriptPubKey: scriptPubKey.toString('hex'),
3876
- inputSerialId: input.inputSerialId,
3877
- toUtxo: Input.prototype.toUtxo,
3878
- };
4422
+ input.maxWitnessLen,
4423
+ input.redeemScript ? input.redeemScript.toString('hex') : '',
4424
+ input.inputSerialId,
4425
+ scriptPubKey.toString('hex'),
4426
+ undefined, // label
4427
+ undefined, // confirmations
4428
+ undefined, // spendable
4429
+ undefined, // solvable
4430
+ undefined, // safe
4431
+ dlcInputInfo, // Preserve DLC input information if present
4432
+ );
3879
4433
  }
3880
4434
 
3881
4435
  async inputToFundingInput(input: Input): Promise<FundingInput> {
@@ -3910,12 +4464,155 @@ Payout Group not found even with brute force search',
3910
4464
  ? input.inputSerialId
3911
4465
  : generateSerialId();
3912
4466
 
4467
+ // Preserve DLC input information if present
4468
+ if (input.isDlcInput()) {
4469
+ const dlcInputInfo = input.dlcInput!;
4470
+ const dlcInput = new DlcInput();
4471
+ dlcInput.localFundPubkey = Buffer.from(
4472
+ dlcInputInfo.localFundPubkey,
4473
+ 'hex',
4474
+ );
4475
+ dlcInput.remoteFundPubkey = Buffer.from(
4476
+ dlcInputInfo.remoteFundPubkey,
4477
+ 'hex',
4478
+ );
4479
+ dlcInput.contractId = Buffer.alloc(32); // Placeholder contract ID
4480
+
4481
+ fundingInput.dlcInput = dlcInput;
4482
+ }
4483
+
3913
4484
  return fundingInput;
3914
4485
  }
3915
4486
 
3916
4487
  async getConnectedNetwork(): Promise<BitcoinNetwork> {
3917
4488
  return this._network;
3918
4489
  }
4490
+
4491
+ /**
4492
+ * Calculate the maximum collateral possible with given inputs
4493
+ * @param inputs Array of Input objects to use for funding
4494
+ * @param feeRatePerVb Fee rate in satoshis per virtual byte
4495
+ * @param contractCount Number of DLC contracts (default: 1)
4496
+ * @returns Maximum collateral amount in satoshis
4497
+ */
4498
+ async calculateMaxCollateral(
4499
+ inputs: Input[],
4500
+ feeRatePerVb: bigint,
4501
+ contractCount: number = 1,
4502
+ ): Promise<bigint> {
4503
+ if (inputs.length === 0) {
4504
+ return BigInt(0);
4505
+ }
4506
+
4507
+ try {
4508
+ // Convert Input[] to FundingInput[]
4509
+ const fundingInputs = await Promise.all(
4510
+ inputs.map((input) => this.inputToFundingInput(input)),
4511
+ );
4512
+
4513
+ // Use node-dlc's calculateMaxCollateral function
4514
+ // For single-funded DLC, pass only offerer inputs and fee rate
4515
+ return BatchDlcTxBuilder.calculateMaxCollateral(
4516
+ fundingInputs,
4517
+ feeRatePerVb,
4518
+ contractCount,
4519
+ );
4520
+ } catch (error) {
4521
+ // If calculation fails, return 0 to indicate insufficient funds
4522
+ console.warn('calculateMaxCollateral failed:', error);
4523
+ return BigInt(0);
4524
+ }
4525
+ }
4526
+
4527
+ /**
4528
+ * Create a funding input with DLC input information for splicing
4529
+ * @param dlcInputInfo DLC input information
4530
+ * @param fundingTxHex Raw transaction hex of the funding transaction
4531
+ */
4532
+ async createDlcFundingInput(
4533
+ dlcInputInfo: DlcInputInfoRequest,
4534
+ fundingTxHex: string,
4535
+ ): Promise<FundingInput> {
4536
+ const fundingInput = new FundingInput();
4537
+ const tx = Tx.decode(StreamReader.fromHex(fundingTxHex));
4538
+
4539
+ fundingInput.prevTx = tx;
4540
+ fundingInput.prevTxVout = dlcInputInfo.fundVout;
4541
+ fundingInput.sequence = Sequence.default();
4542
+ fundingInput.maxWitnessLen = dlcInputInfo.maxWitnessLength || 220;
4543
+ fundingInput.redeemScript = Buffer.from('', 'hex'); // Empty for P2WSH
4544
+ fundingInput.inputSerialId = BigInt(
4545
+ dlcInputInfo.inputSerialId || generateSerialId(),
4546
+ );
4547
+
4548
+ // Create the DLC multisig script for address generation
4549
+ const localPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
4550
+ const remotePubkey = Buffer.from(dlcInputInfo.remoteFundPubkey, 'hex');
4551
+
4552
+ // Use the same deterministic ordering as cfd-dlc-js: lexicographic by hex
4553
+ // This matches GetOrderedPubkeys() in cfddlc_transactions.cpp
4554
+ const orderedPubkeys =
4555
+ dlcInputInfo.localFundPubkey < dlcInputInfo.remoteFundPubkey
4556
+ ? [localPubkey, remotePubkey]
4557
+ : [remotePubkey, localPubkey];
4558
+
4559
+ const network = await this.getConnectedNetwork();
4560
+
4561
+ // Create 2-of-2 multisig payment using deterministic ordering
4562
+ const p2ms = payments.p2ms({
4563
+ m: 2,
4564
+ pubkeys: orderedPubkeys,
4565
+ network,
4566
+ });
4567
+
4568
+ const paymentVariant = payments.p2wsh({
4569
+ redeem: p2ms,
4570
+ network,
4571
+ });
4572
+
4573
+ const multisigAddress = paymentVariant.address!;
4574
+
4575
+ // Verify this matches the actual funding output address
4576
+ const actualFundingOutput = tx.outputs[dlcInputInfo.fundVout];
4577
+ const actualFundingAddress = address.fromOutputScript(
4578
+ actualFundingOutput.scriptPubKey.serialize().slice(1),
4579
+ network,
4580
+ );
4581
+
4582
+ if (actualFundingAddress !== multisigAddress) {
4583
+ throw new Error(
4584
+ `DLC funding address mismatch. ` +
4585
+ `Expected: ${actualFundingAddress}, ` +
4586
+ `Constructed: ${multisigAddress}`,
4587
+ );
4588
+ }
4589
+
4590
+ // Add toUtxo method that's expected by GetInputsForAmount
4591
+ (fundingInput as FundingInput & { toUtxo: () => Utxo }).toUtxo = () => {
4592
+ return new Utxo(
4593
+ dlcInputInfo.fundTxid,
4594
+ dlcInputInfo.fundVout,
4595
+ Amount.FromSatoshis(Number(dlcInputInfo.fundAmount)),
4596
+ multisigAddress,
4597
+ '', // DLC inputs don't have derivation paths
4598
+ dlcInputInfo.maxWitnessLength || 220,
4599
+ fundingInput.inputSerialId,
4600
+ );
4601
+ };
4602
+
4603
+ // Create proper DlcInput object for splicing detection and signing
4604
+ const dlcInput = new DlcInput();
4605
+ dlcInput.localFundPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
4606
+ dlcInput.remoteFundPubkey = Buffer.from(
4607
+ dlcInputInfo.remoteFundPubkey,
4608
+ 'hex',
4609
+ );
4610
+ dlcInput.contractId = Buffer.from(dlcInputInfo.contractId, 'hex');
4611
+
4612
+ fundingInput.dlcInput = dlcInput;
4613
+
4614
+ return fundingInput;
4615
+ }
3919
4616
  }
3920
4617
 
3921
4618
  export interface BasicInitializeResponse {
@@ -4019,5 +4716,3 @@ export interface InputsForDualAmountResponse {
4019
4716
  inputs: Input[];
4020
4717
  fee: number;
4021
4718
  }
4022
-
4023
- const BurnAddress = 'bcrt1qxcjufgh2jarkp2qkx68azh08w9v5gah8u6es8s';