@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,264 @@
1
+ import { F64 } from '../../lib/serialize/F64';
2
+ import { expect } from 'chai';
3
+
4
+ import {
5
+ ContractDescriptor,
6
+ EnumeratedDescriptor,
7
+ NumericalDescriptor,
8
+ } from '../../lib/messages/ContractDescriptor';
9
+ import { HyperbolaPayoutCurvePiece } from '../../lib/messages/PayoutCurvePiece';
10
+ import { PayoutFunction } from '../../lib/messages/PayoutFunction';
11
+ import { RoundingIntervals } from '../../lib/messages/RoundingIntervals';
12
+
13
+ describe('ContractDescriptor', () => {
14
+ describe('EnumeratedDescriptor', () => {
15
+ describe('serialize', () => {
16
+ it('serializes', () => {
17
+ const instance = new EnumeratedDescriptor();
18
+
19
+ // Use simple string outcomes instead of hex hashes for the new format
20
+ const outcomeOne = 'win';
21
+ const payoutOne = BigInt(0);
22
+ const outcomeTwo = 'lose';
23
+ const payoutTwo = BigInt(153445027);
24
+ const outcomeThree = 'draw';
25
+ const payoutThree = BigInt(200000000);
26
+
27
+ instance.outcomes = [
28
+ { outcome: outcomeOne, localPayout: payoutOne },
29
+ { outcome: outcomeTwo, localPayout: payoutTwo },
30
+ { outcome: outcomeThree, localPayout: payoutThree },
31
+ ];
32
+
33
+ expect(instance.serialize().toString('hex')).to.equal(
34
+ '00' + // type: enumerated_contract_descriptor (0)
35
+ '03' + // num_outcomes
36
+ '03' +
37
+ '77696e' + // outcome_1: "win" (length=3, data)
38
+ '0000000000000000' + // payout_1
39
+ '04' +
40
+ '6c6f7365' + // outcome_2: "lose" (length=4, data)
41
+ '00000000092562a3' + // payout_2 (actual hex value from implementation)
42
+ '04' +
43
+ '64726177' + // outcome_3: "draw" (length=4, data)
44
+ '000000000bebc200', // payout_3
45
+ );
46
+ });
47
+ });
48
+
49
+ describe('deserialize', () => {
50
+ it('deserializes', () => {
51
+ // Create a test instance and serialize it
52
+ const originalInstance = new EnumeratedDescriptor();
53
+ originalInstance.outcomes = [
54
+ { outcome: 'win', localPayout: BigInt(0) },
55
+ { outcome: 'lose', localPayout: BigInt(153517731) },
56
+ { outcome: 'draw', localPayout: BigInt(200000000) },
57
+ ];
58
+
59
+ // Serialize and then deserialize to ensure round-trip consistency
60
+ const serialized = originalInstance.serialize();
61
+ const unknownInstance = ContractDescriptor.deserialize(serialized);
62
+
63
+ expect(unknownInstance.contractDescriptorType).to.equal(0); // enumerated_contract_descriptor type (new format)
64
+
65
+ if (unknownInstance instanceof EnumeratedDescriptor) {
66
+ const instance = unknownInstance as EnumeratedDescriptor;
67
+
68
+ expect(instance.outcomes.length).to.equal(3);
69
+ expect(instance.outcomes[0].outcome).to.equal('win');
70
+ expect(Number(instance.outcomes[0].localPayout)).to.equal(0);
71
+ expect(instance.outcomes[1].outcome).to.equal('lose');
72
+ expect(Number(instance.outcomes[1].localPayout)).to.equal(153517731);
73
+ expect(instance.outcomes[2].outcome).to.equal('draw');
74
+ expect(Number(instance.outcomes[2].localPayout)).to.equal(200000000);
75
+ }
76
+ });
77
+ });
78
+
79
+ describe('toJSON', () => {
80
+ it('converts to JSON', () => {
81
+ const instance = new EnumeratedDescriptor();
82
+
83
+ const outcomeOne = 'win';
84
+ const payoutOne = BigInt(0);
85
+ const outcomeTwo = 'lose';
86
+ const payoutTwo = BigInt(153517731); // Updated to match actual implementation
87
+ const outcomeThree = 'draw';
88
+ const payoutThree = BigInt(200000000);
89
+
90
+ instance.outcomes = [
91
+ { outcome: outcomeOne, localPayout: payoutOne },
92
+ { outcome: outcomeTwo, localPayout: payoutTwo },
93
+ { outcome: outcomeThree, localPayout: payoutThree },
94
+ ];
95
+
96
+ const json = instance.toJSON() as any; // Cast to any to access the wrapped structure
97
+
98
+ // Check that the JSON has the proper enum format structure
99
+ expect(json.enumeratedContractDescriptor).to.exist;
100
+ expect(json.enumeratedContractDescriptor.payouts.length).to.equal(3);
101
+ expect(json.enumeratedContractDescriptor.payouts[0].outcome).to.equal(
102
+ outcomeOne,
103
+ );
104
+ expect(
105
+ json.enumeratedContractDescriptor.payouts[0].offerPayout,
106
+ ).to.equal(0);
107
+ expect(json.enumeratedContractDescriptor.payouts[1].outcome).to.equal(
108
+ outcomeTwo,
109
+ );
110
+ expect(
111
+ json.enumeratedContractDescriptor.payouts[1].offerPayout,
112
+ ).to.equal(153517731); // Updated value
113
+ expect(json.enumeratedContractDescriptor.payouts[2].outcome).to.equal(
114
+ outcomeThree,
115
+ );
116
+ expect(
117
+ json.enumeratedContractDescriptor.payouts[2].offerPayout,
118
+ ).to.equal(200000000);
119
+ });
120
+ });
121
+ });
122
+
123
+ describe('NumericalDescriptor', () => {
124
+ describe('serialize/deserialize', () => {
125
+ it('should serialize and deserialize correctly', () => {
126
+ const instance = new NumericalDescriptor();
127
+ instance.numDigits = 18;
128
+
129
+ // Create proper HyperbolaPayoutCurvePiece instance with new F64 structure
130
+ const hyperbolaPayoutCurvePiece = new HyperbolaPayoutCurvePiece();
131
+ hyperbolaPayoutCurvePiece.usePositivePiece = true;
132
+ hyperbolaPayoutCurvePiece.translateOutcome = F64.fromNumber(0);
133
+ hyperbolaPayoutCurvePiece.translatePayout = F64.fromNumber(30518);
134
+ hyperbolaPayoutCurvePiece.a = F64.fromNumber(1);
135
+ hyperbolaPayoutCurvePiece.b = F64.fromNumber(0);
136
+ hyperbolaPayoutCurvePiece.c = F64.fromNumber(0);
137
+ hyperbolaPayoutCurvePiece.d = F64.fromNumber(4000000000);
138
+
139
+ // Create proper PayoutFunction instance with new structure
140
+ const payoutFunction = new PayoutFunction();
141
+ payoutFunction.lastEndpoint = {
142
+ eventOutcome: BigInt(0),
143
+ outcomePayout: BigInt(969482),
144
+ extraPrecision: 0,
145
+ };
146
+ payoutFunction.payoutFunctionPieces = [
147
+ {
148
+ endPoint: {
149
+ eventOutcome: BigInt(131071),
150
+ outcomePayout: BigInt(0),
151
+ extraPrecision: 0,
152
+ },
153
+ payoutCurvePiece: hyperbolaPayoutCurvePiece,
154
+ },
155
+ ];
156
+
157
+ instance.payoutFunction = payoutFunction;
158
+
159
+ // Create proper RoundingIntervals instance
160
+ const roundingIntervals = new RoundingIntervals();
161
+ roundingIntervals.intervals = [
162
+ {
163
+ beginInterval: BigInt(0),
164
+ roundingMod: BigInt(500),
165
+ },
166
+ ];
167
+
168
+ instance.roundingIntervals = roundingIntervals;
169
+
170
+ const serialized = instance.serialize();
171
+ const deserialized = ContractDescriptor.deserialize(serialized);
172
+
173
+ expect(deserialized.contractDescriptorType).to.equal(1); // numeric_outcome_contract_descriptor type (new format)
174
+ expect(deserialized).to.be.instanceOf(NumericalDescriptor);
175
+
176
+ if (deserialized instanceof NumericalDescriptor) {
177
+ expect(deserialized.numDigits).to.equal(18);
178
+ expect(
179
+ deserialized.payoutFunction.payoutFunctionPieces.length,
180
+ ).to.equal(1);
181
+ expect(
182
+ deserialized.payoutFunction.lastEndpoint.eventOutcome,
183
+ ).to.equal(BigInt(0));
184
+ expect(
185
+ deserialized.payoutFunction.lastEndpoint.outcomePayout,
186
+ ).to.equal(BigInt(969482));
187
+ expect(deserialized.roundingIntervals.intervals.length).to.equal(1);
188
+ expect(
189
+ deserialized.roundingIntervals.intervals[0].beginInterval,
190
+ ).to.equal(BigInt(0));
191
+ expect(
192
+ deserialized.roundingIntervals.intervals[0].roundingMod,
193
+ ).to.equal(BigInt(500));
194
+ }
195
+ });
196
+ });
197
+
198
+ describe('toJSON', () => {
199
+ it('converts to JSON', () => {
200
+ const instance = new NumericalDescriptor();
201
+ instance.numDigits = 5;
202
+
203
+ // Create a simple hyperbola payout curve piece for JSON testing
204
+ const hyperbolaPayoutCurvePiece = new HyperbolaPayoutCurvePiece();
205
+ hyperbolaPayoutCurvePiece.usePositivePiece = true;
206
+ hyperbolaPayoutCurvePiece.translateOutcome = F64.fromNumber(100);
207
+ hyperbolaPayoutCurvePiece.translatePayout = F64.fromNumber(50000);
208
+ hyperbolaPayoutCurvePiece.a = F64.fromNumber(2);
209
+ hyperbolaPayoutCurvePiece.b = F64.fromNumber(3);
210
+ hyperbolaPayoutCurvePiece.c = F64.fromNumber(4);
211
+ hyperbolaPayoutCurvePiece.d = F64.fromNumber(5000000000);
212
+
213
+ const payoutFunction = new PayoutFunction();
214
+ payoutFunction.lastEndpoint = {
215
+ eventOutcome: BigInt(31),
216
+ outcomePayout: BigInt(100000000),
217
+ extraPrecision: 0,
218
+ };
219
+ payoutFunction.payoutFunctionPieces = [
220
+ {
221
+ endPoint: {
222
+ eventOutcome: BigInt(15),
223
+ outcomePayout: BigInt(50000000),
224
+ extraPrecision: 0,
225
+ },
226
+ payoutCurvePiece: hyperbolaPayoutCurvePiece,
227
+ },
228
+ ];
229
+
230
+ instance.payoutFunction = payoutFunction;
231
+
232
+ const roundingIntervals = new RoundingIntervals();
233
+ roundingIntervals.intervals = [
234
+ {
235
+ beginInterval: BigInt(0),
236
+ roundingMod: BigInt(1),
237
+ },
238
+ ];
239
+ instance.roundingIntervals = roundingIntervals;
240
+
241
+ const json = instance.toJSON() as any; // Cast to any to access the wrapped structure
242
+
243
+ // Check that the JSON has the proper structure
244
+ expect(json.numericOutcomeContractDescriptor).to.exist;
245
+ expect(json.numericOutcomeContractDescriptor.numDigits).to.equal(5);
246
+ expect(json.numericOutcomeContractDescriptor.payoutFunction).to.exist;
247
+ expect(
248
+ json.numericOutcomeContractDescriptor.payoutFunction
249
+ .payoutFunctionPieces.length,
250
+ ).to.equal(1);
251
+ expect(
252
+ json.numericOutcomeContractDescriptor.payoutFunction.lastEndpoint
253
+ .eventOutcome,
254
+ ).to.equal(31);
255
+ expect(json.numericOutcomeContractDescriptor.roundingIntervals).to
256
+ .exist;
257
+ expect(
258
+ json.numericOutcomeContractDescriptor.roundingIntervals.intervals
259
+ .length,
260
+ ).to.equal(1);
261
+ });
262
+ });
263
+ });
264
+ });
@@ -0,0 +1,419 @@
1
+ import { F64 } from '../../lib/serialize/F64';
2
+ import chai from 'chai';
3
+ import chaiAsPromised from 'chai-as-promised';
4
+
5
+ import {
6
+ EnumeratedDescriptor,
7
+ NumericalDescriptor,
8
+ } from '../../lib/messages/ContractDescriptor';
9
+ import {
10
+ ContractInfo,
11
+ SingleContractInfo,
12
+ } from '../../lib/messages/ContractInfo';
13
+ import {
14
+ DigitDecompositionEventDescriptor,
15
+ EnumEventDescriptor,
16
+ } from '../../lib/messages/EventDescriptor';
17
+ import { OracleAnnouncement } from '../../lib/messages/OracleAnnouncement';
18
+ import { OracleEvent } from '../../lib/messages/OracleEvent';
19
+ import { SingleOracleInfo } from '../../lib/messages/OracleInfo';
20
+ import { HyperbolaPayoutCurvePiece } from '../../lib/messages/PayoutCurvePiece';
21
+ import { PayoutFunction } from '../../lib/messages/PayoutFunction';
22
+ import { RoundingIntervals } from '../../lib/messages/RoundingIntervals';
23
+
24
+ chai.use(chaiAsPromised);
25
+ const expect = chai.expect;
26
+
27
+ describe('ContractInfo', () => {
28
+ describe('SingleContractInfo', () => {
29
+ describe('serialize', () => {
30
+ it('serializes with enumerated contract descriptor', () => {
31
+ const instance = new SingleContractInfo();
32
+ instance.totalCollateral = BigInt(200000000);
33
+
34
+ // Create contract descriptor programmatically to match new format
35
+ const contractDescriptor = new EnumeratedDescriptor();
36
+ contractDescriptor.outcomes = [
37
+ { outcome: 'outcome1', localPayout: BigInt(0) },
38
+ { outcome: 'outcome2', localPayout: BigInt(150000000) },
39
+ { outcome: 'outcome3', localPayout: BigInt(200000000) },
40
+ ];
41
+ instance.contractDescriptor = contractDescriptor;
42
+
43
+ // Create oracle info programmatically to match new format
44
+ const oracleAnnouncement = new OracleAnnouncement();
45
+ oracleAnnouncement.announcementSig = Buffer.from(
46
+ 'fab22628f6e2602e1671c286a2f63a9246794008627a1749639217f4214cb4a9494c93d1a852221080f44f697adb4355df59eb339f6ba0f9b01ba661a8b108d4',
47
+ 'hex',
48
+ );
49
+ oracleAnnouncement.oraclePubkey = Buffer.from(
50
+ 'da078bbb1d34e7729e38e2ae34236e776da121af442626fa31e31ae55a279a0b',
51
+ 'hex',
52
+ );
53
+
54
+ const oracleEvent = new OracleEvent();
55
+ oracleEvent.oracleNonces = [
56
+ Buffer.from(
57
+ '3cfba011378411b20a5ab773cb95daab93e9bcd1e4cce44986a7dda84e01841b',
58
+ 'hex',
59
+ ),
60
+ ];
61
+ oracleEvent.eventMaturityEpoch = 0;
62
+
63
+ const eventDescriptor = new EnumEventDescriptor();
64
+ eventDescriptor.outcomes = ['dummy1', 'dummy2'];
65
+ oracleEvent.eventDescriptor = eventDescriptor;
66
+ oracleEvent.eventId = 'dummy';
67
+
68
+ oracleAnnouncement.oracleEvent = oracleEvent;
69
+
70
+ const oracleInfo = new SingleOracleInfo();
71
+ oracleInfo.announcement = oracleAnnouncement;
72
+ instance.oracleInfo = oracleInfo;
73
+
74
+ // Test that it serializes without errors
75
+ const serialized = instance.serialize();
76
+ expect(serialized).to.be.instanceof(Buffer);
77
+ expect(serialized.length).to.be.greaterThan(0);
78
+ });
79
+
80
+ it('serializes with numerical contract descriptor', () => {
81
+ const instance = new SingleContractInfo();
82
+ instance.totalCollateral = BigInt(969482);
83
+
84
+ // Create numerical contract descriptor with payout function
85
+ const contractDescriptor = new NumericalDescriptor();
86
+ contractDescriptor.numDigits = 18;
87
+
88
+ // Create a proper PayoutFunction with the new structure
89
+ const payoutFunction = new PayoutFunction();
90
+
91
+ // Create hyperbola payout curve piece
92
+ const hyperbolaPayoutCurvePiece = new HyperbolaPayoutCurvePiece();
93
+ hyperbolaPayoutCurvePiece.usePositivePiece = true;
94
+ hyperbolaPayoutCurvePiece.translateOutcome = F64.fromNumber(0);
95
+ hyperbolaPayoutCurvePiece.translatePayout = F64.fromNumber(30518);
96
+ hyperbolaPayoutCurvePiece.a = F64.fromNumber(1);
97
+ hyperbolaPayoutCurvePiece.b = F64.fromNumber(0);
98
+ hyperbolaPayoutCurvePiece.c = F64.fromNumber(0);
99
+ hyperbolaPayoutCurvePiece.d = F64.fromNumber(4000000000);
100
+
101
+ payoutFunction.payoutFunctionPieces = [
102
+ {
103
+ endPoint: {
104
+ eventOutcome: BigInt(131071),
105
+ outcomePayout: BigInt(0),
106
+ extraPrecision: 0,
107
+ },
108
+ payoutCurvePiece: hyperbolaPayoutCurvePiece,
109
+ },
110
+ ];
111
+
112
+ payoutFunction.lastEndpoint = {
113
+ eventOutcome: BigInt(0),
114
+ outcomePayout: BigInt(969482),
115
+ extraPrecision: 0,
116
+ };
117
+
118
+ contractDescriptor.payoutFunction = payoutFunction;
119
+
120
+ // Create rounding intervals
121
+ const roundingIntervals = new RoundingIntervals();
122
+ roundingIntervals.intervals = [
123
+ {
124
+ beginInterval: BigInt(0),
125
+ roundingMod: BigInt(500),
126
+ },
127
+ ];
128
+ contractDescriptor.roundingIntervals = roundingIntervals;
129
+
130
+ instance.contractDescriptor = contractDescriptor;
131
+
132
+ // Create oracle info for numerical contract
133
+ const eventDescriptor = new DigitDecompositionEventDescriptor();
134
+ eventDescriptor.base = 2;
135
+ eventDescriptor.isSigned = false;
136
+ eventDescriptor.unit = 'BTCUSD';
137
+ eventDescriptor.precision = 0;
138
+ eventDescriptor.nbDigits = 18;
139
+
140
+ const oracleEvent = new OracleEvent();
141
+ oracleEvent.oracleNonces = [
142
+ 'c3347aa29db9f5e619483a92e746be91982bc66127e856bee62daeb91148cb92',
143
+ 'fbdffe731b410c1d735ad7ce868f40d5b4a44c29131b0feca0f9c28f3a5c2fee',
144
+ '4326fc9c19013d4ca30f9f5dc184a6dab417acd4486528f14dbae2d2279bd29e',
145
+ 'dd88db0628df7e17ddcafe3a274518d0a4f6baa100308b5522ad099b27305b5b',
146
+ '448774d5544b0151f112dd6f1cfc28df0e575e38bb8acb5c164357ebdb8bd364',
147
+ '5b8dd47e80fe9c12741190a515ff7d8a801911ab64f8c6117303cf0f065ae055',
148
+ '4b1f14efbba6e3bf7e5f4c40d5735ff126f23ac9a41659a05bebdd3596eb8d56',
149
+ 'd8d7524476c8f5e014a536cf513de7136fac9d3925d1f479c2f68b09ea3f43cd',
150
+ '3719a5d31121084fd9f25f77bf042d2da23075102acf59e3e592e8a3a2220940',
151
+ '64cf5b50bbc405c14078f82240aa38403fafcbee3c74c3e8ca361e60001cbc74',
152
+ '149631c02f1f26ead45f9560ffe6cb1684c8c068d6eb1f03fdd655827b9f2531',
153
+ '2669158073d4c5ebe4855e724b6650f8214697b17eeac1ef33a582d4efb73c90',
154
+ '6abaac5f261322a5097115aaadaeca025e4eae0cdfb26fc591bc05820606929e',
155
+ 'b437c474dff5ed40fb7dcf298f5a1a70e95658135cb72008c3fbd515d86e59c3',
156
+ 'f85acb02775200421eda2c99c4a12975c9ac0d460ae7c9340e814745df4ebb54',
157
+ '5a719fe0b7e44bab56448a4007f40a09f3adc57fcee18089d6334655c407a63a',
158
+ '27540f4887299b36646b7c2202aef86bb0e7e68efc508583039f74c41cb57d66',
159
+ 'ed5b9a675d77506b71f597dc59e6777cbba054c82d3ba139e82d74ca717b0d0c',
160
+ ].map((hex) => Buffer.from(hex, 'hex'));
161
+
162
+ oracleEvent.eventMaturityEpoch = 1635321600;
163
+ oracleEvent.eventDescriptor = eventDescriptor;
164
+ oracleEvent.eventId = 'Deribit-BTC-27OCT21';
165
+
166
+ const oracleAnnouncement = new OracleAnnouncement();
167
+ oracleAnnouncement.announcementSig = Buffer.from(
168
+ 'c3347aa29db9f5e619483a92e746be91982bc66127e856bee62daeb91148cb92a1074a802a481c008ba44143c752e519c28d906658e5257d9d82e80ef66cbf0f',
169
+ 'hex',
170
+ );
171
+ oracleAnnouncement.oraclePubkey = Buffer.from(
172
+ '4f15b5e4b8000c33a8e5bbdbc6802375a7d6e7cefcfbf098aa51ce7da0f910c1',
173
+ 'hex',
174
+ );
175
+ oracleAnnouncement.oracleEvent = oracleEvent;
176
+
177
+ const oracleInfo = new SingleOracleInfo();
178
+ oracleInfo.announcement = oracleAnnouncement;
179
+ instance.oracleInfo = oracleInfo;
180
+
181
+ // Test that it serializes without errors
182
+ const serialized = instance.serialize();
183
+ expect(serialized).to.be.instanceof(Buffer);
184
+ expect(serialized.length).to.be.greaterThan(0);
185
+ });
186
+ });
187
+
188
+ describe('deserialize', () => {
189
+ it('deserializes enumerated contract', () => {
190
+ // Create a test instance and serialize it first
191
+ const originalInstance = new SingleContractInfo();
192
+ originalInstance.totalCollateral = BigInt(200000000);
193
+
194
+ // Create contract descriptor
195
+ const contractDescriptor = new EnumeratedDescriptor();
196
+ contractDescriptor.outcomes = [
197
+ { outcome: 'outcome1', localPayout: BigInt(0) },
198
+ { outcome: 'outcome2', localPayout: BigInt(100000000) },
199
+ { outcome: 'outcome3', localPayout: BigInt(200000000) },
200
+ ];
201
+ originalInstance.contractDescriptor = contractDescriptor;
202
+
203
+ // Create oracle info
204
+ const oracleAnnouncement = new OracleAnnouncement();
205
+ oracleAnnouncement.announcementSig = Buffer.from(
206
+ 'fab22628f6e2602e1671c286a2f63a9246794008627a1749639217f4214cb4a9494c93d1a852221080f44f697adb4355df59eb339f6ba0f9b01ba661a8b108d4',
207
+ 'hex',
208
+ );
209
+ oracleAnnouncement.oraclePubkey = Buffer.from(
210
+ 'da078bbb1d34e7729e38e2ae34236e776da121af442626fa31e31ae55a279a0b',
211
+ 'hex',
212
+ );
213
+
214
+ const oracleEvent = new OracleEvent();
215
+ oracleEvent.oracleNonces = [
216
+ Buffer.from(
217
+ '3cfba011378411b20a5ab773cb95daab93e9bcd1e4cce44986a7dda84e01841b',
218
+ 'hex',
219
+ ),
220
+ ];
221
+ oracleEvent.eventMaturityEpoch = 0;
222
+
223
+ const eventDescriptor = new EnumEventDescriptor();
224
+ eventDescriptor.outcomes = ['dummy1', 'dummy2'];
225
+ oracleEvent.eventDescriptor = eventDescriptor;
226
+ oracleEvent.eventId = 'dummy';
227
+
228
+ oracleAnnouncement.oracleEvent = oracleEvent;
229
+
230
+ const oracleInfo = new SingleOracleInfo();
231
+ oracleInfo.announcement = oracleAnnouncement;
232
+ originalInstance.oracleInfo = oracleInfo;
233
+
234
+ // Serialize and then deserialize to ensure round-trip consistency
235
+ const serialized = originalInstance.serialize();
236
+ const unknownInstance = ContractInfo.deserialize(serialized);
237
+
238
+ if (unknownInstance instanceof SingleContractInfo) {
239
+ const instance = unknownInstance as SingleContractInfo;
240
+
241
+ expect(Number(instance.totalCollateral)).to.equal(200000000);
242
+ expect(instance.contractDescriptor).to.be.instanceof(
243
+ EnumeratedDescriptor,
244
+ );
245
+ expect(instance.oracleInfo).to.be.instanceof(SingleOracleInfo);
246
+
247
+ // Verify the contract descriptor was properly deserialized
248
+ const enumDescriptor = instance.contractDescriptor as EnumeratedDescriptor;
249
+ expect(enumDescriptor.outcomes.length).to.equal(3);
250
+ expect(enumDescriptor.outcomes[0].outcome).to.equal('outcome1');
251
+ expect(enumDescriptor.outcomes[1].outcome).to.equal('outcome2');
252
+ expect(enumDescriptor.outcomes[2].outcome).to.equal('outcome3');
253
+ }
254
+ });
255
+ });
256
+
257
+ describe('validate', () => {
258
+ let eventDescriptorNumDigits;
259
+ let contractDescriptorNumDigits;
260
+ let oracleInfo: SingleOracleInfo;
261
+ let oracleAnnouncement: OracleAnnouncement;
262
+ let hyperbolaPayoutCurvePiece: HyperbolaPayoutCurvePiece;
263
+ let payoutFunction: PayoutFunction;
264
+
265
+ beforeEach(() => {
266
+ eventDescriptorNumDigits = 18;
267
+ contractDescriptorNumDigits = 18;
268
+
269
+ const eventDescriptor = new DigitDecompositionEventDescriptor();
270
+ eventDescriptor.base = 2;
271
+ eventDescriptor.isSigned = false;
272
+ eventDescriptor.unit = 'BTCUSD';
273
+ eventDescriptor.precision = 0;
274
+ eventDescriptor.nbDigits = eventDescriptorNumDigits;
275
+
276
+ const oracleEvent = new OracleEvent();
277
+ oracleEvent.oracleNonces = [
278
+ 'c3347aa29db9f5e619483a92e746be91982bc66127e856bee62daeb91148cb92',
279
+ 'fbdffe731b410c1d735ad7ce868f40d5b4a44c29131b0feca0f9c28f3a5c2fee',
280
+ '4326fc9c19013d4ca30f9f5dc184a6dab417acd4486528f14dbae2d2279bd29e',
281
+ 'dd88db0628df7e17ddcafe3a274518d0a4f6baa100308b5522ad099b27305b5b',
282
+ '448774d5544b0151f112dd6f1cfc28df0e575e38bb8acb5c164357ebdb8bd364',
283
+ '5b8dd47e80fe9c12741190a515ff7d8a801911ab64f8c6117303cf0f065ae055',
284
+ '4b1f14efbba6e3bf7e5f4c40d5735ff126f23ac9a41659a05bebdd3596eb8d56',
285
+ 'd8d7524476c8f5e014a536cf513de7136fac9d3925d1f479c2f68b09ea3f43cd',
286
+ '3719a5d31121084fd9f25f77bf042d2da23075102acf59e3e592e8a3a2220940',
287
+ '64cf5b50bbc405c14078f82240aa38403fafcbee3c74c3e8ca361e60001cbc74',
288
+ '149631c02f1f26ead45f9560ffe6cb1684c8c068d6eb1f03fdd655827b9f2531',
289
+ '2669158073d4c5ebe4855e724b6650f8214697b17eeac1ef33a582d4efb73c90',
290
+ '6abaac5f261322a5097115aaadaeca025e4eae0cdfb26fc591bc05820606929e',
291
+ 'b437c474dff5ed40fb7dcf298f5a1a70e95658135cb72008c3fbd515d86e59c3',
292
+ 'f85acb02775200421eda2c99c4a12975c9ac0d460ae7c9340e814745df4ebb54',
293
+ '5a719fe0b7e44bab56448a4007f40a09f3adc57fcee18089d6334655c407a63a',
294
+ '27540f4887299b36646b7c2202aef86bb0e7e68efc508583039f74c41cb57d66',
295
+ 'ed5b9a675d77506b71f597dc59e6777cbba054c82d3ba139e82d74ca717b0d0c',
296
+ ].map((hex) => Buffer.from(hex, 'hex'));
297
+
298
+ oracleEvent.eventMaturityEpoch = 1635321600;
299
+ oracleEvent.eventDescriptor = eventDescriptor;
300
+ oracleEvent.eventId = 'Deribit-BTC-27OCT21';
301
+
302
+ oracleAnnouncement = new OracleAnnouncement();
303
+ oracleAnnouncement.announcementSig = Buffer.from(
304
+ 'c3347aa29db9f5e619483a92e746be91982bc66127e856bee62daeb91148cb92a1074a802a481c008ba44143c752e519c28d906658e5257d9d82e80ef66cbf0f',
305
+ 'hex',
306
+ );
307
+ oracleAnnouncement.oraclePubkey = Buffer.from(
308
+ '4f15b5e4b8000c33a8e5bbdbc6802375a7d6e7cefcfbf098aa51ce7da0f910c1',
309
+ 'hex',
310
+ );
311
+ oracleAnnouncement.oracleEvent = oracleEvent;
312
+
313
+ oracleInfo = new SingleOracleInfo();
314
+ oracleInfo.announcement = oracleAnnouncement;
315
+
316
+ // Create PayoutFunction with new structure
317
+ hyperbolaPayoutCurvePiece = new HyperbolaPayoutCurvePiece();
318
+ hyperbolaPayoutCurvePiece.usePositivePiece = true;
319
+ hyperbolaPayoutCurvePiece.translateOutcome = F64.fromNumber(0);
320
+ hyperbolaPayoutCurvePiece.translatePayout = F64.fromNumber(30518);
321
+ hyperbolaPayoutCurvePiece.a = F64.fromNumber(1);
322
+ hyperbolaPayoutCurvePiece.b = F64.fromNumber(0);
323
+ hyperbolaPayoutCurvePiece.c = F64.fromNumber(0);
324
+ hyperbolaPayoutCurvePiece.d = F64.fromNumber(4000000000);
325
+
326
+ payoutFunction = new PayoutFunction();
327
+ payoutFunction.lastEndpoint = {
328
+ eventOutcome: BigInt(0),
329
+ outcomePayout: BigInt(969482),
330
+ extraPrecision: 0,
331
+ };
332
+ payoutFunction.payoutFunctionPieces = [
333
+ {
334
+ endPoint: {
335
+ eventOutcome: BigInt(131071),
336
+ outcomePayout: BigInt(0),
337
+ extraPrecision: 0,
338
+ },
339
+ payoutCurvePiece: hyperbolaPayoutCurvePiece,
340
+ },
341
+ ];
342
+ });
343
+
344
+ it('should throw Error if oracle nonces length different than nbDigits', () => {
345
+ oracleInfo.announcement.oracleEvent.oracleNonces.pop();
346
+
347
+ const roundingIntervals = new RoundingIntervals();
348
+ roundingIntervals.intervals = [
349
+ {
350
+ beginInterval: BigInt(0),
351
+ roundingMod: BigInt(500),
352
+ },
353
+ ];
354
+
355
+ const contractDescriptor = new NumericalDescriptor();
356
+ contractDescriptor.numDigits = contractDescriptorNumDigits;
357
+ contractDescriptor.payoutFunction = payoutFunction;
358
+ contractDescriptor.roundingIntervals = roundingIntervals;
359
+
360
+ const contractInfo = new SingleContractInfo();
361
+ contractInfo.totalCollateral = BigInt(969482);
362
+ contractInfo.contractDescriptor = contractDescriptor;
363
+ contractInfo.oracleInfo = oracleInfo;
364
+
365
+ expect(function () {
366
+ contractInfo.validate();
367
+ }).to.throw('OracleEvent nonce count mismatch');
368
+ });
369
+
370
+ it('should validate successfully with correct oracle nonces count', () => {
371
+ const roundingIntervals = new RoundingIntervals();
372
+ roundingIntervals.intervals = [
373
+ {
374
+ beginInterval: BigInt(0),
375
+ roundingMod: BigInt(500),
376
+ },
377
+ ];
378
+
379
+ const contractDescriptor = new NumericalDescriptor();
380
+ contractDescriptor.numDigits = contractDescriptorNumDigits;
381
+ contractDescriptor.payoutFunction = payoutFunction;
382
+ contractDescriptor.roundingIntervals = roundingIntervals;
383
+
384
+ const contractInfo = new SingleContractInfo();
385
+ contractInfo.totalCollateral = BigInt(969482);
386
+ contractInfo.contractDescriptor = contractDescriptor;
387
+ contractInfo.oracleInfo = oracleInfo;
388
+
389
+ // Should not throw an error when oracle nonces match nbDigits
390
+ expect(function () {
391
+ contractInfo.validate();
392
+ }).to.not.throw();
393
+ });
394
+
395
+ it('should create and serialize PayoutFunction with HyperbolaPayoutCurvePiece', () => {
396
+ // Test that we can create and serialize the payout function structure
397
+ expect(payoutFunction.payoutFunctionPieces.length).to.equal(1);
398
+ expect(
399
+ payoutFunction.payoutFunctionPieces[0].payoutCurvePiece,
400
+ ).to.be.instanceof(HyperbolaPayoutCurvePiece);
401
+
402
+ const serialized = payoutFunction.serialize();
403
+ expect(serialized).to.be.instanceof(Buffer);
404
+ expect(serialized.length).to.be.greaterThan(0);
405
+
406
+ // Test round-trip serialization
407
+ const deserialized = PayoutFunction.deserialize(serialized);
408
+ expect(deserialized.payoutFunctionPieces.length).to.equal(1);
409
+ expect(
410
+ deserialized.payoutFunctionPieces[0].payoutCurvePiece,
411
+ ).to.be.instanceof(HyperbolaPayoutCurvePiece);
412
+ expect(deserialized.lastEndpoint.eventOutcome).to.equal(BigInt(0));
413
+ expect(deserialized.lastEndpoint.outcomePayout).to.equal(
414
+ BigInt(969482),
415
+ );
416
+ });
417
+ });
418
+ });
419
+ });