@atomicfinance/bitcoin-dlc-provider 4.0.0 → 4.0.2

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 +58 -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
@@ -28,10 +28,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const provider_1 = __importDefault(require("@atomicfinance/provider"));
30
30
  const types_1 = require("@atomicfinance/types");
31
+ const Input_1 = require("@atomicfinance/types/lib/models/Input");
31
32
  const utils_1 = require("@atomicfinance/utils");
32
33
  const bitcoin_1 = require("@node-dlc/bitcoin");
33
34
  const bufio_1 = require("@node-dlc/bufio");
34
35
  const core_1 = require("@node-dlc/core");
36
+ const core_2 = require("@node-dlc/core");
35
37
  const crypto_1 = require("@node-dlc/crypto");
36
38
  const messaging_1 = require("@node-dlc/messaging");
37
39
  const assert_1 = __importDefault(require("assert"));
@@ -42,6 +44,7 @@ const crypto_2 = __importDefault(require("crypto"));
42
44
  const ecc = __importStar(require("tiny-secp256k1"));
43
45
  const Utils_1 = require("./utils/Utils");
44
46
  class BitcoinDlcProvider extends provider_1.default {
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
48
  constructor(network, cfdDlcJs) {
46
49
  super();
47
50
  this._network = network;
@@ -52,17 +55,83 @@ class BitcoinDlcProvider extends provider_1.default {
52
55
  await (0, utils_1.sleep)(10);
53
56
  }
54
57
  }
58
+ /**
59
+ * Find private key for DLC funding pubkey by deriving wallet addresses
60
+ */
61
+ async findDlcFundingPrivateKey(localFundPubkey, remoteFundPubkey) {
62
+ const targetPubkeys = [localFundPubkey, remoteFundPubkey];
63
+ // First check existing wallet addresses
64
+ const addresses = await this.getMethod('getAddresses')();
65
+ for (const addressInfo of addresses) {
66
+ if (addressInfo.derivationPath) {
67
+ try {
68
+ const keyPair = await this.getMethod('keyPair')(addressInfo.derivationPath);
69
+ const pubkey = Buffer.from(keyPair.publicKey);
70
+ const pubkeyHex = pubkey.toString('hex');
71
+ if (targetPubkeys.includes(pubkeyHex)) {
72
+ return Buffer.from(keyPair.privateKey).toString('hex');
73
+ }
74
+ }
75
+ catch (error) {
76
+ continue;
77
+ }
78
+ }
79
+ }
80
+ // If not found in existing addresses, do comprehensive search
81
+ // For DLC splicing, funding pubkeys can be at much higher derivation paths
82
+ console.log('Searching extensively for DLC funding private key...');
83
+ for (const isChange of [false, true]) {
84
+ for (let i = 0; i < 1000; i++) {
85
+ // Search up to 1000 addresses for DLC keys
86
+ try {
87
+ const address = await this.client.wallet.getAddresses(i, 1, isChange);
88
+ if (address && address.length > 0) {
89
+ const addressInfo = address[0];
90
+ if (addressInfo.derivationPath) {
91
+ const keyPair = await this.getMethod('keyPair')(addressInfo.derivationPath);
92
+ const pubkey = Buffer.from(keyPair.publicKey);
93
+ const pubkeyHex = pubkey.toString('hex');
94
+ if (targetPubkeys.includes(pubkeyHex)) {
95
+ console.log(`Found DLC funding key at derivation path: ${addressInfo.derivationPath}`);
96
+ return Buffer.from(keyPair.privateKey).toString('hex');
97
+ }
98
+ }
99
+ }
100
+ }
101
+ catch (error) {
102
+ continue;
103
+ }
104
+ }
105
+ }
106
+ throw new Error(`Could not find private key for DLC funding pubkeys: local=${localFundPubkey}, remote=${remoteFundPubkey}`);
107
+ }
55
108
  async GetPrivKeysForInputs(inputs) {
56
109
  const privKeys = [];
57
110
  for (let i = 0; i < inputs.length; i++) {
58
111
  const input = inputs[i];
59
- let derivationPath = input.derivationPath;
60
- if (!derivationPath) {
61
- derivationPath = (await this.getMethod('getWalletAddress')(input.address)).derivationPath;
112
+ if (input.isDlcInput()) {
113
+ // Handle DLC input - use the dedicated method to find the funding private key
114
+ const dlcInput = input.dlcInput;
115
+ const foundPrivKey = await this.findDlcFundingPrivateKey(dlcInput.localFundPubkey, dlcInput.remoteFundPubkey);
116
+ privKeys.push(foundPrivKey);
117
+ }
118
+ else {
119
+ // Handle regular input
120
+ let derivationPath = input.derivationPath;
121
+ if (!derivationPath) {
122
+ try {
123
+ derivationPath = (await this.getMethod('getWalletAddress')(input.address)).derivationPath;
124
+ }
125
+ catch (error) {
126
+ throw new Error(`Unable to find address ${input.address} in wallet. ` +
127
+ `This may happen when using derivation paths outside the normal range. ` +
128
+ `Error: ${error.message}`);
129
+ }
130
+ }
131
+ const keyPair = await this.getMethod('keyPair')(derivationPath);
132
+ const privKey = Buffer.from(keyPair.__D).toString('hex');
133
+ privKeys.push(privKey);
62
134
  }
63
- const keyPair = await this.getMethod('keyPair')(derivationPath);
64
- const privKey = Buffer.from(keyPair.__D).toString('hex');
65
- privKeys.push(privKey);
66
135
  }
67
136
  return privKeys;
68
137
  }
@@ -77,6 +146,34 @@ class BitcoinDlcProvider extends provider_1.default {
77
146
  return 'bitcoin';
78
147
  }
79
148
  }
149
+ /**
150
+ * Get inputs for amount with explicit supplementation control
151
+ */
152
+ async GetInputsForAmountWithMode(amounts, feeRatePerVb, fixedInputs = [], supplementation = Input_1.InputSupplementationMode.Required) {
153
+ if (amounts.length === 0)
154
+ return [];
155
+ // For "none" mode, use exactly the provided inputs
156
+ if (supplementation === Input_1.InputSupplementationMode.None) {
157
+ return fixedInputs;
158
+ }
159
+ // For "required" and "optional" modes, attempt supplementation
160
+ const fixedUtxos = fixedInputs.map((input) => input.toUtxo());
161
+ try {
162
+ const inputsForAmount = await this.getMethod('getInputsForDualFunding')(amounts, feeRatePerVb, fixedUtxos);
163
+ // Convert UTXO objects to Input class instances
164
+ return inputsForAmount.inputs.map((utxo) => types_1.Input.fromUTXO(utxo));
165
+ }
166
+ catch (e) {
167
+ const errorMessage = e instanceof Error ? e.message : 'Unknown error';
168
+ if (supplementation === Input_1.InputSupplementationMode.Required) {
169
+ throw Error(`Not enough balance GetInputsForAmountWithMode. Error: ${errorMessage}`);
170
+ }
171
+ else {
172
+ // Optional mode: fallback to provided inputs
173
+ return fixedInputs;
174
+ }
175
+ }
176
+ }
80
177
  async GetInputsForAmount(amounts, feeRatePerVb, fixedInputs = []) {
81
178
  if (amounts.length === 0)
82
179
  return [];
@@ -84,7 +181,8 @@ class BitcoinDlcProvider extends provider_1.default {
84
181
  let inputs;
85
182
  try {
86
183
  const inputsForAmount = await this.getMethod('getInputsForDualFunding')(amounts, feeRatePerVb, fixedUtxos);
87
- inputs = inputsForAmount.inputs;
184
+ // Convert UTXO objects to Input class instances
185
+ inputs = inputsForAmount.inputs.map((utxo) => types_1.Input.fromUTXO(utxo));
88
186
  }
89
187
  catch (e) {
90
188
  const errorMessage = e instanceof Error ? e.message : 'Unknown error';
@@ -97,7 +195,7 @@ class BitcoinDlcProvider extends provider_1.default {
97
195
  }
98
196
  return inputs;
99
197
  }
100
- async Initialize(collateral, feeRatePerVb, fixedInputs) {
198
+ async Initialize(collateral, feeRatePerVb, fixedInputs, inputSupplementationMode = Input_1.InputSupplementationMode.Required) {
101
199
  const network = await this.getConnectedNetwork();
102
200
  const payoutAddress = await this.client.wallet.getUnusedAddress(false);
103
201
  const payoutSPK = bitcoinjs_lib_1.address.toOutputScript(payoutAddress.address, network);
@@ -107,7 +205,7 @@ class BitcoinDlcProvider extends provider_1.default {
107
205
  const fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
108
206
  if (fundingAddress.address === payoutAddress.address)
109
207
  throw Error('Address reuse');
110
- const inputs = await this.GetInputsForAmount([collateral], feeRatePerVb, fixedInputs);
208
+ const inputs = await this.GetInputsForAmountWithMode([collateral], feeRatePerVb, fixedInputs, inputSupplementationMode);
111
209
  const fundingInputs = await Promise.all(inputs.map(async (input) => {
112
210
  return this.inputToFundingInput(input);
113
211
  }));
@@ -124,7 +222,7 @@ class BitcoinDlcProvider extends provider_1.default {
124
222
  }
125
223
  async BatchInitialize(collaterals, feeRatePerVb, fixedInputs) {
126
224
  const network = await this.getConnectedNetwork();
127
- const inputs = await this.GetInputsForAmount(collaterals, feeRatePerVb, fixedInputs);
225
+ const inputs = await this.GetInputsForAmountWithMode(collaterals, feeRatePerVb, fixedInputs, Input_1.InputSupplementationMode.Required);
128
226
  const fundingInputs = await Promise.all(inputs.map(async (input) => {
129
227
  return this.inputToFundingInput(input);
130
228
  }));
@@ -175,12 +273,12 @@ class BitcoinDlcProvider extends provider_1.default {
175
273
  if (eventDescriptor.type !== messaging_1.MessageType.DigitDecompositionEventDescriptor)
176
274
  throw Error('Only DigitDecomposition Oracle Events supported');
177
275
  const roundingIntervals = contractDescriptor.roundingIntervals;
178
- const cetPayouts = core_1.HyperbolaPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
276
+ const cetPayouts = core_2.HyperbolaPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
179
277
  const payoutGroups = [];
180
278
  cetPayouts.forEach((p) => {
181
279
  payoutGroups.push({
182
280
  payout: p.payout,
183
- groups: (0, core_1.groupByIgnoringDigits)(p.indexFrom, p.indexTo, eventDescriptor.base, contractDescriptor.numDigits),
281
+ groups: (0, core_2.groupByIgnoringDigits)(p.indexFrom, p.indexTo, eventDescriptor.base, contractDescriptor.numDigits),
184
282
  });
185
283
  });
186
284
  const rValuesMessagesList = this.GenerateMessages(singleOracleInfo);
@@ -200,12 +298,12 @@ class BitcoinDlcProvider extends provider_1.default {
200
298
  if (eventDescriptor.type !== messaging_1.MessageType.DigitDecompositionEventDescriptor)
201
299
  throw Error('Only DigitDecomposition Oracle Events supported');
202
300
  const roundingIntervals = contractDescriptor.roundingIntervals;
203
- const cetPayouts = core_1.PolynomialPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
301
+ const cetPayouts = core_2.PolynomialPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
204
302
  const payoutGroups = [];
205
303
  cetPayouts.forEach((p) => {
206
304
  payoutGroups.push({
207
305
  payout: p.payout,
208
- groups: (0, core_1.groupByIgnoringDigits)(p.indexFrom, p.indexTo, eventDescriptor.base, contractDescriptor.numDigits),
306
+ groups: (0, core_2.groupByIgnoringDigits)(p.indexFrom, p.indexTo, eventDescriptor.base, contractDescriptor.numDigits),
209
307
  });
210
308
  });
211
309
  const rValuesMessagesList = this.GenerateMessages(oracleInfo);
@@ -278,15 +376,37 @@ class BitcoinDlcProvider extends provider_1.default {
278
376
  const remoteFinalScriptPubkey = dlcAccept.payoutSpk.toString('hex');
279
377
  const localChangeScriptPubkey = dlcOffer.changeSpk.toString('hex');
280
378
  const remoteChangeScriptPubkey = dlcAccept.changeSpk.toString('hex');
281
- const localInputs = await Promise.all(dlcOffer.fundingInputs.map(async (fundingInput) => {
282
- const input = await this.fundingInputToInput(fundingInput, false);
283
- return input.toUtxo();
284
- }));
379
+ // Separate regular inputs from DLC inputs (only from offeror side)
380
+ const localRegularInputs = [];
381
+ const localDlcInputs = [];
382
+ for (const fundingInput of dlcOffer.fundingInputs) {
383
+ if (fundingInput.dlcInput) {
384
+ // This is a DLC input for splicing
385
+ // The pubkeys should be from the original DLC to correctly spend its funding output
386
+ localDlcInputs.push({
387
+ fundTxid: fundingInput.prevTx.txId.toString(),
388
+ fundVout: fundingInput.prevTxVout,
389
+ fundAmount: Number(fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats),
390
+ localFundPubkey: fundingInput.dlcInput.localFundPubkey.toString('hex'),
391
+ remoteFundPubkey: fundingInput.dlcInput.remoteFundPubkey.toString('hex'),
392
+ contractId: fundingInput.dlcInput.contractId.toString('hex'),
393
+ maxWitnessLength: fundingInput.maxWitnessLen,
394
+ inputSerialId: fundingInput.inputSerialId,
395
+ });
396
+ }
397
+ else {
398
+ // Regular input
399
+ const input = await this.fundingInputToInput(fundingInput, false);
400
+ localRegularInputs.push(input.toUtxo());
401
+ }
402
+ }
403
+ // Process remote inputs (no DLC inputs from acceptor side)
285
404
  const remoteInputs = await Promise.all(dlcAccept.fundingInputs.map(async (fundingInput) => {
286
405
  const input = await this.fundingInputToInput(fundingInput, false);
287
406
  return input.toUtxo();
288
407
  }));
289
- const localInputAmount = localInputs.reduce((prev, cur) => prev + cur.amount.GetSatoshiAmount(), 0);
408
+ // Calculate input amounts
409
+ const localInputAmount = localRegularInputs.reduce((prev, cur) => prev + cur.amount.GetSatoshiAmount(), 0);
290
410
  const remoteInputAmount = remoteInputs.reduce((prev, cur) => prev + cur.amount.GetSatoshiAmount(), 0);
291
411
  let payouts = [];
292
412
  let messagesList = [];
@@ -310,43 +430,97 @@ class BitcoinDlcProvider extends provider_1.default {
310
430
  payouts = tempPayouts;
311
431
  messagesList = tempMessagesList;
312
432
  }
313
- const dlcTxRequest = {
314
- payouts,
315
- localFundPubkey,
316
- localFinalScriptPubkey,
317
- remoteFundPubkey,
318
- remoteFinalScriptPubkey,
319
- localInputAmount,
320
- localCollateralAmount: dlcOffer.offerCollateral,
321
- localPayoutSerialId: dlcOffer.payoutSerialId,
322
- localChangeSerialId: dlcOffer.changeSerialId,
323
- remoteInputAmount,
324
- remoteCollateralAmount: dlcAccept.acceptCollateral,
325
- remotePayoutSerialId: dlcAccept.payoutSerialId,
326
- remoteChangeSerialId: dlcAccept.changeSerialId,
327
- refundLocktime: dlcOffer.refundLocktime,
328
- localInputs,
329
- remoteInputs,
330
- localChangeScriptPubkey,
331
- remoteChangeScriptPubkey,
332
- feeRate: Number(dlcOffer.feeRatePerVb),
333
- cetLockTime: dlcOffer.cetLocktime,
334
- fundOutputSerialId: dlcOffer.fundOutputSerialId,
335
- };
336
- const dlcTxs = await this.CreateDlcTransactions(dlcTxRequest);
433
+ // Determine whether to use regular or spliced DLC transactions
434
+ const hasDlcInputs = localDlcInputs.length > 0;
435
+ let dlcTxs;
436
+ if (hasDlcInputs) {
437
+ // Use spliced DLC transactions when DLC inputs are present
438
+ const splicedDlcTxRequest = {
439
+ payouts,
440
+ localFundPubkey,
441
+ localFinalScriptPubkey,
442
+ remoteFundPubkey,
443
+ remoteFinalScriptPubkey,
444
+ localInputAmount,
445
+ localCollateralAmount: dlcOffer.offerCollateral,
446
+ localPayoutSerialId: dlcOffer.payoutSerialId,
447
+ localChangeSerialId: dlcOffer.changeSerialId,
448
+ remoteInputAmount,
449
+ remoteCollateralAmount: dlcAccept.acceptCollateral,
450
+ remotePayoutSerialId: dlcAccept.payoutSerialId,
451
+ remoteChangeSerialId: dlcAccept.changeSerialId,
452
+ refundLocktime: dlcOffer.refundLocktime,
453
+ localInputs: localRegularInputs,
454
+ localDlcInputs: localDlcInputs,
455
+ remoteInputs,
456
+ localChangeScriptPubkey,
457
+ remoteChangeScriptPubkey,
458
+ feeRate: Number(dlcOffer.feeRatePerVb),
459
+ cetLockTime: dlcOffer.cetLocktime,
460
+ fundOutputSerialId: dlcOffer.fundOutputSerialId,
461
+ };
462
+ dlcTxs = await this.CreateSplicedDlcTransactions(splicedDlcTxRequest);
463
+ }
464
+ else {
465
+ // Use regular DLC transactions when no DLC inputs
466
+ const dlcTxRequest = {
467
+ payouts,
468
+ localFundPubkey,
469
+ localFinalScriptPubkey,
470
+ remoteFundPubkey,
471
+ remoteFinalScriptPubkey,
472
+ localInputAmount,
473
+ localCollateralAmount: dlcOffer.offerCollateral,
474
+ localPayoutSerialId: dlcOffer.payoutSerialId,
475
+ localChangeSerialId: dlcOffer.changeSerialId,
476
+ remoteInputAmount,
477
+ remoteCollateralAmount: dlcAccept.acceptCollateral,
478
+ remotePayoutSerialId: dlcAccept.payoutSerialId,
479
+ remoteChangeSerialId: dlcAccept.changeSerialId,
480
+ refundLocktime: dlcOffer.refundLocktime,
481
+ localInputs: localRegularInputs,
482
+ remoteInputs,
483
+ localChangeScriptPubkey,
484
+ remoteChangeScriptPubkey,
485
+ feeRate: Number(dlcOffer.feeRatePerVb),
486
+ cetLockTime: dlcOffer.cetLocktime,
487
+ fundOutputSerialId: dlcOffer.fundOutputSerialId,
488
+ };
489
+ dlcTxs = await this.CreateDlcTransactions(dlcTxRequest);
490
+ }
337
491
  const dlcTransactions = new messaging_1.DlcTransactions();
338
492
  dlcTransactions.fundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(dlcTxs.fundTxHex));
339
- dlcTransactions.fundTxVout = [
340
- BigInt(dlcOffer.changeSerialId),
341
- BigInt(dlcAccept.changeSerialId),
342
- BigInt(dlcTxRequest.fundOutputSerialId),
343
- ]
493
+ // Build serial IDs based on actual outputs in the transaction
494
+ const actualOutputs = dlcTransactions.fundTx.outputs;
495
+ const serialIds = [];
496
+ // Always include the funding output serial ID
497
+ serialIds.push(BigInt(dlcOffer.fundOutputSerialId));
498
+ // Only include change serial IDs if there are actually change outputs
499
+ // For exact amount DLCs with no change, there will be only 1 output (the funding output)
500
+ if (actualOutputs.length > 1) {
501
+ // Multiple outputs means there are change outputs
502
+ if (dlcOffer.offerCollateral > 0n) {
503
+ serialIds.push(BigInt(dlcOffer.changeSerialId));
504
+ }
505
+ if (dlcAccept.acceptCollateral > 0n) {
506
+ serialIds.push(BigInt(dlcAccept.changeSerialId));
507
+ }
508
+ }
509
+ dlcTransactions.fundTxVout = serialIds
344
510
  .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
345
- .findIndex((i) => BigInt(i) === BigInt(dlcTxRequest.fundOutputSerialId));
511
+ .findIndex((i) => BigInt(i) === BigInt(dlcOffer.fundOutputSerialId));
512
+ // Validate that the calculated fundTxVout is valid
513
+ if (dlcTransactions.fundTxVout < 0 ||
514
+ dlcTransactions.fundTxVout >= dlcTransactions.fundTx.outputs.length) {
515
+ throw new Error(`Invalid fundTxVout calculation: calculated=${dlcTransactions.fundTxVout}, ` +
516
+ `fundTx.outputs.length=${dlcTransactions.fundTx.outputs.length}, ` +
517
+ `fundOutputSerialId=${dlcOffer.fundOutputSerialId}, ` +
518
+ `serialIds=[${serialIds.join(', ')}], ` +
519
+ `offerCollateral=${dlcOffer.offerCollateral}, ` +
520
+ `acceptCollateral=${dlcAccept.acceptCollateral}`);
521
+ }
522
+ dlcTransactions.cets = dlcTxs.cetsHex.map((cetHex) => bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(cetHex)));
346
523
  dlcTransactions.refundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(dlcTxs.refundTxHex));
347
- dlcTransactions.cets = dlcTxs.cetsHex.map((cetHex) => {
348
- return bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(cetHex));
349
- });
350
524
  return { dlcTransactions, messagesList };
351
525
  }
352
526
  async createBatchDlcTxs(dlcOffers, dlcAccepts) {
@@ -501,6 +675,16 @@ class BitcoinDlcProvider extends provider_1.default {
501
675
  throw Error('ContractInfo must be Single or Disjoint');
502
676
  }
503
677
  }
678
+ getFundOutputValueSats(dlcTxs) {
679
+ const fundOutput = dlcTxs.fundTx.outputs[dlcTxs.fundTxVout];
680
+ if (!fundOutput || !fundOutput.value) {
681
+ throw new Error(`Invalid fund output at vout ${dlcTxs.fundTxVout}: ` +
682
+ `outputs.length=${dlcTxs.fundTx.outputs.length}, ` +
683
+ `output exists=${!!fundOutput}, ` +
684
+ `output.value exists=${!!(fundOutput && fundOutput.value)}`);
685
+ }
686
+ return fundOutput.value.sats;
687
+ }
504
688
  async CreateCetAdaptorAndRefundSigs(_dlcOffer, _dlcAccept, _dlcTxs, messagesList, isOfferer) {
505
689
  const { dlcOffer, dlcAccept, dlcTxs } = (0, Utils_1.checkTypes)({
506
690
  _dlcOffer,
@@ -523,7 +707,7 @@ class BitcoinDlcProvider extends provider_1.default {
523
707
  if (dlcOffer.contractInfo.contractInfoType === messaging_1.ContractInfoType.Single &&
524
708
  dlcOffer.contractInfo.contractDescriptor.type ===
525
709
  messaging_1.MessageType.ContractDescriptorV0) {
526
- for (const [_, { oracleInfo }] of contractOraclePairs.entries()) {
710
+ for (const { oracleInfo } of contractOraclePairs) {
527
711
  if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
528
712
  throw new Error('Only SingleOracleInfo supported in this context');
529
713
  }
@@ -540,7 +724,7 @@ class BitcoinDlcProvider extends provider_1.default {
540
724
  fundVout: dlcTxs.fundTxVout,
541
725
  localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
542
726
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
543
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
727
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
544
728
  oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
545
729
  oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map((nonce) => nonce.toString('hex')),
546
730
  };
@@ -581,7 +765,7 @@ class BitcoinDlcProvider extends provider_1.default {
581
765
  fundVout: dlcTxs.fundTxVout,
582
766
  localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
583
767
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
584
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
768
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
585
769
  oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
586
770
  oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map((nonce) => nonce.toString('hex')),
587
771
  };
@@ -606,7 +790,7 @@ class BitcoinDlcProvider extends provider_1.default {
606
790
  fundVout: dlcTxs.fundTxVout,
607
791
  localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
608
792
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
609
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
793
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
610
794
  };
611
795
  const refundSignature = Buffer.from((await this.GetRawRefundTxSignature(refundSignRequest)).hex, 'hex');
612
796
  const cetSignatures = new messaging_1.CetAdaptorSignatures();
@@ -625,7 +809,7 @@ class BitcoinDlcProvider extends provider_1.default {
625
809
  if (dlcOffer.contractInfo.type === messaging_1.MessageType.SingleContractInfo &&
626
810
  dlcOffer.contractInfo.contractDescriptor.type ===
627
811
  messaging_1.MessageType.ContractDescriptorV0) {
628
- for (const [_, { oracleInfo }] of contractOraclePairs.entries()) {
812
+ for (const { oracleInfo } of contractOraclePairs) {
629
813
  if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
630
814
  throw new Error('Only SingleOracleInfo supported in this context');
631
815
  }
@@ -655,7 +839,7 @@ class BitcoinDlcProvider extends provider_1.default {
655
839
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
656
840
  fundTxId: dlcTxs.fundTx.txId.toString(),
657
841
  fundVout: dlcTxs.fundTxVout,
658
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
842
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
659
843
  verifyRemote: isOfferer,
660
844
  };
661
845
  sigsValidity.push((async () => {
@@ -672,7 +856,7 @@ class BitcoinDlcProvider extends provider_1.default {
672
856
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
673
857
  fundTxId: dlcTxs.fundTx.txId.toString(),
674
858
  fundVout: dlcTxs.fundTxVout,
675
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
859
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
676
860
  verifyRemote: isOfferer,
677
861
  };
678
862
  areSigsValid =
@@ -719,7 +903,7 @@ class BitcoinDlcProvider extends provider_1.default {
719
903
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
720
904
  fundTxId: dlcTxs.fundTx.txId.toString(),
721
905
  fundVout: dlcTxs.fundTxVout,
722
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
906
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
723
907
  verifyRemote: isOfferer,
724
908
  };
725
909
  sigsValidity.push((async () => {
@@ -737,7 +921,7 @@ class BitcoinDlcProvider extends provider_1.default {
737
921
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
738
922
  fundTxId: dlcTxs.fundTx.txId.toString(),
739
923
  fundVout: dlcTxs.fundTxVout,
740
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
924
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
741
925
  verifyRemote: isOfferer,
742
926
  };
743
927
  areSigsValid =
@@ -763,14 +947,32 @@ class BitcoinDlcProvider extends provider_1.default {
763
947
  }));
764
948
  const inputPrivKeys = await this.GetPrivKeysForInputs(inputs);
765
949
  const fundTxSigs = await Promise.all(inputs.map(async (input, index) => {
766
- const fundTxSignRequest = {
767
- fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
768
- privkey: inputPrivKeys[index],
769
- prevTxId: input.txid,
770
- prevVout: input.vout,
771
- amount: input.value,
772
- };
773
- return (await this.GetRawFundTxSignature(fundTxSignRequest)).hex;
950
+ // Use DLC-specific signing for DLC inputs
951
+ if (input.isDlcInput()) {
952
+ const dlcInputInfo = input.dlcInput;
953
+ const dlcSignRequest = {
954
+ fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
955
+ fundTxid: input.txid,
956
+ fundVout: input.vout,
957
+ fundAmount: input.value,
958
+ localFundPubkey: dlcInputInfo.localFundPubkey,
959
+ remoteFundPubkey: dlcInputInfo.remoteFundPubkey,
960
+ privkey: inputPrivKeys[index],
961
+ };
962
+ return (await this.GetRawDlcFundingInputSignature(dlcSignRequest))
963
+ .hex;
964
+ }
965
+ else {
966
+ // Use regular signing for non-DLC inputs
967
+ const fundTxSignRequest = {
968
+ fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
969
+ privkey: inputPrivKeys[index],
970
+ prevTxId: input.txid,
971
+ prevVout: input.vout,
972
+ amount: input.value,
973
+ };
974
+ return (await this.GetRawFundTxSignature(fundTxSignRequest)).hex;
975
+ }
774
976
  }));
775
977
  const inputPubKeys = await Promise.all(inputPrivKeys.map(async (privkey) => {
776
978
  const reqPrivKey = {
@@ -801,18 +1003,39 @@ class BitcoinDlcProvider extends provider_1.default {
801
1003
  const fundingInput = isOfferer
802
1004
  ? dlcAccept.fundingInputs[i]
803
1005
  : dlcOffer.fundingInputs[i];
804
- const verifyFundSigRequest = {
805
- fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
806
- signature,
807
- pubkey,
808
- prevTxId: fundingInput.prevTx.txId.toString(),
809
- prevVout: fundingInput.prevTxVout,
810
- fundInputAmount: fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
811
- };
812
- sigsValidity.push((async () => {
813
- const response = await this.VerifyFundTxSignature(verifyFundSigRequest);
814
- return response.valid;
815
- })());
1006
+ // Check if this is a DLC input and use appropriate verification
1007
+ if (fundingInput.dlcInput) {
1008
+ const dlcInput = fundingInput.dlcInput;
1009
+ const verifyDlcSigRequest = {
1010
+ fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
1011
+ fundTxid: fundingInput.prevTx.txId.toString(),
1012
+ fundVout: fundingInput.prevTxVout,
1013
+ fundAmount: Number(fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats),
1014
+ localFundPubkey: dlcInput.localFundPubkey.toString('hex'),
1015
+ remoteFundPubkey: dlcInput.remoteFundPubkey.toString('hex'),
1016
+ signature,
1017
+ pubkey,
1018
+ };
1019
+ sigsValidity.push((async () => {
1020
+ const response = await this.VerifyDlcFundingInputSignature(verifyDlcSigRequest);
1021
+ return response.valid;
1022
+ })());
1023
+ }
1024
+ else {
1025
+ // Regular input verification
1026
+ const verifyFundSigRequest = {
1027
+ fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
1028
+ signature,
1029
+ pubkey,
1030
+ prevTxId: fundingInput.prevTx.txId.toString(),
1031
+ prevVout: fundingInput.prevTxVout,
1032
+ fundInputAmount: fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
1033
+ };
1034
+ sigsValidity.push((async () => {
1035
+ const response = await this.VerifyFundTxSignature(verifyFundSigRequest);
1036
+ return response.valid;
1037
+ })());
1038
+ }
816
1039
  }
817
1040
  const areSigsValid = (await Promise.all(sigsValidity)).every((b) => b);
818
1041
  if (!areSigsValid) {
@@ -829,25 +1052,53 @@ class BitcoinDlcProvider extends provider_1.default {
829
1052
  ...dlcAccept.fundingInputs,
830
1053
  ];
831
1054
  let fundTxHex = dlcTxs.fundTx.serialize().toString('hex');
1055
+ // Track processed DLC inputs to avoid double processing
1056
+ const processedDlcInputs = new Set();
832
1057
  await (0, Utils_1.asyncForEach)(witnessElements, async (witnessElement, i) => {
833
1058
  const signature = witnessElement[0].witness.toString('hex');
834
1059
  const pubkey = witnessElement[1].witness.toString('hex');
835
1060
  const fundingInput = fundingInputs[i];
836
- const addSignRequest = {
837
- fundTxHex,
838
- signature,
839
- prevTxId: fundingInput.prevTx.txId.toString(),
840
- prevVout: fundingInput.prevTxVout,
841
- pubkey,
842
- };
843
- fundTxHex = (await this.AddSignatureToFundTransaction(addSignRequest))
844
- .hex;
1061
+ const inputKey = `${fundingInput.prevTx.txId.toString()}:${fundingInput.prevTxVout}`;
1062
+ // Check if this is a DLC input
1063
+ if (fundingInput.dlcInput && !processedDlcInputs.has(inputKey)) {
1064
+ // Mark as processed to avoid double processing
1065
+ processedDlcInputs.add(inputKey);
1066
+ // For DLC inputs, use SignDlcFundingInput which properly combines signatures
1067
+ // This is the correct CFD method for DLC funding inputs
1068
+ const dlcInput = fundingInput.dlcInput;
1069
+ // Find the private key for this DLC input
1070
+ const privateKey = await this.findDlcFundingPrivateKey(dlcInput.localFundPubkey.toString('hex'), dlcInput.remoteFundPubkey.toString('hex'));
1071
+ const signDlcRequest = {
1072
+ fundTxHex,
1073
+ fundTxid: fundingInput.prevTx.txId.toString(),
1074
+ fundVout: fundingInput.prevTxVout,
1075
+ fundAmount: Number(fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats),
1076
+ localFundPubkey: dlcInput.localFundPubkey.toString('hex'),
1077
+ remoteFundPubkey: dlcInput.remoteFundPubkey.toString('hex'),
1078
+ localPrivkey: privateKey,
1079
+ remoteSignature: signature,
1080
+ };
1081
+ fundTxHex = (await this.SignDlcFundingInput(signDlcRequest)).hex;
1082
+ }
1083
+ else if (!fundingInput.dlcInput) {
1084
+ // Regular input - use standard signing
1085
+ const addSignRequest = {
1086
+ fundTxHex,
1087
+ signature,
1088
+ prevTxId: fundingInput.prevTx.txId.toString(),
1089
+ prevVout: fundingInput.prevTxVout,
1090
+ pubkey,
1091
+ };
1092
+ fundTxHex = (await this.AddSignatureToFundTransaction(addSignRequest))
1093
+ .hex;
1094
+ }
1095
+ // If it's a DLC input but already processed, skip it
845
1096
  });
846
1097
  const fundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(fundTxHex));
847
1098
  return fundTx;
848
1099
  }
849
1100
  async FindOutcomeIndexFromPolynomialPayoutCurvePiece(dlcOffer, contractDescriptor, contractOraclePairIndex, polynomialPayoutCurvePiece, oracleAttestation, outcome) {
850
- const polynomialCurve = core_1.PolynomialPayoutCurve.fromPayoutCurvePiece(polynomialPayoutCurvePiece);
1101
+ const polynomialCurve = core_2.PolynomialPayoutCurve.fromPayoutCurvePiece(polynomialPayoutCurvePiece);
851
1102
  const payouts = polynomialPayoutCurvePiece.points.map((point) => Number(point.outcomePayout));
852
1103
  const minPayout = Math.min(...payouts);
853
1104
  const maxPayout = Math.max(...payouts);
@@ -861,7 +1112,7 @@ class BitcoinDlcProvider extends provider_1.default {
861
1112
  ...contractDescriptor.roundingIntervals.intervals,
862
1113
  ].sort((a, b) => Number(b.beginInterval) - Number(a.beginInterval));
863
1114
  const interval = intervalsSorted.find((interval) => Number(outcome) >= Number(interval.beginInterval));
864
- const roundedPayout = BigInt(clampBN(new bignumber_js_1.default((0, core_1.roundPayout)(payout, interval.roundingMod).toString())).toString());
1115
+ const roundedPayout = BigInt(clampBN(new bignumber_js_1.default((0, core_2.roundPayout)(payout, interval.roundingMod).toString())).toString());
865
1116
  const outcomesFormatted = oracleAttestation.outcomes.map((outcome) => parseInt(outcome));
866
1117
  let index = 0;
867
1118
  let groupIndex = -1;
@@ -889,7 +1140,7 @@ Payout Group not found');
889
1140
  }
890
1141
  async FindOutcomeIndexFromHyperbolaPayoutCurvePiece(_dlcOffer, contractDescriptor, contractOraclePairIndex, hyperbolaPayoutCurvePiece, oracleAttestation, outcome) {
891
1142
  const { dlcOffer } = (0, Utils_1.checkTypes)({ _dlcOffer });
892
- const hyperbolaCurve = core_1.HyperbolaPayoutCurve.fromPayoutCurvePiece(hyperbolaPayoutCurvePiece);
1143
+ const hyperbolaCurve = core_2.HyperbolaPayoutCurve.fromPayoutCurvePiece(hyperbolaPayoutCurvePiece);
893
1144
  const clampBN = (val) => bignumber_js_1.default.max(0, bignumber_js_1.default.min(val, dlcOffer.contractInfo.totalCollateral.toString()));
894
1145
  const payout = clampBN(hyperbolaCurve.getPayout(outcome));
895
1146
  const payoutResponses = this.GetPayouts(dlcOffer);
@@ -900,7 +1151,7 @@ Payout Group not found');
900
1151
  ...contractDescriptor.roundingIntervals.intervals,
901
1152
  ].sort((a, b) => Number(b.beginInterval) - Number(a.beginInterval));
902
1153
  const interval = intervalsSorted.find((interval) => Number(outcome) >= Number(interval.beginInterval));
903
- const roundedPayout = BigInt(clampBN(new bignumber_js_1.default((0, core_1.roundPayout)(payout, interval.roundingMod).toString())).toString());
1154
+ const roundedPayout = BigInt(clampBN(new bignumber_js_1.default((0, core_2.roundPayout)(payout, interval.roundingMod).toString())).toString());
904
1155
  const outcomesFormatted = oracleAttestation.outcomes.map((outcome) => parseInt(outcome));
905
1156
  let index = 0;
906
1157
  let groupIndex = -1;
@@ -941,7 +1192,7 @@ Payout Group not found');
941
1192
  // Fallback to brute force search if payout-based search fails
942
1193
  index = 0;
943
1194
  groupLength = 0;
944
- for (const [i, payoutGroup] of payoutGroups.entries()) {
1195
+ for (const [, payoutGroup] of payoutGroups.entries()) {
945
1196
  groupIndex = payoutGroup.groups.findIndex((group) => {
946
1197
  return group.every((msg, j) => msg === outcomesFormatted[j]);
947
1198
  });
@@ -1070,7 +1321,7 @@ Payout Group not found even with brute force search');
1070
1321
  localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
1071
1322
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1072
1323
  oracleSignatures: oracleAttestation.signatures.map((sig) => sig.toString('hex')),
1073
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1324
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1074
1325
  adaptorSignature: isOfferer
1075
1326
  ? dlcAccept.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex')
1076
1327
  : dlcSign.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex'),
@@ -1090,7 +1341,7 @@ Payout Group not found even with brute force search');
1090
1341
  localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
1091
1342
  remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1092
1343
  oracleSignatures: oracleSignatures.map((sig) => sig.toString('hex')),
1093
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1344
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1094
1345
  adaptorSignature: isOfferer
1095
1346
  ? dlcAccept.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex')
1096
1347
  : dlcSign.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex'),
@@ -1121,7 +1372,7 @@ Payout Group not found even with brute force search');
1121
1372
  const network = await this.getConnectedNetwork();
1122
1373
  let finalizer;
1123
1374
  if (_dlcCloses.length === 0) {
1124
- finalizer = new core_1.DualClosingTxFinalizer(fundingInputs, dlcOffer.payoutSpk, dlcAccept.payoutSpk, dlcOffer.feeRatePerVb);
1375
+ finalizer = new core_2.DualClosingTxFinalizer(fundingInputs, dlcOffer.payoutSpk, dlcAccept.payoutSpk, dlcOffer.feeRatePerVb);
1125
1376
  }
1126
1377
  const rawTransactionRequestPromises = [];
1127
1378
  const rawCloseTxs = [];
@@ -1217,7 +1468,7 @@ Payout Group not found even with brute force search');
1217
1468
  hex: paymentVariant.redeem.output.toString('hex'),
1218
1469
  type: 'redeem_script',
1219
1470
  },
1220
- amount: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
1471
+ amount: Number(this.getFundOutputValueSats(dlcTxs)),
1221
1472
  hashType: 'p2wsh',
1222
1473
  sighashType: 'all',
1223
1474
  sighashAnyoneCanPay: false,
@@ -1290,7 +1541,7 @@ Payout Group not found even with brute force search');
1290
1541
  hashType: 'p2wsh',
1291
1542
  sighashType: 'all',
1292
1543
  sighashAnyoneCanPay: false,
1293
- amount: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
1544
+ amount: Number(this.getFundOutputValueSats(dlcTxs)),
1294
1545
  },
1295
1546
  };
1296
1547
  sigsValidity.push((async () => {
@@ -1340,15 +1591,49 @@ Payout Group not found even with brute force search');
1340
1591
  * @param feeRatePerVb Fee rate in satoshi per virtual byte that both sides use to compute fees in funding tx
1341
1592
  * @param cetLocktime The nLockTime to be put on CETs
1342
1593
  * @param refundLocktime The nLockTime to be put on the refund transaction
1594
+ * @param fixedInputs Optional fixed inputs - can be Input[] for regular inputs or FundingInput[] for DLC inputs
1343
1595
  * @returns {Promise<DlcOffer>}
1344
1596
  */
1345
- async createDlcOffer(contractInfo, offerCollateralSatoshis, feeRatePerVb, cetLocktime, refundLocktime, fixedInputs) {
1597
+ async createDlcOffer(contractInfo, offerCollateralSatoshis, feeRatePerVb, cetLocktime, refundLocktime, fixedInputs, inputSupplementationMode) {
1346
1598
  contractInfo.validate();
1347
1599
  const network = await this.getConnectedNetwork();
1348
1600
  const dlcOffer = new messaging_1.DlcOffer();
1349
1601
  // Generate a random 32-byte temporary contract ID
1350
1602
  dlcOffer.temporaryContractId = crypto_2.default.randomBytes(32);
1351
- const { fundingPubKey, payoutSPK, payoutSerialId, fundingInputs: _fundingInputs, changeSPK, changeSerialId, } = await this.Initialize(offerCollateralSatoshis, feeRatePerVb, fixedInputs);
1603
+ // Check if we have FundingInput[] (DLC inputs) or Input[] (regular inputs)
1604
+ const hasFundingInputs = fixedInputs && fixedInputs.length > 0 && 'prevTx' in fixedInputs[0]; // FundingInput has prevTx, Input doesn't
1605
+ let fundingPubKey;
1606
+ let payoutSPK;
1607
+ let payoutSerialId;
1608
+ let _fundingInputs;
1609
+ let changeSPK;
1610
+ let changeSerialId;
1611
+ if (hasFundingInputs) {
1612
+ // Handle FundingInput[] directly (for DLC inputs)
1613
+ const fundingInputs = fixedInputs;
1614
+ // Generate addresses directly since we're bypassing Initialize()
1615
+ const payoutAddress = await this.client.wallet.getUnusedAddress(false);
1616
+ payoutSPK = bitcoinjs_lib_1.address.toOutputScript(payoutAddress.address, network);
1617
+ const changeAddress = await this.client.wallet.getUnusedAddress(true);
1618
+ changeSPK = bitcoinjs_lib_1.address.toOutputScript(changeAddress.address, network);
1619
+ const fundingAddress = await this.client.wallet.getUnusedAddress(false);
1620
+ fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
1621
+ if (fundingAddress.address === payoutAddress.address)
1622
+ throw Error('Address reuse');
1623
+ payoutSerialId = (0, Utils_1.generateSerialId)();
1624
+ changeSerialId = (0, Utils_1.generateSerialId)();
1625
+ _fundingInputs = fundingInputs;
1626
+ }
1627
+ else {
1628
+ // Handle Input[] through existing Initialize() flow
1629
+ const initResult = await this.Initialize(offerCollateralSatoshis, feeRatePerVb, fixedInputs, inputSupplementationMode || Input_1.InputSupplementationMode.Required);
1630
+ fundingPubKey = initResult.fundingPubKey;
1631
+ payoutSPK = initResult.payoutSPK;
1632
+ payoutSerialId = initResult.payoutSerialId;
1633
+ _fundingInputs = initResult.fundingInputs;
1634
+ changeSPK = initResult.changeSPK;
1635
+ changeSerialId = initResult.changeSerialId;
1636
+ }
1352
1637
  _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0'));
1353
1638
  const fundingInputs = _fundingInputs.map((input) => input);
1354
1639
  fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
@@ -1369,8 +1654,11 @@ Payout Group not found even with brute force search');
1369
1654
  dlcOffer.feeRatePerVb = feeRatePerVb;
1370
1655
  dlcOffer.cetLocktime = cetLocktime;
1371
1656
  dlcOffer.refundLocktime = refundLocktime;
1657
+ if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
1658
+ dlcOffer.markAsSingleFunded();
1659
+ }
1372
1660
  (0, assert_1.default)((() => {
1373
- const finalizer = new core_1.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, null, null, null, dlcOffer.feeRatePerVb);
1661
+ const finalizer = new core_2.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, null, null, null, dlcOffer.feeRatePerVb);
1374
1662
  const funding = fundingInputs.reduce((total, input) => {
1375
1663
  return total + input.prevTx.outputs[input.prevTxVout].value.sats;
1376
1664
  }, BigInt(0));
@@ -1417,8 +1705,11 @@ Payout Group not found even with brute force search');
1417
1705
  dlcOffer.feeRatePerVb = feeRatePerVb;
1418
1706
  dlcOffer.cetLocktime = cetLocktime;
1419
1707
  dlcOffer.refundLocktime = refundLocktime;
1708
+ if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
1709
+ dlcOffer.markAsSingleFunded();
1710
+ }
1420
1711
  (0, assert_1.default)((() => {
1421
- const finalizer = new core_1.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, null, null, null, dlcOffer.feeRatePerVb);
1712
+ const finalizer = new core_2.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, null, null, null, dlcOffer.feeRatePerVb);
1422
1713
  const funding = fundingInputs.reduce((total, input) => {
1423
1714
  return total + input.prevTx.outputs[input.prevTxVout].value.sats;
1424
1715
  }, BigInt(0));
@@ -1430,7 +1721,7 @@ Payout Group not found even with brute force search');
1430
1721
  return dlcOffers;
1431
1722
  }
1432
1723
  /**
1433
- * Accept DLC Offer
1724
+ * Accept DLC Offer (supports single-funded DLCs when accept collateral is 0)
1434
1725
  * @param _dlcOffer Dlc Offer Message
1435
1726
  * @param fixedInputs Optional inputs to use for Funding Inputs
1436
1727
  * @returns {Promise<AcceptDlcOfferResponse}
@@ -1441,11 +1732,81 @@ Payout Group not found even with brute force search');
1441
1732
  const acceptCollateralSatoshis = dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateral;
1442
1733
  (0, assert_1.default)(acceptCollateralSatoshis ===
1443
1734
  dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateral, 'acceptCollaterialSatoshis should equal totalCollateral - offerCollateralSatoshis');
1444
- const { fundingPubKey, payoutSPK, payoutSerialId, fundingInputs: _fundingInputs, changeSPK, changeSerialId, } = await this.Initialize(acceptCollateralSatoshis, dlcOffer.feeRatePerVb, fixedInputs);
1735
+ let fundingPubKey;
1736
+ let payoutSPK;
1737
+ let payoutSerialId;
1738
+ let fundingInputs;
1739
+ let changeSPK;
1740
+ let changeSerialId;
1741
+ if (acceptCollateralSatoshis === BigInt(0)) {
1742
+ // Single-funded DLC: accept side provides no funding
1743
+ const network = await this.getConnectedNetwork();
1744
+ // Still need payout address for receiving DLC outcomes
1745
+ const payoutAddress = await this.client.wallet.getUnusedAddress(false);
1746
+ payoutSPK = bitcoinjs_lib_1.address.toOutputScript(payoutAddress.address, network);
1747
+ // Generate funding pubkey for DLC contract construction
1748
+ const fundingAddress = await this.client.wallet.getUnusedAddress(false);
1749
+ fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
1750
+ // Generate change address (even though not used)
1751
+ const changeAddress = await this.client.wallet.getUnusedAddress(true);
1752
+ changeSPK = bitcoinjs_lib_1.address.toOutputScript(changeAddress.address, network);
1753
+ if (fundingAddress.address === payoutAddress.address)
1754
+ throw Error('Address reuse');
1755
+ // Generate serial IDs
1756
+ payoutSerialId = (0, Utils_1.generateSerialId)();
1757
+ changeSerialId = (0, Utils_1.generateSerialId)();
1758
+ // No funding inputs for single-funded DLC
1759
+ fundingInputs = [];
1760
+ }
1761
+ else {
1762
+ // Standard DLC: accept side provides funding
1763
+ // Check if we have FundingInput[] (DLC inputs) or Input[] (regular inputs)
1764
+ const hasFundingInputs = fixedInputs && fixedInputs.length > 0 && 'prevTx' in fixedInputs[0]; // FundingInput has prevTx, Input doesn't
1765
+ let initResult;
1766
+ if (hasFundingInputs) {
1767
+ // Handle FundingInput[] directly (for DLC inputs)
1768
+ const fundingInputs = fixedInputs;
1769
+ const network = await this.getConnectedNetwork();
1770
+ // Generate addresses directly since we're bypassing Initialize()
1771
+ const payoutAddress = await this.client.wallet.getUnusedAddress(false);
1772
+ const payoutSPK = bitcoinjs_lib_1.address.toOutputScript(payoutAddress.address, network);
1773
+ const changeAddress = await this.client.wallet.getUnusedAddress(true);
1774
+ const changeSPK = bitcoinjs_lib_1.address.toOutputScript(changeAddress.address, network);
1775
+ const fundingAddress = await this.client.wallet.getUnusedAddress(false);
1776
+ const fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
1777
+ if (fundingAddress.address === payoutAddress.address)
1778
+ throw Error('Address reuse');
1779
+ const payoutSerialId = (0, Utils_1.generateSerialId)();
1780
+ const changeSerialId = (0, Utils_1.generateSerialId)();
1781
+ initResult = {
1782
+ fundingPubKey,
1783
+ payoutSPK,
1784
+ payoutSerialId,
1785
+ fundingInputs,
1786
+ changeSPK,
1787
+ changeSerialId,
1788
+ };
1789
+ }
1790
+ else {
1791
+ // Handle Input[] through existing Initialize() flow
1792
+ // Use InputSupplementationMode.None when fixed inputs are provided
1793
+ // to avoid wallet lookup issues with unusual addresses
1794
+ const supplementationMode = fixedInputs && fixedInputs.length > 0
1795
+ ? Input_1.InputSupplementationMode.None
1796
+ : Input_1.InputSupplementationMode.Required;
1797
+ initResult = await this.Initialize(acceptCollateralSatoshis, dlcOffer.feeRatePerVb, fixedInputs, supplementationMode);
1798
+ }
1799
+ fundingPubKey = initResult.fundingPubKey;
1800
+ payoutSPK = initResult.payoutSPK;
1801
+ payoutSerialId = initResult.payoutSerialId;
1802
+ changeSPK = initResult.changeSPK;
1803
+ changeSerialId = initResult.changeSerialId;
1804
+ const _fundingInputs = initResult.fundingInputs;
1805
+ _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0'));
1806
+ fundingInputs = _fundingInputs.map((input) => input);
1807
+ fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
1808
+ }
1445
1809
  (0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubkey, fundingPubKey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
1446
- _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0'));
1447
- const fundingInputs = _fundingInputs.map((input) => input);
1448
- fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
1449
1810
  const dlcAccept = new messaging_1.DlcAccept();
1450
1811
  dlcAccept.temporaryContractId = (0, crypto_1.sha256)(dlcOffer.serialize());
1451
1812
  dlcAccept.acceptCollateral = acceptCollateralSatoshis;
@@ -1465,14 +1826,19 @@ Payout Group not found even with brute force search');
1465
1826
  ];
1466
1827
  return new Set(ids).size === ids.length;
1467
1828
  })(), 'offer.changeSerialID, accept.changeSerialId and fundOutputSerialId must be unique');
1829
+ if (dlcOffer.singleFunded)
1830
+ dlcAccept.markAsSingleFunded();
1468
1831
  dlcAccept.validate();
1469
- (0, assert_1.default)((() => {
1470
- const finalizer = new core_1.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, dlcAccept.fundingInputs, dlcAccept.payoutSpk, dlcAccept.changeSpk, dlcOffer.feeRatePerVb);
1471
- const funding = fundingInputs.reduce((total, input) => {
1472
- return total + input.prevTx.outputs[input.prevTxVout].value.sats;
1473
- }, BigInt(0));
1474
- return funding >= acceptCollateralSatoshis + finalizer.acceptFees;
1475
- })(), 'fundingInputs for dlcAccept must be greater than acceptCollateralSatoshis plus acceptFees');
1832
+ // Only validate funding requirements if accept side is providing collateral
1833
+ if (acceptCollateralSatoshis > BigInt(0)) {
1834
+ (0, assert_1.default)((() => {
1835
+ const finalizer = new core_2.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, dlcAccept.fundingInputs, dlcAccept.payoutSpk, dlcAccept.changeSpk, dlcOffer.feeRatePerVb);
1836
+ const funding = fundingInputs.reduce((total, input) => {
1837
+ return total + input.prevTx.outputs[input.prevTxVout].value.sats;
1838
+ }, BigInt(0));
1839
+ return funding >= acceptCollateralSatoshis + finalizer.acceptFees;
1840
+ })(), 'fundingInputs for dlcAccept must be greater than acceptCollateralSatoshis plus acceptFees');
1841
+ }
1476
1842
  const { dlcTransactions, messagesList } = await this.createDlcTxs(dlcOffer, dlcAccept);
1477
1843
  const { cetSignatures, refundSignature } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, false);
1478
1844
  const _dlcTransactions = dlcTransactions;
@@ -1525,7 +1891,7 @@ Payout Group not found even with brute force search');
1525
1891
  })(), 'offer.changeSerialID, accept.changeSerialId and fundOutputSerialId must be unique');
1526
1892
  dlcAccept.validate();
1527
1893
  (0, assert_1.default)((() => {
1528
- const finalizer = new core_1.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, dlcAccept.fundingInputs, dlcAccept.payoutSpk, dlcAccept.changeSpk, dlcOffer.feeRatePerVb);
1894
+ const finalizer = new core_2.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSpk, dlcOffer.changeSpk, dlcAccept.fundingInputs, dlcAccept.payoutSpk, dlcAccept.changeSpk, dlcOffer.feeRatePerVb);
1529
1895
  const funding = fundingInputs.reduce((total, input) => {
1530
1896
  return total + input.prevTx.outputs[input.prevTxVout].value.sats;
1531
1897
  }, BigInt(0));
@@ -1554,11 +1920,7 @@ Payout Group not found even with brute force search');
1554
1920
  * @param _dlcAccept Dlc Accept Message
1555
1921
  * @returns {Promise<SignDlcAcceptResponse}
1556
1922
  */
1557
- async signDlcAccept(_dlcOffer, _dlcAccept) {
1558
- const { dlcOffer, dlcAccept } = (0, Utils_1.checkTypes)({
1559
- _dlcOffer,
1560
- _dlcAccept,
1561
- });
1923
+ async signDlcAccept(dlcOffer, dlcAccept) {
1562
1924
  dlcOffer.validate();
1563
1925
  dlcAccept.validate();
1564
1926
  (0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubkey, dlcAccept.fundingPubkey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
@@ -1764,20 +2126,18 @@ Payout Group not found even with brute force search');
1764
2126
  // Initiate and build PSBT
1765
2127
  let inputs = _inputs;
1766
2128
  if (!_inputs) {
1767
- const tempInputs = await this.GetInputsForAmount([BigInt(20000)], dlcOffer.feeRatePerVb, _inputs);
2129
+ const tempInputs = await this.GetInputsForAmountWithMode([BigInt(20000)], dlcOffer.feeRatePerVb, _inputs || [], Input_1.InputSupplementationMode.Required);
1768
2130
  _inputs = tempInputs;
1769
2131
  }
1770
- inputs = _inputs.map((input) => {
1771
- return {
1772
- ...input,
1773
- inputSerialId: input.inputSerialId || (0, Utils_1.generateSerialId)(),
1774
- toUtxo: input.toUtxo,
1775
- };
1776
- });
1777
- const pubkeys = await Promise.all(inputs.map(async (input) => {
2132
+ // Ensure all inputs have derivation paths by fetching from wallet
2133
+ const inputsWithPaths = await Promise.all(_inputs.map(async (input) => {
1778
2134
  const address = await this.getMethod('getWalletAddress')(input.address);
1779
- return Buffer.from(address.publicKey, 'hex');
2135
+ const inputWithPath = new types_1.Input(input.txid, input.vout, input.address, input.amount, input.value, input.derivationPath || address.derivationPath, // Use derivationPath from wallet if not set
2136
+ input.maxWitnessLength, input.redeemScript, input.inputSerialId || (0, Utils_1.generateSerialId)(), input.scriptPubKey, input.label, input.confirmations, input.spendable, input.solvable, input.safe, input.dlcInput);
2137
+ return { input: inputWithPath, address };
1780
2138
  }));
2139
+ inputs = inputsWithPaths.map((item) => item.input);
2140
+ const pubkeys = inputsWithPaths.map((item) => Buffer.from(item.address.publicKey, 'hex'));
1781
2141
  const fundingInputSerialId = (0, Utils_1.generateSerialId)();
1782
2142
  // Make temporary array to hold all inputs and then sort them
1783
2143
  // this method can be improved later
@@ -1788,7 +2148,7 @@ Payout Group not found even with brute force search');
1788
2148
  sequence: 0,
1789
2149
  witnessUtxo: {
1790
2150
  script: paymentVariant.output,
1791
- value: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
2151
+ value: Number(this.getFundOutputValueSats(dlcTxs)),
1792
2152
  },
1793
2153
  witnessScript: paymentVariant.redeem.output,
1794
2154
  inputSerialId: fundingInputSerialId,
@@ -1817,11 +2177,11 @@ Payout Group not found even with brute force search');
1817
2177
  // Get index of fundingInput
1818
2178
  const fundingInputIndex = sortedPsbtInputs.findIndex((input) => input.inputSerialId === fundingInputSerialId);
1819
2179
  // add to psbt
1820
- sortedPsbtInputs.forEach((input, i) => psbt.addInput(input));
2180
+ sortedPsbtInputs.forEach((input) => psbt.addInput(input));
1821
2181
  const fundingInputs = await Promise.all(inputs.map(async (input) => {
1822
2182
  return this.inputToFundingInput(input);
1823
2183
  }));
1824
- const finalizer = new core_1.DualClosingTxFinalizer(fundingInputs, dlcOffer.payoutSpk, dlcAccept.payoutSpk, dlcOffer.feeRatePerVb);
2184
+ const finalizer = new core_2.DualClosingTxFinalizer(fundingInputs, dlcOffer.payoutSpk, dlcAccept.payoutSpk, dlcOffer.feeRatePerVb);
1825
2185
  const closeInputAmount = BigInt(inputs.reduce((acc, val) => acc + val.value, 0));
1826
2186
  const offerPayoutValue = isOfferer
1827
2187
  ? closeInputAmount +
@@ -1851,6 +2211,9 @@ Payout Group not found even with brute force search');
1851
2211
  if (i === fundingInputIndex)
1852
2212
  return;
1853
2213
  // derive keypair
2214
+ if (!input.derivationPath) {
2215
+ throw new Error(`Missing derivation path for input ${i}`);
2216
+ }
1854
2217
  const keyPair = await this.getMethod('keyPair')(input.derivationPath);
1855
2218
  psbt.signInput(i, keyPair);
1856
2219
  }));
@@ -1909,7 +2272,7 @@ Payout Group not found even with brute force search');
1909
2272
  throw Error('funding inputs not supported on BatchDlcClose'); // TODO support multiple funding inputs
1910
2273
  const fundingInputSerialId = (0, Utils_1.generateSerialId)();
1911
2274
  const fundingInputs = []; // TODO: support multiple funding inputs
1912
- const finalizer = new core_1.DualClosingTxFinalizer(fundingInputs, dlcOffer.payoutSpk, dlcAccept.payoutSpk, dlcOffer.feeRatePerVb);
2275
+ const finalizer = new core_2.DualClosingTxFinalizer(fundingInputs, dlcOffer.payoutSpk, dlcAccept.payoutSpk, dlcOffer.feeRatePerVb);
1913
2276
  // Generate keypair to sign inputs
1914
2277
  const fundPrivateKeyPair = await this.GetFundKeyPair(dlcOffer, dlcAccept, isOfferer);
1915
2278
  const closeInputAmount = BigInt(0); // TODO support multiple funding inputs
@@ -2021,13 +2384,13 @@ Payout Group not found even with brute force search');
2021
2384
  sequence: 0,
2022
2385
  witnessUtxo: {
2023
2386
  script: paymentVariant.output,
2024
- value: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
2387
+ value: Number(this.getFundOutputValueSats(dlcTxs)),
2025
2388
  },
2026
2389
  witnessScript: paymentVariant.redeem.output,
2027
2390
  inputSerialId: dlcClose.fundInputSerialId,
2028
2391
  });
2029
2392
  // add all dlc close inputs
2030
- dlcClose.fundingInputs.forEach((input, i) => {
2393
+ dlcClose.fundingInputs.forEach((input) => {
2031
2394
  psbtInputs.push({
2032
2395
  hash: input.prevTx.txId.serialize(),
2033
2396
  index: input.prevTxVout,
@@ -2062,7 +2425,7 @@ Payout Group not found even with brute force search');
2062
2425
  address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcAccept.payoutSpk : dlcOffer.payoutSpk, network),
2063
2426
  });
2064
2427
  // add to psbt
2065
- sortedPsbtInputs.forEach((input, i) => psbt.addInput(input));
2428
+ sortedPsbtInputs.forEach((input) => psbt.addInput(input));
2066
2429
  const offerer = await this.isOfferer(dlcOffer, dlcAccept);
2067
2430
  // Generate keypair to sign inputs
2068
2431
  const fundPrivateKeyPair = await this.GetFundKeyPair(dlcOffer, dlcAccept, offerer);
@@ -2167,6 +2530,22 @@ Payout Group not found even with brute force search');
2167
2530
  await this.CfdLoaded();
2168
2531
  return this._cfdDlcJs.VerifyRefundTxSignature(jsonObject);
2169
2532
  }
2533
+ async CreateSplicedDlcTransactions(jsonObject) {
2534
+ await this.CfdLoaded();
2535
+ return this._cfdDlcJs.CreateSplicedDlcTransactions(jsonObject);
2536
+ }
2537
+ async GetRawDlcFundingInputSignature(jsonObject) {
2538
+ await this.CfdLoaded();
2539
+ return this._cfdDlcJs.GetRawDlcFundingInputSignature(jsonObject);
2540
+ }
2541
+ async SignDlcFundingInput(jsonObject) {
2542
+ await this.CfdLoaded();
2543
+ return this._cfdDlcJs.SignDlcFundingInput(jsonObject);
2544
+ }
2545
+ async VerifyDlcFundingInputSignature(jsonObject) {
2546
+ await this.CfdLoaded();
2547
+ return this._cfdDlcJs.VerifyDlcFundingInputSignature(jsonObject);
2548
+ }
2170
2549
  async fundingInputToInput(_input, findDerivationPath = true) {
2171
2550
  (0, assert_1.default)(_input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0');
2172
2551
  const network = await this.getConnectedNetwork();
@@ -2184,21 +2563,22 @@ Payout Group not found even with brute force search');
2184
2563
  derivationPath = inputAddress.derivationPath;
2185
2564
  }
2186
2565
  }
2187
- return {
2188
- txid: prevTx.txId.toString(),
2189
- vout: input.prevTxVout,
2190
- address: _address,
2191
- amount: prevTxOut.value.bitcoin,
2192
- value: Number(prevTxOut.value.sats),
2193
- derivationPath,
2194
- maxWitnessLength: input.maxWitnessLen,
2195
- redeemScript: input.redeemScript
2196
- ? input.redeemScript.toString('hex')
2197
- : '',
2198
- scriptPubKey: scriptPubKey.toString('hex'),
2199
- inputSerialId: input.inputSerialId,
2200
- toUtxo: types_1.Input.prototype.toUtxo,
2201
- };
2566
+ // Check if this FundingInput has DLC input information to preserve
2567
+ const dlcInputMessage = input.dlcInput;
2568
+ let dlcInputInfo;
2569
+ if (dlcInputMessage) {
2570
+ dlcInputInfo = {
2571
+ localFundPubkey: dlcInputMessage.localFundPubkey.toString('hex'),
2572
+ remoteFundPubkey: dlcInputMessage.remoteFundPubkey.toString('hex'),
2573
+ contractId: dlcInputMessage.contractId.toString('hex'),
2574
+ };
2575
+ }
2576
+ return new types_1.Input(prevTx.txId.toString(), input.prevTxVout, _address, prevTxOut.value.bitcoin, Number(prevTxOut.value.sats), derivationPath, input.maxWitnessLen, input.redeemScript ? input.redeemScript.toString('hex') : '', input.inputSerialId, scriptPubKey.toString('hex'), undefined, // label
2577
+ undefined, // confirmations
2578
+ undefined, // spendable
2579
+ undefined, // solvable
2580
+ undefined, // safe
2581
+ dlcInputInfo);
2202
2582
  }
2203
2583
  async inputToFundingInput(input) {
2204
2584
  const fundingInput = new messaging_1.FundingInput();
@@ -2228,12 +2608,99 @@ Payout Group not found even with brute force search');
2228
2608
  fundingInput.inputSerialId = input.inputSerialId
2229
2609
  ? input.inputSerialId
2230
2610
  : (0, Utils_1.generateSerialId)();
2611
+ // Preserve DLC input information if present
2612
+ if (input.isDlcInput()) {
2613
+ const dlcInputInfo = input.dlcInput;
2614
+ const dlcInput = new messaging_1.DlcInput();
2615
+ dlcInput.localFundPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
2616
+ dlcInput.remoteFundPubkey = Buffer.from(dlcInputInfo.remoteFundPubkey, 'hex');
2617
+ dlcInput.contractId = Buffer.alloc(32); // Placeholder contract ID
2618
+ fundingInput.dlcInput = dlcInput;
2619
+ }
2231
2620
  return fundingInput;
2232
2621
  }
2233
2622
  async getConnectedNetwork() {
2234
2623
  return this._network;
2235
2624
  }
2625
+ /**
2626
+ * Calculate the maximum collateral possible with given inputs
2627
+ * @param inputs Array of Input objects to use for funding
2628
+ * @param feeRatePerVb Fee rate in satoshis per virtual byte
2629
+ * @param contractCount Number of DLC contracts (default: 1)
2630
+ * @returns Maximum collateral amount in satoshis
2631
+ */
2632
+ async calculateMaxCollateral(inputs, feeRatePerVb, contractCount = 1) {
2633
+ if (inputs.length === 0) {
2634
+ return BigInt(0);
2635
+ }
2636
+ try {
2637
+ // Convert Input[] to FundingInput[]
2638
+ const fundingInputs = await Promise.all(inputs.map((input) => this.inputToFundingInput(input)));
2639
+ // Use node-dlc's calculateMaxCollateral function
2640
+ // For single-funded DLC, pass only offerer inputs and fee rate
2641
+ return core_1.BatchDlcTxBuilder.calculateMaxCollateral(fundingInputs, feeRatePerVb, contractCount);
2642
+ }
2643
+ catch (error) {
2644
+ // If calculation fails, return 0 to indicate insufficient funds
2645
+ console.warn('calculateMaxCollateral failed:', error);
2646
+ return BigInt(0);
2647
+ }
2648
+ }
2649
+ /**
2650
+ * Create a funding input with DLC input information for splicing
2651
+ * @param dlcInputInfo DLC input information
2652
+ * @param fundingTxHex Raw transaction hex of the funding transaction
2653
+ */
2654
+ async createDlcFundingInput(dlcInputInfo, fundingTxHex) {
2655
+ const fundingInput = new messaging_1.FundingInput();
2656
+ const tx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(fundingTxHex));
2657
+ fundingInput.prevTx = tx;
2658
+ fundingInput.prevTxVout = dlcInputInfo.fundVout;
2659
+ fundingInput.sequence = bitcoin_1.Sequence.default();
2660
+ fundingInput.maxWitnessLen = dlcInputInfo.maxWitnessLength || 220;
2661
+ fundingInput.redeemScript = Buffer.from('', 'hex'); // Empty for P2WSH
2662
+ fundingInput.inputSerialId = BigInt(dlcInputInfo.inputSerialId || (0, Utils_1.generateSerialId)());
2663
+ // Create the DLC multisig script for address generation
2664
+ const localPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
2665
+ const remotePubkey = Buffer.from(dlcInputInfo.remoteFundPubkey, 'hex');
2666
+ // Use the same deterministic ordering as cfd-dlc-js: lexicographic by hex
2667
+ // This matches GetOrderedPubkeys() in cfddlc_transactions.cpp
2668
+ const orderedPubkeys = dlcInputInfo.localFundPubkey < dlcInputInfo.remoteFundPubkey
2669
+ ? [localPubkey, remotePubkey]
2670
+ : [remotePubkey, localPubkey];
2671
+ const network = await this.getConnectedNetwork();
2672
+ // Create 2-of-2 multisig payment using deterministic ordering
2673
+ const p2ms = bitcoinjs_lib_1.payments.p2ms({
2674
+ m: 2,
2675
+ pubkeys: orderedPubkeys,
2676
+ network,
2677
+ });
2678
+ const paymentVariant = bitcoinjs_lib_1.payments.p2wsh({
2679
+ redeem: p2ms,
2680
+ network,
2681
+ });
2682
+ const multisigAddress = paymentVariant.address;
2683
+ // Verify this matches the actual funding output address
2684
+ const actualFundingOutput = tx.outputs[dlcInputInfo.fundVout];
2685
+ const actualFundingAddress = bitcoinjs_lib_1.address.fromOutputScript(actualFundingOutput.scriptPubKey.serialize().slice(1), network);
2686
+ if (actualFundingAddress !== multisigAddress) {
2687
+ throw new Error(`DLC funding address mismatch. ` +
2688
+ `Expected: ${actualFundingAddress}, ` +
2689
+ `Constructed: ${multisigAddress}`);
2690
+ }
2691
+ // Add toUtxo method that's expected by GetInputsForAmount
2692
+ fundingInput.toUtxo = () => {
2693
+ return new types_1.Utxo(dlcInputInfo.fundTxid, dlcInputInfo.fundVout, types_1.Amount.FromSatoshis(Number(dlcInputInfo.fundAmount)), multisigAddress, dlcInputInfo.maxWitnessLength || 220, undefined, // DLC inputs don't have derivation paths
2694
+ fundingInput.inputSerialId);
2695
+ };
2696
+ // Create proper DlcInput object for splicing detection and signing
2697
+ const dlcInput = new messaging_1.DlcInput();
2698
+ dlcInput.localFundPubkey = Buffer.from(dlcInputInfo.localFundPubkey, 'hex');
2699
+ dlcInput.remoteFundPubkey = Buffer.from(dlcInputInfo.remoteFundPubkey, 'hex');
2700
+ dlcInput.contractId = Buffer.from(dlcInputInfo.contractId, 'hex');
2701
+ fundingInput.dlcInput = dlcInput;
2702
+ return fundingInput;
2703
+ }
2236
2704
  }
2237
2705
  exports.default = BitcoinDlcProvider;
2238
- const BurnAddress = 'bcrt1qxcjufgh2jarkp2qkx68azh08w9v5gah8u6es8s';
2239
2706
  //# sourceMappingURL=BitcoinDlcProvider.js.map