@atomicfinance/bitcoin-dlc-provider 3.6.1 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (972) hide show
  1. package/.nvmrc +1 -1
  2. package/.turbo/turbo-lint.log +1 -0
  3. package/.yalc/@node-dlc/bitcoin/.nyc_output/982e80bf-a70c-452f-b63d-d749ae385531.json +1 -0
  4. package/.yalc/@node-dlc/bitcoin/.nyc_output/processinfo/982e80bf-a70c-452f-b63d-d749ae385531.json +1 -0
  5. package/.yalc/@node-dlc/bitcoin/.nyc_output/processinfo/index.json +1 -0
  6. package/.yalc/@node-dlc/bitcoin/README.md +11 -0
  7. package/.yalc/@node-dlc/bitcoin/__tests__/bitcoin/amount.spec.ts +330 -0
  8. package/.yalc/@node-dlc/bitcoin/__tests__/bitcoin/value.spec.ts +320 -0
  9. package/.yalc/@node-dlc/bitcoin/__tests__/tsconfig.json +8 -0
  10. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Amount.ts.html +290 -0
  11. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Base58.ts.html +269 -0
  12. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Base58Check.ts.html +182 -0
  13. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/BitcoinError.ts.html +173 -0
  14. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/BitcoinErrorCode.ts.html +110 -0
  15. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/HashByteOrder.ts.html +143 -0
  16. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/HashValue.ts.html +350 -0
  17. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/LexicographicalSorters.ts.html +191 -0
  18. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/LockTime.ts.html +386 -0
  19. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/OpCodes.ts.html +437 -0
  20. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/OutPoint.ts.html +383 -0
  21. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Script.ts.html +1607 -0
  22. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Sequence.ts.html +713 -0
  23. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/SigHashType.ts.html +137 -0
  24. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Stack.ts.html +323 -0
  25. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TimeLockMode.ts.html +128 -0
  26. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Tx.ts.html +1520 -0
  27. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TxBuilder.ts.html +971 -0
  28. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TxIn.ts.html +425 -0
  29. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/TxOut.ts.html +341 -0
  30. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Value.ts.html +683 -0
  31. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Wif.ts.html +311 -0
  32. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/Witness.ts.html +275 -0
  33. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/base.css +224 -0
  34. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/block-navigation.js +79 -0
  35. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/favicon.png +0 -0
  36. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/index.html +126 -0
  37. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/index.ts.html +164 -0
  38. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/prettify.css +1 -0
  39. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/prettify.js +2 -0
  40. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  41. package/.yalc/@node-dlc/bitcoin/coverage/lcov-report/sorter.js +170 -0
  42. package/.yalc/@node-dlc/bitcoin/coverage/lcov.info +123 -0
  43. package/.yalc/@node-dlc/bitcoin/dist/Amount.d.ts +48 -0
  44. package/.yalc/@node-dlc/bitcoin/dist/Amount.js +68 -0
  45. package/.yalc/@node-dlc/bitcoin/dist/Amount.js.map +1 -0
  46. package/.yalc/@node-dlc/bitcoin/dist/Base58.d.ts +22 -0
  47. package/.yalc/@node-dlc/bitcoin/dist/Base58.js +62 -0
  48. package/.yalc/@node-dlc/bitcoin/dist/Base58.js.map +1 -0
  49. package/.yalc/@node-dlc/bitcoin/dist/Base58Check.d.ts +14 -0
  50. package/.yalc/@node-dlc/bitcoin/dist/Base58Check.js +36 -0
  51. package/.yalc/@node-dlc/bitcoin/dist/Base58Check.js.map +1 -0
  52. package/.yalc/@node-dlc/bitcoin/dist/BitcoinError.d.ts +6 -0
  53. package/.yalc/@node-dlc/bitcoin/dist/BitcoinError.js +36 -0
  54. package/.yalc/@node-dlc/bitcoin/dist/BitcoinError.js.map +1 -0
  55. package/.yalc/@node-dlc/bitcoin/dist/BitcoinErrorCode.d.ts +10 -0
  56. package/.yalc/@node-dlc/bitcoin/dist/BitcoinErrorCode.js +15 -0
  57. package/.yalc/@node-dlc/bitcoin/dist/BitcoinErrorCode.js.map +1 -0
  58. package/.yalc/@node-dlc/bitcoin/dist/Block.d.ts +19 -0
  59. package/.yalc/@node-dlc/bitcoin/dist/Block.js +3 -0
  60. package/.yalc/@node-dlc/bitcoin/dist/Block.js.map +1 -0
  61. package/.yalc/@node-dlc/bitcoin/dist/HashByteOrder.d.ts +20 -0
  62. package/.yalc/@node-dlc/bitcoin/dist/HashByteOrder.js +25 -0
  63. package/.yalc/@node-dlc/bitcoin/dist/HashByteOrder.js.map +1 -0
  64. package/.yalc/@node-dlc/bitcoin/dist/HashValue.d.ts +55 -0
  65. package/.yalc/@node-dlc/bitcoin/dist/HashValue.js +82 -0
  66. package/.yalc/@node-dlc/bitcoin/dist/HashValue.js.map +1 -0
  67. package/.yalc/@node-dlc/bitcoin/dist/ICloneable.d.ts +3 -0
  68. package/.yalc/@node-dlc/bitcoin/dist/ICloneable.js +3 -0
  69. package/.yalc/@node-dlc/bitcoin/dist/ICloneable.js.map +1 -0
  70. package/.yalc/@node-dlc/bitcoin/dist/LexicographicalSorters.d.ts +18 -0
  71. package/.yalc/@node-dlc/bitcoin/dist/LexicographicalSorters.js +41 -0
  72. package/.yalc/@node-dlc/bitcoin/dist/LexicographicalSorters.js.map +1 -0
  73. package/.yalc/@node-dlc/bitcoin/dist/LockTime.d.ts +61 -0
  74. package/.yalc/@node-dlc/bitcoin/dist/LockTime.js +94 -0
  75. package/.yalc/@node-dlc/bitcoin/dist/LockTime.js.map +1 -0
  76. package/.yalc/@node-dlc/bitcoin/dist/OpCodes.d.ts +102 -0
  77. package/.yalc/@node-dlc/bitcoin/dist/OpCodes.js +116 -0
  78. package/.yalc/@node-dlc/bitcoin/dist/OpCodes.js.map +1 -0
  79. package/.yalc/@node-dlc/bitcoin/dist/OutPoint.d.ts +57 -0
  80. package/.yalc/@node-dlc/bitcoin/dist/OutPoint.js +88 -0
  81. package/.yalc/@node-dlc/bitcoin/dist/OutPoint.js.map +1 -0
  82. package/.yalc/@node-dlc/bitcoin/dist/Script.d.ts +185 -0
  83. package/.yalc/@node-dlc/bitcoin/dist/Script.js +404 -0
  84. package/.yalc/@node-dlc/bitcoin/dist/Script.js.map +1 -0
  85. package/.yalc/@node-dlc/bitcoin/dist/ScriptCmd.d.ts +3 -0
  86. package/.yalc/@node-dlc/bitcoin/dist/ScriptCmd.js +3 -0
  87. package/.yalc/@node-dlc/bitcoin/dist/ScriptCmd.js.map +1 -0
  88. package/.yalc/@node-dlc/bitcoin/dist/Sequence.d.ts +116 -0
  89. package/.yalc/@node-dlc/bitcoin/dist/Sequence.js +187 -0
  90. package/.yalc/@node-dlc/bitcoin/dist/Sequence.js.map +1 -0
  91. package/.yalc/@node-dlc/bitcoin/dist/SigHashType.d.ts +7 -0
  92. package/.yalc/@node-dlc/bitcoin/dist/SigHashType.js +27 -0
  93. package/.yalc/@node-dlc/bitcoin/dist/SigHashType.js.map +1 -0
  94. package/.yalc/@node-dlc/bitcoin/dist/SizeResult.d.ts +5 -0
  95. package/.yalc/@node-dlc/bitcoin/dist/SizeResult.js +3 -0
  96. package/.yalc/@node-dlc/bitcoin/dist/SizeResult.js.map +1 -0
  97. package/.yalc/@node-dlc/bitcoin/dist/Sorter.d.ts +1 -0
  98. package/.yalc/@node-dlc/bitcoin/dist/Sorter.js +3 -0
  99. package/.yalc/@node-dlc/bitcoin/dist/Sorter.js.map +1 -0
  100. package/.yalc/@node-dlc/bitcoin/dist/Stack.d.ts +15 -0
  101. package/.yalc/@node-dlc/bitcoin/dist/Stack.js +77 -0
  102. package/.yalc/@node-dlc/bitcoin/dist/Stack.js.map +1 -0
  103. package/.yalc/@node-dlc/bitcoin/dist/TimeLockMode.d.ts +15 -0
  104. package/.yalc/@node-dlc/bitcoin/dist/TimeLockMode.js +20 -0
  105. package/.yalc/@node-dlc/bitcoin/dist/TimeLockMode.js.map +1 -0
  106. package/.yalc/@node-dlc/bitcoin/dist/Tx.d.ts +150 -0
  107. package/.yalc/@node-dlc/bitcoin/dist/Tx.js +408 -0
  108. package/.yalc/@node-dlc/bitcoin/dist/Tx.js.map +1 -0
  109. package/.yalc/@node-dlc/bitcoin/dist/TxBuilder.d.ts +110 -0
  110. package/.yalc/@node-dlc/bitcoin/dist/TxBuilder.js +238 -0
  111. package/.yalc/@node-dlc/bitcoin/dist/TxBuilder.js.map +1 -0
  112. package/.yalc/@node-dlc/bitcoin/dist/TxIn.d.ts +71 -0
  113. package/.yalc/@node-dlc/bitcoin/dist/TxIn.js +79 -0
  114. package/.yalc/@node-dlc/bitcoin/dist/TxIn.js.map +1 -0
  115. package/.yalc/@node-dlc/bitcoin/dist/TxOut.d.ts +57 -0
  116. package/.yalc/@node-dlc/bitcoin/dist/TxOut.js +68 -0
  117. package/.yalc/@node-dlc/bitcoin/dist/TxOut.js.map +1 -0
  118. package/.yalc/@node-dlc/bitcoin/dist/Value.d.ts +122 -0
  119. package/.yalc/@node-dlc/bitcoin/dist/Value.js +180 -0
  120. package/.yalc/@node-dlc/bitcoin/dist/Value.js.map +1 -0
  121. package/.yalc/@node-dlc/bitcoin/dist/Wif.d.ts +41 -0
  122. package/.yalc/@node-dlc/bitcoin/dist/Wif.js +62 -0
  123. package/.yalc/@node-dlc/bitcoin/dist/Wif.js.map +1 -0
  124. package/.yalc/@node-dlc/bitcoin/dist/Witness.d.ts +41 -0
  125. package/.yalc/@node-dlc/bitcoin/dist/Witness.js +63 -0
  126. package/.yalc/@node-dlc/bitcoin/dist/Witness.js.map +1 -0
  127. package/.yalc/@node-dlc/bitcoin/dist/index.d.ts +28 -0
  128. package/.yalc/@node-dlc/bitcoin/dist/index.js +45 -0
  129. package/.yalc/@node-dlc/bitcoin/dist/index.js.map +1 -0
  130. package/.yalc/@node-dlc/bitcoin/lib/Amount.ts +70 -0
  131. package/.yalc/@node-dlc/bitcoin/lib/Base58.ts +63 -0
  132. package/.yalc/@node-dlc/bitcoin/lib/Base58Check.ts +34 -0
  133. package/.yalc/@node-dlc/bitcoin/lib/BitcoinError.ts +31 -0
  134. package/.yalc/@node-dlc/bitcoin/lib/BitcoinErrorCode.ts +10 -0
  135. package/.yalc/@node-dlc/bitcoin/lib/Block.ts +20 -0
  136. package/.yalc/@node-dlc/bitcoin/lib/HashByteOrder.ts +21 -0
  137. package/.yalc/@node-dlc/bitcoin/lib/HashValue.ts +90 -0
  138. package/.yalc/@node-dlc/bitcoin/lib/ICloneable.ts +3 -0
  139. package/.yalc/@node-dlc/bitcoin/lib/LexicographicalSorters.ts +37 -0
  140. package/.yalc/@node-dlc/bitcoin/lib/LockTime.ts +102 -0
  141. package/.yalc/@node-dlc/bitcoin/lib/OpCodes.ts +119 -0
  142. package/.yalc/@node-dlc/bitcoin/lib/OutPoint.ts +101 -0
  143. package/.yalc/@node-dlc/bitcoin/lib/Script.ts +509 -0
  144. package/.yalc/@node-dlc/bitcoin/lib/ScriptCmd.ts +3 -0
  145. package/.yalc/@node-dlc/bitcoin/lib/Sequence.ts +211 -0
  146. package/.yalc/@node-dlc/bitcoin/lib/SigHashType.ts +19 -0
  147. package/.yalc/@node-dlc/bitcoin/lib/SizeResult.ts +5 -0
  148. package/.yalc/@node-dlc/bitcoin/lib/Sorter.ts +1 -0
  149. package/.yalc/@node-dlc/bitcoin/lib/Stack.ts +81 -0
  150. package/.yalc/@node-dlc/bitcoin/lib/TimeLockMode.ts +16 -0
  151. package/.yalc/@node-dlc/bitcoin/lib/Tx.ts +480 -0
  152. package/.yalc/@node-dlc/bitcoin/lib/TxBuilder.ts +297 -0
  153. package/.yalc/@node-dlc/bitcoin/lib/TxIn.ts +115 -0
  154. package/.yalc/@node-dlc/bitcoin/lib/TxOut.ts +87 -0
  155. package/.yalc/@node-dlc/bitcoin/lib/Value.ts +201 -0
  156. package/.yalc/@node-dlc/bitcoin/lib/Wif.ts +77 -0
  157. package/.yalc/@node-dlc/bitcoin/lib/Witness.ts +65 -0
  158. package/.yalc/@node-dlc/bitcoin/lib/index.ts +28 -0
  159. package/.yalc/@node-dlc/bitcoin/package.json +31 -0
  160. package/.yalc/@node-dlc/bitcoin/tsconfig.json +8 -0
  161. package/.yalc/@node-dlc/bitcoin/yalc.sig +1 -0
  162. package/.yalc/@node-dlc/bufio/.eslintrc +6 -0
  163. package/.yalc/@node-dlc/bufio/.nyc_output/3c26c5b3-2a5e-4a53-88d4-06f4a5c339f7.json +1 -0
  164. package/.yalc/@node-dlc/bufio/.nyc_output/processinfo/3c26c5b3-2a5e-4a53-88d4-06f4a5c339f7.json +1 -0
  165. package/.yalc/@node-dlc/bufio/.nyc_output/processinfo/index.json +1 -0
  166. package/.yalc/@node-dlc/bufio/README.md +68 -0
  167. package/.yalc/@node-dlc/bufio/__tests__/BufferReader.spec.ts +548 -0
  168. package/.yalc/@node-dlc/bufio/__tests__/BufferWriter.spec.ts +530 -0
  169. package/.yalc/@node-dlc/bufio/__tests__/Hex.spec.ts +51 -0
  170. package/.yalc/@node-dlc/bufio/__tests__/StreamReader.spec.ts +133 -0
  171. package/.yalc/@node-dlc/bufio/__tests__/bigFromBufBE.spec.ts +14 -0
  172. package/.yalc/@node-dlc/bufio/__tests__/bigFromBufLE.spec.ts +14 -0
  173. package/.yalc/@node-dlc/bufio/__tests__/bigToBufBE.spec.ts +15 -0
  174. package/.yalc/@node-dlc/bufio/__tests__/bigToBufLE.spec.ts +14 -0
  175. package/.yalc/@node-dlc/bufio/__tests__/encodeVarInt.spec.ts +25 -0
  176. package/.yalc/@node-dlc/bufio/__tests__/tsconfig.json +7 -0
  177. package/.yalc/@node-dlc/bufio/__tests__/varIntBytes.spec.ts +34 -0
  178. package/.yalc/@node-dlc/bufio/coverage/lcov-report/BufferReader.ts.html +1142 -0
  179. package/.yalc/@node-dlc/bufio/coverage/lcov-report/BufferWriter.ts.html +953 -0
  180. package/.yalc/@node-dlc/bufio/coverage/lcov-report/Hex.ts.html +323 -0
  181. package/.yalc/@node-dlc/bufio/coverage/lcov-report/StreamReader.ts.html +620 -0
  182. package/.yalc/@node-dlc/bufio/coverage/lcov-report/base.css +224 -0
  183. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigFromBufBE.ts.html +89 -0
  184. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigFromBufLE.ts.html +95 -0
  185. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigToBufBE.ts.html +98 -0
  186. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bigToBufLE.ts.html +95 -0
  187. package/.yalc/@node-dlc/bufio/coverage/lcov-report/block-navigation.js +79 -0
  188. package/.yalc/@node-dlc/bufio/coverage/lcov-report/bufToStream.ts.html +113 -0
  189. package/.yalc/@node-dlc/bufio/coverage/lcov-report/encodeVarInt.ts.html +203 -0
  190. package/.yalc/@node-dlc/bufio/coverage/lcov-report/favicon.png +0 -0
  191. package/.yalc/@node-dlc/bufio/coverage/lcov-report/index.html +261 -0
  192. package/.yalc/@node-dlc/bufio/coverage/lcov-report/prettify.css +1 -0
  193. package/.yalc/@node-dlc/bufio/coverage/lcov-report/prettify.js +2 -0
  194. package/.yalc/@node-dlc/bufio/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  195. package/.yalc/@node-dlc/bufio/coverage/lcov-report/sorter.js +170 -0
  196. package/.yalc/@node-dlc/bufio/coverage/lcov-report/varIntBytes.ts.html +116 -0
  197. package/.yalc/@node-dlc/bufio/coverage/lcov.info +747 -0
  198. package/.yalc/@node-dlc/bufio/dist/BufferReader.d.ts +155 -0
  199. package/.yalc/@node-dlc/bufio/dist/BufferReader.js +346 -0
  200. package/.yalc/@node-dlc/bufio/dist/BufferReader.js.map +1 -0
  201. package/.yalc/@node-dlc/bufio/dist/BufferWriter.d.ts +143 -0
  202. package/.yalc/@node-dlc/bufio/dist/BufferWriter.js +279 -0
  203. package/.yalc/@node-dlc/bufio/dist/BufferWriter.js.map +1 -0
  204. package/.yalc/@node-dlc/bufio/dist/Hex.d.ts +13 -0
  205. package/.yalc/@node-dlc/bufio/dist/Hex.js +78 -0
  206. package/.yalc/@node-dlc/bufio/dist/Hex.js.map +1 -0
  207. package/.yalc/@node-dlc/bufio/dist/StreamReader.d.ts +111 -0
  208. package/.yalc/@node-dlc/bufio/dist/StreamReader.js +180 -0
  209. package/.yalc/@node-dlc/bufio/dist/StreamReader.js.map +1 -0
  210. package/.yalc/@node-dlc/bufio/dist/bigFromBufBE.d.ts +2 -0
  211. package/.yalc/@node-dlc/bufio/dist/bigFromBufBE.js +8 -0
  212. package/.yalc/@node-dlc/bufio/dist/bigFromBufBE.js.map +1 -0
  213. package/.yalc/@node-dlc/bufio/dist/bigFromBufLE.d.ts +2 -0
  214. package/.yalc/@node-dlc/bufio/dist/bigFromBufLE.js +9 -0
  215. package/.yalc/@node-dlc/bufio/dist/bigFromBufLE.js.map +1 -0
  216. package/.yalc/@node-dlc/bufio/dist/bigToBufBE.d.ts +2 -0
  217. package/.yalc/@node-dlc/bufio/dist/bigToBufBE.js +13 -0
  218. package/.yalc/@node-dlc/bufio/dist/bigToBufBE.js.map +1 -0
  219. package/.yalc/@node-dlc/bufio/dist/bigToBufLE.d.ts +2 -0
  220. package/.yalc/@node-dlc/bufio/dist/bigToBufLE.js +9 -0
  221. package/.yalc/@node-dlc/bufio/dist/bigToBufLE.js.map +1 -0
  222. package/.yalc/@node-dlc/bufio/dist/bufToStream.d.ts +7 -0
  223. package/.yalc/@node-dlc/bufio/dist/bufToStream.js +15 -0
  224. package/.yalc/@node-dlc/bufio/dist/bufToStream.js.map +1 -0
  225. package/.yalc/@node-dlc/bufio/dist/encodeVarInt.d.ts +12 -0
  226. package/.yalc/@node-dlc/bufio/dist/encodeVarInt.js +46 -0
  227. package/.yalc/@node-dlc/bufio/dist/encodeVarInt.js.map +1 -0
  228. package/.yalc/@node-dlc/bufio/dist/index.d.ts +11 -0
  229. package/.yalc/@node-dlc/bufio/dist/index.js +28 -0
  230. package/.yalc/@node-dlc/bufio/dist/index.js.map +1 -0
  231. package/.yalc/@node-dlc/bufio/dist/varIntBytes.d.ts +5 -0
  232. package/.yalc/@node-dlc/bufio/dist/varIntBytes.js +22 -0
  233. package/.yalc/@node-dlc/bufio/dist/varIntBytes.js.map +1 -0
  234. package/.yalc/@node-dlc/bufio/lib/BufferReader.ts +354 -0
  235. package/.yalc/@node-dlc/bufio/lib/BufferWriter.ts +291 -0
  236. package/.yalc/@node-dlc/bufio/lib/Hex.ts +81 -0
  237. package/.yalc/@node-dlc/bufio/lib/StreamReader.ts +180 -0
  238. package/.yalc/@node-dlc/bufio/lib/bigFromBufBE.ts +3 -0
  239. package/.yalc/@node-dlc/bufio/lib/bigFromBufLE.ts +5 -0
  240. package/.yalc/@node-dlc/bufio/lib/bigToBufBE.ts +6 -0
  241. package/.yalc/@node-dlc/bufio/lib/bigToBufLE.ts +5 -0
  242. package/.yalc/@node-dlc/bufio/lib/bufToStream.ts +11 -0
  243. package/.yalc/@node-dlc/bufio/lib/encodeVarInt.ts +41 -0
  244. package/.yalc/@node-dlc/bufio/lib/index.ts +11 -0
  245. package/.yalc/@node-dlc/bufio/lib/varIntBytes.ts +12 -0
  246. package/.yalc/@node-dlc/bufio/package.json +27 -0
  247. package/.yalc/@node-dlc/bufio/tsconfig-build.json +7 -0
  248. package/.yalc/@node-dlc/bufio/tsconfig.json +7 -0
  249. package/.yalc/@node-dlc/bufio/yalc.sig +1 -0
  250. package/.yalc/@node-dlc/core/.nyc_output/687a3c14-9765-45fd-a1fe-f7db3d56fee4.json +1 -0
  251. package/.yalc/@node-dlc/core/.nyc_output/processinfo/687a3c14-9765-45fd-a1fe-f7db3d56fee4.json +1 -0
  252. package/.yalc/@node-dlc/core/.nyc_output/processinfo/index.json +1 -0
  253. package/.yalc/@node-dlc/core/README.md +11 -0
  254. package/.yalc/@node-dlc/core/__tests__/core.spec.ts +7 -0
  255. package/.yalc/@node-dlc/core/__tests__/dlc/CETCalculator.spec.ts +1029 -0
  256. package/.yalc/@node-dlc/core/__tests__/dlc/CoinSelect.spec.ts +179 -0
  257. package/.yalc/@node-dlc/core/__tests__/dlc/PolynomialPayoutCurve.spec.ts +345 -0
  258. package/.yalc/@node-dlc/core/__tests__/dlc/TxBuilder.spec.ts +424 -0
  259. package/.yalc/@node-dlc/core/__tests__/dlc/finance/Builder.spec.ts +492 -0
  260. package/.yalc/@node-dlc/core/__tests__/dlc/finance/CoveredCall.spec.ts +112 -0
  261. package/.yalc/@node-dlc/core/__tests__/dlc/finance/CsoInfo.spec.ts +1124 -0
  262. package/.yalc/@node-dlc/core/__tests__/dlc/finance/LongCall.spec.ts +55 -0
  263. package/.yalc/@node-dlc/core/__tests__/dlc/finance/LongPut.spec.ts +55 -0
  264. package/.yalc/@node-dlc/core/__tests__/dlc/finance/OptionInfo.spec.ts +226 -0
  265. package/.yalc/@node-dlc/core/__tests__/dlc/finance/ShortPut.spec.ts +62 -0
  266. package/.yalc/@node-dlc/core/__tests__/tsconfig.json +8 -0
  267. package/.yalc/@node-dlc/core/__tests__/utils/precision.spec.ts +40 -0
  268. package/.yalc/@node-dlc/core/coverage/lcov-report/base.css +224 -0
  269. package/.yalc/@node-dlc/core/coverage/lcov-report/block-navigation.js +79 -0
  270. package/.yalc/@node-dlc/core/coverage/lcov-report/favicon.png +0 -0
  271. package/.yalc/@node-dlc/core/coverage/lcov-report/index.html +171 -0
  272. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/AsyncProcessingQueue.ts.html +269 -0
  273. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/Base32.ts.html +86 -0
  274. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/BigIntUtils.ts.html +86 -0
  275. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/BitField.ts.html +86 -0
  276. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/ChannelId.ts.html +86 -0
  277. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/LinkedList.ts.html +413 -0
  278. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/LinkedListNode.ts.html +122 -0
  279. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/Queue.ts.html +188 -0
  280. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/ShortChannelId.ts.html +86 -0
  281. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/ShortChannelIdUtils.ts.html +107 -0
  282. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/CETCalculator.ts.html +1430 -0
  283. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/CoinSelect.ts.html +431 -0
  284. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/HyperbolaPayoutCurve.ts.html +644 -0
  285. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/PolynomialPayoutCurve.ts.html +878 -0
  286. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/TxBuilder.ts.html +1088 -0
  287. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/TxFinalizer.ts.html +731 -0
  288. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/Builder.ts.html +2270 -0
  289. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/CoveredCall.ts.html +410 -0
  290. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/CsoInfo.ts.html +1574 -0
  291. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/LinearPayout.ts.html +362 -0
  292. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/LongCall.ts.html +302 -0
  293. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/LongPut.ts.html +302 -0
  294. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/OptionInfo.ts.html +626 -0
  295. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/ShortPut.ts.html +305 -0
  296. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/finance/index.html +216 -0
  297. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/dlc/index.html +186 -0
  298. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/index.html +261 -0
  299. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/index.ts.html +278 -0
  300. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/ChannelId.ts.html +242 -0
  301. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/ChannelKeys.ts.html +407 -0
  302. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/CommitmentNumber.ts.html +362 -0
  303. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/CommitmentSecret.ts.html +203 -0
  304. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/CommitmentSecretStore.ts.html +332 -0
  305. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/Htlc.ts.html +236 -0
  306. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/HtlcDirection.ts.html +131 -0
  307. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/ScriptFactory.ts.html +530 -0
  308. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/TxFactory.ts.html +1094 -0
  309. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/lightning/index.html +231 -0
  310. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/utils/BigIntUtils.ts.html +272 -0
  311. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/utils/Precision.ts.html +149 -0
  312. package/.yalc/@node-dlc/core/coverage/lcov-report/lib/utils/index.html +126 -0
  313. package/.yalc/@node-dlc/core/coverage/lcov-report/prettify.css +1 -0
  314. package/.yalc/@node-dlc/core/coverage/lcov-report/prettify.js +2 -0
  315. package/.yalc/@node-dlc/core/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  316. package/.yalc/@node-dlc/core/coverage/lcov-report/sorter.js +170 -0
  317. package/.yalc/@node-dlc/core/coverage/lcov.info +2426 -0
  318. package/.yalc/@node-dlc/core/dist/AsyncProcessingQueue.d.ts +22 -0
  319. package/.yalc/@node-dlc/core/dist/AsyncProcessingQueue.js +55 -0
  320. package/.yalc/@node-dlc/core/dist/AsyncProcessingQueue.js.map +1 -0
  321. package/.yalc/@node-dlc/core/dist/Base32.d.ts +1 -0
  322. package/.yalc/@node-dlc/core/dist/Base32.js +7 -0
  323. package/.yalc/@node-dlc/core/dist/Base32.js.map +1 -0
  324. package/.yalc/@node-dlc/core/dist/BigIntUtils.d.ts +1 -0
  325. package/.yalc/@node-dlc/core/dist/BigIntUtils.js +8 -0
  326. package/.yalc/@node-dlc/core/dist/BigIntUtils.js.map +1 -0
  327. package/.yalc/@node-dlc/core/dist/BitField.d.ts +1 -0
  328. package/.yalc/@node-dlc/core/dist/BitField.js +7 -0
  329. package/.yalc/@node-dlc/core/dist/BitField.js.map +1 -0
  330. package/.yalc/@node-dlc/core/dist/ChannelId.d.ts +1 -0
  331. package/.yalc/@node-dlc/core/dist/ChannelId.js +7 -0
  332. package/.yalc/@node-dlc/core/dist/ChannelId.js.map +1 -0
  333. package/.yalc/@node-dlc/core/dist/LinkedList.d.ts +30 -0
  334. package/.yalc/@node-dlc/core/dist/LinkedList.js +104 -0
  335. package/.yalc/@node-dlc/core/dist/LinkedList.js.map +1 -0
  336. package/.yalc/@node-dlc/core/dist/LinkedListNode.d.ts +9 -0
  337. package/.yalc/@node-dlc/core/dist/LinkedListNode.js +15 -0
  338. package/.yalc/@node-dlc/core/dist/LinkedListNode.js.map +1 -0
  339. package/.yalc/@node-dlc/core/dist/Queue.d.ts +22 -0
  340. package/.yalc/@node-dlc/core/dist/Queue.js +38 -0
  341. package/.yalc/@node-dlc/core/dist/Queue.js.map +1 -0
  342. package/.yalc/@node-dlc/core/dist/ShortChannelId.d.ts +1 -0
  343. package/.yalc/@node-dlc/core/dist/ShortChannelId.js +7 -0
  344. package/.yalc/@node-dlc/core/dist/ShortChannelId.js.map +1 -0
  345. package/.yalc/@node-dlc/core/dist/ShortChannelIdUtils.d.ts +1 -0
  346. package/.yalc/@node-dlc/core/dist/ShortChannelIdUtils.js +12 -0
  347. package/.yalc/@node-dlc/core/dist/ShortChannelIdUtils.js.map +1 -0
  348. package/.yalc/@node-dlc/core/dist/dlc/CETCalculator.d.ts +50 -0
  349. package/.yalc/@node-dlc/core/dist/dlc/CETCalculator.js +332 -0
  350. package/.yalc/@node-dlc/core/dist/dlc/CETCalculator.js.map +1 -0
  351. package/.yalc/@node-dlc/core/dist/dlc/CoinSelect.d.ts +23 -0
  352. package/.yalc/@node-dlc/core/dist/dlc/CoinSelect.js +77 -0
  353. package/.yalc/@node-dlc/core/dist/dlc/CoinSelect.js.map +1 -0
  354. package/.yalc/@node-dlc/core/dist/dlc/HyperbolaPayoutCurve.d.ts +20 -0
  355. package/.yalc/@node-dlc/core/dist/dlc/HyperbolaPayoutCurve.js +117 -0
  356. package/.yalc/@node-dlc/core/dist/dlc/HyperbolaPayoutCurve.js.map +1 -0
  357. package/.yalc/@node-dlc/core/dist/dlc/PayoutCurve.d.ts +5 -0
  358. package/.yalc/@node-dlc/core/dist/dlc/PayoutCurve.js +3 -0
  359. package/.yalc/@node-dlc/core/dist/dlc/PayoutCurve.js.map +1 -0
  360. package/.yalc/@node-dlc/core/dist/dlc/PolynomialPayoutCurve.d.ts +52 -0
  361. package/.yalc/@node-dlc/core/dist/dlc/PolynomialPayoutCurve.js +173 -0
  362. package/.yalc/@node-dlc/core/dist/dlc/PolynomialPayoutCurve.js.map +1 -0
  363. package/.yalc/@node-dlc/core/dist/dlc/TxBuilder.d.ts +55 -0
  364. package/.yalc/@node-dlc/core/dist/dlc/TxBuilder.js +217 -0
  365. package/.yalc/@node-dlc/core/dist/dlc/TxBuilder.js.map +1 -0
  366. package/.yalc/@node-dlc/core/dist/dlc/TxFinalizer.d.ts +40 -0
  367. package/.yalc/@node-dlc/core/dist/dlc/TxFinalizer.js +146 -0
  368. package/.yalc/@node-dlc/core/dist/dlc/TxFinalizer.js.map +1 -0
  369. package/.yalc/@node-dlc/core/dist/dlc/finance/Builder.d.ts +193 -0
  370. package/.yalc/@node-dlc/core/dist/dlc/finance/Builder.js +422 -0
  371. package/.yalc/@node-dlc/core/dist/dlc/finance/Builder.js.map +1 -0
  372. package/.yalc/@node-dlc/core/dist/dlc/finance/CoveredCall.d.ts +13 -0
  373. package/.yalc/@node-dlc/core/dist/dlc/finance/CoveredCall.js +67 -0
  374. package/.yalc/@node-dlc/core/dist/dlc/finance/CoveredCall.js.map +1 -0
  375. package/.yalc/@node-dlc/core/dist/dlc/finance/CsoInfo.d.ts +114 -0
  376. package/.yalc/@node-dlc/core/dist/dlc/finance/CsoInfo.js +290 -0
  377. package/.yalc/@node-dlc/core/dist/dlc/finance/CsoInfo.js.map +1 -0
  378. package/.yalc/@node-dlc/core/dist/dlc/finance/LinearPayout.d.ts +6 -0
  379. package/.yalc/@node-dlc/core/dist/dlc/finance/LinearPayout.js +79 -0
  380. package/.yalc/@node-dlc/core/dist/dlc/finance/LinearPayout.js.map +1 -0
  381. package/.yalc/@node-dlc/core/dist/dlc/finance/LongCall.d.ts +13 -0
  382. package/.yalc/@node-dlc/core/dist/dlc/finance/LongCall.js +47 -0
  383. package/.yalc/@node-dlc/core/dist/dlc/finance/LongCall.js.map +1 -0
  384. package/.yalc/@node-dlc/core/dist/dlc/finance/LongPut.d.ts +13 -0
  385. package/.yalc/@node-dlc/core/dist/dlc/finance/LongPut.js +47 -0
  386. package/.yalc/@node-dlc/core/dist/dlc/finance/LongPut.js.map +1 -0
  387. package/.yalc/@node-dlc/core/dist/dlc/finance/OptionInfo.d.ts +20 -0
  388. package/.yalc/@node-dlc/core/dist/dlc/finance/OptionInfo.js +101 -0
  389. package/.yalc/@node-dlc/core/dist/dlc/finance/OptionInfo.js.map +1 -0
  390. package/.yalc/@node-dlc/core/dist/dlc/finance/ShortPut.d.ts +12 -0
  391. package/.yalc/@node-dlc/core/dist/dlc/finance/ShortPut.js +46 -0
  392. package/.yalc/@node-dlc/core/dist/dlc/finance/ShortPut.js.map +1 -0
  393. package/.yalc/@node-dlc/core/dist/index.d.ts +39 -0
  394. package/.yalc/@node-dlc/core/dist/index.js +78 -0
  395. package/.yalc/@node-dlc/core/dist/index.js.map +1 -0
  396. package/.yalc/@node-dlc/core/dist/lightning/ChannelId.d.ts +31 -0
  397. package/.yalc/@node-dlc/core/dist/lightning/ChannelId.js +52 -0
  398. package/.yalc/@node-dlc/core/dist/lightning/ChannelId.js.map +1 -0
  399. package/.yalc/@node-dlc/core/dist/lightning/ChannelKeys.d.ts +55 -0
  400. package/.yalc/@node-dlc/core/dist/lightning/ChannelKeys.js +105 -0
  401. package/.yalc/@node-dlc/core/dist/lightning/ChannelKeys.js.map +1 -0
  402. package/.yalc/@node-dlc/core/dist/lightning/CommitmentNumber.d.ts +55 -0
  403. package/.yalc/@node-dlc/core/dist/lightning/CommitmentNumber.js +76 -0
  404. package/.yalc/@node-dlc/core/dist/lightning/CommitmentNumber.js.map +1 -0
  405. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecret.d.ts +26 -0
  406. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecret.js +44 -0
  407. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecret.js.map +1 -0
  408. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecretStore.d.ts +41 -0
  409. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecretStore.js +79 -0
  410. package/.yalc/@node-dlc/core/dist/lightning/CommitmentSecretStore.js.map +1 -0
  411. package/.yalc/@node-dlc/core/dist/lightning/Htlc.d.ts +46 -0
  412. package/.yalc/@node-dlc/core/dist/lightning/Htlc.js +46 -0
  413. package/.yalc/@node-dlc/core/dist/lightning/Htlc.js.map +1 -0
  414. package/.yalc/@node-dlc/core/dist/lightning/HtlcDirection.d.ts +16 -0
  415. package/.yalc/@node-dlc/core/dist/lightning/HtlcDirection.js +21 -0
  416. package/.yalc/@node-dlc/core/dist/lightning/HtlcDirection.js.map +1 -0
  417. package/.yalc/@node-dlc/core/dist/lightning/ScriptFactory.d.ts +76 -0
  418. package/.yalc/@node-dlc/core/dist/lightning/ScriptFactory.js +102 -0
  419. package/.yalc/@node-dlc/core/dist/lightning/ScriptFactory.js.map +1 -0
  420. package/.yalc/@node-dlc/core/dist/lightning/TxFactory.d.ts +83 -0
  421. package/.yalc/@node-dlc/core/dist/lightning/TxFactory.js +222 -0
  422. package/.yalc/@node-dlc/core/dist/lightning/TxFactory.js.map +1 -0
  423. package/.yalc/@node-dlc/core/dist/utils/BigIntUtils.d.ts +9 -0
  424. package/.yalc/@node-dlc/core/dist/utils/BigIntUtils.js +59 -0
  425. package/.yalc/@node-dlc/core/dist/utils/BigIntUtils.js.map +1 -0
  426. package/.yalc/@node-dlc/core/dist/utils/Precision.d.ts +13 -0
  427. package/.yalc/@node-dlc/core/dist/utils/Precision.js +28 -0
  428. package/.yalc/@node-dlc/core/dist/utils/Precision.js.map +1 -0
  429. package/.yalc/@node-dlc/core/lib/AsyncProcessingQueue.ts +63 -0
  430. package/.yalc/@node-dlc/core/lib/Base32.ts +2 -0
  431. package/.yalc/@node-dlc/core/lib/BigIntUtils.ts +2 -0
  432. package/.yalc/@node-dlc/core/lib/BitField.ts +2 -0
  433. package/.yalc/@node-dlc/core/lib/ChannelId.ts +2 -0
  434. package/.yalc/@node-dlc/core/lib/LinkedList.ts +111 -0
  435. package/.yalc/@node-dlc/core/lib/LinkedListNode.ts +14 -0
  436. package/.yalc/@node-dlc/core/lib/Queue.ts +36 -0
  437. package/.yalc/@node-dlc/core/lib/ShortChannelId.ts +2 -0
  438. package/.yalc/@node-dlc/core/lib/ShortChannelIdUtils.ts +9 -0
  439. package/.yalc/@node-dlc/core/lib/dlc/CETCalculator.ts +450 -0
  440. package/.yalc/@node-dlc/core/lib/dlc/CoinSelect.ts +117 -0
  441. package/.yalc/@node-dlc/core/lib/dlc/HyperbolaPayoutCurve.ts +188 -0
  442. package/.yalc/@node-dlc/core/lib/dlc/PayoutCurve.ts +6 -0
  443. package/.yalc/@node-dlc/core/lib/dlc/PolynomialPayoutCurve.ts +266 -0
  444. package/.yalc/@node-dlc/core/lib/dlc/TxBuilder.ts +336 -0
  445. package/.yalc/@node-dlc/core/lib/dlc/TxFinalizer.ts +217 -0
  446. package/.yalc/@node-dlc/core/lib/dlc/finance/Builder.ts +730 -0
  447. package/.yalc/@node-dlc/core/lib/dlc/finance/CoveredCall.ts +110 -0
  448. package/.yalc/@node-dlc/core/lib/dlc/finance/CsoInfo.ts +498 -0
  449. package/.yalc/@node-dlc/core/lib/dlc/finance/LinearPayout.ts +94 -0
  450. package/.yalc/@node-dlc/core/lib/dlc/finance/LongCall.ts +74 -0
  451. package/.yalc/@node-dlc/core/lib/dlc/finance/LongPut.ts +74 -0
  452. package/.yalc/@node-dlc/core/lib/dlc/finance/OptionInfo.ts +182 -0
  453. package/.yalc/@node-dlc/core/lib/dlc/finance/ShortPut.ts +75 -0
  454. package/.yalc/@node-dlc/core/lib/index.ts +66 -0
  455. package/.yalc/@node-dlc/core/lib/lightning/ChannelId.ts +54 -0
  456. package/.yalc/@node-dlc/core/lib/lightning/ChannelKeys.ts +109 -0
  457. package/.yalc/@node-dlc/core/lib/lightning/CommitmentNumber.ts +94 -0
  458. package/.yalc/@node-dlc/core/lib/lightning/CommitmentSecret.ts +41 -0
  459. package/.yalc/@node-dlc/core/lib/lightning/CommitmentSecretStore.ts +84 -0
  460. package/.yalc/@node-dlc/core/lib/lightning/Htlc.ts +52 -0
  461. package/.yalc/@node-dlc/core/lib/lightning/HtlcDirection.ts +17 -0
  462. package/.yalc/@node-dlc/core/lib/lightning/ScriptFactory.ts +150 -0
  463. package/.yalc/@node-dlc/core/lib/lightning/TxFactory.ts +338 -0
  464. package/.yalc/@node-dlc/core/lib/utils/BigIntUtils.ts +64 -0
  465. package/.yalc/@node-dlc/core/lib/utils/Precision.ts +23 -0
  466. package/.yalc/@node-dlc/core/package.json +38 -0
  467. package/.yalc/@node-dlc/core/tsconfig.json +8 -0
  468. package/.yalc/@node-dlc/core/yalc.sig +1 -0
  469. package/.yalc/@node-dlc/crypto/.eslintrc +6 -0
  470. package/.yalc/@node-dlc/crypto/.nyc_output/de03e0b4-d482-4f61-b680-59411360f56e.json +1 -0
  471. package/.yalc/@node-dlc/crypto/.nyc_output/processinfo/de03e0b4-d482-4f61-b680-59411360f56e.json +1 -0
  472. package/.yalc/@node-dlc/crypto/.nyc_output/processinfo/index.json +1 -0
  473. package/.yalc/@node-dlc/crypto/README.md +13 -0
  474. package/.yalc/@node-dlc/crypto/__tests__/chacha.spec.ts +29 -0
  475. package/.yalc/@node-dlc/crypto/__tests__/chachapoly.spec.ts +78 -0
  476. package/.yalc/@node-dlc/crypto/__tests__/hkdf.spec.ts +131 -0
  477. package/.yalc/@node-dlc/crypto/__tests__/key.spec.ts +125 -0
  478. package/.yalc/@node-dlc/crypto/__tests__/secp256k1.spec.ts +194 -0
  479. package/.yalc/@node-dlc/crypto/__tests__/xor.spec.ts +28 -0
  480. package/.yalc/@node-dlc/crypto/coverage/lcov-report/base.css +224 -0
  481. package/.yalc/@node-dlc/crypto/coverage/lcov-report/block-navigation.js +79 -0
  482. package/.yalc/@node-dlc/crypto/coverage/lcov-report/chacha.ts.html +119 -0
  483. package/.yalc/@node-dlc/crypto/coverage/lcov-report/chachapoly.ts.html +275 -0
  484. package/.yalc/@node-dlc/crypto/coverage/lcov-report/favicon.png +0 -0
  485. package/.yalc/@node-dlc/crypto/coverage/lcov-report/hkdf.ts.html +236 -0
  486. package/.yalc/@node-dlc/crypto/coverage/lcov-report/index.html +186 -0
  487. package/.yalc/@node-dlc/crypto/coverage/lcov-report/key.ts.html +272 -0
  488. package/.yalc/@node-dlc/crypto/coverage/lcov-report/prettify.css +1 -0
  489. package/.yalc/@node-dlc/crypto/coverage/lcov-report/prettify.js +2 -0
  490. package/.yalc/@node-dlc/crypto/coverage/lcov-report/secp256k1.ts.html +680 -0
  491. package/.yalc/@node-dlc/crypto/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  492. package/.yalc/@node-dlc/crypto/coverage/lcov-report/sorter.js +170 -0
  493. package/.yalc/@node-dlc/crypto/coverage/lcov-report/xor.ts.html +116 -0
  494. package/.yalc/@node-dlc/crypto/coverage/lcov.info +221 -0
  495. package/.yalc/@node-dlc/crypto/dist/aes-key.d.ts +6 -0
  496. package/.yalc/@node-dlc/crypto/dist/aes-key.js +3 -0
  497. package/.yalc/@node-dlc/crypto/dist/aes-key.js.map +1 -0
  498. package/.yalc/@node-dlc/crypto/dist/aes.d.ts +34 -0
  499. package/.yalc/@node-dlc/crypto/dist/aes.js +62 -0
  500. package/.yalc/@node-dlc/crypto/dist/aes.js.map +1 -0
  501. package/.yalc/@node-dlc/crypto/dist/chacha.d.ts +4 -0
  502. package/.yalc/@node-dlc/crypto/dist/chacha.js +40 -0
  503. package/.yalc/@node-dlc/crypto/dist/chacha.js.map +1 -0
  504. package/.yalc/@node-dlc/crypto/dist/chachapoly.d.ts +24 -0
  505. package/.yalc/@node-dlc/crypto/dist/chachapoly.js +61 -0
  506. package/.yalc/@node-dlc/crypto/dist/chachapoly.js.map +1 -0
  507. package/.yalc/@node-dlc/crypto/dist/hash.d.ts +29 -0
  508. package/.yalc/@node-dlc/crypto/dist/hash.js +51 -0
  509. package/.yalc/@node-dlc/crypto/dist/hash.js.map +1 -0
  510. package/.yalc/@node-dlc/crypto/dist/hkdf.d.ts +20 -0
  511. package/.yalc/@node-dlc/crypto/dist/hkdf.js +50 -0
  512. package/.yalc/@node-dlc/crypto/dist/hkdf.js.map +1 -0
  513. package/.yalc/@node-dlc/crypto/dist/hmac.d.ts +3 -0
  514. package/.yalc/@node-dlc/crypto/dist/hmac.js +14 -0
  515. package/.yalc/@node-dlc/crypto/dist/hmac.js.map +1 -0
  516. package/.yalc/@node-dlc/crypto/dist/index.d.ts +11 -0
  517. package/.yalc/@node-dlc/crypto/dist/index.js +30 -0
  518. package/.yalc/@node-dlc/crypto/dist/index.js.map +1 -0
  519. package/.yalc/@node-dlc/crypto/dist/key.d.ts +37 -0
  520. package/.yalc/@node-dlc/crypto/dist/key.js +72 -0
  521. package/.yalc/@node-dlc/crypto/dist/key.js.map +1 -0
  522. package/.yalc/@node-dlc/crypto/dist/secp256k1.d.ts +120 -0
  523. package/.yalc/@node-dlc/crypto/dist/secp256k1.js +184 -0
  524. package/.yalc/@node-dlc/crypto/dist/secp256k1.js.map +1 -0
  525. package/.yalc/@node-dlc/crypto/dist/xor.d.ts +8 -0
  526. package/.yalc/@node-dlc/crypto/dist/xor.js +17 -0
  527. package/.yalc/@node-dlc/crypto/dist/xor.js.map +1 -0
  528. package/.yalc/@node-dlc/crypto/lib/aes-key.ts +4 -0
  529. package/.yalc/@node-dlc/crypto/lib/aes.ts +81 -0
  530. package/.yalc/@node-dlc/crypto/lib/chacha.ts +13 -0
  531. package/.yalc/@node-dlc/crypto/lib/chachapoly.ts +65 -0
  532. package/.yalc/@node-dlc/crypto/lib/hash.ts +44 -0
  533. package/.yalc/@node-dlc/crypto/lib/hkdf.ts +52 -0
  534. package/.yalc/@node-dlc/crypto/lib/hmac.ts +7 -0
  535. package/.yalc/@node-dlc/crypto/lib/index.ts +11 -0
  536. package/.yalc/@node-dlc/crypto/lib/key.ts +64 -0
  537. package/.yalc/@node-dlc/crypto/lib/secp256k1.ts +200 -0
  538. package/.yalc/@node-dlc/crypto/lib/xor.ts +12 -0
  539. package/.yalc/@node-dlc/crypto/package.json +34 -0
  540. package/.yalc/@node-dlc/crypto/tsconfig-build.json +7 -0
  541. package/.yalc/@node-dlc/crypto/tsconfig.json +4 -0
  542. package/.yalc/@node-dlc/crypto/yalc.sig +1 -0
  543. package/.yalc/@node-dlc/messaging/.nyc_output/83d37f9d-cecf-4c52-a753-115ff80bbca0.json +1 -0
  544. package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/83d37f9d-cecf-4c52-a753-115ff80bbca0.json +1 -0
  545. package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/index.json +1 -0
  546. package/.yalc/@node-dlc/messaging/README.md +24 -0
  547. package/.yalc/@node-dlc/messaging/__tests__/_test-utils.ts +13 -0
  548. package/.yalc/@node-dlc/messaging/__tests__/chain/ChainManager.spec.ts +178 -0
  549. package/.yalc/@node-dlc/messaging/__tests__/compatibility/dlcspecs-compatibility.spec.ts +439 -0
  550. package/.yalc/@node-dlc/messaging/__tests__/compatibility/rust-dlc-cross-language.spec.ts +255 -0
  551. package/.yalc/@node-dlc/messaging/__tests__/compatibility/true-serialization-compatibility.spec.ts +342 -0
  552. package/.yalc/@node-dlc/messaging/__tests__/dlc_message_test.json +155 -0
  553. package/.yalc/@node-dlc/messaging/__tests__/irc/IrcMessage.spec.ts +94 -0
  554. package/.yalc/@node-dlc/messaging/__tests__/messages/AddressCache.spec.ts +79 -0
  555. package/.yalc/@node-dlc/messaging/__tests__/messages/BatchFundingGroup.spec.ts +72 -0
  556. package/.yalc/@node-dlc/messaging/__tests__/messages/CetAdaptorSignatures.spec.ts +57 -0
  557. package/.yalc/@node-dlc/messaging/__tests__/messages/ContractDescriptor.spec.ts +266 -0
  558. package/.yalc/@node-dlc/messaging/__tests__/messages/ContractInfo.spec.ts +419 -0
  559. package/.yalc/@node-dlc/messaging/__tests__/messages/DigitDecompositionEventDescriptor.spec.ts +59 -0
  560. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcAccept.spec.ts +314 -0
  561. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcCancel.spec.ts +42 -0
  562. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcClose.spec.ts +315 -0
  563. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcInput.spec.ts +111 -0
  564. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcOffer.spec.ts +589 -0
  565. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcSign.spec.ts +118 -0
  566. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcTransactions.spec.ts +157 -0
  567. package/.yalc/@node-dlc/messaging/__tests__/messages/EnumEventDescriptor.spec.ts +50 -0
  568. package/.yalc/@node-dlc/messaging/__tests__/messages/EventDescriptor.spec.ts +93 -0
  569. package/.yalc/@node-dlc/messaging/__tests__/messages/FundingInput.spec.ts +169 -0
  570. package/.yalc/@node-dlc/messaging/__tests__/messages/FundingSignatures.spec.ts +83 -0
  571. package/.yalc/@node-dlc/messaging/__tests__/messages/NegotiationFields.spec.ts +328 -0
  572. package/.yalc/@node-dlc/messaging/__tests__/messages/NodeAnnouncementMessage.spec.ts +115 -0
  573. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleAnnouncement.spec.ts +415 -0
  574. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleAttestation.spec.ts +324 -0
  575. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleEvent.spec.ts +143 -0
  576. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleEventContainer.spec.ts +95 -0
  577. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleIdentifier.spec.ts +48 -0
  578. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleInfo.spec.ts +116 -0
  579. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderAccept.spec.ts +75 -0
  580. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderNegotiationFields.spec.ts +299 -0
  581. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderOffer.spec.ts +121 -0
  582. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderPositionInfo.spec.ts +75 -0
  583. package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutCurvePiece.spec.ts +220 -0
  584. package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutFunction.spec.ts +101 -0
  585. package/.yalc/@node-dlc/messaging/__tests__/messages/RoundingIntervals.spec.ts +75 -0
  586. package/.yalc/@node-dlc/messaging/__tests__/serialize/F64.spec.ts +261 -0
  587. package/.yalc/@node-dlc/messaging/__tests__/tsconfig.json +8 -0
  588. package/.yalc/@node-dlc/messaging/coverage/lcov-report/base.css +224 -0
  589. package/.yalc/@node-dlc/messaging/coverage/lcov-report/block-navigation.js +79 -0
  590. package/.yalc/@node-dlc/messaging/coverage/lcov-report/favicon.png +0 -0
  591. package/.yalc/@node-dlc/messaging/coverage/lcov-report/index.html +201 -0
  592. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/MessageType.ts.html +500 -0
  593. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainManager.ts.html +1061 -0
  594. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainMemoryStore.ts.html +182 -0
  595. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/index.html +126 -0
  596. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/Address.ts.html +272 -0
  597. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/index.html +111 -0
  598. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.html +141 -0
  599. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.ts.html +215 -0
  600. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/IrcMessage.ts.html +563 -0
  601. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/index.html +111 -0
  602. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/AddressCache.ts.html +302 -0
  603. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/BatchFundingGroup.ts.html +503 -0
  604. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignatures.ts.html +347 -0
  605. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignaturesV0.ts.html +356 -0
  606. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CloseTLV.ts.html +344 -0
  607. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractDescriptor.ts.html +1031 -0
  608. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractInfo.ts.html +1397 -0
  609. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcAccept.ts.html +1997 -0
  610. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCancel.ts.html +251 -0
  611. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcClose.ts.html +995 -0
  612. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCloseMetadata.ts.html +434 -0
  613. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcIds.ts.html +281 -0
  614. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcInfo.ts.html +323 -0
  615. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcInput.ts.html +581 -0
  616. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcMessage.ts.html +341 -0
  617. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcOffer.ts.html +2075 -0
  618. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcSign.ts.html +1157 -0
  619. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcTransactions.ts.html +719 -0
  620. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/EventDescriptor.ts.html +962 -0
  621. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingInput.ts.html +860 -0
  622. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignatures.ts.html +374 -0
  623. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignaturesV0.ts.html +344 -0
  624. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NegotiationFields.ts.html +848 -0
  625. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NodeAnnouncementMessage.ts.html +515 -0
  626. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncement.ts.html +608 -0
  627. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncementV0.ts.html +383 -0
  628. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestation.ts.html +956 -0
  629. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestationV0.ts.html +479 -0
  630. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEvent.ts.html +830 -0
  631. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainer.ts.html +347 -0
  632. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainerV0.ts.html +347 -0
  633. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventV0.ts.html +503 -0
  634. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifier.ts.html +314 -0
  635. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifierV0.ts.html +314 -0
  636. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfo.ts.html +1658 -0
  637. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfoV0.ts.html +308 -0
  638. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderAccept.ts.html +602 -0
  639. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderIrcInfo.ts.html +380 -0
  640. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderMetadata.ts.html +437 -0
  641. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderNegotiationFields.ts.html +710 -0
  642. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderOffer.ts.html +1334 -0
  643. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderPositionInfo.ts.html +521 -0
  644. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutCurvePiece.ts.html +1442 -0
  645. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutFunction.ts.html +806 -0
  646. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervals.ts.html +464 -0
  647. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervalsV0.ts.html +428 -0
  648. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ScriptWitnessV0.ts.html +269 -0
  649. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/index.html +651 -0
  650. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/F64.ts.html +1091 -0
  651. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/deserializeTlv.ts.html +125 -0
  652. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/getTlv.ts.html +143 -0
  653. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/index.html +141 -0
  654. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/util.ts.html +191 -0
  655. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/index.html +111 -0
  656. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/validate.ts.html +182 -0
  657. package/.yalc/@node-dlc/messaging/coverage/lcov-report/prettify.css +1 -0
  658. package/.yalc/@node-dlc/messaging/coverage/lcov-report/prettify.js +2 -0
  659. package/.yalc/@node-dlc/messaging/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  660. package/.yalc/@node-dlc/messaging/coverage/lcov-report/sorter.js +170 -0
  661. package/.yalc/@node-dlc/messaging/coverage/lcov.info +5617 -0
  662. package/.yalc/@node-dlc/messaging/dist/MessageType.d.ts +101 -0
  663. package/.yalc/@node-dlc/messaging/dist/MessageType.js +118 -0
  664. package/.yalc/@node-dlc/messaging/dist/MessageType.js.map +1 -0
  665. package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.d.ts +50 -0
  666. package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js +212 -0
  667. package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js.map +1 -0
  668. package/.yalc/@node-dlc/messaging/dist/chain/ChainMemoryStore.d.ts +14 -0
  669. package/.yalc/@node-dlc/messaging/dist/chain/ChainMemoryStore.js +28 -0
  670. package/.yalc/@node-dlc/messaging/dist/chain/ChainMemoryStore.js.map +1 -0
  671. package/.yalc/@node-dlc/messaging/dist/chain/DlcStore.d.ts +11 -0
  672. package/.yalc/@node-dlc/messaging/dist/chain/DlcStore.js +3 -0
  673. package/.yalc/@node-dlc/messaging/dist/chain/DlcStore.js.map +1 -0
  674. package/.yalc/@node-dlc/messaging/dist/chain/IChainFilterChainClient.d.ts +48 -0
  675. package/.yalc/@node-dlc/messaging/dist/chain/IChainFilterChainClient.js +3 -0
  676. package/.yalc/@node-dlc/messaging/dist/chain/IChainFilterChainClient.js.map +1 -0
  677. package/.yalc/@node-dlc/messaging/dist/domain/Address.d.ts +24 -0
  678. package/.yalc/@node-dlc/messaging/dist/domain/Address.js +46 -0
  679. package/.yalc/@node-dlc/messaging/dist/domain/Address.js.map +1 -0
  680. package/.yalc/@node-dlc/messaging/dist/index.d.ts +45 -0
  681. package/.yalc/@node-dlc/messaging/dist/index.js +64 -0
  682. package/.yalc/@node-dlc/messaging/dist/index.js.map +1 -0
  683. package/.yalc/@node-dlc/messaging/dist/irc/IrcMessage.d.ts +43 -0
  684. package/.yalc/@node-dlc/messaging/dist/irc/IrcMessage.js +116 -0
  685. package/.yalc/@node-dlc/messaging/dist/irc/IrcMessage.js.map +1 -0
  686. package/.yalc/@node-dlc/messaging/dist/messages/AddressCache.d.ts +15 -0
  687. package/.yalc/@node-dlc/messaging/dist/messages/AddressCache.js +51 -0
  688. package/.yalc/@node-dlc/messaging/dist/messages/AddressCache.js.map +1 -0
  689. package/.yalc/@node-dlc/messaging/dist/messages/BatchFundingGroup.d.ts +61 -0
  690. package/.yalc/@node-dlc/messaging/dist/messages/BatchFundingGroup.js +113 -0
  691. package/.yalc/@node-dlc/messaging/dist/messages/BatchFundingGroup.js.map +1 -0
  692. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignatures.d.ts +40 -0
  693. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignatures.js +67 -0
  694. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignatures.js.map +1 -0
  695. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignaturesV0.d.ts +42 -0
  696. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignaturesV0.js +68 -0
  697. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignaturesV0.js.map +1 -0
  698. package/.yalc/@node-dlc/messaging/dist/messages/CloseTLV.d.ts +38 -0
  699. package/.yalc/@node-dlc/messaging/dist/messages/CloseTLV.js +59 -0
  700. package/.yalc/@node-dlc/messaging/dist/messages/CloseTLV.js.map +1 -0
  701. package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.d.ts +121 -0
  702. package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js +221 -0
  703. package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js.map +1 -0
  704. package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.d.ts +135 -0
  705. package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js +308 -0
  706. package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js.map +1 -0
  707. package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.d.ts +160 -0
  708. package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js +469 -0
  709. package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js.map +1 -0
  710. package/.yalc/@node-dlc/messaging/dist/messages/DlcCancel.d.ts +31 -0
  711. package/.yalc/@node-dlc/messaging/dist/messages/DlcCancel.js +51 -0
  712. package/.yalc/@node-dlc/messaging/dist/messages/DlcCancel.js.map +1 -0
  713. package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.d.ts +68 -0
  714. package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js +214 -0
  715. package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js.map +1 -0
  716. package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.d.ts +44 -0
  717. package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.js +74 -0
  718. package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.js.map +1 -0
  719. package/.yalc/@node-dlc/messaging/dist/messages/DlcIds.d.ts +26 -0
  720. package/.yalc/@node-dlc/messaging/dist/messages/DlcIds.js +58 -0
  721. package/.yalc/@node-dlc/messaging/dist/messages/DlcIds.js.map +1 -0
  722. package/.yalc/@node-dlc/messaging/dist/messages/DlcInfo.d.ts +31 -0
  723. package/.yalc/@node-dlc/messaging/dist/messages/DlcInfo.js +61 -0
  724. package/.yalc/@node-dlc/messaging/dist/messages/DlcInfo.js.map +1 -0
  725. package/.yalc/@node-dlc/messaging/dist/messages/DlcInput.d.ts +56 -0
  726. package/.yalc/@node-dlc/messaging/dist/messages/DlcInput.js +135 -0
  727. package/.yalc/@node-dlc/messaging/dist/messages/DlcInput.js.map +1 -0
  728. package/.yalc/@node-dlc/messaging/dist/messages/DlcMessage.d.ts +23 -0
  729. package/.yalc/@node-dlc/messaging/dist/messages/DlcMessage.js +54 -0
  730. package/.yalc/@node-dlc/messaging/dist/messages/DlcMessage.js.map +1 -0
  731. package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.d.ts +146 -0
  732. package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js +463 -0
  733. package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js.map +1 -0
  734. package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.d.ts +96 -0
  735. package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js +275 -0
  736. package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js.map +1 -0
  737. package/.yalc/@node-dlc/messaging/dist/messages/DlcTransactions.d.ts +69 -0
  738. package/.yalc/@node-dlc/messaging/dist/messages/DlcTransactions.js +149 -0
  739. package/.yalc/@node-dlc/messaging/dist/messages/DlcTransactions.js.map +1 -0
  740. package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.d.ts +107 -0
  741. package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js +212 -0
  742. package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js.map +1 -0
  743. package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.d.ts +69 -0
  744. package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js +193 -0
  745. package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js.map +1 -0
  746. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignatures.d.ts +36 -0
  747. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignatures.js +78 -0
  748. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignatures.js.map +1 -0
  749. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignaturesV0.d.ts +34 -0
  750. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignaturesV0.js +72 -0
  751. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignaturesV0.js.map +1 -0
  752. package/.yalc/@node-dlc/messaging/dist/messages/IWireMessage.d.ts +6 -0
  753. package/.yalc/@node-dlc/messaging/dist/messages/IWireMessage.js +3 -0
  754. package/.yalc/@node-dlc/messaging/dist/messages/IWireMessage.js.map +1 -0
  755. package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.d.ts +86 -0
  756. package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js +189 -0
  757. package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js.map +1 -0
  758. package/.yalc/@node-dlc/messaging/dist/messages/NodeAnnouncementMessage.d.ts +57 -0
  759. package/.yalc/@node-dlc/messaging/dist/messages/NodeAnnouncementMessage.js +127 -0
  760. package/.yalc/@node-dlc/messaging/dist/messages/NodeAnnouncementMessage.js.map +1 -0
  761. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncement.d.ts +76 -0
  762. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncement.js +131 -0
  763. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncement.js.map +1 -0
  764. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncementV0.d.ts +47 -0
  765. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncementV0.js +76 -0
  766. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncementV0.js.map +1 -0
  767. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestation.d.ts +68 -0
  768. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestation.js +239 -0
  769. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestation.js.map +1 -0
  770. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestationV0.d.ts +48 -0
  771. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestationV0.js +100 -0
  772. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestationV0.js.map +1 -0
  773. package/.yalc/@node-dlc/messaging/dist/messages/OracleEvent.d.ts +90 -0
  774. package/.yalc/@node-dlc/messaging/dist/messages/OracleEvent.js +189 -0
  775. package/.yalc/@node-dlc/messaging/dist/messages/OracleEvent.js.map +1 -0
  776. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainer.d.ts +32 -0
  777. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainer.js +67 -0
  778. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainer.js.map +1 -0
  779. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainerV0.d.ts +32 -0
  780. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainerV0.js +67 -0
  781. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainerV0.js.map +1 -0
  782. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventV0.d.ts +54 -0
  783. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventV0.js +100 -0
  784. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventV0.js.map +1 -0
  785. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifier.d.ts +32 -0
  786. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifier.js +58 -0
  787. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifier.js.map +1 -0
  788. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifierV0.d.ts +32 -0
  789. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifierV0.js +58 -0
  790. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifierV0.js.map +1 -0
  791. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.d.ts +163 -0
  792. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js +393 -0
  793. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js.map +1 -0
  794. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.d.ts +35 -0
  795. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js +58 -0
  796. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js.map +1 -0
  797. package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.d.ts +66 -0
  798. package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js +140 -0
  799. package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js.map +1 -0
  800. package/.yalc/@node-dlc/messaging/dist/messages/OrderIrcInfo.d.ts +42 -0
  801. package/.yalc/@node-dlc/messaging/dist/messages/OrderIrcInfo.js +74 -0
  802. package/.yalc/@node-dlc/messaging/dist/messages/OrderIrcInfo.js.map +1 -0
  803. package/.yalc/@node-dlc/messaging/dist/messages/OrderMetadata.d.ts +56 -0
  804. package/.yalc/@node-dlc/messaging/dist/messages/OrderMetadata.js +87 -0
  805. package/.yalc/@node-dlc/messaging/dist/messages/OrderMetadata.js.map +1 -0
  806. package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.d.ts +81 -0
  807. package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js +161 -0
  808. package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js.map +1 -0
  809. package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.d.ts +97 -0
  810. package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js +296 -0
  811. package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js.map +1 -0
  812. package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.d.ts +44 -0
  813. package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js +111 -0
  814. package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js.map +1 -0
  815. package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.d.ts +129 -0
  816. package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js +332 -0
  817. package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js.map +1 -0
  818. package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.d.ts +66 -0
  819. package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js +173 -0
  820. package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js.map +1 -0
  821. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.d.ts +52 -0
  822. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js +96 -0
  823. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js.map +1 -0
  824. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervalsV0.d.ts +47 -0
  825. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervalsV0.js +86 -0
  826. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervalsV0.js.map +1 -0
  827. package/.yalc/@node-dlc/messaging/dist/messages/ScriptWitnessV0.d.ts +29 -0
  828. package/.yalc/@node-dlc/messaging/dist/messages/ScriptWitnessV0.js +50 -0
  829. package/.yalc/@node-dlc/messaging/dist/messages/ScriptWitnessV0.js.map +1 -0
  830. package/.yalc/@node-dlc/messaging/dist/messages/Tlv.d.ts +15 -0
  831. package/.yalc/@node-dlc/messaging/dist/messages/Tlv.js +32 -0
  832. package/.yalc/@node-dlc/messaging/dist/messages/Tlv.js.map +1 -0
  833. package/.yalc/@node-dlc/messaging/dist/serialize/F64.d.ts +146 -0
  834. package/.yalc/@node-dlc/messaging/dist/serialize/F64.js +294 -0
  835. package/.yalc/@node-dlc/messaging/dist/serialize/F64.js.map +1 -0
  836. package/.yalc/@node-dlc/messaging/dist/serialize/deserializeTlv.d.ts +9 -0
  837. package/.yalc/@node-dlc/messaging/dist/serialize/deserializeTlv.js +11 -0
  838. package/.yalc/@node-dlc/messaging/dist/serialize/deserializeTlv.js.map +1 -0
  839. package/.yalc/@node-dlc/messaging/dist/serialize/getTlv.d.ts +4 -0
  840. package/.yalc/@node-dlc/messaging/dist/serialize/getTlv.js +23 -0
  841. package/.yalc/@node-dlc/messaging/dist/serialize/getTlv.js.map +1 -0
  842. package/.yalc/@node-dlc/messaging/dist/serialize/readTlvs.d.ts +8 -0
  843. package/.yalc/@node-dlc/messaging/dist/serialize/readTlvs.js +33 -0
  844. package/.yalc/@node-dlc/messaging/dist/serialize/readTlvs.js.map +1 -0
  845. package/.yalc/@node-dlc/messaging/dist/util.d.ts +13 -0
  846. package/.yalc/@node-dlc/messaging/dist/util.js +42 -0
  847. package/.yalc/@node-dlc/messaging/dist/util.js.map +1 -0
  848. package/.yalc/@node-dlc/messaging/dist/validation/validate.d.ts +4 -0
  849. package/.yalc/@node-dlc/messaging/dist/validation/validate.js +31 -0
  850. package/.yalc/@node-dlc/messaging/dist/validation/validate.js.map +1 -0
  851. package/.yalc/@node-dlc/messaging/lib/MessageType.ts +140 -0
  852. package/.yalc/@node-dlc/messaging/lib/chain/ChainManager.ts +327 -0
  853. package/.yalc/@node-dlc/messaging/lib/chain/ChainMemoryStore.ts +34 -0
  854. package/.yalc/@node-dlc/messaging/lib/chain/DlcStore.ts +11 -0
  855. package/.yalc/@node-dlc/messaging/lib/chain/IChainFilterChainClient.ts +57 -0
  856. package/.yalc/@node-dlc/messaging/lib/domain/Address.ts +64 -0
  857. package/.yalc/@node-dlc/messaging/lib/index.ts +45 -0
  858. package/.yalc/@node-dlc/messaging/lib/irc/IrcMessage.ts +161 -0
  859. package/.yalc/@node-dlc/messaging/lib/messages/AddressCache.ts +74 -0
  860. package/.yalc/@node-dlc/messaging/lib/messages/BatchFundingGroup.ts +141 -0
  861. package/.yalc/@node-dlc/messaging/lib/messages/CetAdaptorSignatures.ts +89 -0
  862. package/.yalc/@node-dlc/messaging/lib/messages/ContractDescriptor.ts +317 -0
  863. package/.yalc/@node-dlc/messaging/lib/messages/ContractInfo.ts +439 -0
  864. package/.yalc/@node-dlc/messaging/lib/messages/DlcAccept.ts +639 -0
  865. package/.yalc/@node-dlc/messaging/lib/messages/DlcCancel.ts +57 -0
  866. package/.yalc/@node-dlc/messaging/lib/messages/DlcClose.ts +305 -0
  867. package/.yalc/@node-dlc/messaging/lib/messages/DlcCloseMetadata.ts +118 -0
  868. package/.yalc/@node-dlc/messaging/lib/messages/DlcIds.ts +67 -0
  869. package/.yalc/@node-dlc/messaging/lib/messages/DlcInfo.ts +81 -0
  870. package/.yalc/@node-dlc/messaging/lib/messages/DlcInput.ts +167 -0
  871. package/.yalc/@node-dlc/messaging/lib/messages/DlcMessage.ts +87 -0
  872. package/.yalc/@node-dlc/messaging/lib/messages/DlcOffer.ts +665 -0
  873. package/.yalc/@node-dlc/messaging/lib/messages/DlcSign.ts +359 -0
  874. package/.yalc/@node-dlc/messaging/lib/messages/DlcTransactions.ts +213 -0
  875. package/.yalc/@node-dlc/messaging/lib/messages/EventDescriptor.ts +294 -0
  876. package/.yalc/@node-dlc/messaging/lib/messages/FundingInput.ts +260 -0
  877. package/.yalc/@node-dlc/messaging/lib/messages/FundingSignatures.ts +98 -0
  878. package/.yalc/@node-dlc/messaging/lib/messages/IWireMessage.ts +6 -0
  879. package/.yalc/@node-dlc/messaging/lib/messages/NegotiationFields.ts +256 -0
  880. package/.yalc/@node-dlc/messaging/lib/messages/NodeAnnouncementMessage.ts +145 -0
  881. package/.yalc/@node-dlc/messaging/lib/messages/OracleAnnouncement.ts +176 -0
  882. package/.yalc/@node-dlc/messaging/lib/messages/OracleAttestation.ts +292 -0
  883. package/.yalc/@node-dlc/messaging/lib/messages/OracleEvent.ts +250 -0
  884. package/.yalc/@node-dlc/messaging/lib/messages/OracleEventContainer.ts +89 -0
  885. package/.yalc/@node-dlc/messaging/lib/messages/OracleIdentifier.ts +78 -0
  886. package/.yalc/@node-dlc/messaging/lib/messages/OracleInfo.ts +526 -0
  887. package/.yalc/@node-dlc/messaging/lib/messages/OrderAccept.ts +174 -0
  888. package/.yalc/@node-dlc/messaging/lib/messages/OrderIrcInfo.ts +100 -0
  889. package/.yalc/@node-dlc/messaging/lib/messages/OrderMetadata.ts +119 -0
  890. package/.yalc/@node-dlc/messaging/lib/messages/OrderNegotiationFields.ts +210 -0
  891. package/.yalc/@node-dlc/messaging/lib/messages/OrderOffer.ts +418 -0
  892. package/.yalc/@node-dlc/messaging/lib/messages/OrderPositionInfo.ts +147 -0
  893. package/.yalc/@node-dlc/messaging/lib/messages/PayoutCurvePiece.ts +454 -0
  894. package/.yalc/@node-dlc/messaging/lib/messages/PayoutFunction.ts +242 -0
  895. package/.yalc/@node-dlc/messaging/lib/messages/RoundingIntervals.ts +128 -0
  896. package/.yalc/@node-dlc/messaging/lib/messages/ScriptWitnessV0.ts +63 -0
  897. package/.yalc/@node-dlc/messaging/lib/messages/Tlv.ts +40 -0
  898. package/.yalc/@node-dlc/messaging/lib/serialize/F64.ts +337 -0
  899. package/.yalc/@node-dlc/messaging/lib/serialize/deserializeTlv.ts +15 -0
  900. package/.yalc/@node-dlc/messaging/lib/serialize/getTlv.ts +21 -0
  901. package/.yalc/@node-dlc/messaging/lib/serialize/readTlvs.ts +37 -0
  902. package/.yalc/@node-dlc/messaging/lib/util.ts +37 -0
  903. package/.yalc/@node-dlc/messaging/lib/validation/validate.ts +34 -0
  904. package/.yalc/@node-dlc/messaging/package.json +42 -0
  905. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_3_test.json +212 -0
  906. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_5_test.json +470 -0
  907. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_3_of_5_test.json +1519 -0
  908. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_5_of_5_test.json +547 -0
  909. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_3_of_5_test.json +4763 -0
  910. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_5_of_5_test.json +2171 -0
  911. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_single_oracle_test.json +166 -0
  912. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_hyperbola_test.json +504 -0
  913. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_test.json +264 -0
  914. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_five_oracle_numerical_with_diff_test.json +4384 -0
  915. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_test.json +326 -0
  916. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_with_diff_test.json +654 -0
  917. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_test.json +1140 -0
  918. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_with_diff_test.json +2224 -0
  919. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_3_of_3_test.json +210 -0
  920. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_3_of_5_test.json +468 -0
  921. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_3_of_5_test.json +1517 -0
  922. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_5_of_5_test.json +545 -0
  923. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_with_diff_3_of_5_test.json +4761 -0
  924. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_and_numerical_with_diff_5_of_5_test.json +2169 -0
  925. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/enum_single_oracle_test.json +164 -0
  926. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/single_oracle_numerical_hyperbola_test.json +502 -0
  927. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/single_oracle_numerical_test.json +262 -0
  928. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/three_of_five_oracle_numerical_with_diff_test.json +4382 -0
  929. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/three_of_three_oracle_numerical_test.json +324 -0
  930. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/three_of_three_oracle_numerical_with_diff_test.json +652 -0
  931. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/two_of_five_oracle_numerical_test.json +1138 -0
  932. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250718_132453/two_of_five_oracle_numerical_with_diff_test.json +2222 -0
  933. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_3_of_3_test.json +212 -0
  934. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_3_of_5_test.json +470 -0
  935. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_3_of_5_test.json +1519 -0
  936. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_5_of_5_test.json +547 -0
  937. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_with_diff_3_of_5_test.json +4763 -0
  938. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_and_numerical_with_diff_5_of_5_test.json +2171 -0
  939. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/enum_single_oracle_test.json +166 -0
  940. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/single_oracle_numerical_hyperbola_test.json +504 -0
  941. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/single_oracle_numerical_test.json +264 -0
  942. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/three_of_five_oracle_numerical_with_diff_test.json +4384 -0
  943. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/three_of_three_oracle_numerical_test.json +326 -0
  944. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/three_of_three_oracle_numerical_with_diff_test.json +654 -0
  945. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/two_of_five_oracle_numerical_test.json +1140 -0
  946. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs_backup_20250719_185952/two_of_five_oracle_numerical_with_diff_test.json +2224 -0
  947. package/.yalc/@node-dlc/messaging/test_vectors/oracle/external_oracle_announcements.json +0 -0
  948. package/.yalc/@node-dlc/messaging/test_vectors/oracle/oracle_message_test_vectors.json +115 -0
  949. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/accept_msg.json +1465 -0
  950. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_fee_test.json +12362 -0
  951. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_fee_test_scripts.json +57 -0
  952. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_test.json +2766 -0
  953. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_tx_test.json +2899 -0
  954. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/offer_msg.json +163 -0
  955. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/offer_msg_disjoint.json +352 -0
  956. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/segment_chunk_msg.json +12635 -0
  957. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/segment_start_msg.json +4022 -0
  958. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/sign_msg.json +383 -0
  959. package/.yalc/@node-dlc/messaging/tsconfig.json +7 -0
  960. package/.yalc/@node-dlc/messaging/yalc.sig +1 -0
  961. package/CHANGELOG.md +114 -0
  962. package/README.md +48 -0
  963. package/dist/BitcoinDlcProvider.d.ts +51 -21
  964. package/dist/BitcoinDlcProvider.js +956 -459
  965. package/dist/BitcoinDlcProvider.js.map +1 -1
  966. package/dist/utils/Utils.d.ts +6 -6
  967. package/dist/utils/Utils.js +9 -5
  968. package/dist/utils/Utils.js.map +1 -1
  969. package/lib/BitcoinDlcProvider.ts +1525 -818
  970. package/lib/utils/Utils.ts +21 -24
  971. package/package.json +10 -10
  972. package/yalc.lock +30 -0
