@atomicfinance/types 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.
- package/.yalc/@node-dlc/messaging/.nyc_output/2cf48009-1094-4275-bb91-c164c932feb6.json +1 -0
- package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/2cf48009-1094-4275-bb91-c164c932feb6.json +1 -0
- package/.yalc/@node-dlc/messaging/.nyc_output/processinfo/index.json +1 -0
- package/.yalc/@node-dlc/messaging/README.md +24 -0
- package/.yalc/@node-dlc/messaging/__tests__/_test-utils.ts +12 -0
- package/.yalc/@node-dlc/messaging/__tests__/chain/ChainManager.spec.ts +178 -0
- package/.yalc/@node-dlc/messaging/__tests__/compatibility/dlcspecs-compatibility.spec.ts +473 -0
- package/.yalc/@node-dlc/messaging/__tests__/compatibility/rust-dlc-cross-language.spec.ts +342 -0
- package/.yalc/@node-dlc/messaging/__tests__/compatibility/true-serialization-compatibility.spec.ts +611 -0
- package/.yalc/@node-dlc/messaging/__tests__/dlc_message_test.json +155 -0
- package/.yalc/@node-dlc/messaging/__tests__/irc/IrcMessage.spec.ts +94 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/AddressCache.spec.ts +79 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/BatchFundingGroup.spec.ts +72 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/CetAdaptorSignatures.spec.ts +57 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/ContractDescriptor.spec.ts +264 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/ContractInfo.spec.ts +419 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/DigitDecompositionEventDescriptor.spec.ts +59 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/DlcAccept.spec.ts +242 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/DlcCancel.spec.ts +42 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/DlcClose.spec.ts +315 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/DlcOffer.spec.ts +527 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/DlcSign.spec.ts +118 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/DlcTransactions.spec.ts +157 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/EnumEventDescriptor.spec.ts +50 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/EventDescriptor.spec.ts +93 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/FundingInput.spec.ts +84 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/FundingSignatures.spec.ts +83 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/NegotiationFields.spec.ts +328 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/NodeAnnouncementMessage.spec.ts +115 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OracleAnnouncement.spec.ts +415 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OracleAttestation.spec.ts +326 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OracleEvent.spec.ts +143 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OracleEventContainer.spec.ts +95 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OracleIdentifier.spec.ts +48 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OracleInfo.spec.ts +116 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OrderAccept.spec.ts +77 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OrderNegotiationFields.spec.ts +216 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OrderOffer.spec.ts +121 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/OrderPositionInfo.spec.ts +75 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutCurvePiece.spec.ts +220 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/PayoutFunction.spec.ts +101 -0
- package/.yalc/@node-dlc/messaging/__tests__/messages/RoundingIntervals.spec.ts +75 -0
- package/.yalc/@node-dlc/messaging/__tests__/serialize/F64.spec.ts +260 -0
- package/.yalc/@node-dlc/messaging/__tests__/tsconfig.json +8 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/base.css +224 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/block-navigation.js +79 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/favicon.png +0 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/index.html +201 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/MessageType.ts.html +494 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainManager.ts.html +1058 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/ChainMemoryStore.ts.html +182 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/chain/index.html +126 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/Address.ts.html +272 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/domain/index.html +111 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.html +141 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/index.ts.html +212 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/IrcMessage.ts.html +563 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/irc/index.html +111 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/AddressCache.ts.html +302 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/BatchFundingGroup.ts.html +503 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignatures.ts.html +347 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/CetAdaptorSignaturesV0.ts.html +347 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractDescriptor.ts.html +1040 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ContractInfo.ts.html +1382 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcAccept.ts.html +1865 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCancel.ts.html +251 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcClose.ts.html +986 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcCloseMetadata.ts.html +443 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcIds.ts.html +281 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcInfo.ts.html +323 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcMessage.ts.html +341 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcOffer.ts.html +1895 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcSign.ts.html +1142 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/DlcTransactions.ts.html +719 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/EventDescriptor.ts.html +947 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingInput.ts.html +728 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignatures.ts.html +374 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/FundingSignaturesV0.ts.html +374 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NegotiationFields.ts.html +836 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/NodeAnnouncementMessage.ts.html +515 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncement.ts.html +608 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAnnouncementV0.ts.html +605 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestation.ts.html +956 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleAttestationV0.ts.html +770 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEvent.ts.html +830 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainer.ts.html +347 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventContainerV0.ts.html +347 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleEventV0.ts.html +827 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifier.ts.html +314 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleIdentifierV0.ts.html +314 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfo.ts.html +1637 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OracleInfoV0.ts.html +1631 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderAccept.ts.html +557 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderIrcInfo.ts.html +380 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderMetadata.ts.html +437 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderNegotiationFields.ts.html +551 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderOffer.ts.html +1337 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/OrderPositionInfo.ts.html +590 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutCurvePiece.ts.html +1427 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/PayoutFunction.ts.html +800 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervals.ts.html +461 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/RoundingIntervalsV0.ts.html +482 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/ScriptWitnessV0.ts.html +269 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/messages/index.html +636 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serde/SerdeUtils.ts.html +1394 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serde/index.html +111 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/F64.ts.html +1136 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/deserializeTlv.ts.html +125 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/getTlv.ts.html +143 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/serialize/index.html +141 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/util.ts.html +179 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/index.html +111 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/lib/validation/validate.ts.html +182 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/prettify.css +1 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/prettify.js +2 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov-report/sorter.js +170 -0
- package/.yalc/@node-dlc/messaging/coverage/lcov.info +5394 -0
- package/.yalc/@node-dlc/messaging/dist/MessageType.d.ts +100 -0
- package/.yalc/@node-dlc/messaging/dist/MessageType.js +117 -0
- package/.yalc/@node-dlc/messaging/dist/MessageType.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.d.ts +50 -0
- package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js +211 -0
- package/.yalc/@node-dlc/messaging/dist/chain/ChainManager.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/chain/ChainMemoryStore.d.ts +14 -0
- package/.yalc/@node-dlc/messaging/dist/chain/ChainMemoryStore.js +28 -0
- package/.yalc/@node-dlc/messaging/dist/chain/ChainMemoryStore.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/chain/DlcStore.d.ts +11 -0
- package/.yalc/@node-dlc/messaging/dist/chain/DlcStore.js +3 -0
- package/.yalc/@node-dlc/messaging/dist/chain/DlcStore.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/chain/IChainFilterChainClient.d.ts +48 -0
- package/.yalc/@node-dlc/messaging/dist/chain/IChainFilterChainClient.js +3 -0
- package/.yalc/@node-dlc/messaging/dist/chain/IChainFilterChainClient.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/domain/Address.d.ts +24 -0
- package/.yalc/@node-dlc/messaging/dist/domain/Address.js +46 -0
- package/.yalc/@node-dlc/messaging/dist/domain/Address.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/index.d.ts +44 -0
- package/.yalc/@node-dlc/messaging/dist/index.js +63 -0
- package/.yalc/@node-dlc/messaging/dist/index.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/irc/IrcMessage.d.ts +43 -0
- package/.yalc/@node-dlc/messaging/dist/irc/IrcMessage.js +116 -0
- package/.yalc/@node-dlc/messaging/dist/irc/IrcMessage.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/AddressCache.d.ts +15 -0
- package/.yalc/@node-dlc/messaging/dist/messages/AddressCache.js +51 -0
- package/.yalc/@node-dlc/messaging/dist/messages/AddressCache.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/BatchFundingGroup.d.ts +61 -0
- package/.yalc/@node-dlc/messaging/dist/messages/BatchFundingGroup.js +113 -0
- package/.yalc/@node-dlc/messaging/dist/messages/BatchFundingGroup.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignatures.d.ts +40 -0
- package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignatures.js +67 -0
- package/.yalc/@node-dlc/messaging/dist/messages/CetAdaptorSignatures.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.d.ts +122 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js +222 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ContractDescriptor.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.d.ts +135 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js +304 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ContractInfo.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.d.ts +145 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js +428 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcAccept.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcCancel.d.ts +31 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcCancel.js +51 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcCancel.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.d.ts +68 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js +210 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcClose.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.d.ts +44 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.js +74 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcCloseMetadata.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcIds.d.ts +26 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcIds.js +58 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcIds.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcInfo.d.ts +31 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcInfo.js +61 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcInfo.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcMessage.d.ts +23 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcMessage.js +54 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcMessage.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.d.ts +131 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js +418 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcOffer.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.d.ts +96 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js +267 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcSign.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcTransactions.d.ts +69 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcTransactions.js +149 -0
- package/.yalc/@node-dlc/messaging/dist/messages/DlcTransactions.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.d.ts +106 -0
- package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js +209 -0
- package/.yalc/@node-dlc/messaging/dist/messages/EventDescriptor.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.d.ts +62 -0
- package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js +163 -0
- package/.yalc/@node-dlc/messaging/dist/messages/FundingInput.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/FundingSignatures.d.ts +36 -0
- package/.yalc/@node-dlc/messaging/dist/messages/FundingSignatures.js +78 -0
- package/.yalc/@node-dlc/messaging/dist/messages/FundingSignatures.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/IWireMessage.d.ts +6 -0
- package/.yalc/@node-dlc/messaging/dist/messages/IWireMessage.js +3 -0
- package/.yalc/@node-dlc/messaging/dist/messages/IWireMessage.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.d.ts +86 -0
- package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js +185 -0
- package/.yalc/@node-dlc/messaging/dist/messages/NegotiationFields.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/NodeAnnouncementMessage.d.ts +57 -0
- package/.yalc/@node-dlc/messaging/dist/messages/NodeAnnouncementMessage.js +127 -0
- package/.yalc/@node-dlc/messaging/dist/messages/NodeAnnouncementMessage.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncement.d.ts +76 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncement.js +131 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAnnouncement.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestation.d.ts +68 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestation.js +239 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleAttestation.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEvent.d.ts +90 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEvent.js +189 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEvent.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainer.d.ts +32 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainer.js +67 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleEventContainer.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifier.d.ts +32 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifier.js +58 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifier.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifierV0.d.ts +32 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifierV0.js +58 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleIdentifierV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.d.ts +161 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js +390 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfo.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.d.ts +161 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js +387 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OracleInfoV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.d.ts +65 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js +125 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderAccept.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderIrcInfo.d.ts +42 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderIrcInfo.js +74 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderIrcInfo.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderMetadata.d.ts +56 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderMetadata.js +87 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderMetadata.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.d.ts +69 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js +114 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderNegotiationFields.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.d.ts +97 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js +296 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderOffer.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.d.ts +50 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js +125 -0
- package/.yalc/@node-dlc/messaging/dist/messages/OrderPositionInfo.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.d.ts +129 -0
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js +327 -0
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutCurvePiece.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.d.ts +66 -0
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js +170 -0
- package/.yalc/@node-dlc/messaging/dist/messages/PayoutFunction.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.d.ts +52 -0
- package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js +95 -0
- package/.yalc/@node-dlc/messaging/dist/messages/RoundingIntervals.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ScriptWitnessV0.d.ts +29 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ScriptWitnessV0.js +50 -0
- package/.yalc/@node-dlc/messaging/dist/messages/ScriptWitnessV0.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/messages/Tlv.d.ts +15 -0
- package/.yalc/@node-dlc/messaging/dist/messages/Tlv.js +32 -0
- package/.yalc/@node-dlc/messaging/dist/messages/Tlv.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/F64.d.ts +154 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/F64.js +307 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/F64.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/deserializeTlv.d.ts +9 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/deserializeTlv.js +11 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/deserializeTlv.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/getTlv.d.ts +4 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/getTlv.js +23 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/getTlv.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/readTlvs.d.ts +8 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/readTlvs.js +33 -0
- package/.yalc/@node-dlc/messaging/dist/serialize/readTlvs.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/util.d.ts +13 -0
- package/.yalc/@node-dlc/messaging/dist/util.js +40 -0
- package/.yalc/@node-dlc/messaging/dist/util.js.map +1 -0
- package/.yalc/@node-dlc/messaging/dist/validation/validate.d.ts +4 -0
- package/.yalc/@node-dlc/messaging/dist/validation/validate.js +31 -0
- package/.yalc/@node-dlc/messaging/dist/validation/validate.js.map +1 -0
- package/.yalc/@node-dlc/messaging/lib/MessageType.ts +138 -0
- package/.yalc/@node-dlc/messaging/lib/chain/ChainManager.ts +326 -0
- package/.yalc/@node-dlc/messaging/lib/chain/ChainMemoryStore.ts +34 -0
- package/.yalc/@node-dlc/messaging/lib/chain/DlcStore.ts +11 -0
- package/.yalc/@node-dlc/messaging/lib/chain/IChainFilterChainClient.ts +57 -0
- package/.yalc/@node-dlc/messaging/lib/domain/Address.ts +64 -0
- package/.yalc/@node-dlc/messaging/lib/index.ts +44 -0
- package/.yalc/@node-dlc/messaging/lib/irc/IrcMessage.ts +161 -0
- package/.yalc/@node-dlc/messaging/lib/messages/AddressCache.ts +74 -0
- package/.yalc/@node-dlc/messaging/lib/messages/BatchFundingGroup.ts +141 -0
- package/.yalc/@node-dlc/messaging/lib/messages/CetAdaptorSignatures.ts +89 -0
- package/.yalc/@node-dlc/messaging/lib/messages/ContractDescriptor.ts +318 -0
- package/.yalc/@node-dlc/messaging/lib/messages/ContractInfo.ts +434 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcAccept.ts +595 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcCancel.ts +57 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcClose.ts +302 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcCloseMetadata.ts +121 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcIds.ts +67 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcInfo.ts +81 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcMessage.ts +87 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcOffer.ts +605 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcSign.ts +354 -0
- package/.yalc/@node-dlc/messaging/lib/messages/DlcTransactions.ts +213 -0
- package/.yalc/@node-dlc/messaging/lib/messages/EventDescriptor.ts +289 -0
- package/.yalc/@node-dlc/messaging/lib/messages/FundingInput.ts +216 -0
- package/.yalc/@node-dlc/messaging/lib/messages/FundingSignatures.ts +98 -0
- package/.yalc/@node-dlc/messaging/lib/messages/IWireMessage.ts +6 -0
- package/.yalc/@node-dlc/messaging/lib/messages/NegotiationFields.ts +252 -0
- package/.yalc/@node-dlc/messaging/lib/messages/NodeAnnouncementMessage.ts +145 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OracleAnnouncement.ts +176 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OracleAttestation.ts +292 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OracleEvent.ts +250 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OracleEventContainer.ts +89 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OracleIdentifier.ts +78 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OracleInfo.ts +519 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OrderAccept.ts +159 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OrderIrcInfo.ts +100 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OrderMetadata.ts +119 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OrderNegotiationFields.ts +157 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OrderOffer.ts +419 -0
- package/.yalc/@node-dlc/messaging/lib/messages/OrderPositionInfo.ts +170 -0
- package/.yalc/@node-dlc/messaging/lib/messages/PayoutCurvePiece.ts +449 -0
- package/.yalc/@node-dlc/messaging/lib/messages/PayoutFunction.ts +240 -0
- package/.yalc/@node-dlc/messaging/lib/messages/RoundingIntervals.ts +127 -0
- package/.yalc/@node-dlc/messaging/lib/messages/ScriptWitnessV0.ts +63 -0
- package/.yalc/@node-dlc/messaging/lib/messages/Tlv.ts +40 -0
- package/.yalc/@node-dlc/messaging/lib/serialize/F64.ts +352 -0
- package/.yalc/@node-dlc/messaging/lib/serialize/deserializeTlv.ts +15 -0
- package/.yalc/@node-dlc/messaging/lib/serialize/getTlv.ts +21 -0
- package/.yalc/@node-dlc/messaging/lib/serialize/readTlvs.ts +37 -0
- package/.yalc/@node-dlc/messaging/lib/util.ts +33 -0
- package/.yalc/@node-dlc/messaging/lib/validation/validate.ts +34 -0
- package/.yalc/@node-dlc/messaging/package.json +42 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_3_test.json +210 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_3_of_5_test.json +468 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_3_of_5_test.json +1517 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_5_of_5_test.json +545 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_3_of_5_test.json +4761 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_and_numerical_with_diff_5_of_5_test.json +2169 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/enum_single_oracle_test.json +164 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_hyperbola_test.json +502 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/single_oracle_numerical_test.json +262 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_five_oracle_numerical_with_diff_test.json +4382 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_test.json +324 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/three_of_three_oracle_numerical_with_diff_test.json +652 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_test.json +1138 -0
- package/.yalc/@node-dlc/messaging/test_vectors/dlcspecs/two_of_five_oracle_numerical_with_diff_test.json +2222 -0
- package/.yalc/@node-dlc/messaging/test_vectors/oracle/external_oracle_announcements.json +0 -0
- package/.yalc/@node-dlc/messaging/test_vectors/oracle/oracle_message_test_vectors.json +115 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/accept_msg.json +1465 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_fee_test.json +12362 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_fee_test_scripts.json +57 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_test.json +2766 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/dlc_tx_test.json +2899 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/offer_msg.json +163 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/offer_msg_disjoint.json +352 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/segment_chunk_msg.json +12635 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/segment_start_msg.json +4022 -0
- package/.yalc/@node-dlc/messaging/test_vectors/rust-dlc/sign_msg.json +383 -0
- package/.yalc/@node-dlc/messaging/tsconfig.json +7 -0
- package/.yalc/@node-dlc/messaging/yalc.sig +1 -0
- package/CHANGELOG.md +64 -0
- package/dist/dlc.d.ts +3 -3
- package/dist/models/Output.js.map +1 -1
- package/lib/dlc.ts +4 -14
- package/lib/models/Output.ts +4 -1
- package/package.json +4 -4
- package/yalc.lock +10 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { F64 } from '../../lib/serialize/F64';
|
|
2
|
+
import { expect } from 'chai';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
HyperbolaPayoutCurvePiece,
|
|
6
|
+
PayoutCurvePiece,
|
|
7
|
+
PolynomialPayoutCurvePiece,
|
|
8
|
+
} from '../../lib/messages/PayoutCurvePiece';
|
|
9
|
+
|
|
10
|
+
describe('PayoutCurvePiece', () => {
|
|
11
|
+
describe('PolynomialPayoutCurvePiece', () => {
|
|
12
|
+
it('serializes and deserializes correctly', () => {
|
|
13
|
+
const instance = new PolynomialPayoutCurvePiece();
|
|
14
|
+
|
|
15
|
+
instance.points = [
|
|
16
|
+
{
|
|
17
|
+
eventOutcome: BigInt(0),
|
|
18
|
+
outcomePayout: BigInt(0),
|
|
19
|
+
extraPrecision: 0,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
eventOutcome: BigInt(1),
|
|
23
|
+
outcomePayout: BigInt(1),
|
|
24
|
+
extraPrecision: 0,
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
// Test that it serializes without errors (new dlcspecs PR #163 format)
|
|
29
|
+
const serialized = instance.serialize();
|
|
30
|
+
expect(serialized).to.be.instanceof(Buffer);
|
|
31
|
+
expect(serialized.length).to.be.greaterThan(0);
|
|
32
|
+
|
|
33
|
+
// Test round-trip serialization
|
|
34
|
+
const deserialized = PayoutCurvePiece.deserialize(
|
|
35
|
+
serialized,
|
|
36
|
+
) as PolynomialPayoutCurvePiece;
|
|
37
|
+
expect(deserialized).to.be.instanceof(PolynomialPayoutCurvePiece);
|
|
38
|
+
expect(deserialized.points.length).to.equal(2);
|
|
39
|
+
expect(deserialized.points[0].eventOutcome).to.equal(BigInt(0));
|
|
40
|
+
expect(deserialized.points[0].outcomePayout).to.equal(BigInt(0));
|
|
41
|
+
expect(deserialized.points[1].eventOutcome).to.equal(BigInt(1));
|
|
42
|
+
expect(deserialized.points[1].outcomePayout).to.equal(BigInt(1));
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('handles large BigInt values correctly', () => {
|
|
46
|
+
const instance = new PolynomialPayoutCurvePiece();
|
|
47
|
+
const largeBigInt = BigInt('18446744073709551615'); // Max uint64
|
|
48
|
+
|
|
49
|
+
instance.points = [
|
|
50
|
+
{
|
|
51
|
+
eventOutcome: largeBigInt,
|
|
52
|
+
outcomePayout: largeBigInt,
|
|
53
|
+
extraPrecision: 0,
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
const serialized = instance.serialize();
|
|
58
|
+
const deserialized = PayoutCurvePiece.deserialize(
|
|
59
|
+
serialized,
|
|
60
|
+
) as PolynomialPayoutCurvePiece;
|
|
61
|
+
|
|
62
|
+
expect(deserialized.points[0].eventOutcome).to.equal(largeBigInt);
|
|
63
|
+
expect(deserialized.points[0].outcomePayout).to.equal(largeBigInt);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
describe('HyperbolaPayoutCurvePiece', () => {
|
|
68
|
+
it('serializes and deserializes correctly with normal values', () => {
|
|
69
|
+
const instance = new HyperbolaPayoutCurvePiece();
|
|
70
|
+
instance.usePositivePiece = true;
|
|
71
|
+
instance.translateOutcome = F64.fromNumber(100.5);
|
|
72
|
+
instance.translatePayout = F64.fromNumber(50.25);
|
|
73
|
+
instance.a = F64.fromNumber(1.0);
|
|
74
|
+
instance.b = F64.fromNumber(0.0);
|
|
75
|
+
instance.c = F64.fromNumber(0.0);
|
|
76
|
+
instance.d = F64.fromNumber(200.0);
|
|
77
|
+
|
|
78
|
+
const serialized = instance.serialize();
|
|
79
|
+
expect(serialized).to.be.instanceof(Buffer);
|
|
80
|
+
expect(serialized.length).to.be.greaterThan(0);
|
|
81
|
+
|
|
82
|
+
// Test round-trip
|
|
83
|
+
const deserialized = PayoutCurvePiece.deserialize(
|
|
84
|
+
serialized,
|
|
85
|
+
) as HyperbolaPayoutCurvePiece;
|
|
86
|
+
expect(deserialized.usePositivePiece).to.equal(true);
|
|
87
|
+
expect(deserialized.translateOutcome.toNumber()).to.equal(100.5);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('handles very large f64 values without precision loss', () => {
|
|
91
|
+
// Test values that exceed JavaScript MAX_SAFE_INTEGER
|
|
92
|
+
const testCases = [
|
|
93
|
+
{
|
|
94
|
+
name: 'Large positive number',
|
|
95
|
+
value: 1.7976931348623157e100, // Very large but valid f64
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'Very small number',
|
|
99
|
+
value: 5e-324, // Smallest positive denormalized f64
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'Beyond safe integer',
|
|
103
|
+
value: 9007199254740992, // MAX_SAFE_INTEGER + 1
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'Scientific notation',
|
|
107
|
+
value: 1.23456789e50,
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
|
|
111
|
+
testCases.forEach(({ value }) => {
|
|
112
|
+
const instance = new HyperbolaPayoutCurvePiece();
|
|
113
|
+
instance.usePositivePiece = false;
|
|
114
|
+
instance.translateOutcome = F64.fromNumber(value);
|
|
115
|
+
instance.translatePayout = F64.fromNumber(123.456);
|
|
116
|
+
instance.a = F64.fromNumber(1.0);
|
|
117
|
+
instance.b = F64.fromNumber(0.0);
|
|
118
|
+
instance.c = F64.fromNumber(0.0);
|
|
119
|
+
instance.d = F64.fromNumber(value * 2);
|
|
120
|
+
|
|
121
|
+
// Test round-trip serialization preserves exact binary representation
|
|
122
|
+
const serialized = instance.serialize();
|
|
123
|
+
const deserialized = PayoutCurvePiece.deserialize(
|
|
124
|
+
serialized,
|
|
125
|
+
) as HyperbolaPayoutCurvePiece;
|
|
126
|
+
|
|
127
|
+
// The F64 should maintain exact binary representation
|
|
128
|
+
expect(deserialized.translateOutcome.equals(instance.translateOutcome))
|
|
129
|
+
.to.be.true;
|
|
130
|
+
expect(deserialized.d.equals(instance.d)).to.be.true;
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('handles JSON with string values (for very large numbers)', () => {
|
|
135
|
+
// Test JSON with string values for large numbers
|
|
136
|
+
const jsonWithStrings = {
|
|
137
|
+
usePositivePiece: true,
|
|
138
|
+
translateOutcome: '1.7976931348623157e+100', // String representation
|
|
139
|
+
translatePayout: 50000.0, // Regular number
|
|
140
|
+
a: '9007199254740992', // String for large integer
|
|
141
|
+
b: 0.0,
|
|
142
|
+
c: 0.0,
|
|
143
|
+
d: 1.5,
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const instance = HyperbolaPayoutCurvePiece.fromJSON(jsonWithStrings);
|
|
147
|
+
|
|
148
|
+
// Should handle both string and number inputs correctly
|
|
149
|
+
expect(instance.usePositivePiece).to.be.true;
|
|
150
|
+
expect(instance.translateOutcome.toNumber()).to.equal(
|
|
151
|
+
1.7976931348623157e100,
|
|
152
|
+
);
|
|
153
|
+
expect(instance.translatePayout.toNumber()).to.equal(50000.0);
|
|
154
|
+
expect(instance.a.toNumber()).to.equal(9007199254740992);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it('JSON round-trip maintains values within JavaScript precision limits', () => {
|
|
158
|
+
const instance = new HyperbolaPayoutCurvePiece();
|
|
159
|
+
instance.usePositivePiece = true;
|
|
160
|
+
instance.translateOutcome = F64.fromNumber(50000.5);
|
|
161
|
+
instance.translatePayout = F64.fromNumber(25000.25);
|
|
162
|
+
instance.a = F64.fromNumber(1.5);
|
|
163
|
+
instance.b = F64.fromNumber(0.0);
|
|
164
|
+
instance.c = F64.fromNumber(0.0);
|
|
165
|
+
instance.d = F64.fromNumber(10000.0);
|
|
166
|
+
|
|
167
|
+
// Test JSON round-trip
|
|
168
|
+
const json = instance.toJSON();
|
|
169
|
+
const restored = HyperbolaPayoutCurvePiece.fromJSON(
|
|
170
|
+
json.hyperbolaPayoutCurvePiece,
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
expect(restored.usePositivePiece).to.equal(instance.usePositivePiece);
|
|
174
|
+
expect(restored.translateOutcome.toNumber()).to.equal(
|
|
175
|
+
instance.translateOutcome.toNumber(),
|
|
176
|
+
);
|
|
177
|
+
expect(restored.translatePayout.toNumber()).to.equal(
|
|
178
|
+
instance.translatePayout.toNumber(),
|
|
179
|
+
);
|
|
180
|
+
expect(restored.a.toNumber()).to.equal(instance.a.toNumber());
|
|
181
|
+
expect(restored.d.toNumber()).to.equal(instance.d.toNumber());
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('demonstrates precision limits with very large numbers in JSON', () => {
|
|
185
|
+
// This test demonstrates the precision tradeoff we're making
|
|
186
|
+
const veryLargeNumber = 1.2345678901234567e100;
|
|
187
|
+
|
|
188
|
+
const instance = new HyperbolaPayoutCurvePiece();
|
|
189
|
+
instance.usePositivePiece = false;
|
|
190
|
+
instance.translateOutcome = F64.fromNumber(veryLargeNumber);
|
|
191
|
+
instance.translatePayout = F64.fromNumber(0);
|
|
192
|
+
instance.a = F64.fromNumber(0);
|
|
193
|
+
instance.b = F64.fromNumber(0);
|
|
194
|
+
instance.c = F64.fromNumber(0);
|
|
195
|
+
instance.d = F64.fromNumber(0);
|
|
196
|
+
|
|
197
|
+
// Binary serialization preserves exact representation
|
|
198
|
+
const binarySerialized = instance.serialize();
|
|
199
|
+
const binaryDeserialized = PayoutCurvePiece.deserialize(
|
|
200
|
+
binarySerialized,
|
|
201
|
+
) as HyperbolaPayoutCurvePiece;
|
|
202
|
+
|
|
203
|
+
expect(
|
|
204
|
+
binaryDeserialized.translateOutcome.equals(instance.translateOutcome),
|
|
205
|
+
).to.be.true;
|
|
206
|
+
|
|
207
|
+
// JSON serialization may lose precision for very large numbers
|
|
208
|
+
const json = instance.toJSON();
|
|
209
|
+
const jsonRestored = HyperbolaPayoutCurvePiece.fromJSON(
|
|
210
|
+
json.hyperbolaPayoutCurvePiece,
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
// This may not be exactly equal due to JSON number precision limits
|
|
214
|
+
const jsonValue = jsonRestored.translateOutcome.toNumber();
|
|
215
|
+
|
|
216
|
+
// The important thing is that both are very large numbers in the same ballpark
|
|
217
|
+
expect(jsonValue).to.be.greaterThan(1e99);
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
});
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { F64 } from '../../lib/serialize/F64';
|
|
2
|
+
import { expect } from 'chai';
|
|
3
|
+
|
|
4
|
+
import { HyperbolaPayoutCurvePiece } from '../../lib/messages/PayoutCurvePiece';
|
|
5
|
+
import { PayoutFunction } from '../../lib/messages/PayoutFunction';
|
|
6
|
+
|
|
7
|
+
describe('PayoutFunction', () => {
|
|
8
|
+
describe('serialize', () => {
|
|
9
|
+
it('serializes', () => {
|
|
10
|
+
const instance = new PayoutFunction();
|
|
11
|
+
|
|
12
|
+
// Create PayoutCurvePiece programmatically instead of using legacy hex data
|
|
13
|
+
const payoutCurvePiece = new HyperbolaPayoutCurvePiece();
|
|
14
|
+
payoutCurvePiece.usePositivePiece = true;
|
|
15
|
+
payoutCurvePiece.translateOutcome = F64.fromNumber(5000);
|
|
16
|
+
payoutCurvePiece.translatePayout = F64.fromNumber(1);
|
|
17
|
+
payoutCurvePiece.a = F64.fromNumber(1);
|
|
18
|
+
payoutCurvePiece.b = F64.fromNumber(1);
|
|
19
|
+
payoutCurvePiece.c = F64.fromNumber(1);
|
|
20
|
+
payoutCurvePiece.d = F64.fromNumber(312000000);
|
|
21
|
+
|
|
22
|
+
instance.payoutFunctionPieces = [
|
|
23
|
+
{
|
|
24
|
+
endPoint: {
|
|
25
|
+
eventOutcome: BigInt(999999),
|
|
26
|
+
outcomePayout: BigInt(0),
|
|
27
|
+
extraPrecision: 0,
|
|
28
|
+
},
|
|
29
|
+
payoutCurvePiece,
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
instance.lastEndpoint = {
|
|
34
|
+
eventOutcome: BigInt(50000),
|
|
35
|
+
outcomePayout: BigInt(100000),
|
|
36
|
+
extraPrecision: 0,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Test that it serializes without errors (new dlcspecs PR #163 format)
|
|
40
|
+
const serialized = instance.serialize();
|
|
41
|
+
expect(serialized).to.be.instanceof(Buffer);
|
|
42
|
+
expect(serialized.length).to.be.greaterThan(0);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe('deserialize', () => {
|
|
47
|
+
it('deserializes', () => {
|
|
48
|
+
// Create a test instance and serialize it first for round-trip testing
|
|
49
|
+
const originalInstance = new PayoutFunction();
|
|
50
|
+
|
|
51
|
+
// Create PayoutCurvePiece programmatically
|
|
52
|
+
const payoutCurvePiece = new HyperbolaPayoutCurvePiece();
|
|
53
|
+
payoutCurvePiece.usePositivePiece = true;
|
|
54
|
+
payoutCurvePiece.translateOutcome = F64.fromNumber(5000);
|
|
55
|
+
payoutCurvePiece.translatePayout = F64.fromNumber(1);
|
|
56
|
+
payoutCurvePiece.a = F64.fromNumber(1);
|
|
57
|
+
payoutCurvePiece.b = F64.fromNumber(1);
|
|
58
|
+
payoutCurvePiece.c = F64.fromNumber(1);
|
|
59
|
+
payoutCurvePiece.d = F64.fromNumber(312000000);
|
|
60
|
+
|
|
61
|
+
originalInstance.payoutFunctionPieces = [
|
|
62
|
+
{
|
|
63
|
+
endPoint: {
|
|
64
|
+
eventOutcome: BigInt(999999),
|
|
65
|
+
outcomePayout: BigInt(0),
|
|
66
|
+
extraPrecision: 0,
|
|
67
|
+
},
|
|
68
|
+
payoutCurvePiece,
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
originalInstance.lastEndpoint = {
|
|
73
|
+
eventOutcome: BigInt(50000),
|
|
74
|
+
outcomePayout: BigInt(100000),
|
|
75
|
+
extraPrecision: 0,
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// Serialize and then deserialize to ensure round-trip consistency
|
|
79
|
+
const serialized = originalInstance.serialize();
|
|
80
|
+
const instance = PayoutFunction.deserialize(serialized);
|
|
81
|
+
|
|
82
|
+
expect(instance.lastEndpoint.eventOutcome).to.equal(BigInt(50000));
|
|
83
|
+
expect(instance.lastEndpoint.outcomePayout).to.equal(BigInt(100000));
|
|
84
|
+
expect(instance.lastEndpoint.extraPrecision).to.equal(0);
|
|
85
|
+
|
|
86
|
+
expect(instance.payoutFunctionPieces.length).to.equal(1);
|
|
87
|
+
expect(
|
|
88
|
+
instance.payoutFunctionPieces[0].payoutCurvePiece,
|
|
89
|
+
).to.be.instanceof(HyperbolaPayoutCurvePiece);
|
|
90
|
+
expect(instance.payoutFunctionPieces[0].endPoint.eventOutcome).to.equal(
|
|
91
|
+
BigInt(999999),
|
|
92
|
+
);
|
|
93
|
+
expect(instance.payoutFunctionPieces[0].endPoint.outcomePayout).to.equal(
|
|
94
|
+
BigInt(0),
|
|
95
|
+
);
|
|
96
|
+
expect(instance.payoutFunctionPieces[0].endPoint.extraPrecision).to.equal(
|
|
97
|
+
0,
|
|
98
|
+
);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
|
|
3
|
+
import { RoundingIntervals } from '../../lib';
|
|
4
|
+
|
|
5
|
+
describe('RoundingIntervals', () => {
|
|
6
|
+
describe('serialize', () => {
|
|
7
|
+
it('serializes', () => {
|
|
8
|
+
const instance = new RoundingIntervals();
|
|
9
|
+
|
|
10
|
+
const intervals = [
|
|
11
|
+
{ beginInterval: 1n, roundingMod: 2n },
|
|
12
|
+
{ beginInterval: 3n, roundingMod: 4n },
|
|
13
|
+
];
|
|
14
|
+
instance.intervals = intervals;
|
|
15
|
+
|
|
16
|
+
expect(instance.serialize().toString("hex")).to.equal(
|
|
17
|
+
'02' + // number of intervals (bigsize)
|
|
18
|
+
'0000000000000001' + // begin_interval (u64)
|
|
19
|
+
'0000000000000002' + // rounding_mod (u64)
|
|
20
|
+
'0000000000000003' + // begin_interval (u64)
|
|
21
|
+
'0000000000000004' // rounding_mod (u64)
|
|
22
|
+
); // prettier-ignore
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
describe('deserialize', () => {
|
|
27
|
+
it('deserializes', () => {
|
|
28
|
+
const buf = Buffer.from(
|
|
29
|
+
'02' + // number of intervals (bigsize)
|
|
30
|
+
'0000000000000001' + // begin_interval (u64)
|
|
31
|
+
'0000000000000002' + // rounding_mod (u64)
|
|
32
|
+
'0000000000000003' + // begin_interval (u64)
|
|
33
|
+
'0000000000000004' // rounding_mod (u64)
|
|
34
|
+
, 'hex'); // prettier-ignore
|
|
35
|
+
|
|
36
|
+
const instance = RoundingIntervals.deserialize(buf);
|
|
37
|
+
|
|
38
|
+
expect(instance.intervals.length).to.eq(2); // Check number of intervals instead of instance.length
|
|
39
|
+
expect(instance.intervals[0].beginInterval).to.eq(1n);
|
|
40
|
+
expect(instance.intervals[0].roundingMod).to.eq(2n);
|
|
41
|
+
expect(instance.intervals[1].beginInterval).to.eq(3n);
|
|
42
|
+
expect(instance.intervals[1].roundingMod).to.eq(4n);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe('validate', () => {
|
|
47
|
+
const instance = new RoundingIntervals();
|
|
48
|
+
|
|
49
|
+
beforeEach(() => {
|
|
50
|
+
const intervals = [
|
|
51
|
+
{ beginInterval: 1n, roundingMod: 2n },
|
|
52
|
+
{ beginInterval: 3n, roundingMod: 4n },
|
|
53
|
+
];
|
|
54
|
+
instance.intervals = intervals;
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('should not throw error', () => {
|
|
58
|
+
expect(() => instance.validate()).to.not.throw();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('should throw error if negative intervals', () => {
|
|
62
|
+
instance.intervals[0].beginInterval = -1n;
|
|
63
|
+
expect(() => instance.validate()).to.throw(
|
|
64
|
+
'beginInterval must be non-negative',
|
|
65
|
+
);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('should throw error if non-increasing intervals', () => {
|
|
69
|
+
instance.intervals[1].beginInterval = 0n;
|
|
70
|
+
expect(() => instance.validate()).to.throw(
|
|
71
|
+
'Intervals must be strictly increasing',
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { F64 } from '../../lib/serialize/F64';
|
|
3
|
+
|
|
4
|
+
describe('F64', () => {
|
|
5
|
+
describe('Construction and basic operations', () => {
|
|
6
|
+
it('should create F64 from number', () => {
|
|
7
|
+
const f64 = F64.fromNumber(123.456);
|
|
8
|
+
expect(f64.toNumber()).to.equal(123.456);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('should create F64 from string', () => {
|
|
12
|
+
const f64 = F64.fromString('123.456');
|
|
13
|
+
expect(f64.toNumber()).to.equal(123.456);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('should create F64 from bigint', () => {
|
|
17
|
+
const f64 = F64.fromBigInt(BigInt(123456789));
|
|
18
|
+
expect(f64.toNumber()).to.equal(123456789);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('should create zero F64', () => {
|
|
22
|
+
const f64 = F64.zero();
|
|
23
|
+
expect(f64.toNumber()).to.equal(0);
|
|
24
|
+
expect(f64.isZero()).to.be.true;
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
describe('Large number handling', () => {
|
|
29
|
+
it('should handle very large integers within safe range', () => {
|
|
30
|
+
const largeNum = Number.MAX_SAFE_INTEGER; // 9,007,199,254,740,991
|
|
31
|
+
const f64 = F64.fromNumber(largeNum);
|
|
32
|
+
expect(f64.toNumber()).to.equal(largeNum);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('should handle numbers beyond JavaScript safe integer range', () => {
|
|
36
|
+
// This is beyond MAX_SAFE_INTEGER, where JavaScript loses precision
|
|
37
|
+
const veryLargeNum = 9007199254740992; // MAX_SAFE_INTEGER + 1
|
|
38
|
+
const f64 = F64.fromNumber(veryLargeNum);
|
|
39
|
+
|
|
40
|
+
// The F64 should maintain the IEEE 754 representation
|
|
41
|
+
expect(f64.toNumber()).to.equal(veryLargeNum);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('should handle maximum finite f64 value', () => {
|
|
45
|
+
const maxFinite = 1.7976931348623157e308;
|
|
46
|
+
const f64 = F64.fromNumber(maxFinite);
|
|
47
|
+
expect(f64.toNumber()).to.equal(maxFinite);
|
|
48
|
+
expect(f64.isFinite()).to.be.true;
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('should handle minimum positive normal f64 value', () => {
|
|
52
|
+
const minNormal = 2.2250738585072014e-308;
|
|
53
|
+
const f64 = F64.fromNumber(minNormal);
|
|
54
|
+
expect(f64.toNumber()).to.equal(minNormal);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('should handle very small denormalized numbers', () => {
|
|
58
|
+
const denormal = 5e-324; // Smallest positive denormalized number
|
|
59
|
+
const f64 = F64.fromNumber(denormal);
|
|
60
|
+
expect(f64.toNumber()).to.equal(denormal);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
describe('Special values', () => {
|
|
65
|
+
it('should handle positive infinity', () => {
|
|
66
|
+
const f64 = F64.fromNumber(Number.POSITIVE_INFINITY);
|
|
67
|
+
expect(f64.isInfinite()).to.be.true;
|
|
68
|
+
expect(f64.isFinite()).to.be.false;
|
|
69
|
+
expect(f64.toNumber()).to.equal(Number.POSITIVE_INFINITY);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('should handle negative infinity', () => {
|
|
73
|
+
const f64 = F64.fromNumber(Number.NEGATIVE_INFINITY);
|
|
74
|
+
expect(f64.isInfinite()).to.be.true;
|
|
75
|
+
expect(f64.isFinite()).to.be.false;
|
|
76
|
+
expect(f64.toNumber()).to.equal(Number.NEGATIVE_INFINITY);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('should handle NaN', () => {
|
|
80
|
+
const f64 = F64.fromNumber(Number.NaN);
|
|
81
|
+
expect(f64.isNaN()).to.be.true;
|
|
82
|
+
expect(f64.isFinite()).to.be.false;
|
|
83
|
+
expect(Number.isNaN(f64.toNumber())).to.be.true;
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('should handle negative zero', () => {
|
|
87
|
+
const f64 = F64.fromNumber(-0);
|
|
88
|
+
expect(f64.toNumber()).to.equal(-0);
|
|
89
|
+
expect(Object.is(f64.toNumber(), -0)).to.be.true;
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
describe('Serialization and deserialization', () => {
|
|
94
|
+
it('should serialize and deserialize correctly', () => {
|
|
95
|
+
const original = 123.456789;
|
|
96
|
+
const f64 = F64.fromNumber(original);
|
|
97
|
+
const serialized = f64.serialize();
|
|
98
|
+
const deserialized = F64.deserialize(serialized);
|
|
99
|
+
|
|
100
|
+
expect(deserialized.toNumber()).to.equal(original);
|
|
101
|
+
expect(deserialized.equals(f64)).to.be.true;
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it('should maintain exact binary representation for large numbers', () => {
|
|
105
|
+
const largeNum = 1.2345678901234567e100;
|
|
106
|
+
const f64 = F64.fromNumber(largeNum);
|
|
107
|
+
const serialized = f64.serialize();
|
|
108
|
+
const deserialized = F64.deserialize(serialized);
|
|
109
|
+
|
|
110
|
+
expect(deserialized.equals(f64)).to.be.true;
|
|
111
|
+
expect(deserialized.toHex()).to.equal(f64.toHex());
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('should handle round-trip with buffer', () => {
|
|
115
|
+
const testValues = [
|
|
116
|
+
0,
|
|
117
|
+
-0,
|
|
118
|
+
1,
|
|
119
|
+
-1,
|
|
120
|
+
Math.PI,
|
|
121
|
+
Math.E,
|
|
122
|
+
Number.MAX_SAFE_INTEGER,
|
|
123
|
+
Number.MIN_SAFE_INTEGER,
|
|
124
|
+
1.7976931348623157e308, // MAX_VALUE
|
|
125
|
+
2.2250738585072014e-308, // MIN_VALUE
|
|
126
|
+
];
|
|
127
|
+
|
|
128
|
+
testValues.forEach((value) => {
|
|
129
|
+
const f64 = F64.fromNumber(value);
|
|
130
|
+
const buffer = f64.getBuffer();
|
|
131
|
+
const restored = new F64(buffer);
|
|
132
|
+
expect(restored.equals(f64)).to.be.true;
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
describe('Hex representation', () => {
|
|
138
|
+
it('should convert to and from hex correctly', () => {
|
|
139
|
+
const f64 = F64.fromNumber(123.456);
|
|
140
|
+
const hex = f64.toHex();
|
|
141
|
+
const restored = F64.fromHex(hex);
|
|
142
|
+
|
|
143
|
+
expect(restored.equals(f64)).to.be.true;
|
|
144
|
+
expect(hex).to.be.a('string');
|
|
145
|
+
expect(hex.length).to.equal(16); // 8 bytes = 16 hex chars
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('should handle special values in hex', () => {
|
|
149
|
+
const testValues = [
|
|
150
|
+
{ value: 0, expectedHex: '0000000000000000' },
|
|
151
|
+
{ value: 1, expectedHex: '3ff0000000000000' },
|
|
152
|
+
{ value: -1, expectedHex: 'bff0000000000000' },
|
|
153
|
+
{ value: Number.POSITIVE_INFINITY, expectedHex: '7ff0000000000000' },
|
|
154
|
+
{ value: Number.NEGATIVE_INFINITY, expectedHex: 'fff0000000000000' },
|
|
155
|
+
];
|
|
156
|
+
|
|
157
|
+
testValues.forEach(({ value, expectedHex }) => {
|
|
158
|
+
const f64 = F64.fromNumber(value);
|
|
159
|
+
expect(f64.toHex()).to.equal(expectedHex);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
describe('Comparison operations', () => {
|
|
165
|
+
it('should compare F64 instances correctly', () => {
|
|
166
|
+
const a = F64.fromNumber(123.456);
|
|
167
|
+
const b = F64.fromNumber(123.456);
|
|
168
|
+
const c = F64.fromNumber(123.457);
|
|
169
|
+
|
|
170
|
+
expect(a.equals(b)).to.be.true;
|
|
171
|
+
expect(a.equals(c)).to.be.false;
|
|
172
|
+
expect(a.eq(123.456)).to.be.true;
|
|
173
|
+
expect(a.eq(123.457)).to.be.false;
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('should handle greater than comparisons', () => {
|
|
177
|
+
const a = F64.fromNumber(10);
|
|
178
|
+
const b = F64.fromNumber(5);
|
|
179
|
+
|
|
180
|
+
expect(a.gt(b)).to.be.true;
|
|
181
|
+
expect(b.gt(a)).to.be.false;
|
|
182
|
+
expect(a.gt(5)).to.be.true;
|
|
183
|
+
expect(a.gt(15)).to.be.false;
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
it('should handle less than comparisons', () => {
|
|
187
|
+
const a = F64.fromNumber(5);
|
|
188
|
+
const b = F64.fromNumber(10);
|
|
189
|
+
|
|
190
|
+
expect(a.lt(b)).to.be.true;
|
|
191
|
+
expect(b.lt(a)).to.be.false;
|
|
192
|
+
expect(a.lt(10)).to.be.true;
|
|
193
|
+
expect(a.lt(3)).to.be.false;
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
describe('Constants', () => {
|
|
198
|
+
it('should provide correct constant values', () => {
|
|
199
|
+
expect(F64.ZERO.toNumber()).to.equal(0);
|
|
200
|
+
expect(F64.ONE.toNumber()).to.equal(1);
|
|
201
|
+
expect(F64.NEGATIVE_ONE.toNumber()).to.equal(-1);
|
|
202
|
+
expect(F64.INFINITY.isInfinite()).to.be.true;
|
|
203
|
+
expect(F64.NEGATIVE_INFINITY.isInfinite()).to.be.true;
|
|
204
|
+
expect(F64.NaN.isNaN()).to.be.true;
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
describe('Precision test cases for DLC usage', () => {
|
|
209
|
+
it('should handle typical DLC payout curve parameters', () => {
|
|
210
|
+
// These are typical values that might appear in DLC payout curves
|
|
211
|
+
const testValues = [
|
|
212
|
+
1000000.0, // 1 million
|
|
213
|
+
50000.0, // Strike price
|
|
214
|
+
0.00000001, // Very small precision
|
|
215
|
+
1.7976931348623157e100, // Very large number
|
|
216
|
+
-50000.0, // Negative strike
|
|
217
|
+
0.0, // Zero
|
|
218
|
+
Math.PI * 1000000, // Irrational number scaled up
|
|
219
|
+
];
|
|
220
|
+
|
|
221
|
+
testValues.forEach((value) => {
|
|
222
|
+
const f64 = F64.fromNumber(value);
|
|
223
|
+
const serialized = f64.serialize();
|
|
224
|
+
const deserialized = F64.deserialize(serialized);
|
|
225
|
+
|
|
226
|
+
expect(deserialized.equals(f64)).to.be.true;
|
|
227
|
+
expect(deserialized.toNumber()).to.equal(value);
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it('should handle edge cases for financial calculations', () => {
|
|
232
|
+
// Test satoshi-level precision scaled to different units
|
|
233
|
+
const satoshi = 0.00000001; // 1 satoshi in BTC
|
|
234
|
+
const f64 = F64.fromNumber(satoshi);
|
|
235
|
+
|
|
236
|
+
expect(f64.toNumber()).to.equal(satoshi);
|
|
237
|
+
expect(f64.serialize().length).to.equal(8);
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
describe('Error handling', () => {
|
|
242
|
+
it('should throw error for invalid buffer size', () => {
|
|
243
|
+
expect(() => new F64(Buffer.alloc(4))).to.throw(
|
|
244
|
+
'F64 buffer must be exactly 8 bytes',
|
|
245
|
+
);
|
|
246
|
+
expect(() => new F64(Buffer.alloc(10))).to.throw(
|
|
247
|
+
'F64 buffer must be exactly 8 bytes',
|
|
248
|
+
);
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
it('should throw error for invalid hex string', () => {
|
|
252
|
+
expect(() => F64.fromHex('invalid')).to.throw(
|
|
253
|
+
'Hex string must represent exactly 8 bytes',
|
|
254
|
+
);
|
|
255
|
+
expect(() => F64.fromHex('1234')).to.throw(
|
|
256
|
+
'Hex string must represent exactly 8 bytes',
|
|
257
|
+
);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
});
|