@atomicfinance/bitcoin-dlc-provider 3.6.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/.nvmrc +1 -1
  2. package/.yalc/@node-dlc/messaging/.nyc_output/2cf48009-1094-4275-bb91-c164c932feb6.json +1 -0
  3. package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/2cf48009-1094-4275-bb91-c164c932feb6.json +1 -0
  4. package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/index.json +1 -0
  5. package/.yalc/@node-dlc/messaging/README.md +24 -0
  6. package/.yalc/@node-dlc/messaging/__tests__/_test-utils.ts +12 -0
  7. package/.yalc/@node-dlc/messaging/__tests__/chain/ChainManager.spec.ts +178 -0
  8. package/.yalc/@node-dlc/messaging/__tests__/compatibility/dlcspecs-compatibility.spec.ts +473 -0
  9. package/.yalc/@node-dlc/messaging/__tests__/compatibility/rust-dlc-cross-language.spec.ts +342 -0
  10. package/.yalc/@node-dlc/messaging/__tests__/compatibility/true-serialization-compatibility.spec.ts +611 -0
  11. package/.yalc/@node-dlc/messaging/__tests__/dlc_message_test.json +155 -0
  12. package/.yalc/@node-dlc/messaging/__tests__/irc/IrcMessage.spec.ts +94 -0
  13. package/.yalc/@node-dlc/messaging/__tests__/messages/AddressCache.spec.ts +79 -0
  14. package/.yalc/@node-dlc/messaging/__tests__/messages/BatchFundingGroup.spec.ts +72 -0
  15. package/.yalc/@node-dlc/messaging/__tests__/messages/CetAdaptorSignatures.spec.ts +57 -0
  16. package/.yalc/@node-dlc/messaging/__tests__/messages/ContractDescriptor.spec.ts +264 -0
  17. package/.yalc/@node-dlc/messaging/__tests__/messages/ContractInfo.spec.ts +419 -0
  18. package/.yalc/@node-dlc/messaging/__tests__/messages/DigitDecompositionEventDescriptor.spec.ts +59 -0
  19. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcAccept.spec.ts +242 -0
  20. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcCancel.spec.ts +42 -0
  21. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcClose.spec.ts +315 -0
  22. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcOffer.spec.ts +527 -0
  23. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcSign.spec.ts +118 -0
  24. package/.yalc/@node-dlc/messaging/__tests__/messages/DlcTransactions.spec.ts +157 -0
  25. package/.yalc/@node-dlc/messaging/__tests__/messages/EnumEventDescriptor.spec.ts +50 -0
  26. package/.yalc/@node-dlc/messaging/__tests__/messages/EventDescriptor.spec.ts +93 -0
  27. package/.yalc/@node-dlc/messaging/__tests__/messages/FundingInput.spec.ts +84 -0
  28. package/.yalc/@node-dlc/messaging/__tests__/messages/FundingSignatures.spec.ts +83 -0
  29. package/.yalc/@node-dlc/messaging/__tests__/messages/NegotiationFields.spec.ts +328 -0
  30. package/.yalc/@node-dlc/messaging/__tests__/messages/NodeAnnouncementMessage.spec.ts +115 -0
  31. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleAnnouncement.spec.ts +415 -0
  32. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleAttestation.spec.ts +326 -0
  33. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleEvent.spec.ts +143 -0
  34. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleEventContainer.spec.ts +95 -0
  35. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleIdentifier.spec.ts +48 -0
  36. package/.yalc/@node-dlc/messaging/__tests__/messages/OracleInfo.spec.ts +116 -0
  37. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderAccept.spec.ts +77 -0
  38. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderNegotiationFields.spec.ts +216 -0
  39. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderOffer.spec.ts +121 -0
  40. package/.yalc/@node-dlc/messaging/__tests__/messages/OrderPositionInfo.spec.ts +75 -0
  41. package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutCurvePiece.spec.ts +220 -0
  42. package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutFunction.spec.ts +101 -0
  43. package/.yalc/@node-dlc/messaging/__tests__/messages/RoundingIntervals.spec.ts +75 -0
  44. package/.yalc/@node-dlc/messaging/__tests__/serialize/F64.spec.ts +260 -0
  45. package/.yalc/@node-dlc/messaging/__tests__/tsconfig.json +8 -0
  46. package/.yalc/@node-dlc/messaging/coverage/lcov-report/base.css +224 -0
  47. package/.yalc/@node-dlc/messaging/coverage/lcov-report/block-navigation.js +79 -0
  48. package/.yalc/@node-dlc/messaging/coverage/lcov-report/favicon.png +0 -0
  49. package/.yalc/@node-dlc/messaging/coverage/lcov-report/index.html +201 -0
  50. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/MessageType.ts.html +494 -0
  51. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainManager.ts.html +1058 -0
  52. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainMemoryStore.ts.html +182 -0
  53. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/index.html +126 -0
  54. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/Address.ts.html +272 -0
  55. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/index.html +111 -0
  56. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.html +141 -0
  57. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.ts.html +212 -0
  58. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/IrcMessage.ts.html +563 -0
  59. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/index.html +111 -0
  60. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/AddressCache.ts.html +302 -0
  61. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/BatchFundingGroup.ts.html +503 -0
  62. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignatures.ts.html +347 -0
  63. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignaturesV0.ts.html +347 -0
  64. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractDescriptor.ts.html +1040 -0
  65. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractInfo.ts.html +1382 -0
  66. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcAccept.ts.html +1865 -0
  67. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCancel.ts.html +251 -0
  68. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcClose.ts.html +986 -0
  69. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCloseMetadata.ts.html +443 -0
  70. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcIds.ts.html +281 -0
  71. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcInfo.ts.html +323 -0
  72. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcMessage.ts.html +341 -0
  73. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcOffer.ts.html +1895 -0
  74. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcSign.ts.html +1142 -0
  75. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcTransactions.ts.html +719 -0
  76. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/EventDescriptor.ts.html +947 -0
  77. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingInput.ts.html +728 -0
  78. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignatures.ts.html +374 -0
  79. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignaturesV0.ts.html +374 -0
  80. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NegotiationFields.ts.html +836 -0
  81. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NodeAnnouncementMessage.ts.html +515 -0
  82. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncement.ts.html +608 -0
  83. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncementV0.ts.html +605 -0
  84. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestation.ts.html +956 -0
  85. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestationV0.ts.html +770 -0
  86. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEvent.ts.html +830 -0
  87. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainer.ts.html +347 -0
  88. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainerV0.ts.html +347 -0
  89. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventV0.ts.html +827 -0
  90. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifier.ts.html +314 -0
  91. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifierV0.ts.html +314 -0
  92. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfo.ts.html +1637 -0
  93. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfoV0.ts.html +1631 -0
  94. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderAccept.ts.html +557 -0
  95. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderIrcInfo.ts.html +380 -0
  96. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderMetadata.ts.html +437 -0
  97. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderNegotiationFields.ts.html +551 -0
  98. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderOffer.ts.html +1337 -0
  99. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderPositionInfo.ts.html +590 -0
  100. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutCurvePiece.ts.html +1427 -0
  101. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutFunction.ts.html +800 -0
  102. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervals.ts.html +461 -0
  103. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervalsV0.ts.html +482 -0
  104. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ScriptWitnessV0.ts.html +269 -0
  105. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/index.html +636 -0
  106. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serde/SerdeUtils.ts.html +1394 -0
  107. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serde/index.html +111 -0
  108. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/F64.ts.html +1136 -0
  109. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/deserializeTlv.ts.html +125 -0
  110. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/getTlv.ts.html +143 -0
  111. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/index.html +141 -0
  112. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/util.ts.html +179 -0
  113. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/index.html +111 -0
  114. package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/validate.ts.html +182 -0
  115. package/.yalc/@node-dlc/messaging/coverage/lcov-report/prettify.css +1 -0
  116. package/.yalc/@node-dlc/messaging/coverage/lcov-report/prettify.js +2 -0
  117. package/.yalc/@node-dlc/messaging/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  118. package/.yalc/@node-dlc/messaging/coverage/lcov-report/sorter.js +170 -0
  119. package/.yalc/@node-dlc/messaging/coverage/lcov.info +5394 -0
  120. package/.yalc/@node-dlc/messaging/dist/MessageType.d.ts +100 -0
  121. package/.yalc/@node-dlc/messaging/dist/MessageType.js +117 -0
  122. package/.yalc/@node-dlc/messaging/dist/MessageType.js.map +1 -0
  123. package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.d.ts +50 -0
  124. package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js +211 -0
  125. package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js.map +1 -0
  126. package/.yalc/@node-dlc/messaging/dist/chain/ChainMemoryStore.d.ts +14 -0
  127. package/.yalc/@node-dlc/messaging/dist/chain/ChainMemoryStore.js +28 -0
  128. package/.yalc/@node-dlc/messaging/dist/chain/ChainMemoryStore.js.map +1 -0
  129. package/.yalc/@node-dlc/messaging/dist/chain/DlcStore.d.ts +11 -0
  130. package/.yalc/@node-dlc/messaging/dist/chain/DlcStore.js +3 -0
  131. package/.yalc/@node-dlc/messaging/dist/chain/DlcStore.js.map +1 -0
  132. package/.yalc/@node-dlc/messaging/dist/chain/IChainFilterChainClient.d.ts +48 -0
  133. package/.yalc/@node-dlc/messaging/dist/chain/IChainFilterChainClient.js +3 -0
  134. package/.yalc/@node-dlc/messaging/dist/chain/IChainFilterChainClient.js.map +1 -0
  135. package/.yalc/@node-dlc/messaging/dist/domain/Address.d.ts +24 -0
  136. package/.yalc/@node-dlc/messaging/dist/domain/Address.js +46 -0
  137. package/.yalc/@node-dlc/messaging/dist/domain/Address.js.map +1 -0
  138. package/.yalc/@node-dlc/messaging/dist/index.d.ts +44 -0
  139. package/.yalc/@node-dlc/messaging/dist/index.js +63 -0
  140. package/.yalc/@node-dlc/messaging/dist/index.js.map +1 -0
  141. package/.yalc/@node-dlc/messaging/dist/irc/IrcMessage.d.ts +43 -0
  142. package/.yalc/@node-dlc/messaging/dist/irc/IrcMessage.js +116 -0
  143. package/.yalc/@node-dlc/messaging/dist/irc/IrcMessage.js.map +1 -0
  144. package/.yalc/@node-dlc/messaging/dist/messages/AddressCache.d.ts +15 -0
  145. package/.yalc/@node-dlc/messaging/dist/messages/AddressCache.js +51 -0
  146. package/.yalc/@node-dlc/messaging/dist/messages/AddressCache.js.map +1 -0
  147. package/.yalc/@node-dlc/messaging/dist/messages/BatchFundingGroup.d.ts +61 -0
  148. package/.yalc/@node-dlc/messaging/dist/messages/BatchFundingGroup.js +113 -0
  149. package/.yalc/@node-dlc/messaging/dist/messages/BatchFundingGroup.js.map +1 -0
  150. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignatures.d.ts +40 -0
  151. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignatures.js +67 -0
  152. package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignatures.js.map +1 -0
  153. package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.d.ts +122 -0
  154. package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js +222 -0
  155. package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js.map +1 -0
  156. package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.d.ts +135 -0
  157. package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js +304 -0
  158. package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js.map +1 -0
  159. package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.d.ts +145 -0
  160. package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js +428 -0
  161. package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js.map +1 -0
  162. package/.yalc/@node-dlc/messaging/dist/messages/DlcCancel.d.ts +31 -0
  163. package/.yalc/@node-dlc/messaging/dist/messages/DlcCancel.js +51 -0
  164. package/.yalc/@node-dlc/messaging/dist/messages/DlcCancel.js.map +1 -0
  165. package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.d.ts +68 -0
  166. package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js +210 -0
  167. package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js.map +1 -0
  168. package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.d.ts +44 -0
  169. package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.js +74 -0
  170. package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.js.map +1 -0
  171. package/.yalc/@node-dlc/messaging/dist/messages/DlcIds.d.ts +26 -0
  172. package/.yalc/@node-dlc/messaging/dist/messages/DlcIds.js +58 -0
  173. package/.yalc/@node-dlc/messaging/dist/messages/DlcIds.js.map +1 -0
  174. package/.yalc/@node-dlc/messaging/dist/messages/DlcInfo.d.ts +31 -0
  175. package/.yalc/@node-dlc/messaging/dist/messages/DlcInfo.js +61 -0
  176. package/.yalc/@node-dlc/messaging/dist/messages/DlcInfo.js.map +1 -0
  177. package/.yalc/@node-dlc/messaging/dist/messages/DlcMessage.d.ts +23 -0
  178. package/.yalc/@node-dlc/messaging/dist/messages/DlcMessage.js +54 -0
  179. package/.yalc/@node-dlc/messaging/dist/messages/DlcMessage.js.map +1 -0
  180. package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.d.ts +131 -0
  181. package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js +418 -0
  182. package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js.map +1 -0
  183. package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.d.ts +96 -0
  184. package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js +267 -0
  185. package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js.map +1 -0
  186. package/.yalc/@node-dlc/messaging/dist/messages/DlcTransactions.d.ts +69 -0
  187. package/.yalc/@node-dlc/messaging/dist/messages/DlcTransactions.js +149 -0
  188. package/.yalc/@node-dlc/messaging/dist/messages/DlcTransactions.js.map +1 -0
  189. package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.d.ts +106 -0
  190. package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js +209 -0
  191. package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js.map +1 -0
  192. package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.d.ts +62 -0
  193. package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js +163 -0
  194. package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js.map +1 -0
  195. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignatures.d.ts +36 -0
  196. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignatures.js +78 -0
  197. package/.yalc/@node-dlc/messaging/dist/messages/FundingSignatures.js.map +1 -0
  198. package/.yalc/@node-dlc/messaging/dist/messages/IWireMessage.d.ts +6 -0
  199. package/.yalc/@node-dlc/messaging/dist/messages/IWireMessage.js +3 -0
  200. package/.yalc/@node-dlc/messaging/dist/messages/IWireMessage.js.map +1 -0
  201. package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.d.ts +86 -0
  202. package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js +185 -0
  203. package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js.map +1 -0
  204. package/.yalc/@node-dlc/messaging/dist/messages/NodeAnnouncementMessage.d.ts +57 -0
  205. package/.yalc/@node-dlc/messaging/dist/messages/NodeAnnouncementMessage.js +127 -0
  206. package/.yalc/@node-dlc/messaging/dist/messages/NodeAnnouncementMessage.js.map +1 -0
  207. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncement.d.ts +76 -0
  208. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncement.js +131 -0
  209. package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncement.js.map +1 -0
  210. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestation.d.ts +68 -0
  211. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestation.js +239 -0
  212. package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestation.js.map +1 -0
  213. package/.yalc/@node-dlc/messaging/dist/messages/OracleEvent.d.ts +90 -0
  214. package/.yalc/@node-dlc/messaging/dist/messages/OracleEvent.js +189 -0
  215. package/.yalc/@node-dlc/messaging/dist/messages/OracleEvent.js.map +1 -0
  216. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainer.d.ts +32 -0
  217. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainer.js +67 -0
  218. package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainer.js.map +1 -0
  219. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifier.d.ts +32 -0
  220. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifier.js +58 -0
  221. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifier.js.map +1 -0
  222. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifierV0.d.ts +32 -0
  223. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifierV0.js +58 -0
  224. package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifierV0.js.map +1 -0
  225. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.d.ts +161 -0
  226. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js +390 -0
  227. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js.map +1 -0
  228. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.d.ts +161 -0
  229. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js +387 -0
  230. package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js.map +1 -0
  231. package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.d.ts +65 -0
  232. package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js +125 -0
  233. package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js.map +1 -0
  234. package/.yalc/@node-dlc/messaging/dist/messages/OrderIrcInfo.d.ts +42 -0
  235. package/.yalc/@node-dlc/messaging/dist/messages/OrderIrcInfo.js +74 -0
  236. package/.yalc/@node-dlc/messaging/dist/messages/OrderIrcInfo.js.map +1 -0
  237. package/.yalc/@node-dlc/messaging/dist/messages/OrderMetadata.d.ts +56 -0
  238. package/.yalc/@node-dlc/messaging/dist/messages/OrderMetadata.js +87 -0
  239. package/.yalc/@node-dlc/messaging/dist/messages/OrderMetadata.js.map +1 -0
  240. package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.d.ts +69 -0
  241. package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js +114 -0
  242. package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js.map +1 -0
  243. package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.d.ts +97 -0
  244. package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js +296 -0
  245. package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js.map +1 -0
  246. package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.d.ts +50 -0
  247. package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js +125 -0
  248. package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js.map +1 -0
  249. package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.d.ts +129 -0
  250. package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js +327 -0
  251. package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js.map +1 -0
  252. package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.d.ts +66 -0
  253. package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js +170 -0
  254. package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js.map +1 -0
  255. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.d.ts +52 -0
  256. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js +95 -0
  257. package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js.map +1 -0
  258. package/.yalc/@node-dlc/messaging/dist/messages/ScriptWitnessV0.d.ts +29 -0
  259. package/.yalc/@node-dlc/messaging/dist/messages/ScriptWitnessV0.js +50 -0
  260. package/.yalc/@node-dlc/messaging/dist/messages/ScriptWitnessV0.js.map +1 -0
  261. package/.yalc/@node-dlc/messaging/dist/messages/Tlv.d.ts +15 -0
  262. package/.yalc/@node-dlc/messaging/dist/messages/Tlv.js +32 -0
  263. package/.yalc/@node-dlc/messaging/dist/messages/Tlv.js.map +1 -0
  264. package/.yalc/@node-dlc/messaging/dist/serialize/F64.d.ts +154 -0
  265. package/.yalc/@node-dlc/messaging/dist/serialize/F64.js +307 -0
  266. package/.yalc/@node-dlc/messaging/dist/serialize/F64.js.map +1 -0
  267. package/.yalc/@node-dlc/messaging/dist/serialize/deserializeTlv.d.ts +9 -0
  268. package/.yalc/@node-dlc/messaging/dist/serialize/deserializeTlv.js +11 -0
  269. package/.yalc/@node-dlc/messaging/dist/serialize/deserializeTlv.js.map +1 -0
  270. package/.yalc/@node-dlc/messaging/dist/serialize/getTlv.d.ts +4 -0
  271. package/.yalc/@node-dlc/messaging/dist/serialize/getTlv.js +23 -0
  272. package/.yalc/@node-dlc/messaging/dist/serialize/getTlv.js.map +1 -0
  273. package/.yalc/@node-dlc/messaging/dist/serialize/readTlvs.d.ts +8 -0
  274. package/.yalc/@node-dlc/messaging/dist/serialize/readTlvs.js +33 -0
  275. package/.yalc/@node-dlc/messaging/dist/serialize/readTlvs.js.map +1 -0
  276. package/.yalc/@node-dlc/messaging/dist/util.d.ts +13 -0
  277. package/.yalc/@node-dlc/messaging/dist/util.js +40 -0
  278. package/.yalc/@node-dlc/messaging/dist/util.js.map +1 -0
  279. package/.yalc/@node-dlc/messaging/dist/validation/validate.d.ts +4 -0
  280. package/.yalc/@node-dlc/messaging/dist/validation/validate.js +31 -0
  281. package/.yalc/@node-dlc/messaging/dist/validation/validate.js.map +1 -0
  282. package/.yalc/@node-dlc/messaging/lib/MessageType.ts +138 -0
  283. package/.yalc/@node-dlc/messaging/lib/chain/ChainManager.ts +326 -0
  284. package/.yalc/@node-dlc/messaging/lib/chain/ChainMemoryStore.ts +34 -0
  285. package/.yalc/@node-dlc/messaging/lib/chain/DlcStore.ts +11 -0
  286. package/.yalc/@node-dlc/messaging/lib/chain/IChainFilterChainClient.ts +57 -0
  287. package/.yalc/@node-dlc/messaging/lib/domain/Address.ts +64 -0
  288. package/.yalc/@node-dlc/messaging/lib/index.ts +44 -0
  289. package/.yalc/@node-dlc/messaging/lib/irc/IrcMessage.ts +161 -0
  290. package/.yalc/@node-dlc/messaging/lib/messages/AddressCache.ts +74 -0
  291. package/.yalc/@node-dlc/messaging/lib/messages/BatchFundingGroup.ts +141 -0
  292. package/.yalc/@node-dlc/messaging/lib/messages/CetAdaptorSignatures.ts +89 -0
  293. package/.yalc/@node-dlc/messaging/lib/messages/ContractDescriptor.ts +318 -0
  294. package/.yalc/@node-dlc/messaging/lib/messages/ContractInfo.ts +434 -0
  295. package/.yalc/@node-dlc/messaging/lib/messages/DlcAccept.ts +595 -0
  296. package/.yalc/@node-dlc/messaging/lib/messages/DlcCancel.ts +57 -0
  297. package/.yalc/@node-dlc/messaging/lib/messages/DlcClose.ts +302 -0
  298. package/.yalc/@node-dlc/messaging/lib/messages/DlcCloseMetadata.ts +121 -0
  299. package/.yalc/@node-dlc/messaging/lib/messages/DlcIds.ts +67 -0
  300. package/.yalc/@node-dlc/messaging/lib/messages/DlcInfo.ts +81 -0
  301. package/.yalc/@node-dlc/messaging/lib/messages/DlcMessage.ts +87 -0
  302. package/.yalc/@node-dlc/messaging/lib/messages/DlcOffer.ts +605 -0
  303. package/.yalc/@node-dlc/messaging/lib/messages/DlcSign.ts +354 -0
  304. package/.yalc/@node-dlc/messaging/lib/messages/DlcTransactions.ts +213 -0
  305. package/.yalc/@node-dlc/messaging/lib/messages/EventDescriptor.ts +289 -0
  306. package/.yalc/@node-dlc/messaging/lib/messages/FundingInput.ts +216 -0
  307. package/.yalc/@node-dlc/messaging/lib/messages/FundingSignatures.ts +98 -0
  308. package/.yalc/@node-dlc/messaging/lib/messages/IWireMessage.ts +6 -0
  309. package/.yalc/@node-dlc/messaging/lib/messages/NegotiationFields.ts +252 -0
  310. package/.yalc/@node-dlc/messaging/lib/messages/NodeAnnouncementMessage.ts +145 -0
  311. package/.yalc/@node-dlc/messaging/lib/messages/OracleAnnouncement.ts +176 -0
  312. package/.yalc/@node-dlc/messaging/lib/messages/OracleAttestation.ts +292 -0
  313. package/.yalc/@node-dlc/messaging/lib/messages/OracleEvent.ts +250 -0
  314. package/.yalc/@node-dlc/messaging/lib/messages/OracleEventContainer.ts +89 -0
  315. package/.yalc/@node-dlc/messaging/lib/messages/OracleIdentifier.ts +78 -0
  316. package/.yalc/@node-dlc/messaging/lib/messages/OracleInfo.ts +519 -0
  317. package/.yalc/@node-dlc/messaging/lib/messages/OrderAccept.ts +159 -0
  318. package/.yalc/@node-dlc/messaging/lib/messages/OrderIrcInfo.ts +100 -0
  319. package/.yalc/@node-dlc/messaging/lib/messages/OrderMetadata.ts +119 -0
  320. package/.yalc/@node-dlc/messaging/lib/messages/OrderNegotiationFields.ts +157 -0
  321. package/.yalc/@node-dlc/messaging/lib/messages/OrderOffer.ts +419 -0
  322. package/.yalc/@node-dlc/messaging/lib/messages/OrderPositionInfo.ts +170 -0
  323. package/.yalc/@node-dlc/messaging/lib/messages/PayoutCurvePiece.ts +449 -0
  324. package/.yalc/@node-dlc/messaging/lib/messages/PayoutFunction.ts +240 -0
  325. package/.yalc/@node-dlc/messaging/lib/messages/RoundingIntervals.ts +127 -0
  326. package/.yalc/@node-dlc/messaging/lib/messages/ScriptWitnessV0.ts +63 -0
  327. package/.yalc/@node-dlc/messaging/lib/messages/Tlv.ts +40 -0
  328. package/.yalc/@node-dlc/messaging/lib/serialize/F64.ts +352 -0
  329. package/.yalc/@node-dlc/messaging/lib/serialize/deserializeTlv.ts +15 -0
  330. package/.yalc/@node-dlc/messaging/lib/serialize/getTlv.ts +21 -0
  331. package/.yalc/@node-dlc/messaging/lib/serialize/readTlvs.ts +37 -0
  332. package/.yalc/@node-dlc/messaging/lib/util.ts +33 -0
  333. package/.yalc/@node-dlc/messaging/lib/validation/validate.ts +34 -0
  334. package/.yalc/@node-dlc/messaging/package.json +42 -0
  335. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_3_test.json +210 -0
  336. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_5_test.json +468 -0
  337. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_3_of_5_test.json +1517 -0
  338. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_5_of_5_test.json +545 -0
  339. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_3_of_5_test.json +4761 -0
  340. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_5_of_5_test.json +2169 -0
  341. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_single_oracle_test.json +164 -0
  342. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_hyperbola_test.json +502 -0
  343. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_test.json +262 -0
  344. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_five_oracle_numerical_with_diff_test.json +4382 -0
  345. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_test.json +324 -0
  346. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_with_diff_test.json +652 -0
  347. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_test.json +1138 -0
  348. package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_with_diff_test.json +2222 -0
  349. package/.yalc/@node-dlc/messaging/test_vectors/oracle/external_oracle_announcements.json +0 -0
  350. package/.yalc/@node-dlc/messaging/test_vectors/oracle/oracle_message_test_vectors.json +115 -0
  351. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/accept_msg.json +1465 -0
  352. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_fee_test.json +12362 -0
  353. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_fee_test_scripts.json +57 -0
  354. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_test.json +2766 -0
  355. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_tx_test.json +2899 -0
  356. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/offer_msg.json +163 -0
  357. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/offer_msg_disjoint.json +352 -0
  358. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/segment_chunk_msg.json +12635 -0
  359. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/segment_start_msg.json +4022 -0
  360. package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/sign_msg.json +383 -0
  361. package/.yalc/@node-dlc/messaging/tsconfig.json +7 -0
  362. package/.yalc/@node-dlc/messaging/yalc.sig +1 -0
  363. package/CHANGELOG.md +72 -0
  364. package/dist/BitcoinDlcProvider.d.ts +17 -16
  365. package/dist/BitcoinDlcProvider.js +345 -315
  366. package/dist/BitcoinDlcProvider.js.map +1 -1
  367. package/dist/utils/Utils.d.ts +6 -6
  368. package/dist/utils/Utils.js +4 -4
  369. package/dist/utils/Utils.js.map +1 -1
  370. package/lib/BitcoinDlcProvider.ts +624 -612
  371. package/lib/utils/Utils.ts +19 -24
  372. package/package.json +10 -10
  373. package/yalc.lock +10 -0