@@ -28,19 +28,23 @@ 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"));
38
40
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
39
41
  const bitcoin_networks_1 = require("bitcoin-networks");
40
42
  const bitcoinjs_lib_1 = require("bitcoinjs-lib");
43
+ const crypto_2 = __importDefault(require("crypto"));
41
44
  const ecc = __importStar(require("tiny-secp256k1"));
42
45
  const Utils_1 = require("./utils/Utils");
43
46
  class BitcoinDlcProvider extends provider_1.default {
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
48
  constructor(network, cfdDlcJs) {
45
49
  super();
46
50
  this._network = network;
@@ -51,17 +55,83 @@ class BitcoinDlcProvider extends provider_1.default {
51
55
  await (0, utils_1.sleep)(10);
52
56
  }
53
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
+ }
54
108
  async GetPrivKeysForInputs(inputs) {
55
109
  const privKeys = [];
56
110
  for (let i = 0; i < inputs.length; i++) {
57
111
  const input = inputs[i];
58
- let derivationPath = input.derivationPath;
59
- if (!derivationPath) {
60
- 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);
61
134
  }
62
- const keyPair = await this.getMethod('keyPair')(derivationPath);
63
- const privKey = Buffer.from(keyPair.__D).toString('hex');
64
- privKeys.push(privKey);
65
135
  }
66
136
  return privKeys;
67
137
  }
@@ -76,6 +146,34 @@ class BitcoinDlcProvider extends provider_1.default {
76
146
  return 'bitcoin';
77
147
  }
78
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
+ }
79
177
  async GetInputsForAmount(amounts, feeRatePerVb, fixedInputs = []) {
80
178
  if (amounts.length === 0)
81
179
  return [];
@@ -83,7 +181,8 @@ class BitcoinDlcProvider extends provider_1.default {
83
181
  let inputs;
84
182
  try {
85
183
  const inputsForAmount = await this.getMethod('getInputsForDualFunding')(amounts, feeRatePerVb, fixedUtxos);
86
- inputs = inputsForAmount.inputs;
184
+ // Convert UTXO objects to Input class instances
185
+ inputs = inputsForAmount.inputs.map((utxo) => types_1.Input.fromUTXO(utxo));
87
186
  }
88
187
  catch (e) {
89
188
  const errorMessage = e instanceof Error ? e.message : 'Unknown error';
@@ -96,7 +195,7 @@ class BitcoinDlcProvider extends provider_1.default {
96
195
  }
97
196
  return inputs;
98
197
  }
99
- async Initialize(collateral, feeRatePerVb, fixedInputs) {
198
+ async Initialize(collateral, feeRatePerVb, fixedInputs, inputSupplementationMode = Input_1.InputSupplementationMode.Required) {
100
199
  const network = await this.getConnectedNetwork();
101
200
  const payoutAddress = await this.client.wallet.getUnusedAddress(false);
102
201
  const payoutSPK = bitcoinjs_lib_1.address.toOutputScript(payoutAddress.address, network);
@@ -106,7 +205,7 @@ class BitcoinDlcProvider extends provider_1.default {
106
205
  const fundingPubKey = Buffer.from(fundingAddress.publicKey, 'hex');
107
206
  if (fundingAddress.address === payoutAddress.address)
108
207
  throw Error('Address reuse');
109
- const inputs = await this.GetInputsForAmount([collateral], feeRatePerVb, fixedInputs);
208
+ const inputs = await this.GetInputsForAmountWithMode([collateral], feeRatePerVb, fixedInputs, inputSupplementationMode);
110
209
  const fundingInputs = await Promise.all(inputs.map(async (input) => {
111
210
  return this.inputToFundingInput(input);
112
211
  }));
@@ -123,7 +222,7 @@ class BitcoinDlcProvider extends provider_1.default {
123
222
  }
124
223
  async BatchInitialize(collaterals, feeRatePerVb, fixedInputs) {
125
224
  const network = await this.getConnectedNetwork();
126
- const inputs = await this.GetInputsForAmount(collaterals, feeRatePerVb, fixedInputs);
225
+ const inputs = await this.GetInputsForAmountWithMode(collaterals, feeRatePerVb, fixedInputs, Input_1.InputSupplementationMode.Required);
127
226
  const fundingInputs = await Promise.all(inputs.map(async (input) => {
128
227
  return this.inputToFundingInput(input);
129
228
  }));
@@ -155,73 +254,63 @@ class BitcoinDlcProvider extends provider_1.default {
155
254
  * totalCollateral: bigint,
156
255
  * ): PayoutRequest[] {}
157
256
  */
158
- GetPayoutsFromPayoutFunction(_dlcOffer, contractDescriptor, oracleInfo, totalCollateral) {
159
- if (_dlcOffer.type !== messaging_1.MessageType.DlcOfferV0)
160
- throw Error('DlcOffer must be V0');
161
- const dlcOffer = _dlcOffer;
162
- if (contractDescriptor.payoutFunction.type !== messaging_1.MessageType.PayoutFunctionV0)
163
- throw Error('PayoutFunction must be V0');
257
+ GetPayoutsFromPayoutFunction(dlcOffer, contractDescriptor, oracleInfo, totalCollateral) {
164
258
  const payoutFunction = contractDescriptor.payoutFunction;
165
- if (payoutFunction.pieces.length === 0)
259
+ if (payoutFunction.payoutFunctionPieces.length === 0)
166
260
  throw Error('PayoutFunction must have at least once PayoutCurvePiece');
167
- if (payoutFunction.pieces.length > 1)
261
+ if (payoutFunction.payoutFunctionPieces.length > 1)
168
262
  throw Error('More than one PayoutCurvePiece not supported');
169
- const payoutCurvePiece = payoutFunction.pieces[0]
263
+ const payoutCurvePiece = payoutFunction.payoutFunctionPieces[0]
170
264
  .payoutCurvePiece;
171
- if (payoutCurvePiece.type !== messaging_1.MessageType.HyperbolaPayoutCurvePiece &&
172
- payoutCurvePiece.type !== messaging_1.MessageType.OldHyperbolaPayoutCurvePiece)
265
+ if (payoutCurvePiece.payoutCurvePieceType !== messaging_1.PayoutCurvePieceType.Hyperbola)
173
266
  throw Error('Must be HyperbolaPayoutCurvePiece');
174
- if (payoutCurvePiece.b !== BigInt(0) || payoutCurvePiece.c !== BigInt(0))
267
+ if (!payoutCurvePiece.b.eq(messaging_1.F64.ZERO) || !payoutCurvePiece.c.eq(messaging_1.F64.ZERO))
175
268
  throw Error('b and c HyperbolaPayoutCurvePiece values must be 0');
176
- const eventDescriptor = oracleInfo.announcement.oracleEvent
269
+ // Cast to SingleOracleInfo to access announcement property
270
+ const singleOracleInfo = oracleInfo;
271
+ const eventDescriptor = singleOracleInfo.announcement.oracleEvent
177
272
  .eventDescriptor;
178
- if (eventDescriptor.type !== messaging_1.MessageType.DigitDecompositionEventDescriptorV0)
273
+ if (eventDescriptor.type !== messaging_1.MessageType.DigitDecompositionEventDescriptor)
179
274
  throw Error('Only DigitDecomposition Oracle Events supported');
180
275
  const roundingIntervals = contractDescriptor.roundingIntervals;
181
- const cetPayouts = core_1.HyperbolaPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
276
+ const cetPayouts = core_2.HyperbolaPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
182
277
  const payoutGroups = [];
183
278
  cetPayouts.forEach((p) => {
184
279
  payoutGroups.push({
185
280
  payout: p.payout,
186
- 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),
187
282
  });
188
283
  });
189
- const rValuesMessagesList = this.GenerateMessages(oracleInfo);
190
- const { payouts, messagesList } = (0, Utils_1.outputsToPayouts)(payoutGroups, rValuesMessagesList, dlcOffer.offerCollateralSatoshis, dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateralSatoshis, true);
284
+ const rValuesMessagesList = this.GenerateMessages(singleOracleInfo);
285
+ const { payouts, messagesList } = (0, Utils_1.outputsToPayouts)(payoutGroups, rValuesMessagesList, dlcOffer.offerCollateral, dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateral, true);
191
286
  return { payouts, payoutGroups, messagesList };
192
287
  }
193
- GetPayoutsFromPolynomialPayoutFunction(_dlcOffer, contractDescriptor, oracleInfo, totalCollateral) {
194
- if (_dlcOffer.type !== messaging_1.MessageType.DlcOfferV0)
195
- throw Error('DlcOffer must be V0');
196
- const dlcOffer = _dlcOffer;
197
- if (contractDescriptor.payoutFunction.type !== messaging_1.MessageType.PayoutFunctionV0)
198
- throw Error('PayoutFunction must be V0');
288
+ GetPayoutsFromPolynomialPayoutFunction(dlcOffer, contractDescriptor, oracleInfo, totalCollateral) {
199
289
  const payoutFunction = contractDescriptor.payoutFunction;
200
- if (payoutFunction.pieces.length === 0)
290
+ if (payoutFunction.payoutFunctionPieces.length === 0)
201
291
  throw Error('PayoutFunction must have at least once PayoutCurvePiece');
202
- for (const piece of payoutFunction.pieces) {
292
+ for (const piece of payoutFunction.payoutFunctionPieces) {
203
293
  if (piece.payoutCurvePiece.type !== messaging_1.MessageType.PolynomialPayoutCurvePiece)
204
294
  throw Error('Must be PolynomialPayoutCurvePiece');
205
295
  }
206
296
  const eventDescriptor = oracleInfo.announcement.oracleEvent
207
297
  .eventDescriptor;
208
- if (eventDescriptor.type !== messaging_1.MessageType.DigitDecompositionEventDescriptorV0)
298
+ if (eventDescriptor.type !== messaging_1.MessageType.DigitDecompositionEventDescriptor)
209
299
  throw Error('Only DigitDecomposition Oracle Events supported');
210
300
  const roundingIntervals = contractDescriptor.roundingIntervals;
211
- const cetPayouts = core_1.PolynomialPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
301
+ const cetPayouts = core_2.PolynomialPayoutCurve.computePayouts(payoutFunction, totalCollateral, roundingIntervals);
212
302
  const payoutGroups = [];
213
303
  cetPayouts.forEach((p) => {
214
304
  payoutGroups.push({
215
305
  payout: p.payout,
216
- 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),
217
307
  });
218
308
  });
219
309
  const rValuesMessagesList = this.GenerateMessages(oracleInfo);
220
- const { payouts, messagesList } = (0, Utils_1.outputsToPayouts)(payoutGroups, rValuesMessagesList, dlcOffer.offerCollateralSatoshis, dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateralSatoshis, true);
310
+ const { payouts, messagesList } = (0, Utils_1.outputsToPayouts)(payoutGroups, rValuesMessagesList, dlcOffer.offerCollateral, dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateral, true);
221
311
  return { payouts, payoutGroups, messagesList };
222
312
  }
223
- GetPayouts(_dlcOffer) {
224
- const { dlcOffer } = (0, Utils_1.checkTypes)({ _dlcOffer });
313
+ GetPayouts(dlcOffer) {
225
314
  const contractInfo = dlcOffer.contractInfo;
226
315
  const totalCollateral = contractInfo.totalCollateral;
227
316
  const contractOraclePairs = this.GetContractOraclePairs(contractInfo);
@@ -247,127 +336,200 @@ class BitcoinDlcProvider extends provider_1.default {
247
336
  });
248
337
  }, [{ startingMessagesIndex: 0, startingPayoutGroupsIndex: 0 }]);
249
338
  }
339
+ GetPayoutsFromEnumeratedDescriptor(dlcOffer, contractDescriptor, oracleInfo, totalCollateral) {
340
+ const payoutGroups = [];
341
+ const rValuesMessagesList = this.GenerateMessages(oracleInfo);
342
+ // For enumerated descriptors, each outcome creates one payout
343
+ // Each outcome maps to one index in the oracle's possible outcomes
344
+ contractDescriptor.outcomes.forEach((outcome, index) => {
345
+ payoutGroups.push({
346
+ payout: outcome.localPayout,
347
+ groups: [[index]], // Simple index-based grouping for enum outcomes
348
+ });
349
+ });
350
+ const { payouts, messagesList } = (0, Utils_1.outputsToPayouts)(payoutGroups, rValuesMessagesList, dlcOffer.offerCollateral, totalCollateral - dlcOffer.offerCollateral, true);
351
+ return { payouts, payoutGroups, messagesList };
352
+ }
250
353
  GetPayoutsFromContractDescriptor(dlcOffer, contractDescriptor, oracleInfo, totalCollateral) {
251
- switch (contractDescriptor.type) {
252
- case messaging_1.MessageType.ContractDescriptorV0: {
253
- throw Error('ContractDescriptorV0 not yet supported');
354
+ switch (contractDescriptor.contractDescriptorType) {
355
+ case messaging_1.ContractDescriptorType.Enumerated: {
356
+ return this.GetPayoutsFromEnumeratedDescriptor(dlcOffer, contractDescriptor, oracleInfo, totalCollateral);
254
357
  }
255
- case messaging_1.MessageType.ContractDescriptorV1:
256
- {
257
- const contractDescriptorV1 = contractDescriptor;
258
- const payoutFunction = contractDescriptorV1.payoutFunction;
259
- // TODO: add a better check for this
260
- const payoutCurvePiece = payoutFunction.pieces[0].payoutCurvePiece;
261
- switch (payoutCurvePiece.type) {
262
- case messaging_1.MessageType.HyperbolaPayoutCurvePiece:
263
- return this.GetPayoutsFromPayoutFunction(dlcOffer, contractDescriptor, oracleInfo, totalCollateral);
264
- case messaging_1.MessageType.OldHyperbolaPayoutCurvePiece:
265
- return this.GetPayoutsFromPayoutFunction(dlcOffer, contractDescriptor, oracleInfo, totalCollateral);
266
- case messaging_1.MessageType.PolynomialPayoutCurvePiece:
267
- return this.GetPayoutsFromPolynomialPayoutFunction(dlcOffer, contractDescriptor, oracleInfo, totalCollateral);
268
- }
358
+ case messaging_1.ContractDescriptorType.NumericOutcome: {
359
+ const numericalDescriptor = contractDescriptor;
360
+ const payoutFunction = numericalDescriptor.payoutFunction;
361
+ // TODO: add a better check for this
362
+ const payoutCurvePiece = payoutFunction.payoutFunctionPieces[0].payoutCurvePiece;
363
+ switch (payoutCurvePiece.payoutCurvePieceType) {
364
+ case messaging_1.PayoutCurvePieceType.Hyperbola:
365
+ return this.GetPayoutsFromPayoutFunction(dlcOffer, numericalDescriptor, oracleInfo, totalCollateral);
366
+ case messaging_1.PayoutCurvePieceType.Polynomial:
367
+ return this.GetPayoutsFromPolynomialPayoutFunction(dlcOffer, numericalDescriptor, oracleInfo, totalCollateral);
269
368
  }
270
- break;
271
- default: {
272
- throw Error('ContractDescriptor must be V0 or V1');
273
369
  }
274
370
  }
275
371
  }
276
- async createDlcTxs(_dlcOffer, _dlcAccept) {
277
- const { dlcOffer, dlcAccept } = (0, Utils_1.checkTypes)({
278
- _dlcOffer,
279
- _dlcAccept,
280
- });
281
- const localFundPubkey = dlcOffer.fundingPubKey.toString('hex');
282
- const remoteFundPubkey = dlcAccept.fundingPubKey.toString('hex');
283
- const localFinalScriptPubkey = dlcOffer.payoutSPK.toString('hex');
284
- const remoteFinalScriptPubkey = dlcAccept.payoutSPK.toString('hex');
285
- const localChangeScriptPubkey = dlcOffer.changeSPK.toString('hex');
286
- const remoteChangeScriptPubkey = dlcAccept.changeSPK.toString('hex');
287
- const localInputs = await Promise.all(dlcOffer.fundingInputs.map(async (fundingInput) => {
288
- const input = await this.fundingInputToInput(fundingInput, false);
289
- return input.toUtxo();
290
- }));
372
+ async createDlcTxs(dlcOffer, dlcAccept) {
373
+ const localFundPubkey = dlcOffer.fundingPubkey.toString('hex');
374
+ const remoteFundPubkey = dlcAccept.fundingPubkey.toString('hex');
375
+ const localFinalScriptPubkey = dlcOffer.payoutSpk.toString('hex');
376
+ const remoteFinalScriptPubkey = dlcAccept.payoutSpk.toString('hex');
377
+ const localChangeScriptPubkey = dlcOffer.changeSpk.toString('hex');
378
+ const remoteChangeScriptPubkey = dlcAccept.changeSpk.toString('hex');
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)
291
404
  const remoteInputs = await Promise.all(dlcAccept.fundingInputs.map(async (fundingInput) => {
292
405
  const input = await this.fundingInputToInput(fundingInput, false);
293
406
  return input.toUtxo();
294
407
  }));
295
- 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);
296
410
  const remoteInputAmount = remoteInputs.reduce((prev, cur) => prev + cur.amount.GetSatoshiAmount(), 0);
297
411
  let payouts = [];
298
412
  let messagesList = [];
299
- if (dlcOffer.contractInfo.type === messaging_1.MessageType.ContractInfoV0 &&
413
+ if (dlcOffer.contractInfo.type === messaging_1.MessageType.SingleContractInfo &&
300
414
  dlcOffer.contractInfo.contractDescriptor.type ===
301
- messaging_1.MessageType.ContractDescriptorV0) {
415
+ messaging_1.ContractDescriptorType.Enumerated) {
302
416
  for (const outcome of dlcOffer.contractInfo
303
417
  .contractDescriptor.outcomes) {
304
418
  payouts.push({
305
419
  local: outcome.localPayout,
306
- remote: dlcOffer.offerCollateralSatoshis +
307
- dlcAccept.acceptCollateralSatoshis -
420
+ remote: dlcOffer.offerCollateral +
421
+ dlcAccept.acceptCollateral -
308
422
  outcome.localPayout,
309
423
  });
310
- messagesList.push({ messages: [outcome.outcome.toString('hex')] });
424
+ messagesList.push({ messages: [outcome.outcome] });
311
425
  }
312
426
  }
313
427
  else {
314
428
  const payoutResponses = this.GetPayouts(dlcOffer);
315
- const { payouts: tempPayouts, messagesList: tempMessagesList, } = this.FlattenPayouts(payoutResponses);
429
+ const { payouts: tempPayouts, messagesList: tempMessagesList } = this.FlattenPayouts(payoutResponses);
316
430
  payouts = tempPayouts;
317
431
  messagesList = tempMessagesList;
318
432
  }
319
- const dlcTxRequest = {
320
- payouts,
321
- localFundPubkey,
322
- localFinalScriptPubkey,
323
- remoteFundPubkey,
324
- remoteFinalScriptPubkey,
325
- localInputAmount,
326
- localCollateralAmount: dlcOffer.offerCollateralSatoshis,
327
- localPayoutSerialId: dlcOffer.payoutSerialId,
328
- localChangeSerialId: dlcOffer.changeSerialId,
329
- remoteInputAmount,
330
- remoteCollateralAmount: dlcAccept.acceptCollateralSatoshis,
331
- remotePayoutSerialId: dlcAccept.payoutSerialId,
332
- remoteChangeSerialId: dlcAccept.changeSerialId,
333
- refundLocktime: dlcOffer.refundLocktime,
334
- localInputs,
335
- remoteInputs,
336
- localChangeScriptPubkey,
337
- remoteChangeScriptPubkey,
338
- feeRate: Number(dlcOffer.feeRatePerVb),
339
- cetLockTime: dlcOffer.cetLocktime,
340
- fundOutputSerialId: dlcOffer.fundOutputSerialId,
341
- };
342
- const dlcTxs = await this.CreateDlcTransactions(dlcTxRequest);
343
- const dlcTransactions = new messaging_1.DlcTransactionsV0();
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
+ }
491
+ const dlcTransactions = new messaging_1.DlcTransactions();
344
492
  dlcTransactions.fundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(dlcTxs.fundTxHex));
345
- dlcTransactions.fundTxVout = [
346
- BigInt(dlcOffer.changeSerialId),
347
- BigInt(dlcAccept.changeSerialId),
348
- BigInt(dlcTxRequest.fundOutputSerialId),
349
- ]
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
350
510
  .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
351
- .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)));
352
523
  dlcTransactions.refundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(dlcTxs.refundTxHex));
353
- dlcTransactions.cets = dlcTxs.cetsHex.map((cetHex) => {
354
- return bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(cetHex));
355
- });
356
524
  return { dlcTransactions, messagesList };
357
525
  }
358
- async createBatchDlcTxs(_dlcOffers, _dlcAccepts) {
359
- const dlcOffers = _dlcOffers.map((dlcOffer) => {
360
- return (0, Utils_1.checkTypes)({ _dlcOffer: dlcOffer }).dlcOffer;
361
- });
362
- const dlcAccepts = _dlcAccepts.map((dlcAccept) => {
363
- return (0, Utils_1.checkTypes)({ _dlcAccept: dlcAccept }).dlcAccept;
364
- });
365
- const localFundPubkeys = dlcOffers.map((dlcOffer) => dlcOffer.fundingPubKey.toString('hex'));
366
- const remoteFundPubkeys = dlcAccepts.map((dlcAccept) => dlcAccept.fundingPubKey.toString('hex'));
367
- const localFinalScriptPubkeys = dlcOffers.map((dlcOffer) => dlcOffer.payoutSPK.toString('hex'));
368
- const remoteFinalScriptPubkeys = dlcAccepts.map((dlcAccept) => dlcAccept.payoutSPK.toString('hex'));
369
- const localChangeScriptPubkey = dlcOffers[0].changeSPK.toString('hex');
370
- const remoteChangeScriptPubkey = dlcAccepts[0].changeSPK.toString('hex');
526
+ async createBatchDlcTxs(dlcOffers, dlcAccepts) {
527
+ const localFundPubkeys = dlcOffers.map((dlcOffer) => dlcOffer.fundingPubkey.toString('hex'));
528
+ const remoteFundPubkeys = dlcAccepts.map((dlcAccept) => dlcAccept.fundingPubkey.toString('hex'));
529
+ const localFinalScriptPubkeys = dlcOffers.map((dlcOffer) => dlcOffer.payoutSpk.toString('hex'));
530
+ const remoteFinalScriptPubkeys = dlcAccepts.map((dlcAccept) => dlcAccept.payoutSpk.toString('hex'));
531
+ const localChangeScriptPubkey = dlcOffers[0].changeSpk.toString('hex');
532
+ const remoteChangeScriptPubkey = dlcAccepts[0].changeSpk.toString('hex');
371
533
  const localInputs = await Promise.all(dlcOffers[0].fundingInputs.map(async (fundingInput) => {
372
534
  const input = await this.fundingInputToInput(fundingInput, false);
373
535
  return input.toUtxo();
@@ -402,11 +564,11 @@ class BitcoinDlcProvider extends provider_1.default {
402
564
  remoteFundPubkeys,
403
565
  remoteFinalScriptPubkeys,
404
566
  localInputAmount,
405
- localCollateralAmounts: dlcOffers.map((dlcOffer) => dlcOffer.offerCollateralSatoshis),
567
+ localCollateralAmounts: dlcOffers.map((dlcOffer) => dlcOffer.offerCollateral),
406
568
  localPayoutSerialIds: dlcOffers.map((dlcOffer) => dlcOffer.payoutSerialId),
407
569
  localChangeSerialId: dlcOffers[0].changeSerialId,
408
570
  remoteInputAmount,
409
- remoteCollateralAmounts: dlcAccepts.map((dlcAccept) => dlcAccept.acceptCollateralSatoshis),
571
+ remoteCollateralAmounts: dlcAccepts.map((dlcAccept) => dlcAccept.acceptCollateral),
410
572
  remotePayoutSerialIds: dlcAccepts.map((dlcAccept) => dlcAccept.payoutSerialId),
411
573
  remoteChangeSerialId: dlcAccepts[0].changeSerialId,
412
574
  refundLocktimes: dlcOffers.map((dlcOffer) => dlcOffer.refundLocktime),
@@ -422,7 +584,7 @@ class BitcoinDlcProvider extends provider_1.default {
422
584
  const dlcTransactionsList = [];
423
585
  let start = 0;
424
586
  for (let i = 0; i < dlcTxs.refundTxHexList.length; i++) {
425
- const dlcTransactions = new messaging_1.DlcTransactionsV0();
587
+ const dlcTransactions = new messaging_1.DlcTransactions();
426
588
  dlcTransactions.fundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(dlcTxs.fundTxHex));
427
589
  dlcTransactions.fundTxVout = [
428
590
  BigInt(dlcOffers[i].changeSerialId),
@@ -444,7 +606,13 @@ class BitcoinDlcProvider extends provider_1.default {
444
606
  return { dlcTransactionsList, nestedMessagesList };
445
607
  }
446
608
  GenerateEnumMessages(oracleEvent) {
447
- throw Error('Only DigitDecomposition Oracle Events supported');
609
+ const eventDescriptor = oracleEvent.eventDescriptor;
610
+ // For enum events, each oracle has one nonce and can attest to one of the possible outcomes
611
+ const messagesList = [];
612
+ // For enum events, hash the outcomes to match the contract descriptor format
613
+ const messages = eventDescriptor.outcomes.map((outcome) => (0, crypto_1.sha256)(Buffer.from(outcome)).toString('hex'));
614
+ messagesList.push({ messages });
615
+ return messagesList;
448
616
  }
449
617
  GenerateDigitDecompositionMessages(oracleEvent) {
450
618
  const oracleNonces = oracleEvent.oracleNonces;
@@ -461,33 +629,61 @@ class BitcoinDlcProvider extends provider_1.default {
461
629
  return messagesList;
462
630
  }
463
631
  GenerateMessages(oracleInfo) {
464
- const oracleEvent = oracleInfo.announcement.oracleEvent;
632
+ // Handle both SingleOracleInfo and MultiOracleInfo using type property instead of instanceof
633
+ let oracleEvent;
634
+ if (oracleInfo.type === messaging_1.MessageType.SingleOracleInfo) {
635
+ const singleOracleInfo = oracleInfo;
636
+ oracleEvent = singleOracleInfo.announcement.oracleEvent;
637
+ }
638
+ else if (oracleInfo.type === messaging_1.MessageType.MultiOracleInfo) {
639
+ const multiOracleInfo = oracleInfo;
640
+ // For multi-oracle, use the first announcement for now
641
+ // TODO: This might need more sophisticated handling for multi-oracle scenarios
642
+ if (multiOracleInfo.announcements.length === 0) {
643
+ throw Error('MultiOracleInfo must have at least one announcement');
644
+ }
645
+ oracleEvent = multiOracleInfo.announcements[0].oracleEvent;
646
+ }
647
+ else {
648
+ throw Error(`OracleInfo must be SingleOracleInfo or MultiOracleInfo, got type: ${oracleInfo.type}`);
649
+ }
465
650
  switch (oracleEvent.eventDescriptor.type) {
466
- case messaging_1.MessageType.EnumEventDescriptorV0:
651
+ case messaging_1.MessageType.EnumEventDescriptor:
467
652
  return this.GenerateEnumMessages(oracleEvent);
468
- case messaging_1.MessageType.DigitDecompositionEventDescriptorV0:
653
+ case messaging_1.MessageType.DigitDecompositionEventDescriptor:
469
654
  return this.GenerateDigitDecompositionMessages(oracleEvent);
470
655
  default:
471
656
  throw Error('EventDescriptor must be Enum or DigitDecomposition');
472
657
  }
473
658
  }
474
659
  GetContractOraclePairs(_contractInfo) {
475
- switch (_contractInfo.type) {
476
- case messaging_1.MessageType.ContractInfoV0: {
477
- const contractInfo = _contractInfo;
478
- return [
479
- {
480
- contractDescriptor: contractInfo.contractDescriptor,
481
- oracleInfo: contractInfo.oracleInfo,
482
- },
483
- ];
484
- }
485
- case messaging_1.MessageType.ContractInfoV1: {
486
- return _contractInfo.contractOraclePairs;
487
- }
488
- default:
489
- throw Error('ContractInfo must be V0 or V1');
660
+ // Use contractInfoType property instead of instanceof for more reliable type checking
661
+ if (_contractInfo.contractInfoType === messaging_1.ContractInfoType.Single) {
662
+ const singleInfo = _contractInfo;
663
+ return [
664
+ {
665
+ contractDescriptor: singleInfo.contractDescriptor,
666
+ oracleInfo: singleInfo.oracleInfo,
667
+ },
668
+ ];
669
+ }
670
+ else if (_contractInfo.contractInfoType === messaging_1.ContractInfoType.Disjoint) {
671
+ const disjointInfo = _contractInfo;
672
+ return disjointInfo.contractOraclePairs;
673
+ }
674
+ else {
675
+ throw Error('ContractInfo must be Single or Disjoint');
676
+ }
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)}`);
490
685
  }
686
+ return fundOutput.value.sats;
491
687
  }
492
688
  async CreateCetAdaptorAndRefundSigs(_dlcOffer, _dlcAccept, _dlcTxs, messagesList, isOfferer) {
493
689
  const { dlcOffer, dlcAccept, dlcTxs } = (0, Utils_1.checkTypes)({
@@ -497,7 +693,7 @@ class BitcoinDlcProvider extends provider_1.default {
497
693
  });
498
694
  const network = await this.getConnectedNetwork();
499
695
  const cetsHex = dlcTxs.cets.map((cet) => cet.serialize().toString('hex'));
500
- const fundingSPK = bitcoin_1.Script.p2wpkhLock((0, crypto_1.hash160)(isOfferer ? dlcOffer.fundingPubKey : dlcAccept.fundingPubKey))
696
+ const fundingSPK = bitcoin_1.Script.p2wpkhLock((0, crypto_1.hash160)(isOfferer ? dlcOffer.fundingPubkey : dlcAccept.fundingPubkey))
501
697
  .serialize()
502
698
  .slice(1);
503
699
  const fundingAddress = bitcoinjs_lib_1.address.fromOutputScript(fundingSPK, network);
@@ -508,11 +704,15 @@ class BitcoinDlcProvider extends provider_1.default {
508
704
  const fundPrivateKey = Buffer.from(fundPrivateKeyPair.__D).toString('hex');
509
705
  const contractOraclePairs = this.GetContractOraclePairs(dlcOffer.contractInfo);
510
706
  const sigs = [];
511
- if (dlcOffer.contractInfo.type === messaging_1.MessageType.ContractInfoV0 &&
707
+ if (dlcOffer.contractInfo.contractInfoType === messaging_1.ContractInfoType.Single &&
512
708
  dlcOffer.contractInfo.contractDescriptor.type ===
513
709
  messaging_1.MessageType.ContractDescriptorV0) {
514
- for (const [_, { oracleInfo }] of contractOraclePairs.entries()) {
515
- const oracleAnnouncement = oracleInfo.announcement;
710
+ for (const { oracleInfo } of contractOraclePairs) {
711
+ if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
712
+ throw new Error('Only SingleOracleInfo supported in this context');
713
+ }
714
+ const oracleAnnouncement = oracleInfo
715
+ .announcement;
516
716
  const adaptorSigRequestPromises = [];
517
717
  const tempMessagesList = messagesList;
518
718
  const tempCetsHex = cetsHex;
@@ -522,9 +722,9 @@ class BitcoinDlcProvider extends provider_1.default {
522
722
  privkey: fundPrivateKey,
523
723
  fundTxId: dlcTxs.fundTx.txId.toString(),
524
724
  fundVout: dlcTxs.fundTxVout,
525
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
526
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
527
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
725
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
726
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
727
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
528
728
  oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
529
729
  oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map((nonce) => nonce.toString('hex')),
530
730
  };
@@ -544,7 +744,11 @@ class BitcoinDlcProvider extends provider_1.default {
544
744
  else {
545
745
  const indices = this.GetIndicesFromPayouts(this.GetPayouts(_dlcOffer));
546
746
  for (const [index, { oracleInfo }] of contractOraclePairs.entries()) {
547
- const oracleAnnouncement = oracleInfo.announcement;
747
+ if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
748
+ throw new Error('Only SingleOracleInfo supported in this context');
749
+ }
750
+ const oracleAnnouncement = oracleInfo
751
+ .announcement;
548
752
  const startingIndex = indices[index].startingMessagesIndex, endingIndex = indices[index + 1].startingMessagesIndex;
549
753
  const oracleEventMessagesList = messagesList.slice(startingIndex, endingIndex);
550
754
  const oracleEventCetsHex = cetsHex.slice(startingIndex, endingIndex);
@@ -559,9 +763,9 @@ class BitcoinDlcProvider extends provider_1.default {
559
763
  privkey: fundPrivateKey,
560
764
  fundTxId: dlcTxs.fundTx.txId.toString(),
561
765
  fundVout: dlcTxs.fundTxVout,
562
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
563
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
564
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
766
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
767
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
768
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
565
769
  oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
566
770
  oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map((nonce) => nonce.toString('hex')),
567
771
  };
@@ -584,12 +788,12 @@ class BitcoinDlcProvider extends provider_1.default {
584
788
  privkey: fundPrivateKey,
585
789
  fundTxId: dlcTxs.fundTx.txId.toString(),
586
790
  fundVout: dlcTxs.fundTxVout,
587
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
588
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
589
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
791
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
792
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
793
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
590
794
  };
591
795
  const refundSignature = Buffer.from((await this.GetRawRefundTxSignature(refundSignRequest)).hex, 'hex');
592
- const cetSignatures = new messaging_1.CetAdaptorSignaturesV0();
796
+ const cetSignatures = new messaging_1.CetAdaptorSignatures();
593
797
  cetSignatures.sigs = sigs.flat();
594
798
  return { cetSignatures, refundSignature };
595
799
  }
@@ -602,15 +806,19 @@ class BitcoinDlcProvider extends provider_1.default {
602
806
  });
603
807
  const cetsHex = dlcTxs.cets.map((cet) => cet.serialize().toString('hex'));
604
808
  const contractOraclePairs = this.GetContractOraclePairs(dlcOffer.contractInfo);
605
- if (dlcOffer.contractInfo.type === messaging_1.MessageType.ContractInfoV0 &&
809
+ if (dlcOffer.contractInfo.type === messaging_1.MessageType.SingleContractInfo &&
606
810
  dlcOffer.contractInfo.contractDescriptor.type ===
607
811
  messaging_1.MessageType.ContractDescriptorV0) {
608
- for (const [_, { oracleInfo }] of contractOraclePairs.entries()) {
609
- const oracleAnnouncement = oracleInfo.announcement;
812
+ for (const { oracleInfo } of contractOraclePairs) {
813
+ if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
814
+ throw new Error('Only SingleOracleInfo supported in this context');
815
+ }
816
+ const oracleAnnouncement = oracleInfo
817
+ .announcement;
610
818
  const oracleEventCetsHex = cetsHex;
611
819
  const oracleEventSigs = isOfferer
612
- ? dlcAccept.cetSignatures.sigs
613
- : dlcSign.cetSignatures.sigs;
820
+ ? dlcAccept.cetAdaptorSignatures.sigs
821
+ : dlcSign.cetAdaptorSignatures.sigs;
614
822
  const sigsValidity = [];
615
823
  const tempMessagesList = messagesList;
616
824
  const tempCetsHex = oracleEventCetsHex;
@@ -627,11 +835,11 @@ class BitcoinDlcProvider extends provider_1.default {
627
835
  oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
628
836
  oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map((nonce) => nonce.toString('hex')),
629
837
  adaptorPairs: tempAdaptorPairs,
630
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
631
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
838
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
839
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
632
840
  fundTxId: dlcTxs.fundTx.txId.toString(),
633
841
  fundVout: dlcTxs.fundTxVout,
634
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
842
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
635
843
  verifyRemote: isOfferer,
636
844
  };
637
845
  sigsValidity.push((async () => {
@@ -644,11 +852,11 @@ class BitcoinDlcProvider extends provider_1.default {
644
852
  signature: isOfferer
645
853
  ? dlcAccept.refundSignature.toString('hex')
646
854
  : dlcSign.refundSignature.toString('hex'),
647
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
648
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
855
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
856
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
649
857
  fundTxId: dlcTxs.fundTx.txId.toString(),
650
858
  fundVout: dlcTxs.fundTxVout,
651
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
859
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
652
860
  verifyRemote: isOfferer,
653
861
  };
654
862
  areSigsValid =
@@ -663,13 +871,17 @@ class BitcoinDlcProvider extends provider_1.default {
663
871
  const chunk = 100;
664
872
  const indices = this.GetIndicesFromPayouts(this.GetPayouts(_dlcOffer));
665
873
  for (const [index, { oracleInfo }] of contractOraclePairs.entries()) {
666
- const oracleAnnouncement = oracleInfo.announcement;
874
+ if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
875
+ throw new Error('Only SingleOracleInfo supported in this context');
876
+ }
877
+ const oracleAnnouncement = oracleInfo
878
+ .announcement;
667
879
  const startingIndex = indices[index].startingMessagesIndex, endingIndex = indices[index + 1].startingMessagesIndex;
668
880
  const oracleEventMessagesList = messagesList.slice(startingIndex, endingIndex);
669
881
  const oracleEventCetsHex = cetsHex.slice(startingIndex, endingIndex);
670
882
  const oracleEventSigs = (isOfferer
671
- ? dlcAccept.cetSignatures.sigs
672
- : dlcSign.cetSignatures.sigs).slice(startingIndex, endingIndex);
883
+ ? dlcAccept.cetAdaptorSignatures.sigs
884
+ : dlcSign.cetAdaptorSignatures.sigs).slice(startingIndex, endingIndex);
673
885
  const sigsValidity = [];
674
886
  for (let i = 0, j = oracleEventMessagesList.length; i < j; i += chunk) {
675
887
  const tempMessagesList = oracleEventMessagesList.slice(i, i + chunk);
@@ -687,11 +899,11 @@ class BitcoinDlcProvider extends provider_1.default {
687
899
  oraclePubkey: oracleAnnouncement.oraclePubkey.toString('hex'),
688
900
  oracleRValues: oracleAnnouncement.oracleEvent.oracleNonces.map((nonce) => nonce.toString('hex')),
689
901
  adaptorPairs: tempAdaptorPairs,
690
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
691
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
902
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
903
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
692
904
  fundTxId: dlcTxs.fundTx.txId.toString(),
693
905
  fundVout: dlcTxs.fundTxVout,
694
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
906
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
695
907
  verifyRemote: isOfferer,
696
908
  };
697
909
  sigsValidity.push((async () => {
@@ -705,11 +917,11 @@ class BitcoinDlcProvider extends provider_1.default {
705
917
  signature: isOfferer
706
918
  ? dlcAccept.refundSignature.toString('hex')
707
919
  : dlcSign.refundSignature.toString('hex'),
708
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
709
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
920
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
921
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
710
922
  fundTxId: dlcTxs.fundTx.txId.toString(),
711
923
  fundVout: dlcTxs.fundTxVout,
712
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
924
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
713
925
  verifyRemote: isOfferer,
714
926
  };
715
927
  areSigsValid =
@@ -735,14 +947,32 @@ class BitcoinDlcProvider extends provider_1.default {
735
947
  }));
736
948
  const inputPrivKeys = await this.GetPrivKeysForInputs(inputs);
737
949
  const fundTxSigs = await Promise.all(inputs.map(async (input, index) => {
738
- const fundTxSignRequest = {
739
- fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
740
- privkey: inputPrivKeys[index],
741
- prevTxId: input.txid,
742
- prevVout: input.vout,
743
- amount: input.value,
744
- };
745
- 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
+ }
746
976
  }));
747
977
  const inputPubKeys = await Promise.all(inputPrivKeys.map(async (privkey) => {
748
978
  const reqPrivKey = {
@@ -760,17 +990,11 @@ class BitcoinDlcProvider extends provider_1.default {
760
990
  pubKeyWitness.witness = Buffer.from(inputPubKeys[i], 'hex');
761
991
  witnessElements.push([sigWitness, pubKeyWitness]);
762
992
  }
763
- const fundingSignatures = new messaging_1.FundingSignaturesV0();
993
+ const fundingSignatures = new messaging_1.FundingSignatures();
764
994
  fundingSignatures.witnessElements = witnessElements;
765
995
  return fundingSignatures;
766
996
  }
767
- async VerifyFundingSigs(_dlcOffer, _dlcAccept, _dlcSign, _dlcTxs, isOfferer) {
768
- const { dlcOffer, dlcAccept, dlcSign, dlcTxs } = (0, Utils_1.checkTypes)({
769
- _dlcOffer,
770
- _dlcAccept,
771
- _dlcSign,
772
- _dlcTxs,
773
- });
997
+ async VerifyFundingSigs(dlcOffer, dlcAccept, dlcSign, dlcTxs, isOfferer) {
774
998
  const sigsValidity = [];
775
999
  for (let i = 0; i < dlcSign.fundingSignatures.witnessElements.length; i++) {
776
1000
  const witnessElement = dlcSign.fundingSignatures.witnessElements[i];
@@ -779,31 +1003,46 @@ class BitcoinDlcProvider extends provider_1.default {
779
1003
  const fundingInput = isOfferer
780
1004
  ? dlcAccept.fundingInputs[i]
781
1005
  : dlcOffer.fundingInputs[i];
782
- const verifyFundSigRequest = {
783
- fundTxHex: dlcTxs.fundTx.serialize().toString('hex'),
784
- signature,
785
- pubkey,
786
- prevTxId: fundingInput.prevTx.txId.toString(),
787
- prevVout: fundingInput.prevTxVout,
788
- fundInputAmount: fundingInput.prevTx.outputs[fundingInput.prevTxVout].value.sats,
789
- };
790
- sigsValidity.push((async () => {
791
- const response = await this.VerifyFundTxSignature(verifyFundSigRequest);
792
- return response.valid;
793
- })());
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
+ }
794
1039
  }
795
1040
  const areSigsValid = (await Promise.all(sigsValidity)).every((b) => b);
796
1041
  if (!areSigsValid) {
797
1042
  throw new Error('Invalid signatures received');
798
1043
  }
799
1044
  }
800
- async CreateFundingTx(_dlcOffer, _dlcAccept, _dlcSign, _dlcTxs, fundingSignatures) {
801
- const { dlcOffer, dlcAccept, dlcSign, dlcTxs } = (0, Utils_1.checkTypes)({
802
- _dlcOffer,
803
- _dlcAccept,
804
- _dlcSign,
805
- _dlcTxs,
806
- });
1045
+ async CreateFundingTx(dlcOffer, dlcAccept, dlcSign, dlcTxs, fundingSignatures) {
807
1046
  const witnessElements = [
808
1047
  ...dlcSign.fundingSignatures.witnessElements,
809
1048
  ...fundingSignatures.witnessElements,
@@ -813,39 +1052,67 @@ class BitcoinDlcProvider extends provider_1.default {
813
1052
  ...dlcAccept.fundingInputs,
814
1053
  ];
815
1054
  let fundTxHex = dlcTxs.fundTx.serialize().toString('hex');
1055
+ // Track processed DLC inputs to avoid double processing
1056
+ const processedDlcInputs = new Set();
816
1057
  await (0, Utils_1.asyncForEach)(witnessElements, async (witnessElement, i) => {
817
1058
  const signature = witnessElement[0].witness.toString('hex');
818
1059
  const pubkey = witnessElement[1].witness.toString('hex');
819
1060
  const fundingInput = fundingInputs[i];
820
- const addSignRequest = {
821
- fundTxHex,
822
- signature,
823
- prevTxId: fundingInput.prevTx.txId.toString(),
824
- prevVout: fundingInput.prevTxVout,
825
- pubkey,
826
- };
827
- fundTxHex = (await this.AddSignatureToFundTransaction(addSignRequest))
828
- .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
829
1096
  });
830
1097
  const fundTx = bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(fundTxHex));
831
1098
  return fundTx;
832
1099
  }
833
- async FindOutcomeIndexFromPolynomialPayoutCurvePiece(_dlcOffer, contractDescriptor, contractOraclePairIndex, polynomialPayoutCurvePiece, oracleAttestation, outcome) {
834
- const { dlcOffer } = (0, Utils_1.checkTypes)({ _dlcOffer });
835
- const polynomialCurve = core_1.PolynomialPayoutCurve.fromPayoutCurvePiece(polynomialPayoutCurvePiece);
1100
+ async FindOutcomeIndexFromPolynomialPayoutCurvePiece(dlcOffer, contractDescriptor, contractOraclePairIndex, polynomialPayoutCurvePiece, oracleAttestation, outcome) {
1101
+ const polynomialCurve = core_2.PolynomialPayoutCurve.fromPayoutCurvePiece(polynomialPayoutCurvePiece);
836
1102
  const payouts = polynomialPayoutCurvePiece.points.map((point) => Number(point.outcomePayout));
837
1103
  const minPayout = Math.min(...payouts);
838
1104
  const maxPayout = Math.max(...payouts);
839
1105
  const clampBN = (val) => bignumber_js_1.default.max(minPayout, bignumber_js_1.default.min(val, maxPayout));
840
1106
  const payout = clampBN(polynomialCurve.getPayout(outcome));
841
1107
  const payoutResponses = this.GetPayouts(dlcOffer);
842
- const payoutIndexOffset = this.GetIndicesFromPayouts(payoutResponses)[contractOraclePairIndex].startingMessagesIndex;
1108
+ const payoutIndexOffset = this.GetIndicesFromPayouts(payoutResponses)[contractOraclePairIndex]
1109
+ .startingMessagesIndex;
843
1110
  const { payoutGroups } = payoutResponses[contractOraclePairIndex];
844
1111
  const intervalsSorted = [
845
1112
  ...contractDescriptor.roundingIntervals.intervals,
846
1113
  ].sort((a, b) => Number(b.beginInterval) - Number(a.beginInterval));
847
1114
  const interval = intervalsSorted.find((interval) => Number(outcome) >= Number(interval.beginInterval));
848
- 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());
849
1116
  const outcomesFormatted = oracleAttestation.outcomes.map((outcome) => parseInt(outcome));
850
1117
  let index = 0;
851
1118
  let groupIndex = -1;
@@ -873,17 +1140,18 @@ Payout Group not found');
873
1140
  }
874
1141
  async FindOutcomeIndexFromHyperbolaPayoutCurvePiece(_dlcOffer, contractDescriptor, contractOraclePairIndex, hyperbolaPayoutCurvePiece, oracleAttestation, outcome) {
875
1142
  const { dlcOffer } = (0, Utils_1.checkTypes)({ _dlcOffer });
876
- const hyperbolaCurve = core_1.HyperbolaPayoutCurve.fromPayoutCurvePiece(hyperbolaPayoutCurvePiece);
1143
+ const hyperbolaCurve = core_2.HyperbolaPayoutCurve.fromPayoutCurvePiece(hyperbolaPayoutCurvePiece);
877
1144
  const clampBN = (val) => bignumber_js_1.default.max(0, bignumber_js_1.default.min(val, dlcOffer.contractInfo.totalCollateral.toString()));
878
1145
  const payout = clampBN(hyperbolaCurve.getPayout(outcome));
879
1146
  const payoutResponses = this.GetPayouts(dlcOffer);
880
- const payoutIndexOffset = this.GetIndicesFromPayouts(payoutResponses)[contractOraclePairIndex].startingMessagesIndex;
1147
+ const payoutIndexOffset = this.GetIndicesFromPayouts(payoutResponses)[contractOraclePairIndex]
1148
+ .startingMessagesIndex;
881
1149
  const { payoutGroups } = payoutResponses[contractOraclePairIndex];
882
1150
  const intervalsSorted = [
883
1151
  ...contractDescriptor.roundingIntervals.intervals,
884
1152
  ].sort((a, b) => Number(b.beginInterval) - Number(a.beginInterval));
885
1153
  const interval = intervalsSorted.find((interval) => Number(outcome) >= Number(interval.beginInterval));
886
- 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());
887
1155
  const outcomesFormatted = oracleAttestation.outcomes.map((outcome) => parseInt(outcome));
888
1156
  let index = 0;
889
1157
  let groupIndex = -1;
@@ -921,32 +1189,59 @@ Payout Group not found');
921
1189
  }
922
1190
  }
923
1191
  if (groupIndex === -1) {
924
- throw Error('Failed to Find OutcomeIndex From HyperbolaPayoutCurvePiece. \
925
- Payout Group not found');
1192
+ // Fallback to brute force search if payout-based search fails
1193
+ index = 0;
1194
+ groupLength = 0;
1195
+ for (const [, payoutGroup] of payoutGroups.entries()) {
1196
+ groupIndex = payoutGroup.groups.findIndex((group) => {
1197
+ return group.every((msg, j) => msg === outcomesFormatted[j]);
1198
+ });
1199
+ if (groupIndex !== -1) {
1200
+ index += groupIndex;
1201
+ groupLength = payoutGroup.groups[groupIndex].length;
1202
+ break;
1203
+ }
1204
+ else {
1205
+ index += payoutGroup.groups.length;
1206
+ }
1207
+ }
1208
+ if (groupIndex === -1) {
1209
+ throw Error('Failed to Find OutcomeIndex From HyperbolaPayoutCurvePiece. \
1210
+ Payout Group not found even with brute force search');
1211
+ }
926
1212
  }
927
1213
  return { index: payoutIndexOffset + index, groupLength };
928
1214
  }
929
- async FindOutcomeIndex(_dlcOffer, oracleAttestation) {
930
- const { dlcOffer } = (0, Utils_1.checkTypes)({ _dlcOffer });
1215
+ async FindOutcomeIndex(dlcOffer, oracleAttestation) {
931
1216
  const contractOraclePairs = this.GetContractOraclePairs(dlcOffer.contractInfo);
932
- const contractOraclePairIndex = contractOraclePairs.findIndex(({ oracleInfo }) => oracleInfo.announcement.oracleEvent.eventId ===
933
- oracleAttestation.eventId);
1217
+ const contractOraclePairIndex = contractOraclePairs.findIndex(({ oracleInfo }) => {
1218
+ if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo)
1219
+ return false;
1220
+ const singleOracleInfo = oracleInfo;
1221
+ return (singleOracleInfo.announcement.oracleEvent.eventId ===
1222
+ oracleAttestation.eventId);
1223
+ });
934
1224
  (0, assert_1.default)(contractOraclePairIndex !== -1, 'OracleAttestation must be for an existing OracleEvent');
935
1225
  const contractOraclePair = contractOraclePairs[contractOraclePairIndex];
936
- const { contractDescriptor: _contractDescriptor, oracleInfo, } = contractOraclePair;
937
- (0, assert_1.default)(_contractDescriptor.type === messaging_1.MessageType.ContractDescriptorV1, 'ContractDescriptor must be V1');
1226
+ const { contractDescriptor: _contractDescriptor, oracleInfo } = contractOraclePair;
1227
+ (0, assert_1.default)(_contractDescriptor.contractDescriptorType ===
1228
+ messaging_1.ContractDescriptorType.NumericOutcome, 'ContractDescriptor must be NumericOutcome');
938
1229
  const contractDescriptor = _contractDescriptor;
939
1230
  const _payoutFunction = contractDescriptor.payoutFunction;
940
- (0, assert_1.default)(_payoutFunction.type === messaging_1.MessageType.PayoutFunctionV0, 'PayoutFunction must be V0');
941
- const eventDescriptor = oracleInfo.announcement.oracleEvent
1231
+ (0, assert_1.default)(_payoutFunction.type === messaging_1.MessageType.PayoutFunction, 'PayoutFunction must be V0');
1232
+ if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
1233
+ throw new Error('Only SingleOracleInfo supported in this context');
1234
+ }
1235
+ const singleOracleInfo = oracleInfo;
1236
+ const eventDescriptor = singleOracleInfo.announcement.oracleEvent
942
1237
  .eventDescriptor;
943
1238
  const payoutFunction = _payoutFunction;
944
1239
  const base = eventDescriptor.base;
945
1240
  const outcome = [...oracleAttestation.outcomes]
946
1241
  .reverse()
947
1242
  .reduce((acc, val, i) => acc + Number(val) * base ** i, 0);
948
- const piecesSorted = payoutFunction.pieces.sort((a, b) => Number(a.endpoint) - Number(b.endpoint));
949
- const piece = piecesSorted.find((piece) => outcome < piece.endpoint);
1243
+ const piecesSorted = payoutFunction.payoutFunctionPieces.sort((a, b) => Number(a.endPoint.eventOutcome) - Number(b.endPoint.eventOutcome));
1244
+ const piece = piecesSorted.find((piece) => outcome < piece.endPoint.eventOutcome);
950
1245
  switch (piece.payoutCurvePiece.type) {
951
1246
  case messaging_1.MessageType.PolynomialPayoutCurvePiece:
952
1247
  return this.FindOutcomeIndexFromPolynomialPayoutCurvePiece(dlcOffer, contractDescriptor, contractOraclePairIndex, piece.payoutCurvePiece, oracleAttestation, BigInt(outcome));
@@ -958,24 +1253,29 @@ Payout Group not found');
958
1253
  throw Error('Must be Hyperbola or Polynomial curve piece');
959
1254
  }
960
1255
  }
961
- ValidateEvent(_dlcOffer, oracleAttestation) {
962
- const { dlcOffer } = (0, Utils_1.checkTypes)({
963
- _dlcOffer,
964
- });
965
- switch (dlcOffer.contractInfo.type) {
966
- case messaging_1.MessageType.ContractInfoV0: {
1256
+ ValidateEvent(dlcOffer, oracleAttestation) {
1257
+ switch (dlcOffer.contractInfo.contractInfoType) {
1258
+ case messaging_1.ContractInfoType.Single: {
967
1259
  const contractInfo = dlcOffer.contractInfo;
968
- switch (contractInfo.contractDescriptor.type) {
969
- case messaging_1.MessageType.ContractDescriptorV0: {
1260
+ switch (contractInfo.contractDescriptor.contractDescriptorType) {
1261
+ case messaging_1.ContractDescriptorType.Enumerated: {
970
1262
  const oracleInfo = contractInfo.oracleInfo;
971
- if (oracleInfo.announcement.oracleEvent.eventId !==
1263
+ if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
1264
+ throw Error('Only SingleOracleInfo supported in this context');
1265
+ }
1266
+ const singleOracleInfo = oracleInfo;
1267
+ if (singleOracleInfo.announcement.oracleEvent.eventId !==
972
1268
  oracleAttestation.eventId)
973
1269
  throw Error('Incorrect Oracle Attestation. Event Id must match.');
974
1270
  break;
975
1271
  }
976
- case messaging_1.MessageType.ContractDescriptorV1: {
1272
+ case messaging_1.ContractDescriptorType.NumericOutcome: {
977
1273
  const oracleInfo = contractInfo.oracleInfo;
978
- if (oracleInfo.announcement.oracleEvent.eventId !==
1274
+ if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo) {
1275
+ throw Error('Only SingleOracleInfo supported in this context');
1276
+ }
1277
+ const singleOracleInfo = oracleInfo;
1278
+ if (singleOracleInfo.announcement.oracleEvent.eventId !==
979
1279
  oracleAttestation.eventId)
980
1280
  throw Error('Incorrect Oracle Attestation. Event Id must match.');
981
1281
  break;
@@ -985,10 +1285,15 @@ Payout Group not found');
985
1285
  }
986
1286
  break;
987
1287
  }
988
- case messaging_1.MessageType.ContractInfoV1: {
1288
+ case messaging_1.ContractInfoType.Disjoint: {
989
1289
  const contractInfo = dlcOffer.contractInfo;
990
- const attestedOracleEvent = contractInfo.contractOraclePairs.find(({ oracleInfo }) => oracleInfo.announcement.oracleEvent.eventId ===
991
- oracleAttestation.eventId);
1290
+ const attestedOracleEvent = contractInfo.contractOraclePairs.find(({ oracleInfo }) => {
1291
+ if (oracleInfo.type !== messaging_1.MessageType.SingleOracleInfo)
1292
+ return false;
1293
+ const singleOracleInfo = oracleInfo;
1294
+ return (singleOracleInfo.announcement.oracleEvent.eventId ===
1295
+ oracleAttestation.eventId);
1296
+ });
992
1297
  if (!attestedOracleEvent)
993
1298
  throw Error('Oracle event of attestation not found.');
994
1299
  break;
@@ -997,35 +1302,29 @@ Payout Group not found');
997
1302
  throw Error('ContractInfo must be V0 or V1');
998
1303
  }
999
1304
  }
1000
- async FindAndSignCet(_dlcOffer, _dlcAccept, _dlcSign, _dlcTxs, oracleAttestation, isOfferer) {
1001
- const { dlcOffer, dlcAccept, dlcSign, dlcTxs } = (0, Utils_1.checkTypes)({
1002
- _dlcOffer,
1003
- _dlcAccept,
1004
- _dlcSign,
1005
- _dlcTxs,
1006
- });
1305
+ async FindAndSignCet(dlcOffer, dlcAccept, dlcSign, dlcTxs, oracleAttestation, isOfferer) {
1007
1306
  if (isOfferer === undefined)
1008
1307
  isOfferer = await this.isOfferer(dlcOffer, dlcAccept);
1009
1308
  const fundPrivateKey = await this.GetFundPrivateKey(dlcOffer, dlcAccept, isOfferer);
1010
1309
  let signCetRequest;
1011
- if (dlcOffer.contractInfo.type === messaging_1.MessageType.ContractInfoV0 &&
1012
- dlcOffer.contractInfo.contractDescriptor.type ===
1013
- messaging_1.MessageType.ContractDescriptorV0) {
1310
+ if (dlcOffer.contractInfo.contractInfoType === messaging_1.ContractInfoType.Single &&
1311
+ dlcOffer.contractInfo.contractDescriptor
1312
+ .contractDescriptorType === messaging_1.ContractDescriptorType.Enumerated) {
1014
1313
  const outcomeIndex = dlcOffer.contractInfo
1015
- .contractDescriptor.outcomes.findIndex((outcome) => outcome.outcome.toString('hex') ===
1314
+ .contractDescriptor.outcomes.findIndex((outcome) => outcome.outcome ===
1016
1315
  (0, crypto_1.sha256)(Buffer.from(oracleAttestation.outcomes[0])).toString('hex'));
1017
1316
  signCetRequest = {
1018
1317
  cetHex: dlcTxs.cets[outcomeIndex].serialize().toString('hex'),
1019
1318
  fundPrivkey: fundPrivateKey,
1020
1319
  fundTxId: dlcTxs.fundTx.txId.toString(),
1021
1320
  fundVout: dlcTxs.fundTxVout,
1022
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
1023
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
1321
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
1322
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1024
1323
  oracleSignatures: oracleAttestation.signatures.map((sig) => sig.toString('hex')),
1025
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1324
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1026
1325
  adaptorSignature: isOfferer
1027
- ? dlcAccept.cetSignatures.sigs[outcomeIndex].encryptedSig.toString('hex')
1028
- : dlcSign.cetSignatures.sigs[outcomeIndex].encryptedSig.toString('hex'),
1326
+ ? dlcAccept.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex')
1327
+ : dlcSign.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex'),
1029
1328
  };
1030
1329
  }
1031
1330
  else {
@@ -1039,13 +1338,13 @@ Payout Group not found');
1039
1338
  fundPrivkey: fundPrivateKey,
1040
1339
  fundTxId: dlcTxs.fundTx.txId.toString(),
1041
1340
  fundVout: dlcTxs.fundTxVout,
1042
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
1043
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
1341
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
1342
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1044
1343
  oracleSignatures: oracleSignatures.map((sig) => sig.toString('hex')),
1045
- fundInputAmount: dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats,
1344
+ fundInputAmount: this.getFundOutputValueSats(dlcTxs),
1046
1345
  adaptorSignature: isOfferer
1047
- ? dlcAccept.cetSignatures.sigs[outcomeIndex].encryptedSig.toString('hex')
1048
- : dlcSign.cetSignatures.sigs[outcomeIndex].encryptedSig.toString('hex'),
1346
+ ? dlcAccept.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex')
1347
+ : dlcSign.cetAdaptorSignatures.sigs[outcomeIndex].encryptedSig.toString('hex'),
1049
1348
  };
1050
1349
  }
1051
1350
  const finalCet = (await this.SignCet(signCetRequest)).hex;
@@ -1053,7 +1352,7 @@ Payout Group not found');
1053
1352
  }
1054
1353
  async GetFundAddress(dlcOffer, dlcAccept, isOfferer) {
1055
1354
  const network = await this.getConnectedNetwork();
1056
- const fundingSPK = bitcoin_1.Script.p2wpkhLock((0, crypto_1.hash160)(isOfferer ? dlcOffer.fundingPubKey : dlcAccept.fundingPubKey))
1355
+ const fundingSPK = bitcoin_1.Script.p2wpkhLock((0, crypto_1.hash160)(isOfferer ? dlcOffer.fundingPubkey : dlcAccept.fundingPubkey))
1057
1356
  .serialize()
1058
1357
  .slice(1);
1059
1358
  const fundingAddress = bitcoinjs_lib_1.address.fromOutputScript(fundingSPK, network);
@@ -1069,16 +1368,11 @@ Payout Group not found');
1069
1368
  const fundPrivateKeyPair = await this.GetFundKeyPair(dlcOffer, dlcAccept, isOfferer);
1070
1369
  return Buffer.from(fundPrivateKeyPair.privateKey).toString('hex');
1071
1370
  }
1072
- async CreateCloseRawTxs(_dlcOffer, _dlcAccept, _dlcTxs, closeInputAmount, isOfferer, _dlcCloses = [], fundingInputs, initiatorPayouts) {
1073
- const { dlcOffer, dlcAccept, dlcTxs } = (0, Utils_1.checkTypes)({
1074
- _dlcOffer,
1075
- _dlcAccept,
1076
- _dlcTxs,
1077
- });
1371
+ async CreateCloseRawTxs(dlcOffer, dlcAccept, dlcTxs, closeInputAmount, isOfferer, _dlcCloses = [], fundingInputs, initiatorPayouts) {
1078
1372
  const network = await this.getConnectedNetwork();
1079
1373
  let finalizer;
1080
1374
  if (_dlcCloses.length === 0) {
1081
- 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);
1082
1376
  }
1083
1377
  const rawTransactionRequestPromises = [];
1084
1378
  const rawCloseTxs = [];
@@ -1109,13 +1403,13 @@ Payout Group not found');
1109
1403
  const txOuts = [];
1110
1404
  if (Number(offerPayoutValue) > 0) {
1111
1405
  txOuts.push({
1112
- address: bitcoinjs_lib_1.address.fromOutputScript(dlcOffer.payoutSPK, network),
1406
+ address: bitcoinjs_lib_1.address.fromOutputScript(dlcOffer.payoutSpk, network),
1113
1407
  amount: Number(offerPayoutValue),
1114
1408
  });
1115
1409
  }
1116
1410
  if (Number(acceptPayoutValue) > 0) {
1117
1411
  txOuts.push({
1118
- address: bitcoinjs_lib_1.address.fromOutputScript(dlcAccept.payoutSPK, network),
1412
+ address: bitcoinjs_lib_1.address.fromOutputScript(dlcAccept.payoutSpk, network),
1119
1413
  amount: Number(acceptPayoutValue),
1120
1414
  });
1121
1415
  }
@@ -1149,9 +1443,9 @@ Payout Group not found');
1149
1443
  _dlcTxs,
1150
1444
  });
1151
1445
  const network = await this.getConnectedNetwork();
1152
- const fundingPubKeys = Buffer.compare(dlcOffer.fundingPubKey, dlcAccept.fundingPubKey) === -1
1153
- ? [dlcOffer.fundingPubKey, dlcAccept.fundingPubKey]
1154
- : [dlcAccept.fundingPubKey, dlcOffer.fundingPubKey];
1446
+ const fundingPubKeys = Buffer.compare(dlcOffer.fundingPubkey, dlcAccept.fundingPubkey) === -1
1447
+ ? [dlcOffer.fundingPubkey, dlcAccept.fundingPubkey]
1448
+ : [dlcAccept.fundingPubkey, dlcOffer.fundingPubkey];
1155
1449
  const p2ms = bitcoinjs_lib_1.payments.p2ms({
1156
1450
  m: 2,
1157
1451
  pubkeys: fundingPubKeys,
@@ -1174,7 +1468,7 @@ Payout Group not found');
1174
1468
  hex: paymentVariant.redeem.output.toString('hex'),
1175
1469
  type: 'redeem_script',
1176
1470
  },
1177
- amount: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
1471
+ amount: Number(this.getFundOutputValueSats(dlcTxs)),
1178
1472
  hashType: 'p2wsh',
1179
1473
  sighashType: 'all',
1180
1474
  sighashAnyoneCanPay: false,
@@ -1219,9 +1513,9 @@ Payout Group not found');
1219
1513
  });
1220
1514
  const dlcCloses = _dlcCloses.map((_dlcClose) => (0, Utils_1.checkTypes)({ _dlcClose }).dlcClose);
1221
1515
  const network = await this.getConnectedNetwork();
1222
- const fundingPubKeys = Buffer.compare(dlcOffer.fundingPubKey, dlcAccept.fundingPubKey) === -1
1223
- ? [dlcOffer.fundingPubKey, dlcAccept.fundingPubKey]
1224
- : [dlcAccept.fundingPubKey, dlcOffer.fundingPubKey];
1516
+ const fundingPubKeys = Buffer.compare(dlcOffer.fundingPubkey, dlcAccept.fundingPubkey) === -1
1517
+ ? [dlcOffer.fundingPubkey, dlcAccept.fundingPubkey]
1518
+ : [dlcAccept.fundingPubkey, dlcOffer.fundingPubkey];
1225
1519
  const p2ms = bitcoinjs_lib_1.payments.p2ms({
1226
1520
  m: 2,
1227
1521
  pubkeys: fundingPubKeys,
@@ -1231,7 +1525,7 @@ Payout Group not found');
1231
1525
  redeem: p2ms,
1232
1526
  network,
1233
1527
  });
1234
- const pubkey = isOfferer ? dlcAccept.fundingPubKey : dlcOffer.fundingPubKey;
1528
+ const pubkey = isOfferer ? dlcAccept.fundingPubkey : dlcOffer.fundingPubkey;
1235
1529
  const sigsValidity = [];
1236
1530
  for (let i = 0; i < rawCloseTxs.length; i++) {
1237
1531
  const rawTx = rawCloseTxs[i];
@@ -1247,7 +1541,7 @@ Payout Group not found');
1247
1541
  hashType: 'p2wsh',
1248
1542
  sighashType: 'all',
1249
1543
  sighashAnyoneCanPay: false,
1250
- amount: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
1544
+ amount: Number(this.getFundOutputValueSats(dlcTxs)),
1251
1545
  },
1252
1546
  };
1253
1547
  sigsValidity.push((async () => {
@@ -1270,10 +1564,10 @@ Payout Group not found');
1270
1564
  _dlcAccept,
1271
1565
  });
1272
1566
  const network = await this.getConnectedNetwork();
1273
- const offerFundingSPK = bitcoin_1.Script.p2wpkhLock((0, crypto_1.hash160)(dlcOffer.fundingPubKey))
1567
+ const offerFundingSPK = bitcoin_1.Script.p2wpkhLock((0, crypto_1.hash160)(dlcOffer.fundingPubkey))
1274
1568
  .serialize()
1275
1569
  .slice(1);
1276
- const acceptFundingSPK = bitcoin_1.Script.p2wpkhLock((0, crypto_1.hash160)(dlcAccept.fundingPubKey))
1570
+ const acceptFundingSPK = bitcoin_1.Script.p2wpkhLock((0, crypto_1.hash160)(dlcAccept.fundingPubkey))
1277
1571
  .serialize()
1278
1572
  .slice(1);
1279
1573
  const offerFundingAddress = bitcoinjs_lib_1.address.fromOutputScript(offerFundingSPK, network);
@@ -1297,14 +1591,50 @@ Payout Group not found');
1297
1591
  * @param feeRatePerVb Fee rate in satoshi per virtual byte that both sides use to compute fees in funding tx
1298
1592
  * @param cetLocktime The nLockTime to be put on CETs
1299
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
1300
1595
  * @returns {Promise<DlcOffer>}
1301
1596
  */
1302
- async createDlcOffer(contractInfo, offerCollateralSatoshis, feeRatePerVb, cetLocktime, refundLocktime, fixedInputs) {
1597
+ async createDlcOffer(contractInfo, offerCollateralSatoshis, feeRatePerVb, cetLocktime, refundLocktime, fixedInputs, inputSupplementationMode) {
1303
1598
  contractInfo.validate();
1304
1599
  const network = await this.getConnectedNetwork();
1305
- const dlcOffer = new messaging_1.DlcOfferV0();
1306
- const { fundingPubKey, payoutSPK, payoutSerialId, fundingInputs: _fundingInputs, changeSPK, changeSerialId, } = await this.Initialize(offerCollateralSatoshis, feeRatePerVb, fixedInputs);
1307
- _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInputV0, 'FundingInput must be V0'));
1600
+ const dlcOffer = new messaging_1.DlcOffer();
1601
+ // Generate a random 32-byte temporary contract ID
1602
+ dlcOffer.temporaryContractId = crypto_2.default.randomBytes(32);
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
+ }
1637
+ _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0'));
1308
1638
  const fundingInputs = _fundingInputs.map((input) => input);
1309
1639
  fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
1310
1640
  const fundOutputSerialId = (0, Utils_1.generateSerialId)();
@@ -1312,19 +1642,23 @@ Payout Group not found');
1312
1642
  dlcOffer.contractFlags = Buffer.from('00', 'hex');
1313
1643
  dlcOffer.chainHash = (0, bitcoin_networks_1.chainHashFromNetwork)(network);
1314
1644
  dlcOffer.contractInfo = contractInfo;
1315
- dlcOffer.fundingPubKey = fundingPubKey;
1316
- dlcOffer.payoutSPK = payoutSPK;
1645
+ dlcOffer.fundingPubkey = fundingPubKey;
1646
+ dlcOffer.payoutSpk = payoutSPK;
1317
1647
  dlcOffer.payoutSerialId = payoutSerialId;
1318
- dlcOffer.offerCollateralSatoshis = offerCollateralSatoshis;
1648
+ dlcOffer.offerCollateral = offerCollateralSatoshis;
1319
1649
  dlcOffer.fundingInputs = fundingInputs;
1320
- dlcOffer.changeSPK = changeSPK;
1650
+ dlcOffer.changeSpk = changeSPK;
1321
1651
  dlcOffer.changeSerialId = changeSerialId;
1322
- dlcOffer.fundOutputSerialId = dlcOffer.fundOutputSerialId = fundOutputSerialId;
1652
+ dlcOffer.fundOutputSerialId = dlcOffer.fundOutputSerialId =
1653
+ fundOutputSerialId;
1323
1654
  dlcOffer.feeRatePerVb = feeRatePerVb;
1324
1655
  dlcOffer.cetLocktime = cetLocktime;
1325
1656
  dlcOffer.refundLocktime = refundLocktime;
1657
+ if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
1658
+ dlcOffer.markAsSingleFunded();
1659
+ }
1326
1660
  (0, assert_1.default)((() => {
1327
- 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);
1328
1662
  const funding = fundingInputs.reduce((total, input) => {
1329
1663
  return total + input.prevTx.outputs[input.prevTxVout].value.sats;
1330
1664
  }, BigInt(0));
@@ -1344,7 +1678,7 @@ Payout Group not found');
1344
1678
  }
1345
1679
  const network = await this.getConnectedNetwork();
1346
1680
  const { fundingInputs: _fundingInputs, changeSPK, changeSerialId, initializeResponses, } = await this.BatchInitialize(offerCollaterals, feeRatePerVb, fixedInputs);
1347
- _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInputV0, 'FundingInput must be V0'));
1681
+ _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0'));
1348
1682
  const fundingInputs = _fundingInputs.map((input) => input);
1349
1683
  fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
1350
1684
  const fundOutputsSerialIds = (0, Utils_1.generateSerialIds)(contractInfos.length);
@@ -1354,23 +1688,28 @@ Payout Group not found');
1354
1688
  const fundOutputSerialId = fundOutputsSerialIds[i];
1355
1689
  const { fundingPubKey, payoutSPK, payoutSerialId } = initializeResponses[i];
1356
1690
  const refundLocktime = refundLocktimes[i];
1357
- const dlcOffer = new messaging_1.DlcOfferV0();
1691
+ const dlcOffer = new messaging_1.DlcOffer();
1692
+ // Generate a random 32-byte temporary contract ID
1693
+ dlcOffer.temporaryContractId = crypto_2.default.randomBytes(32);
1358
1694
  dlcOffer.contractFlags = Buffer.from('00', 'hex');
1359
1695
  dlcOffer.chainHash = (0, bitcoin_networks_1.chainHashFromNetwork)(network);
1360
1696
  dlcOffer.contractInfo = contractInfo;
1361
- dlcOffer.fundingPubKey = fundingPubKey;
1362
- dlcOffer.payoutSPK = payoutSPK;
1697
+ dlcOffer.fundingPubkey = fundingPubKey;
1698
+ dlcOffer.payoutSpk = payoutSPK;
1363
1699
  dlcOffer.payoutSerialId = payoutSerialId;
1364
- dlcOffer.offerCollateralSatoshis = offerCollateralSatoshis;
1700
+ dlcOffer.offerCollateral = offerCollateralSatoshis;
1365
1701
  dlcOffer.fundingInputs = fundingInputs;
1366
- dlcOffer.changeSPK = changeSPK;
1702
+ dlcOffer.changeSpk = changeSPK;
1367
1703
  dlcOffer.changeSerialId = changeSerialId;
1368
1704
  dlcOffer.fundOutputSerialId = fundOutputSerialId;
1369
1705
  dlcOffer.feeRatePerVb = feeRatePerVb;
1370
1706
  dlcOffer.cetLocktime = cetLocktime;
1371
1707
  dlcOffer.refundLocktime = refundLocktime;
1708
+ if (offerCollateralSatoshis === dlcOffer.contractInfo.totalCollateral) {
1709
+ dlcOffer.markAsSingleFunded();
1710
+ }
1372
1711
  (0, assert_1.default)((() => {
1373
- 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);
1374
1713
  const funding = fundingInputs.reduce((total, input) => {
1375
1714
  return total + input.prevTx.outputs[input.prevTxVout].value.sats;
1376
1715
  }, BigInt(0));
@@ -1382,7 +1721,7 @@ Payout Group not found');
1382
1721
  return dlcOffers;
1383
1722
  }
1384
1723
  /**
1385
- * Accept DLC Offer
1724
+ * Accept DLC Offer (supports single-funded DLCs when accept collateral is 0)
1386
1725
  * @param _dlcOffer Dlc Offer Message
1387
1726
  * @param fixedInputs Optional inputs to use for Funding Inputs
1388
1727
  * @returns {Promise<AcceptDlcOfferResponse}
@@ -1390,23 +1729,92 @@ Payout Group not found');
1390
1729
  async acceptDlcOffer(_dlcOffer, fixedInputs) {
1391
1730
  const { dlcOffer } = (0, Utils_1.checkTypes)({ _dlcOffer });
1392
1731
  dlcOffer.validate();
1393
- const acceptCollateralSatoshis = dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateralSatoshis;
1732
+ const acceptCollateralSatoshis = dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateral;
1394
1733
  (0, assert_1.default)(acceptCollateralSatoshis ===
1395
- dlcOffer.contractInfo.totalCollateral -
1396
- dlcOffer.offerCollateralSatoshis, 'acceptCollaterialSatoshis should equal totalCollateral - offerCollateralSatoshis');
1397
- const { fundingPubKey, payoutSPK, payoutSerialId, fundingInputs: _fundingInputs, changeSPK, changeSerialId, } = await this.Initialize(acceptCollateralSatoshis, dlcOffer.feeRatePerVb, fixedInputs);
1398
- (0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubKey, fundingPubKey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
1399
- _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInputV0, 'FundingInput must be V0'));
1400
- const fundingInputs = _fundingInputs.map((input) => input);
1401
- fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
1402
- const dlcAccept = new messaging_1.DlcAcceptV0();
1403
- dlcAccept.tempContractId = (0, crypto_1.sha256)(dlcOffer.serialize());
1404
- dlcAccept.acceptCollateralSatoshis = acceptCollateralSatoshis;
1405
- dlcAccept.fundingPubKey = fundingPubKey;
1406
- dlcAccept.payoutSPK = payoutSPK;
1734
+ dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateral, 'acceptCollaterialSatoshis should equal totalCollateral - offerCollateralSatoshis');
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
+ }
1809
+ (0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubkey, fundingPubKey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
1810
+ const dlcAccept = new messaging_1.DlcAccept();
1811
+ dlcAccept.temporaryContractId = (0, crypto_1.sha256)(dlcOffer.serialize());
1812
+ dlcAccept.acceptCollateral = acceptCollateralSatoshis;
1813
+ dlcAccept.fundingPubkey = fundingPubKey;
1814
+ dlcAccept.payoutSpk = payoutSPK;
1407
1815
  dlcAccept.payoutSerialId = dlcAccept.payoutSerialId = payoutSerialId;
1408
1816
  dlcAccept.fundingInputs = fundingInputs;
1409
- dlcAccept.changeSPK = changeSPK;
1817
+ dlcAccept.changeSpk = changeSPK;
1410
1818
  dlcAccept.changeSerialId = dlcAccept.changeSerialId = changeSerialId;
1411
1819
  (0, assert_1.default)(dlcAccept.changeSerialId !== dlcOffer.fundOutputSerialId, 'changeSerialId cannot equal the fundOutputSerialId');
1412
1820
  (0, assert_1.default)(dlcOffer.payoutSerialId !== dlcAccept.payoutSerialId, 'offer.payoutSerialId cannot equal accept.payoutSerialId');
@@ -1418,23 +1826,26 @@ Payout Group not found');
1418
1826
  ];
1419
1827
  return new Set(ids).size === ids.length;
1420
1828
  })(), 'offer.changeSerialID, accept.changeSerialId and fundOutputSerialId must be unique');
1829
+ if (dlcOffer.singleFunded)
1830
+ dlcAccept.markAsSingleFunded();
1421
1831
  dlcAccept.validate();
1422
- (0, assert_1.default)((() => {
1423
- const finalizer = new core_1.DualFundingTxFinalizer(dlcOffer.fundingInputs, dlcOffer.payoutSPK, dlcOffer.changeSPK, dlcAccept.fundingInputs, dlcAccept.payoutSPK, dlcAccept.changeSPK, dlcOffer.feeRatePerVb);
1424
- const funding = fundingInputs.reduce((total, input) => {
1425
- return total + input.prevTx.outputs[input.prevTxVout].value.sats;
1426
- }, BigInt(0));
1427
- return funding >= acceptCollateralSatoshis + finalizer.acceptFees;
1428
- })(), '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
+ }
1429
1842
  const { dlcTransactions, messagesList } = await this.createDlcTxs(dlcOffer, dlcAccept);
1430
- const { cetSignatures, refundSignature, } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, false);
1431
- (0, assert_1.default)(dlcTransactions.type === messaging_1.MessageType.DlcTransactionsV0, 'DlcTransactions must be V0');
1843
+ const { cetSignatures, refundSignature } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, false);
1432
1844
  const _dlcTransactions = dlcTransactions;
1433
- const contractId = (0, crypto_1.xor)(_dlcTransactions.fundTx.txId.serialize(), dlcAccept.tempContractId);
1845
+ const contractId = (0, crypto_1.xor)(_dlcTransactions.fundTx.txId.serialize(), dlcAccept.temporaryContractId);
1434
1846
  _dlcTransactions.contractId = contractId;
1435
- dlcAccept.cetSignatures = cetSignatures;
1847
+ dlcAccept.cetAdaptorSignatures = cetSignatures;
1436
1848
  dlcAccept.refundSignature = refundSignature;
1437
- dlcAccept.negotiationFields = new messaging_1.NegotiationFieldsV0();
1438
1849
  return { dlcAccept, dlcTransactions: _dlcTransactions };
1439
1850
  }
1440
1851
  async batchAcceptDlcOffer(_dlcOffers, fixedInputs) {
@@ -1443,31 +1854,30 @@ Payout Group not found');
1443
1854
  dlcOffer.validate();
1444
1855
  return dlcOffer;
1445
1856
  });
1446
- const acceptCollaterals = dlcOffers.map((dlcOffer) => dlcOffer.contractInfo.totalCollateral -
1447
- dlcOffer.offerCollateralSatoshis);
1857
+ const acceptCollaterals = dlcOffers.map((dlcOffer) => dlcOffer.contractInfo.totalCollateral - dlcOffer.offerCollateral);
1448
1858
  const { fundingInputs: _fundingInputs, changeSPK, changeSerialId, initializeResponses, } = await this.BatchInitialize(acceptCollaterals, dlcOffers[0].feeRatePerVb, fixedInputs);
1449
1859
  // Check that none of the funding pubkeys are the same between the
1450
1860
  // dlcOffers and the dlcAccepts (from initializeResponses)
1451
1861
  dlcOffers.forEach((dlcOffer) => {
1452
1862
  initializeResponses.forEach((initializeResponse) => {
1453
- (0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubKey, initializeResponse.fundingPubKey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
1863
+ (0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubkey, initializeResponse.fundingPubKey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
1454
1864
  });
1455
1865
  });
1456
- _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInputV0, 'FundingInput must be V0'));
1866
+ _fundingInputs.forEach((input) => (0, assert_1.default)(input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0'));
1457
1867
  const fundingInputs = _fundingInputs.map((input) => input);
1458
1868
  fundingInputs.sort((a, b) => Number(a.inputSerialId) - Number(b.inputSerialId));
1459
1869
  const dlcAccepts = [];
1460
1870
  initializeResponses.forEach((initializeResponse, i) => {
1461
1871
  const dlcOffer = dlcOffers[i];
1462
- const dlcAccept = new messaging_1.DlcAcceptV0();
1872
+ const dlcAccept = new messaging_1.DlcAccept();
1463
1873
  const { fundingPubKey, payoutSPK, payoutSerialId } = initializeResponse;
1464
- dlcAccept.tempContractId = (0, crypto_1.sha256)(dlcOffers[i].serialize());
1465
- dlcAccept.acceptCollateralSatoshis = acceptCollaterals[i];
1466
- dlcAccept.fundingPubKey = fundingPubKey;
1467
- dlcAccept.payoutSPK = payoutSPK;
1874
+ dlcAccept.temporaryContractId = (0, crypto_1.sha256)(dlcOffers[i].serialize());
1875
+ dlcAccept.acceptCollateral = acceptCollaterals[i];
1876
+ dlcAccept.fundingPubkey = fundingPubKey;
1877
+ dlcAccept.payoutSpk = payoutSPK;
1468
1878
  dlcAccept.payoutSerialId = payoutSerialId;
1469
1879
  dlcAccept.fundingInputs = fundingInputs;
1470
- dlcAccept.changeSPK = changeSPK;
1880
+ dlcAccept.changeSpk = changeSPK;
1471
1881
  dlcAccept.changeSerialId = changeSerialId;
1472
1882
  (0, assert_1.default)(dlcAccept.changeSerialId !== dlcOffer.fundOutputSerialId, 'changeSerialId cannot equal the fundOutputSerialId');
1473
1883
  (0, assert_1.default)(dlcOffer.payoutSerialId !== dlcAccept.payoutSerialId, 'offer.payoutSerialId cannot equal accept.payoutSerialId');
@@ -1481,7 +1891,7 @@ Payout Group not found');
1481
1891
  })(), 'offer.changeSerialID, accept.changeSerialId and fundOutputSerialId must be unique');
1482
1892
  dlcAccept.validate();
1483
1893
  (0, assert_1.default)((() => {
1484
- 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);
1485
1895
  const funding = fundingInputs.reduce((total, input) => {
1486
1896
  return total + input.prevTx.outputs[input.prevTxVout].value.sats;
1487
1897
  }, BigInt(0));
@@ -1489,20 +1899,18 @@ Payout Group not found');
1489
1899
  })(), 'fundingInputs for dlcAccept must be greater than acceptCollateralSatoshis plus acceptFees');
1490
1900
  dlcAccepts.push(dlcAccept);
1491
1901
  });
1492
- const { dlcTransactionsList, nestedMessagesList, } = await this.createBatchDlcTxs(dlcOffers, dlcAccepts);
1902
+ const { dlcTransactionsList, nestedMessagesList } = await this.createBatchDlcTxs(dlcOffers, dlcAccepts);
1493
1903
  for (let i = 0; i < dlcAccepts.length; i++) {
1494
1904
  const dlcOffer = dlcOffers[i];
1495
1905
  const dlcAccept = dlcAccepts[i];
1496
1906
  const dlcTransactions = dlcTransactionsList[i];
1497
1907
  const messagesList = nestedMessagesList[i];
1498
- const { cetSignatures, refundSignature, } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, false);
1499
- (0, assert_1.default)(dlcTransactions.type === messaging_1.MessageType.DlcTransactionsV0, 'DlcTransactions must be V0');
1908
+ const { cetSignatures, refundSignature } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, false);
1500
1909
  const _dlcTransactions = dlcTransactions;
1501
- const contractId = (0, crypto_1.xor)(_dlcTransactions.fundTx.txId.serialize(), dlcAccept.tempContractId);
1910
+ const contractId = (0, crypto_1.xor)(_dlcTransactions.fundTx.txId.serialize(), dlcAccept.temporaryContractId);
1502
1911
  _dlcTransactions.contractId = contractId;
1503
- dlcAccepts[i].cetSignatures = cetSignatures;
1912
+ dlcAccepts[i].cetAdaptorSignatures = cetSignatures;
1504
1913
  dlcAccepts[i].refundSignature = refundSignature;
1505
- dlcAccepts[i].negotiationFields = new messaging_1.NegotiationFieldsV0();
1506
1914
  }
1507
1915
  return { dlcAccepts, dlcTransactionsList };
1508
1916
  }
@@ -1512,25 +1920,21 @@ Payout Group not found');
1512
1920
  * @param _dlcAccept Dlc Accept Message
1513
1921
  * @returns {Promise<SignDlcAcceptResponse}
1514
1922
  */
1515
- async signDlcAccept(_dlcOffer, _dlcAccept) {
1516
- const { dlcOffer, dlcAccept } = (0, Utils_1.checkTypes)({
1517
- _dlcOffer,
1518
- _dlcAccept,
1519
- });
1923
+ async signDlcAccept(dlcOffer, dlcAccept) {
1520
1924
  dlcOffer.validate();
1521
1925
  dlcAccept.validate();
1522
- (0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubKey, dlcAccept.fundingPubKey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
1523
- const dlcSign = new messaging_1.DlcSignV0();
1926
+ (0, assert_1.default)(Buffer.compare(dlcOffer.fundingPubkey, dlcAccept.fundingPubkey) !== 0, 'DlcOffer and DlcAccept FundingPubKey cannot be the same');
1927
+ const dlcSign = new messaging_1.DlcSign();
1524
1928
  const { dlcTransactions, messagesList } = await this.createDlcTxs(dlcOffer, dlcAccept);
1525
1929
  await this.VerifyCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcSign, dlcTransactions, messagesList, true);
1526
- const { cetSignatures, refundSignature, } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, true);
1930
+ const { cetSignatures, refundSignature } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, true);
1527
1931
  const fundingSignatures = await this.CreateFundingSigs(dlcOffer, dlcAccept, dlcTransactions, true);
1528
1932
  const dlcTxs = dlcTransactions;
1529
- const contractId = (0, crypto_1.xor)(dlcTxs.fundTx.txId.serialize(), dlcAccept.tempContractId);
1530
- (0, assert_1.default)(Buffer.compare(contractId, (0, crypto_1.xor)(dlcTxs.fundTx.txId.serialize(), dlcAccept.tempContractId)) === 0, 'contractId must be the xor of funding txid, fundingOutputIndex and the tempContractId');
1933
+ const contractId = (0, crypto_1.xor)(dlcTxs.fundTx.txId.serialize(), dlcAccept.temporaryContractId);
1934
+ (0, assert_1.default)(Buffer.compare(contractId, (0, crypto_1.xor)(dlcTxs.fundTx.txId.serialize(), dlcAccept.temporaryContractId)) === 0, 'contractId must be the xor of funding txid, fundingOutputIndex and the tempContractId');
1531
1935
  dlcTxs.contractId = contractId;
1532
1936
  dlcSign.contractId = contractId;
1533
- dlcSign.cetSignatures = cetSignatures;
1937
+ dlcSign.cetAdaptorSignatures = cetSignatures;
1534
1938
  dlcSign.refundSignature = refundSignature;
1535
1939
  dlcSign.fundingSignatures = fundingSignatures;
1536
1940
  return { dlcSign, dlcTransactions: dlcTxs };
@@ -1546,7 +1950,7 @@ Payout Group not found');
1546
1950
  dlcAccept.validate();
1547
1951
  return dlcAccept;
1548
1952
  });
1549
- const { dlcTransactionsList, nestedMessagesList, } = await this.createBatchDlcTxs(dlcOffers, dlcAccepts);
1953
+ const { dlcTransactionsList, nestedMessagesList } = await this.createBatchDlcTxs(dlcOffers, dlcAccepts);
1550
1954
  const dlcSigns = [];
1551
1955
  const fundingSignatures = await this.CreateFundingSigs(dlcOffers[0], dlcAccepts[0], dlcTransactionsList[0], true);
1552
1956
  for (let i = 0; i < dlcAccepts.length; i++) {
@@ -1554,14 +1958,14 @@ Payout Group not found');
1554
1958
  const dlcAccept = dlcAccepts[i];
1555
1959
  const dlcTransactions = dlcTransactionsList[i];
1556
1960
  const messagesList = nestedMessagesList[i];
1557
- const dlcSign = new messaging_1.DlcSignV0();
1961
+ const dlcSign = new messaging_1.DlcSign();
1558
1962
  await this.VerifyCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcSign, dlcTransactions, messagesList, true);
1559
- const { cetSignatures, refundSignature, } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, true);
1963
+ const { cetSignatures, refundSignature } = await this.CreateCetAdaptorAndRefundSigs(dlcOffer, dlcAccept, dlcTransactions, messagesList, true);
1560
1964
  const dlcTxs = dlcTransactions;
1561
- const contractId = (0, crypto_1.xor)(dlcTxs.fundTx.txId.serialize(), dlcAccept.tempContractId);
1965
+ const contractId = (0, crypto_1.xor)(dlcTxs.fundTx.txId.serialize(), dlcAccept.temporaryContractId);
1562
1966
  dlcTxs.contractId = contractId;
1563
1967
  dlcSign.contractId = contractId;
1564
- dlcSign.cetSignatures = cetSignatures;
1968
+ dlcSign.cetAdaptorSignatures = cetSignatures;
1565
1969
  dlcSign.refundSignature = refundSignature;
1566
1970
  dlcSign.fundingSignatures = fundingSignatures;
1567
1971
  dlcSigns.push(dlcSign);
@@ -1570,26 +1974,20 @@ Payout Group not found');
1570
1974
  }
1571
1975
  /**
1572
1976
  * Finalize Dlc Sign
1573
- * @param _dlcOffer Dlc Offer Message
1574
- * @param _dlcAccept Dlc Accept Message
1575
- * @param _dlcSign Dlc Sign Message
1576
- * @param _dlcTxs Dlc Transactions Message
1977
+ * @param dlcOffer Dlc Offer Message
1978
+ * @param dlcAccept Dlc Accept Message
1979
+ * @param dlcSign Dlc Sign Message
1980
+ * @param dlcTxs Dlc Transactions Message
1577
1981
  * @returns {Promise<Tx>}
1578
1982
  */
1579
- async finalizeDlcSign(_dlcOffer, _dlcAccept, _dlcSign, _dlcTxs) {
1580
- const { dlcOffer, dlcAccept, dlcSign, dlcTxs } = (0, Utils_1.checkTypes)({
1581
- _dlcOffer,
1582
- _dlcAccept,
1583
- _dlcSign,
1584
- _dlcTxs,
1585
- });
1983
+ async finalizeDlcSign(dlcOffer, dlcAccept, dlcSign, dlcTxs) {
1586
1984
  let messagesList = [];
1587
- if (dlcOffer.contractInfo.type === messaging_1.MessageType.ContractInfoV0 &&
1985
+ if (dlcOffer.contractInfo.type === messaging_1.MessageType.SingleContractInfo &&
1588
1986
  dlcOffer.contractInfo.contractDescriptor.type ===
1589
- messaging_1.MessageType.ContractDescriptorV0) {
1987
+ messaging_1.MessageType.SingleContractInfo) {
1590
1988
  for (const outcome of dlcOffer.contractInfo
1591
1989
  .contractDescriptor.outcomes) {
1592
- messagesList.push({ messages: [outcome.outcome.toString('hex')] });
1990
+ messagesList.push({ messages: [outcome.outcome] });
1593
1991
  }
1594
1992
  }
1595
1993
  else {
@@ -1646,13 +2044,7 @@ Payout Group not found');
1646
2044
  * @param isOfferer Whether party is Dlc Offerer
1647
2045
  * @returns {Promise<Tx>}
1648
2046
  */
1649
- async execute(_dlcOffer, _dlcAccept, _dlcSign, _dlcTxs, oracleAttestation, isOfferer) {
1650
- const { dlcOffer, dlcAccept, dlcSign, dlcTxs } = (0, Utils_1.checkTypes)({
1651
- _dlcOffer,
1652
- _dlcAccept,
1653
- _dlcSign,
1654
- _dlcTxs,
1655
- });
2047
+ async execute(dlcOffer, dlcAccept, dlcSign, dlcTxs, oracleAttestation, isOfferer) {
1656
2048
  if (isOfferer === undefined)
1657
2049
  isOfferer = await this.isOfferer(dlcOffer, dlcAccept);
1658
2050
  this.ValidateEvent(dlcOffer, oracleAttestation);
@@ -1673,7 +2065,7 @@ Payout Group not found');
1673
2065
  _dlcSign,
1674
2066
  _dlcTxs,
1675
2067
  });
1676
- const signatures = Buffer.compare(dlcOffer.fundingPubKey, dlcAccept.fundingPubKey) === -1
2068
+ const signatures = Buffer.compare(dlcOffer.fundingPubkey, dlcAccept.fundingPubkey) === -1
1677
2069
  ? [
1678
2070
  dlcSign.refundSignature.toString('hex'),
1679
2071
  dlcAccept.refundSignature.toString('hex'),
@@ -1687,8 +2079,8 @@ Payout Group not found');
1687
2079
  signatures,
1688
2080
  fundTxId: dlcTxs.fundTx.txId.toString(),
1689
2081
  fundVout: dlcTxs.fundTxVout,
1690
- localFundPubkey: dlcOffer.fundingPubKey.toString('hex'),
1691
- remoteFundPubkey: dlcAccept.fundingPubKey.toString('hex'),
2082
+ localFundPubkey: dlcOffer.fundingPubkey.toString('hex'),
2083
+ remoteFundPubkey: dlcAccept.fundingPubkey.toString('hex'),
1692
2084
  };
1693
2085
  const refundHex = (await this.AddSignaturesToRefundTx(addSigsToRefundTxRequest)).hex;
1694
2086
  return bitcoin_1.Tx.decode(bufio_1.StreamReader.fromHex(refundHex));
@@ -1719,9 +2111,9 @@ Payout Group not found');
1719
2111
  isOfferer = await this.isOfferer(dlcOffer, dlcAccept);
1720
2112
  const network = await this.getConnectedNetwork();
1721
2113
  const psbt = new bitcoinjs_lib_1.Psbt({ network });
1722
- const fundingPubKeys = Buffer.compare(dlcOffer.fundingPubKey, dlcAccept.fundingPubKey) === -1
1723
- ? [dlcOffer.fundingPubKey, dlcAccept.fundingPubKey]
1724
- : [dlcAccept.fundingPubKey, dlcOffer.fundingPubKey];
2114
+ const fundingPubKeys = Buffer.compare(dlcOffer.fundingPubkey, dlcAccept.fundingPubkey) === -1
2115
+ ? [dlcOffer.fundingPubkey, dlcAccept.fundingPubkey]
2116
+ : [dlcAccept.fundingPubkey, dlcOffer.fundingPubkey];
1725
2117
  const p2ms = bitcoinjs_lib_1.payments.p2ms({
1726
2118
  m: 2,
1727
2119
  pubkeys: fundingPubKeys,
@@ -1734,20 +2126,18 @@ Payout Group not found');
1734
2126
  // Initiate and build PSBT
1735
2127
  let inputs = _inputs;
1736
2128
  if (!_inputs) {
1737
- 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);
1738
2130
  _inputs = tempInputs;
1739
2131
  }
1740
- inputs = _inputs.map((input) => {
1741
- return {
1742
- ...input,
1743
- inputSerialId: input.inputSerialId || (0, Utils_1.generateSerialId)(),
1744
- toUtxo: input.toUtxo,
1745
- };
1746
- });
1747
- 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) => {
1748
2134
  const address = await this.getMethod('getWalletAddress')(input.address);
1749
- 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 };
1750
2138
  }));
2139
+ inputs = inputsWithPaths.map((item) => item.input);
2140
+ const pubkeys = inputsWithPaths.map((item) => Buffer.from(item.address.publicKey, 'hex'));
1751
2141
  const fundingInputSerialId = (0, Utils_1.generateSerialId)();
1752
2142
  // Make temporary array to hold all inputs and then sort them
1753
2143
  // this method can be improved later
@@ -1758,7 +2148,7 @@ Payout Group not found');
1758
2148
  sequence: 0,
1759
2149
  witnessUtxo: {
1760
2150
  script: paymentVariant.output,
1761
- value: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
2151
+ value: Number(this.getFundOutputValueSats(dlcTxs)),
1762
2152
  },
1763
2153
  witnessScript: paymentVariant.redeem.output,
1764
2154
  inputSerialId: fundingInputSerialId,
@@ -1787,11 +2177,11 @@ Payout Group not found');
1787
2177
  // Get index of fundingInput
1788
2178
  const fundingInputIndex = sortedPsbtInputs.findIndex((input) => input.inputSerialId === fundingInputSerialId);
1789
2179
  // add to psbt
1790
- sortedPsbtInputs.forEach((input, i) => psbt.addInput(input));
2180
+ sortedPsbtInputs.forEach((input) => psbt.addInput(input));
1791
2181
  const fundingInputs = await Promise.all(inputs.map(async (input) => {
1792
2182
  return this.inputToFundingInput(input);
1793
2183
  }));
1794
- 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);
1795
2185
  const closeInputAmount = BigInt(inputs.reduce((acc, val) => acc + val.value, 0));
1796
2186
  const offerPayoutValue = isOfferer
1797
2187
  ? closeInputAmount +
@@ -1806,11 +2196,11 @@ Payout Group not found');
1806
2196
  const offerFirst = dlcOffer.payoutSerialId < dlcAccept.payoutSerialId;
1807
2197
  psbt.addOutput({
1808
2198
  value: Number(offerFirst ? offerPayoutValue : acceptPayoutValue),
1809
- address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcOffer.payoutSPK : dlcAccept.payoutSPK, network),
2199
+ address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcOffer.payoutSpk : dlcAccept.payoutSpk, network),
1810
2200
  });
1811
2201
  psbt.addOutput({
1812
2202
  value: Number(offerFirst ? acceptPayoutValue : offerPayoutValue),
1813
- address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcAccept.payoutSPK : dlcOffer.payoutSPK, network),
2203
+ address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcAccept.payoutSpk : dlcOffer.payoutSpk, network),
1814
2204
  });
1815
2205
  // Generate keypair to sign inputs
1816
2206
  const fundPrivateKeyPair = await this.GetFundKeyPair(dlcOffer, dlcAccept, isOfferer);
@@ -1821,6 +2211,9 @@ Payout Group not found');
1821
2211
  if (i === fundingInputIndex)
1822
2212
  return;
1823
2213
  // derive keypair
2214
+ if (!input.derivationPath) {
2215
+ throw new Error(`Missing derivation path for input ${i}`);
2216
+ }
1824
2217
  const keyPair = await this.getMethod('keyPair')(input.derivationPath);
1825
2218
  psbt.signInput(i, keyPair);
1826
2219
  }));
@@ -1843,10 +2236,10 @@ Payout Group not found');
1843
2236
  pubKeyWitness.witness = inputSigs[i].pubkey;
1844
2237
  witnessElements.push([sigWitness, pubKeyWitness]);
1845
2238
  }
1846
- const fundingSignatures = new messaging_1.FundingSignaturesV0();
2239
+ const fundingSignatures = new messaging_1.FundingSignatures();
1847
2240
  fundingSignatures.witnessElements = witnessElements;
1848
2241
  // Create DlcClose
1849
- const dlcClose = new messaging_1.DlcCloseV0();
2242
+ const dlcClose = new messaging_1.DlcClose();
1850
2243
  dlcClose.contractId = dlcTxs.contractId;
1851
2244
  dlcClose.offerPayoutSatoshis = BigInt(psbt.txOutputs[offerFirst ? 0 : 1].value); // You give collateral back to users
1852
2245
  dlcClose.acceptPayoutSatoshis = BigInt(psbt.txOutputs[offerFirst ? 1 : 0].value); // give collateral back to users
@@ -1879,7 +2272,7 @@ Payout Group not found');
1879
2272
  throw Error('funding inputs not supported on BatchDlcClose'); // TODO support multiple funding inputs
1880
2273
  const fundingInputSerialId = (0, Utils_1.generateSerialId)();
1881
2274
  const fundingInputs = []; // TODO: support multiple funding inputs
1882
- 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);
1883
2276
  // Generate keypair to sign inputs
1884
2277
  const fundPrivateKeyPair = await this.GetFundKeyPair(dlcOffer, dlcAccept, isOfferer);
1885
2278
  const closeInputAmount = BigInt(0); // TODO support multiple funding inputs
@@ -1902,8 +2295,8 @@ Payout Group not found');
1902
2295
  const acceptPayoutValue = isOfferer
1903
2296
  ? collateralMinusPayout
1904
2297
  : closeInputAmount + payoutMinusOfferFees;
1905
- const fundingSignatures = new messaging_1.FundingSignaturesV0();
1906
- const dlcClose = new messaging_1.DlcCloseV0();
2298
+ const fundingSignatures = new messaging_1.FundingSignatures();
2299
+ const dlcClose = new messaging_1.DlcClose();
1907
2300
  dlcClose.contractId = dlcTxs.contractId;
1908
2301
  dlcClose.offerPayoutSatoshis = offerPayoutValue;
1909
2302
  dlcClose.acceptPayoutSatoshis = acceptPayoutValue;
@@ -1970,9 +2363,9 @@ Payout Group not found');
1970
2363
  dlcClose.validate();
1971
2364
  const network = await this.getConnectedNetwork();
1972
2365
  const psbt = new bitcoinjs_lib_1.Psbt({ network });
1973
- const fundingPubKeys = Buffer.compare(dlcOffer.fundingPubKey, dlcAccept.fundingPubKey) === -1
1974
- ? [dlcOffer.fundingPubKey, dlcAccept.fundingPubKey]
1975
- : [dlcAccept.fundingPubKey, dlcOffer.fundingPubKey];
2366
+ const fundingPubKeys = Buffer.compare(dlcOffer.fundingPubkey, dlcAccept.fundingPubkey) === -1
2367
+ ? [dlcOffer.fundingPubkey, dlcAccept.fundingPubkey]
2368
+ : [dlcAccept.fundingPubkey, dlcOffer.fundingPubkey];
1976
2369
  const p2ms = bitcoinjs_lib_1.payments.p2ms({
1977
2370
  m: 2,
1978
2371
  pubkeys: fundingPubKeys,
@@ -1991,13 +2384,13 @@ Payout Group not found');
1991
2384
  sequence: 0,
1992
2385
  witnessUtxo: {
1993
2386
  script: paymentVariant.output,
1994
- value: Number(dlcTxs.fundTx.outputs[dlcTxs.fundTxVout].value.sats),
2387
+ value: Number(this.getFundOutputValueSats(dlcTxs)),
1995
2388
  },
1996
2389
  witnessScript: paymentVariant.redeem.output,
1997
2390
  inputSerialId: dlcClose.fundInputSerialId,
1998
2391
  });
1999
2392
  // add all dlc close inputs
2000
- dlcClose.fundingInputs.forEach((input, i) => {
2393
+ dlcClose.fundingInputs.forEach((input) => {
2001
2394
  psbtInputs.push({
2002
2395
  hash: input.prevTx.txId.serialize(),
2003
2396
  index: input.prevTxVout,
@@ -2023,16 +2416,16 @@ Payout Group not found');
2023
2416
  value: Number(offerFirst
2024
2417
  ? dlcClose.offerPayoutSatoshis
2025
2418
  : dlcClose.acceptPayoutSatoshis),
2026
- address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcOffer.payoutSPK : dlcAccept.payoutSPK, network),
2419
+ address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcOffer.payoutSpk : dlcAccept.payoutSpk, network),
2027
2420
  });
2028
2421
  psbt.addOutput({
2029
2422
  value: Number(offerFirst
2030
2423
  ? dlcClose.acceptPayoutSatoshis
2031
2424
  : dlcClose.offerPayoutSatoshis),
2032
- address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcAccept.payoutSPK : dlcOffer.payoutSPK, network),
2425
+ address: bitcoinjs_lib_1.address.fromOutputScript(offerFirst ? dlcAccept.payoutSpk : dlcOffer.payoutSpk, network),
2033
2426
  });
2034
2427
  // add to psbt
2035
- sortedPsbtInputs.forEach((input, i) => psbt.addInput(input));
2428
+ sortedPsbtInputs.forEach((input) => psbt.addInput(input));
2036
2429
  const offerer = await this.isOfferer(dlcOffer, dlcAccept);
2037
2430
  // Generate keypair to sign inputs
2038
2431
  const fundPrivateKeyPair = await this.GetFundKeyPair(dlcOffer, dlcAccept, offerer);
@@ -2040,7 +2433,7 @@ Payout Group not found');
2040
2433
  psbt.signInput(fundingInputIndex, fundPrivateKeyPair);
2041
2434
  const partialSig = [
2042
2435
  {
2043
- pubkey: offerer ? dlcAccept.fundingPubKey : dlcOffer.fundingPubKey,
2436
+ pubkey: offerer ? dlcAccept.fundingPubkey : dlcOffer.fundingPubkey,
2044
2437
  signature: await bitcoinjs_lib_1.script.signature.encode(dlcClose.closeSignature, 1), // encode using SIGHASH_ALL
2045
2438
  },
2046
2439
  ];
@@ -2137,8 +2530,24 @@ Payout Group not found');
2137
2530
  await this.CfdLoaded();
2138
2531
  return this._cfdDlcJs.VerifyRefundTxSignature(jsonObject);
2139
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
+ }
2140
2549
  async fundingInputToInput(_input, findDerivationPath = true) {
2141
- (0, assert_1.default)(_input.type === messaging_1.MessageType.FundingInputV0, 'FundingInput must be V0');
2550
+ (0, assert_1.default)(_input.type === messaging_1.MessageType.FundingInput, 'FundingInput must be V0');
2142
2551
  const network = await this.getConnectedNetwork();
2143
2552
  const input = _input;
2144
2553
  const prevTx = input.prevTx;
@@ -2154,24 +2563,25 @@ Payout Group not found');
2154
2563
  derivationPath = inputAddress.derivationPath;
2155
2564
  }
2156
2565
  }
2157
- return {
2158
- txid: prevTx.txId.toString(),
2159
- vout: input.prevTxVout,
2160
- address: _address,
2161
- amount: prevTxOut.value.bitcoin,
2162
- value: Number(prevTxOut.value.sats),
2163
- derivationPath,
2164
- maxWitnessLength: input.maxWitnessLen,
2165
- redeemScript: input.redeemScript
2166
- ? input.redeemScript.toString('hex')
2167
- : '',
2168
- scriptPubKey: scriptPubKey.toString('hex'),
2169
- inputSerialId: input.inputSerialId,
2170
- toUtxo: types_1.Input.prototype.toUtxo,
2171
- };
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);
2172
2582
  }
2173
2583
  async inputToFundingInput(input) {
2174
- const fundingInput = new messaging_1.FundingInputV0();
2584
+ const fundingInput = new messaging_1.FundingInput();
2175
2585
  fundingInput.prevTxVout = input.vout;
2176
2586
  let txRaw = '';
2177
2587
  try {
@@ -2198,12 +2608,99 @@ Payout Group not found');
2198
2608
  fundingInput.inputSerialId = input.inputSerialId
2199
2609
  ? input.inputSerialId
2200
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
+ }
2201
2620
  return fundingInput;
2202
2621
  }
2203
2622
  async getConnectedNetwork() {
2204
2623
  return this._network;
2205
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, '', // DLC inputs don't have derivation paths
2694
+ dlcInputInfo.maxWitnessLength || 220, 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
+ }
2206
2704
  }
2207
2705
  exports.default = BitcoinDlcProvider;
2208
- const BurnAddress = 'bcrt1qxcjufgh2jarkp2qkx68azh08w9v5gah8u6es8s';
2209
2706
  //# sourceMappingURL=BitcoinDlcProvider.js.map