@@ -0,0 +1,449 @@
1
+ import { BufferReader, BufferWriter } from '@node-dlc/bufio';
2
+
3
+ import { MessageType, PayoutCurvePieceType } from '../MessageType';
4
+ import { F64 } from '../serialize/F64';
5
+ import { bigIntToNumber, toBigInt } from '../util';
6
+ import { IDlcMessage } from './DlcMessage';
7
+
8
+ export abstract class PayoutCurvePiece {
9
+ public static deserialize(
10
+ buf: Buffer,
11
+ ): PolynomialPayoutCurvePiece | HyperbolaPayoutCurvePiece {
12
+ const reader = new BufferReader(buf);
13
+ const typeId = Number(reader.readBigSize());
14
+
15
+ switch (typeId) {
16
+ case PayoutCurvePieceType.Polynomial:
17
+ return PolynomialPayoutCurvePiece.deserialize(buf);
18
+ case PayoutCurvePieceType.Hyperbola:
19
+ return HyperbolaPayoutCurvePiece.deserialize(buf);
20
+ default:
21
+ throw new Error(
22
+ `Payout curve piece type must be Polynomial (0) or Hyperbola (1), got ${typeId}`,
23
+ );
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Creates a PayoutCurvePiece from JSON data
29
+ * @param json JSON object representing a payout curve piece
30
+ */
31
+ public static fromJSON(json: any): PayoutCurvePiece {
32
+ if (!json) {
33
+ throw new Error('payoutCurvePiece is required');
34
+ }
35
+
36
+ // Handle test vector format with nested types
37
+ if (json.polynomialPayoutCurvePiece) {
38
+ return PolynomialPayoutCurvePiece.fromJSON(
39
+ json.polynomialPayoutCurvePiece,
40
+ );
41
+ } else if (json.hyperbolaPayoutCurvePiece) {
42
+ return HyperbolaPayoutCurvePiece.fromJSON(json.hyperbolaPayoutCurvePiece);
43
+ }
44
+ // Handle direct format
45
+ else if (json.points !== undefined || json.payoutPoints !== undefined) {
46
+ return PolynomialPayoutCurvePiece.fromJSON(json);
47
+ } else if (json.usePositivePiece !== undefined) {
48
+ return HyperbolaPayoutCurvePiece.fromJSON(json);
49
+ } else {
50
+ throw new Error(
51
+ 'payoutCurvePiece must be either polynomial (with points) or hyperbola (with usePositivePiece)',
52
+ );
53
+ }
54
+ }
55
+
56
+ public abstract payoutCurvePieceType: PayoutCurvePieceType;
57
+ public abstract type: number; // For backward compatibility
58
+ public abstract toJSON():
59
+ | PolynomialPayoutCurvePieceJSON
60
+ | HyperbolaPayoutCurvePieceJSON;
61
+ public abstract serialize(): Buffer;
62
+ }
63
+
64
+ /**
65
+ * PolynomialPayoutCurvePiece defines a polynomial curve piece for payout functions.
66
+ * This corresponds to type 0 in the sibling sub-type format.
67
+ */
68
+ export class PolynomialPayoutCurvePiece
69
+ extends PayoutCurvePiece
70
+ implements IDlcMessage {
71
+ public static payoutCurvePieceType = PayoutCurvePieceType.Polynomial;
72
+
73
+ /**
74
+ * Creates a PolynomialPayoutCurvePiece from JSON data
75
+ * @param json JSON object representing a polynomial payout curve piece
76
+ */
77
+ public static fromJSON(json: any): PolynomialPayoutCurvePiece {
78
+ const instance = new PolynomialPayoutCurvePiece();
79
+
80
+ const points = json.payoutPoints || json.points || [];
81
+ instance.points = points.map((point: any) => ({
82
+ eventOutcome: toBigInt(point.eventOutcome || point.event_outcome),
83
+ outcomePayout: toBigInt(point.outcomePayout || point.outcome_payout),
84
+ extraPrecision: point.extraPrecision || point.extra_precision || 0,
85
+ }));
86
+
87
+ return instance;
88
+ }
89
+
90
+ /**
91
+ * Deserializes a polynomial_payout_curve_piece message
92
+ * @param buf
93
+ */
94
+ public static deserialize(buf: Buffer): PolynomialPayoutCurvePiece {
95
+ const instance = new PolynomialPayoutCurvePiece();
96
+ const reader = new BufferReader(buf);
97
+
98
+ reader.readBigSize(); // read type (0)
99
+ const numPts = Number(reader.readBigSize());
100
+
101
+ for (let i = 0; i < numPts; i++) {
102
+ const eventOutcome = reader.readUInt64BE();
103
+ const outcomePayout = reader.readUInt64BE();
104
+ const extraPrecision = reader.readUInt16BE();
105
+
106
+ instance.points.push({
107
+ eventOutcome,
108
+ outcomePayout,
109
+ extraPrecision,
110
+ });
111
+ }
112
+
113
+ return instance;
114
+ }
115
+
116
+ /**
117
+ * The type for polynomial_payout_curve_piece message - Note: this is a sub-component, not a standalone wire message
118
+ */
119
+ public type = MessageType.PolynomialPayoutCurvePiece;
120
+
121
+ /**
122
+ * The payout curve piece type for new format
123
+ */
124
+ public payoutCurvePieceType = PayoutCurvePieceType.Polynomial;
125
+
126
+ public points: IPoint[] = [];
127
+
128
+ /**
129
+ * Converts polynomial_payout_curve_piece to JSON
130
+ */
131
+ public toJSON(): PolynomialPayoutCurvePieceJSON {
132
+ return {
133
+ polynomialPayoutCurvePiece: {
134
+ payoutPoints: this.points.map((point) => {
135
+ return {
136
+ eventOutcome: bigIntToNumber(point.eventOutcome),
137
+ outcomePayout: bigIntToNumber(point.outcomePayout),
138
+ extraPrecision: Number(point.extraPrecision),
139
+ };
140
+ }),
141
+ },
142
+ };
143
+ }
144
+
145
+ /**
146
+ * Serializes the polynomial_payout_curve_piece message into a Buffer
147
+ */
148
+ public serialize(): Buffer {
149
+ const writer = new BufferWriter();
150
+
151
+ writer.writeBigSize(this.payoutCurvePieceType);
152
+ writer.writeBigSize(this.points.length);
153
+
154
+ for (const point of this.points) {
155
+ writer.writeUInt64BE(point.eventOutcome);
156
+ writer.writeUInt64BE(point.outcomePayout);
157
+ writer.writeUInt16BE(point.extraPrecision);
158
+ }
159
+
160
+ return writer.toBuffer();
161
+ }
162
+ }
163
+
164
+ /**
165
+ * HyperbolaPayoutCurvePiece defines a hyperbola curve piece for payout functions.
166
+ * This corresponds to type 1 in the sibling sub-type format.
167
+ * Updated to use F64 for precise f64 parameter handling.
168
+ */
169
+ export class HyperbolaPayoutCurvePiece
170
+ extends PayoutCurvePiece
171
+ implements IDlcMessage {
172
+ public static payoutCurvePieceType = PayoutCurvePieceType.Hyperbola;
173
+
174
+ /**
175
+ * Helper function to safely parse F64 values from JSON
176
+ * Handles both number and string inputs for maximum precision
177
+ */
178
+ private static parseF64Value(value: any): F64 | null {
179
+ // Check for basic null/undefined
180
+ if (value === null || value === undefined) {
181
+ return null;
182
+ }
183
+
184
+ try {
185
+ if (typeof value === 'string') {
186
+ // Parse string directly to preserve precision
187
+ try {
188
+ return F64.fromString(value);
189
+ } catch (error) {
190
+ // If fromString fails, try parsing as number
191
+ const numValue = parseFloat(value);
192
+ if (!isNaN(numValue) && isFinite(numValue)) {
193
+ return F64.fromNumber(numValue);
194
+ }
195
+ }
196
+ } else if (typeof value === 'number') {
197
+ // Parse number - handle special cases
198
+ if (!isFinite(value)) {
199
+ return null; // Reject NaN, Infinity, -Infinity
200
+ }
201
+ return F64.fromNumber(value);
202
+ }
203
+
204
+ // Try to convert other types to number as fallback
205
+ const numValue = Number(value);
206
+ if (!isNaN(numValue) && isFinite(numValue)) {
207
+ return F64.fromNumber(numValue);
208
+ }
209
+
210
+ return null;
211
+ } catch (error) {
212
+ return null;
213
+ }
214
+ }
215
+
216
+ /**
217
+ * Creates a HyperbolaPayoutCurvePiece from JSON data
218
+ * @param json JSON object representing a hyperbola payout curve piece
219
+ */
220
+ public static fromJSON(json: any): HyperbolaPayoutCurvePiece | null {
221
+ if (!json || typeof json !== 'object') return null;
222
+
223
+ // Handle both wrapped format and direct format
224
+ let data =
225
+ json.hyperbolaPayoutCurvePiece || json.hyperbola_payout_curve_piece;
226
+
227
+ // If no wrapper found, assume direct format if it has the expected properties
228
+ if (
229
+ !data &&
230
+ (json.usePositivePiece !== undefined ||
231
+ json.use_positive_piece !== undefined)
232
+ ) {
233
+ data = json;
234
+ }
235
+
236
+ if (!data) return null;
237
+
238
+ try {
239
+ const usePositivePiece =
240
+ data.usePositivePiece || data.use_positive_piece || false;
241
+
242
+ // Parse each F64 value with null check
243
+ const translateOutcome = this.parseF64Value(
244
+ data.translateOutcome !== undefined
245
+ ? data.translateOutcome
246
+ : data.translate_outcome,
247
+ );
248
+ const translatePayout = this.parseF64Value(
249
+ data.translatePayout !== undefined
250
+ ? data.translatePayout
251
+ : data.translate_payout,
252
+ );
253
+ const a = this.parseF64Value(data.a);
254
+ const b = this.parseF64Value(data.b);
255
+ const c = this.parseF64Value(data.c);
256
+ const d = this.parseF64Value(data.d);
257
+
258
+ // Check that all required values were parsed successfully
259
+ if (!translateOutcome || !translatePayout || !a || !b || !c || !d) {
260
+ throw new Error('Failed to parse one or more F64 values');
261
+ }
262
+
263
+ return new HyperbolaPayoutCurvePiece(
264
+ usePositivePiece,
265
+ translateOutcome,
266
+ translatePayout,
267
+ a,
268
+ b,
269
+ c,
270
+ d,
271
+ );
272
+ } catch (error) {
273
+ return null;
274
+ }
275
+ }
276
+
277
+ /**
278
+ * Deserializes a hyperbola_payout_curve_piece message
279
+ * @param buf
280
+ */
281
+ public static deserialize(buf: Buffer): HyperbolaPayoutCurvePiece {
282
+ const instance = new HyperbolaPayoutCurvePiece();
283
+ const reader = new BufferReader(buf);
284
+
285
+ reader.readBigSize(); // read type (1)
286
+ instance.usePositivePiece = reader.readUInt8() === 1;
287
+
288
+ // Read f64 values using F64 for precise handling - read raw 8-byte buffers
289
+ instance.translateOutcome = F64.deserialize(reader.readBytes(8));
290
+ instance.translatePayout = F64.deserialize(reader.readBytes(8));
291
+ instance.a = F64.deserialize(reader.readBytes(8));
292
+ instance.b = F64.deserialize(reader.readBytes(8));
293
+ instance.c = F64.deserialize(reader.readBytes(8));
294
+ instance.d = F64.deserialize(reader.readBytes(8));
295
+
296
+ // Note: leftEndPoint and rightEndPoint are not part of the serialization
297
+ // They will be set by PayoutFunction when creating from JSON
298
+ instance.leftEndPoint = {
299
+ eventOutcome: BigInt(0),
300
+ outcomePayout: BigInt(0),
301
+ extraPrecision: 0,
302
+ };
303
+
304
+ instance.rightEndPoint = {
305
+ eventOutcome: BigInt(0),
306
+ outcomePayout: BigInt(0),
307
+ extraPrecision: 0,
308
+ };
309
+
310
+ return instance;
311
+ }
312
+
313
+ /**
314
+ * The type for hyperbola_payout_curve_piece message - Note: this is a sub-component, not a standalone wire message
315
+ */
316
+ public type = MessageType.HyperbolaPayoutCurvePiece;
317
+
318
+ public payoutCurvePieceType = HyperbolaPayoutCurvePiece.payoutCurvePieceType;
319
+
320
+ // Use F64 for precise f64 parameter handling to avoid JavaScript precision issues
321
+ public leftEndPoint: IPayoutPoint;
322
+ public rightEndPoint: IPayoutPoint;
323
+ public usePositivePiece: boolean;
324
+ public translateOutcome: F64; // f64 - precise handling with F64
325
+ public translatePayout: F64; // f64 - precise handling with F64
326
+ public a: F64; // f64 - precise handling with F64
327
+ public b: F64; // f64 - precise handling with F64
328
+ public c: F64; // f64 - precise handling with F64
329
+ public d: F64; // f64 - precise handling with F64
330
+
331
+ constructor(
332
+ usePositivePiece = false,
333
+ translateOutcome?: string | F64,
334
+ translatePayout?: string | F64,
335
+ a?: string | F64,
336
+ b?: string | F64,
337
+ c?: string | F64,
338
+ d?: string | F64,
339
+ ) {
340
+ super();
341
+ this.usePositivePiece = usePositivePiece;
342
+
343
+ // Convert string inputs to F64 objects, or use existing F64 objects
344
+ this.translateOutcome = translateOutcome
345
+ ? typeof translateOutcome === 'string'
346
+ ? F64.fromString(translateOutcome)
347
+ : translateOutcome
348
+ : F64.fromNumber(0);
349
+ this.translatePayout = translatePayout
350
+ ? typeof translatePayout === 'string'
351
+ ? F64.fromString(translatePayout)
352
+ : translatePayout
353
+ : F64.fromNumber(0);
354
+ this.a = a
355
+ ? typeof a === 'string'
356
+ ? F64.fromString(a)
357
+ : a
358
+ : F64.fromNumber(0);
359
+ this.b = b
360
+ ? typeof b === 'string'
361
+ ? F64.fromString(b)
362
+ : b
363
+ : F64.fromNumber(0);
364
+ this.c = c
365
+ ? typeof c === 'string'
366
+ ? F64.fromString(c)
367
+ : c
368
+ : F64.fromNumber(0);
369
+ this.d = d
370
+ ? typeof d === 'string'
371
+ ? F64.fromString(d)
372
+ : d
373
+ : F64.fromNumber(0);
374
+ }
375
+
376
+ /**
377
+ * Converts hyperbola_payout_curve_piece to JSON
378
+ * Uses F64.toJSONValue() which preserves precision by using strings for very large numbers
379
+ */
380
+ public toJSON(): HyperbolaPayoutCurvePieceJSON {
381
+ return {
382
+ hyperbolaPayoutCurvePiece: {
383
+ usePositivePiece: this.usePositivePiece,
384
+ translateOutcome: this.translateOutcome.toJSONValue(), // Smart conversion: number if safe, string if large
385
+ translatePayout: this.translatePayout.toJSONValue(), // Preserves precision automatically
386
+ a: this.a.toJSONValue(),
387
+ b: this.b.toJSONValue(),
388
+ c: this.c.toJSONValue(),
389
+ d: this.d.toJSONValue(),
390
+ },
391
+ };
392
+ }
393
+
394
+ /**
395
+ * Serializes the hyperbola_payout_curve_piece message into a Buffer
396
+ */
397
+ public serialize(): Buffer {
398
+ const writer = new BufferWriter();
399
+
400
+ writer.writeBigSize(this.payoutCurvePieceType);
401
+ writer.writeUInt8(this.usePositivePiece ? 1 : 0);
402
+
403
+ // Write f64 values using F64 for precise handling - write raw 8-byte buffers
404
+ writer.writeBytes(this.translateOutcome.serialize());
405
+ writer.writeBytes(this.translatePayout.serialize());
406
+ writer.writeBytes(this.a.serialize());
407
+ writer.writeBytes(this.b.serialize());
408
+ writer.writeBytes(this.c.serialize());
409
+ writer.writeBytes(this.d.serialize());
410
+
411
+ return writer.toBuffer();
412
+ }
413
+ }
414
+
415
+ interface IPoint {
416
+ eventOutcome: bigint;
417
+ outcomePayout: bigint;
418
+ extraPrecision: number;
419
+ }
420
+
421
+ interface IPointJSON {
422
+ eventOutcome: number;
423
+ outcomePayout: number;
424
+ extraPrecision: number;
425
+ }
426
+
427
+ interface IPayoutPoint {
428
+ eventOutcome: bigint;
429
+ outcomePayout: bigint;
430
+ extraPrecision: number;
431
+ }
432
+
433
+ export interface PolynomialPayoutCurvePieceJSON {
434
+ polynomialPayoutCurvePiece: {
435
+ payoutPoints: IPointJSON[];
436
+ };
437
+ }
438
+
439
+ export interface HyperbolaPayoutCurvePieceJSON {
440
+ hyperbolaPayoutCurvePiece: {
441
+ usePositivePiece: boolean;
442
+ translateOutcome: number | string;
443
+ translatePayout: number | string;
444
+ a: number | string;
445
+ b: number | string;
446
+ c: number | string;
447
+ d: number | string;
448
+ };
449
+ }
@@ -0,0 +1,240 @@
1
+ import { BufferReader, BufferWriter } from '@node-dlc/bufio';
2
+
3
+ import { MessageType } from '../MessageType';
4
+ import { bigIntToNumber, toBigInt } from '../util';
5
+ import { IDlcMessage } from './DlcMessage';
6
+ import {
7
+ HyperbolaPayoutCurvePiece,
8
+ HyperbolaPayoutCurvePieceJSON,
9
+ PayoutCurvePiece,
10
+ PolynomialPayoutCurvePieceJSON,
11
+ } from './PayoutCurvePiece';
12
+
13
+ /**
14
+ * PayoutFunction contains the payout curve definition for numeric outcome contracts.
15
+ * Updated to match rust-dlc format exactly.
16
+ */
17
+ export class PayoutFunction implements IDlcMessage {
18
+ public static type = MessageType.PayoutFunction;
19
+
20
+ /**
21
+ * Creates a PayoutFunction from JSON data
22
+ * @param json JSON object representing a payout function
23
+ */
24
+ public static fromJSON(json: any): PayoutFunction {
25
+ const instance = new PayoutFunction();
26
+
27
+ // Parse payout function pieces
28
+ const pieces =
29
+ json.payoutFunctionPieces || json.payout_function_pieces || [];
30
+ instance.payoutFunctionPieces = pieces.map(
31
+ (pieceJson: any, index: number) => {
32
+ const piece = {
33
+ endPoint: {
34
+ eventOutcome: toBigInt(pieceJson.endPoint?.eventOutcome),
35
+ outcomePayout: toBigInt(pieceJson.endPoint?.outcomePayout),
36
+ extraPrecision: pieceJson.endPoint?.extraPrecision || 0,
37
+ },
38
+ payoutCurvePiece: PayoutCurvePiece.fromJSON(
39
+ pieceJson.payoutCurvePiece || pieceJson.payout_curve_piece,
40
+ ),
41
+ };
42
+
43
+ // For HyperbolaPayoutCurvePiece, set the left and right end points
44
+ if (piece.payoutCurvePiece instanceof HyperbolaPayoutCurvePiece) {
45
+ const hyperbola = piece.payoutCurvePiece as HyperbolaPayoutCurvePiece;
46
+
47
+ // Left end point is this piece's endPoint
48
+ hyperbola.leftEndPoint = piece.endPoint;
49
+
50
+ // Right end point is the next piece's endPoint, or lastEndpoint if this is the last piece
51
+ if (index < pieces.length - 1) {
52
+ const nextPiece = pieces[index + 1];
53
+ hyperbola.rightEndPoint = {
54
+ eventOutcome: toBigInt(nextPiece.endPoint?.eventOutcome),
55
+ outcomePayout: toBigInt(nextPiece.endPoint?.outcomePayout),
56
+ extraPrecision: nextPiece.endPoint?.extraPrecision || 0,
57
+ };
58
+ } else {
59
+ // Use lastEndpoint for the final piece
60
+ const lastEndpoint = json.lastEndpoint || json.last_endpoint || {};
61
+ hyperbola.rightEndPoint = {
62
+ eventOutcome: toBigInt(lastEndpoint.eventOutcome),
63
+ outcomePayout: toBigInt(lastEndpoint.outcomePayout),
64
+ extraPrecision: lastEndpoint.extraPrecision || 0,
65
+ };
66
+ }
67
+ }
68
+
69
+ return piece;
70
+ },
71
+ );
72
+
73
+ // Parse last endpoint
74
+ const lastEndpoint = json.lastEndpoint || json.last_endpoint;
75
+ if (lastEndpoint) {
76
+ instance.lastEndpoint = {
77
+ eventOutcome: toBigInt(lastEndpoint.eventOutcome),
78
+ outcomePayout: toBigInt(lastEndpoint.outcomePayout),
79
+ extraPrecision: lastEndpoint.extraPrecision || 0,
80
+ };
81
+ } else {
82
+ // Default last endpoint if not provided
83
+ instance.lastEndpoint = {
84
+ eventOutcome: BigInt(0),
85
+ outcomePayout: BigInt(0),
86
+ extraPrecision: 0,
87
+ };
88
+ }
89
+
90
+ return instance;
91
+ }
92
+
93
+ /**
94
+ * Deserializes a payout_function message
95
+ * @param buf
96
+ */
97
+ public static deserialize(buf: Buffer): PayoutFunction {
98
+ const instance = new PayoutFunction();
99
+ const reader = new BufferReader(buf);
100
+
101
+ // Read payout function pieces (as vec)
102
+ const numPieces = Number(reader.readBigSize());
103
+
104
+ for (let i = 0; i < numPieces; i++) {
105
+ // Read end_point first
106
+ const eventOutcome = reader.readUInt64BE();
107
+ const outcomePayout = reader.readUInt64BE();
108
+ const extraPrecision = reader.readUInt16BE();
109
+
110
+ // Read payout curve piece
111
+ const payoutCurvePieceStartPos = reader.position;
112
+ const payoutCurvePiece = PayoutCurvePiece.deserialize(
113
+ reader.buffer.subarray(reader.position),
114
+ );
115
+
116
+ // Skip past the payout curve piece bytes
117
+ const payoutCurvePieceSize = payoutCurvePiece.serialize().length;
118
+ reader.position = payoutCurvePieceStartPos + payoutCurvePieceSize;
119
+
120
+ instance.payoutFunctionPieces.push({
121
+ endPoint: {
122
+ eventOutcome,
123
+ outcomePayout,
124
+ extraPrecision,
125
+ },
126
+ payoutCurvePiece,
127
+ });
128
+ }
129
+
130
+ // Read last_endpoint
131
+ instance.lastEndpoint = {
132
+ eventOutcome: reader.readUInt64BE(),
133
+ outcomePayout: reader.readUInt64BE(),
134
+ extraPrecision: reader.readUInt16BE(),
135
+ };
136
+
137
+ return instance;
138
+ }
139
+
140
+ /**
141
+ * The type for payout_function message. payout_function = 42790
142
+ */
143
+ public type = PayoutFunction.type;
144
+
145
+ public payoutFunctionPieces: IPayoutFunctionPiece[] = [];
146
+ public lastEndpoint: IPayoutPoint;
147
+
148
+ /**
149
+ * Constructor that ensures proper initialization
150
+ */
151
+ constructor() {
152
+ // Explicitly initialize arrays to handle file-linking issues
153
+ this.payoutFunctionPieces = [];
154
+ }
155
+
156
+ /**
157
+ * Converts payout_function to JSON
158
+ */
159
+ public toJSON(): PayoutFunctionJSON {
160
+ return {
161
+ payoutFunctionPieces: this.payoutFunctionPieces.map((piece) => ({
162
+ endPoint: {
163
+ eventOutcome: bigIntToNumber(piece.endPoint.eventOutcome),
164
+ outcomePayout: bigIntToNumber(piece.endPoint.outcomePayout),
165
+ extraPrecision: piece.endPoint.extraPrecision,
166
+ },
167
+ payoutCurvePiece: piece.payoutCurvePiece.toJSON(),
168
+ })),
169
+ lastEndpoint: {
170
+ eventOutcome: bigIntToNumber(this.lastEndpoint.eventOutcome),
171
+ outcomePayout: bigIntToNumber(this.lastEndpoint.outcomePayout),
172
+ extraPrecision: this.lastEndpoint.extraPrecision,
173
+ },
174
+ };
175
+ }
176
+
177
+ /**
178
+ * Serializes the payout_function message into a Buffer
179
+ */
180
+ public serialize(): Buffer {
181
+ const writer = new BufferWriter();
182
+
183
+ // Write payout_function_pieces as vec (length + elements)
184
+ writer.writeBigSize(this.payoutFunctionPieces.length);
185
+
186
+ for (const piece of this.payoutFunctionPieces) {
187
+ // Write end_point first (matches rust order)
188
+ writer.writeUInt64BE(piece.endPoint.eventOutcome);
189
+ writer.writeUInt64BE(piece.endPoint.outcomePayout);
190
+ writer.writeUInt16BE(piece.endPoint.extraPrecision);
191
+
192
+ // Write payout_curve_piece second
193
+ writer.writeBytes(piece.payoutCurvePiece.serialize());
194
+ }
195
+
196
+ // Write last_endpoint
197
+ writer.writeUInt64BE(this.lastEndpoint.eventOutcome);
198
+ writer.writeUInt64BE(this.lastEndpoint.outcomePayout);
199
+ writer.writeUInt16BE(this.lastEndpoint.extraPrecision);
200
+
201
+ return writer.toBuffer();
202
+ }
203
+ }
204
+
205
+ // Legacy support
206
+ export const PayoutFunctionV0 = PayoutFunction;
207
+ export type PayoutFunctionV0 = PayoutFunction;
208
+
209
+ interface IPayoutPoint {
210
+ eventOutcome: bigint;
211
+ outcomePayout: bigint;
212
+ extraPrecision: number;
213
+ }
214
+
215
+ interface IPayoutPointJSON {
216
+ eventOutcome: number;
217
+ outcomePayout: number;
218
+ extraPrecision: number;
219
+ }
220
+
221
+ interface IPayoutFunctionPiece {
222
+ endPoint: IPayoutPoint;
223
+ payoutCurvePiece: PayoutCurvePiece;
224
+ }
225
+
226
+ interface IPayoutFunctionPieceJSON {
227
+ endPoint: IPayoutPointJSON;
228
+ payoutCurvePiece:
229
+ | PolynomialPayoutCurvePieceJSON
230
+ | HyperbolaPayoutCurvePieceJSON;
231
+ }
232
+
233
+ export interface PayoutFunctionJSON {
234
+ type?: number; // Optional for rust-dlc compatibility
235
+ payoutFunctionPieces: IPayoutFunctionPieceJSON[];
236
+ lastEndpoint: IPayoutPointJSON;
237
+ }
238
+
239
+ // Legacy interface
240
+ export type PayoutFunctionV0JSON = PayoutFunctionJSON;