From e80f340082b7694216b4454ca1c0e868ec5c58c9 Mon Sep 17 00:00:00 2001 From: KadenaFriend <241389759+kdafriend@users.noreply.github.com> Date: Fri, 4 Sep 2026 05:59:11 +0000 Subject: [PATCH 1/3] Implement Post-quantum --- cabal.project | 2 +- src/Chainweb/Pact5/InitialGasModel.hs | 26 +++++++++++++++++-- src/Chainweb/Pact5/TransactionExec.hs | 9 ++++++- src/Chainweb/Version.hs | 3 +++ src/Chainweb/Version/Development.hs | 2 +- src/Chainweb/Version/Guards.hs | 5 ++++ src/Chainweb/Version/Mainnet.hs | 5 ++++ src/Chainweb/Version/RecapDevelopment.hs | 5 +++- src/Chainweb/Version/Testnet04.hs | 1 + src/Chainweb/Version/Testnet06.hs | 10 +++++-- test/lib/Chainweb/Test/Pact5/CmdBuilder.hs | 1 + test/lib/Chainweb/Test/TestVersions.hs | 2 ++ .../Chainweb/Test/Pact5/RemotePactTest.hs | 6 ++--- 13 files changed, 66 insertions(+), 11 deletions(-) diff --git a/cabal.project b/cabal.project index f5a73a451d..b82495a635 100644 --- a/cabal.project +++ b/cabal.project @@ -100,7 +100,7 @@ source-repository-package source-repository-package type: git location: https://github.com/kda-community/pact-5 - tag: 72f427605406df61be8284091922f1fe1af7541b + tag: f8c98346a85e6d8267cd62e6cd83d9139e6c1e80 source-repository-package type: git diff --git a/src/Chainweb/Pact5/InitialGasModel.hs b/src/Chainweb/Pact5/InitialGasModel.hs index 6027a0b581..10db5f3871 100644 --- a/src/Chainweb/Pact5/InitialGasModel.hs +++ b/src/Chainweb/Pact5/InitialGasModel.hs @@ -1,12 +1,14 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE BangPatterns #-} +{-# LANGUAGE NumericUnderscores #-} module Chainweb.Pact5.InitialGasModel ( InitialGasModel(..) , pre31GasModel , post31GasModel , post32GasModel + , post33GasModel -- Lenses , feePerByte , rawPayloadSizeFactor @@ -18,8 +20,11 @@ module Chainweb.Pact5.InitialGasModel import Control.DeepSeq import Pact.Core.Scheme +import Pact.Core.Gas import Control.Lens +absoluteGasLimit :: Rational +absoluteGasLimit = fromIntegral $ _gas $ maxBound data InitialGasModel = InitialGasModel { _feePerByte :: Rational @@ -72,6 +77,23 @@ post32GasModel = InitialGasModel , _signatureSizeFactor = 1.0 , _sizePenalty = \x -> (x / 512) ^ (7 :: Integer) , _signatureCost = \case - ED25519 -> 21.0 -- | Benchmarked at 52 ns - WebAuthn -> 526.0 -- | Benchmarked at 1.315 ms (worst case) + ED25519 -> 21.0 -- | Benchmarked at 52 ns + WebAuthn -> 526.0 -- | Benchmarked at 1.315 ms (worst case) + _ -> absoluteGasLimit -- | Make sure the transaction will fail for unsupported schemes => Should never happen + } + + +post33GasModel :: InitialGasModel +post33GasModel = InitialGasModel + { _feePerByte = 0.01 + , _rawPayloadSizeFactor = 1.0 + , _proofSizeFactor = 1.0 + , _signatureSizeFactor = 1.0 + , _sizePenalty = \x -> (x / 512) ^ (7 :: Integer) + , _signatureCost = \case + ED25519 -> 21.0 -- | Benchmarked at 52 ns + WebAuthn -> 526.0 -- | Benchmarked at 1.315 ms (worst case) + SlhDsaSha128s -> 816.0 -- | Becnhmarked at 2.04 ms with OpenSSL backend + SlhDsaSha192s -> 1584.0 -- | Benchmarked at 3.96 ms with OpenSSL backend + SlhDsaSha256s -> 3992.0 -- | Benchmarked at 9.98 ms with OpenSSL backend } diff --git a/src/Chainweb/Pact5/TransactionExec.hs b/src/Chainweb/Pact5/TransactionExec.hs index f88e8b3d7f..785d866138 100644 --- a/src/Chainweb/Pact5/TransactionExec.hs +++ b/src/Chainweb/Pact5/TransactionExec.hs @@ -320,6 +320,7 @@ applyLocal logger maybeGasLogger coreDb txCtx spvSupport cmd = do , guardDisablePact52And53Flags , guardDisablePact54Flags , guardDisablePact54FixFlags + , guardDisablePostQuantum ] -- | The main entry point to executing transactions. From here, @@ -360,6 +361,7 @@ applyCmd logger maybeGasLogger db txCtx txIdxInBlock spv initialGas cmd = do , guardDisablePact52And53Flags , guardDisablePact54Flags , guardDisablePact54FixFlags + , guardDisablePostQuantum ] let gasLogsEnabled = maybe GasLogsDisabled (const GasLogsEnabled) maybeGasLogger @@ -1063,4 +1065,9 @@ guardDisablePact54Flags txCtx guardDisablePact54FixFlags :: TxContext -> Set ExecutionFlag guardDisablePact54FixFlags txCtx | guardCtx' chainweb32 txCtx = Set.empty - | otherwise = Set.singleton FlagDisablePact54Fix \ No newline at end of file + | otherwise = Set.singleton FlagDisablePact54Fix + +guardDisablePostQuantum :: TxContext -> Set ExecutionFlag +guardDisablePostQuantum txCtx + | guardCtx' chainweb33 txCtx = Set.empty + | otherwise = Set.singleton FlagDisableSlhDsaSignatures \ No newline at end of file diff --git a/src/Chainweb/Version.hs b/src/Chainweb/Version.hs index 13c12d9620..104e4ab273 100644 --- a/src/Chainweb/Version.hs +++ b/src/Chainweb/Version.hs @@ -241,6 +241,7 @@ data Fork | Chainweb231Pact | Chainweb31 | Chainweb32 + | Chainweb33 | MigratePlatformShare -- always add new forks at the end, not in the middle of the constructors. deriving stock (Bounded, Generic, Eq, Enum, Ord, Show) @@ -283,6 +284,7 @@ instance HasTextRepresentation Fork where toText Chainweb231Pact = "chainweb231Pact" toText Chainweb31 = "Chainweb31" toText Chainweb32 = "Chainweb32" + toText Chainweb33 = "Chainweb33" toText MigratePlatformShare = "migratePlatformShare" fromText "slowEpoch" = return SlowEpoch @@ -321,6 +323,7 @@ instance HasTextRepresentation Fork where fromText "chainweb231Pact" = return Chainweb231Pact fromText "Chainweb31" = return Chainweb31 fromText "Chainweb32" = return Chainweb32 + fromText "Chainweb33" = return Chainweb33 fromText "migratePlatformShare" = return MigratePlatformShare fromText t = throwM . TextFormatException $ "Unknown Chainweb fork: " <> t diff --git a/src/Chainweb/Version/Development.hs b/src/Chainweb/Version/Development.hs index c8437f3a06..38e267a0f0 100644 --- a/src/Chainweb/Version/Development.hs +++ b/src/Chainweb/Version/Development.hs @@ -54,7 +54,7 @@ devnet = ChainwebVersion -- defaultChainwebConfiguration._configBlockGasLimit , _versionMaxBlockGasLimit = Bottom (minBound, Nothing) , _versionSpvProofRootValidWindow = Bottom (minBound, Nothing) - , _versionInitialGasModel = AllChains $ Bottom (minBound, post32GasModel) + , _versionInitialGasModel = AllChains $ Bottom (minBound, post33GasModel) , _versionCheats = VersionCheats { _disablePow = True , _fakeFirstEpochStart = True diff --git a/src/Chainweb/Version/Guards.hs b/src/Chainweb/Version/Guards.hs index 296dd19c3c..7f7cf2eb89 100644 --- a/src/Chainweb/Version/Guards.hs +++ b/src/Chainweb/Version/Guards.hs @@ -52,6 +52,7 @@ module Chainweb.Version.Guards , chainweb231Pact , chainweb31 , chainweb32 + , chainweb33 , migratePlatformShare , pact5 , pact44NewTrans @@ -329,6 +330,10 @@ chainweb31 = checkFork atOrAfter Chainweb31 chainweb32 :: ChainwebVersion -> ChainId -> ForkNumber -> Bool chainweb32 = checkFork' atOrAfter Chainweb32 +-- | Pact Post-Quantum +chainweb33 :: ChainwebVersion -> ChainId -> ForkNumber -> Bool +chainweb33 = checkFork' atOrAfter Chainweb33 + migratePlatformShare :: ChainwebVersion -> ChainId -> BlockHeight -> Bool migratePlatformShare = checkFork atNotGenesis MigratePlatformShare diff --git a/src/Chainweb/Version/Mainnet.hs b/src/Chainweb/Version/Mainnet.hs index b266440ff0..d9d27ea8a8 100644 --- a/src/Chainweb/Version/Mainnet.hs +++ b/src/Chainweb/Version/Mainnet.hs @@ -159,6 +159,7 @@ mainnet = ChainwebVersion MigratePlatformShare -> AllChains (ForkAtBlockHeight $ BlockHeight 6_335_858) -- 2025-11-07 04:00:00+00:00 Chainweb31 -> AllChains (ForkAtBlockHeight $ BlockHeight 6_510_742) -- 2026-01-08 00:00:00+00:00 Chainweb32-> AllChains (ForkAtForkNumber 1) + Chainweb33-> AllChains (ForkAtForkNumber 2) , _versionGraphs = (to20ChainsMainnet, twentyChainGraph) @@ -168,6 +169,8 @@ mainnet = ChainwebVersion , _versionWindow = WindowWidth 120 , _versionHeaderBaseSizeBytes = 318 - 110 , _versionAllowedSignatureSchemes = AllChains $ + (afterFork mainnet Chainweb33, Set.fromList $ SchemeV5 <$> [Pact5.ED25519, Pact5.WebAuthn, Pact5.SlhDsaSha128s, Pact5.SlhDsaSha192s, Pact5.SlhDsaSha256s]) + `Above` (afterFork mainnet Pact5Fork, Set.fromList $ SchemeV5 <$> [Pact5.ED25519, Pact5.WebAuthn]) `Above` (afterFork mainnet Chainweb221Pact, Set.fromList $ SchemeV4 <$> [Pact4.ED25519, Pact4.WebAuthn]) @@ -180,6 +183,8 @@ mainnet = ChainwebVersion Bottom (minBound, Nothing) , _versionInitialGasModel = AllChains $ + (afterFork mainnet Chainweb33, post33GasModel) + `Above` (afterFork mainnet Chainweb32, post32GasModel) `Above` (succByHeight $ afterFork mainnet Chainweb31, post31GasModel) diff --git a/src/Chainweb/Version/RecapDevelopment.hs b/src/Chainweb/Version/RecapDevelopment.hs index 38904a8b6a..02d28de9e1 100644 --- a/src/Chainweb/Version/RecapDevelopment.hs +++ b/src/Chainweb/Version/RecapDevelopment.hs @@ -84,6 +84,7 @@ recapDevnet = ChainwebVersion MigratePlatformShare -> AllChains $ ForkAtBlockHeight $ BlockHeight 700 Chainweb31 -> AllChains $ ForkAtBlockHeight $ BlockHeight 710 Chainweb32 -> AllChains $ ForkAtGenesis + Chainweb33 -> AllChains $ ForkAtGenesis -- TODO Something wrong here , _versionUpgrades = foldr (chainZip HM.union) (AllChains mempty) [ indexByForkHeights recapDevnet @@ -119,13 +120,15 @@ recapDevnet = ChainwebVersion , _versionMaxBlockGasLimit = Bottom (minBound, Just 180_000) , _versionInitialGasModel = AllChains $ - (ForkNever, post32GasModel) + (ForkNever, post33GasModel) -- TODO Something wrong here `Above` (succByHeight $ afterFork recapDevnet Chainweb231Pact, post31GasModel) `Above` Bottom (minBound, pre31GasModel) , _versionAllowedSignatureSchemes = AllChains $ + (afterFork recapDevnet Chainweb33, Set.fromList $ SchemeV5 <$> [Pact5.ED25519, Pact5.WebAuthn, Pact5.SlhDsaSha128s, Pact5.SlhDsaSha192s, Pact5.SlhDsaSha256s]) + `Above` (afterFork recapDevnet Pact5Fork, Set.fromList $ SchemeV5 <$> [Pact5.ED25519, Pact5.WebAuthn]) `Above` (afterFork recapDevnet Chainweb221Pact, Set.fromList $ SchemeV4 <$> [Pact4.ED25519, Pact4.WebAuthn]) diff --git a/src/Chainweb/Version/Testnet04.hs b/src/Chainweb/Version/Testnet04.hs index 31040b4a55..02ce995af3 100644 --- a/src/Chainweb/Version/Testnet04.hs +++ b/src/Chainweb/Version/Testnet04.hs @@ -140,6 +140,7 @@ testnet04 = ChainwebVersion Chainweb231Pact -> AllChains $ ForkAtBlockHeight $ BlockHeight 5_783_985 -- 2025-10-15 12:00:00+00:00 Chainweb31 -> AllChains ForkNever Chainweb32 -> AllChains ForkNever + Chainweb33 -> AllChains ForkNever MigratePlatformShare -> AllChains ForkNever , _versionGraphs = (to20ChainsTestnet, twentyChainGraph) diff --git a/src/Chainweb/Version/Testnet06.hs b/src/Chainweb/Version/Testnet06.hs index e3d4e4bd59..71e59fe9da 100644 --- a/src/Chainweb/Version/Testnet06.hs +++ b/src/Chainweb/Version/Testnet06.hs @@ -23,6 +23,7 @@ import Chainweb.Version import P2P.BootstrapNodes import Pact.Types.Verifier +import qualified Pact.Core.Scheme as Pact5 (PPKScheme(..)) import qualified Chainweb.Pact.Transactions.OtherTransactions as CoinV2 import qualified Chainweb.Pact.Transactions.CoinV3Transactions as CoinV3 @@ -79,6 +80,7 @@ testnet06 = ChainwebVersion Chainweb231Pact -> AllChains $ ForkAtBlockHeight $ BlockHeight 690 Chainweb31 -> AllChains $ ForkAtBlockHeight $ BlockHeight 700 Chainweb32-> AllChains (ForkAtForkNumber 1) + Chainweb33-> AllChains (ForkAtForkNumber 2) MigratePlatformShare -> AllChains $ ForkNever , _versionUpgrades = foldr (chainZip HM.union) (AllChains mempty) @@ -107,6 +109,8 @@ testnet06 = ChainwebVersion ] } , _versionInitialGasModel = AllChains $ + (afterFork testnet06 Chainweb33, post33GasModel) + `Above` (afterFork testnet06 Chainweb32, post32GasModel) `Above` Bottom (minBound, post31GasModel) @@ -125,8 +129,10 @@ testnet06 = ChainwebVersion (ForkAtBlockHeight $ BlockHeight 600, Set.fromList $ map VerifierName ["hyperlane_v3_message"]) `Above` Bottom (minBound, mempty) - , _versionAllowedSignatureSchemes = - AllChains $ Bottom (minBound, Set.empty) + , _versionAllowedSignatureSchemes = AllChains $ + (afterFork testnet06 Chainweb33, Set.fromList $ SchemeV5 <$> [Pact5.ED25519, Pact5.WebAuthn, Pact5.SlhDsaSha128s, Pact5.SlhDsaSha192s, Pact5.SlhDsaSha256s]) + `Above` + Bottom (minBound, Set.fromList $ SchemeV5 <$> [Pact5.ED25519, Pact5.WebAuthn]) , _versionQuirks = noQuirks , _versionForkNumber = 1 , _versionForkVoteCastingLength = 120 * 119 -- 5 days diff --git a/test/lib/Chainweb/Test/Pact5/CmdBuilder.hs b/test/lib/Chainweb/Test/Pact5/CmdBuilder.hs index 2672b553bd..5870c0c6cc 100644 --- a/test/lib/Chainweb/Test/Pact5/CmdBuilder.hs +++ b/test/lib/Chainweb/Test/Pact5/CmdBuilder.hs @@ -262,6 +262,7 @@ mkDynKeyPairs (CmdSigner Signer{..} privKey) = privWebAuthn <- either diePrivKey return (parseWebAuthnPrivateKey =<< parseB16TextOnly priv) return $ (DynWebAuthnKeyPair wasPrefixed pubWebAuthn privWebAuthn, _siCapList) + _ -> error "SLH DSA not implemented here for now" where diePubKey str = error $ "pubkey: " <> str diePrivKey str = error $ "privkey: " <> str diff --git a/test/lib/Chainweb/Test/TestVersions.hs b/test/lib/Chainweb/Test/TestVersions.hs index cc5e457679..44449b489a 100644 --- a/test/lib/Chainweb/Test/TestVersions.hs +++ b/test/lib/Chainweb/Test/TestVersions.hs @@ -346,6 +346,7 @@ slowForks = tabulateHashMap \case Chainweb231Pact -> AllChains $ ForkAtBlockHeight (BlockHeight 160) MigratePlatformShare -> AllChains $ ForkAtBlockHeight (BlockHeight 165) Chainweb31 -> AllChains $ ForkAtBlockHeight (BlockHeight 170) + Chainweb33 -> AllChains ForkNever -- | A set of fork heights which are relatively fast, but not fast enough to break anything. @@ -388,6 +389,7 @@ fastForks = tabulateHashMap $ \case Chainweb231Pact -> AllChains $ ForkAtBlockHeight $ BlockHeight 54 Chainweb31 -> AllChains $ ForkAtBlockHeight $ BlockHeight 56 MigratePlatformShare -> AllChains ForkNever + Chainweb33 -> AllChains ForkNever -- | CPM version (see `cpmTestVersion`) with forks and upgrades slowly enabled. slowForkingCpmTestVersion :: ChainGraph -> ChainwebVersion diff --git a/test/unit/Chainweb/Test/Pact5/RemotePactTest.hs b/test/unit/Chainweb/Test/Pact5/RemotePactTest.hs index 7c4f2c7cf3..ed3fd44c0d 100644 --- a/test/unit/Chainweb/Test/Pact5/RemotePactTest.hs +++ b/test/unit/Chainweb/Test/Pact5/RemotePactTest.hs @@ -474,7 +474,7 @@ sendInvalidTxsTest rdb = withResourceT (mkFixture v rdb) $ \fx -> { -- This is an invalid ED25519 signature, -- but length signers == length signatures is checked first - _cmdSigs = [ED25519Sig "fakeSig"] + _cmdSigs = [PlainSig "fakeSig"] } send fx v cid [cmdSignersSigsLengthMismatch2] & P.throws ? P.match _FailureResponse ? P.fun responseBody ? textContains @@ -609,7 +609,7 @@ sendInvalidTxsTest rdb = withResourceT (mkFixture v rdb) $ \fx -> validationFailed i cmd msg = "Transaction " <> sshow (_cmdHash cmd) <> " at index " <> sshow @Int i <> " failed with: " <> msg - mkCmdInvalidUserSig = mkCmdGood <&> set cmdSigs [ED25519Sig "fakeSig"] + mkCmdInvalidUserSig = mkCmdGood <&> set cmdSigs [PlainSig "fakeSig"] mkCmdGood = buildTextCmd v $ set cbRPC (mkExec "(+ 1 2)" (mkKeySetData "sender00" [sender00])) @@ -1102,7 +1102,7 @@ localTests baseRdb = let goodCmdHash <- _cmdHash <$> buildTextCmd v buildSender00Cmd sender01KeyPair <- either error return $ importEd25519KeyPair Nothing (PrivBS $ either error id $ B16.decode $ T.encodeUtf8 $ snd sender01) - let sender01Sig = ED25519Sig $ T.decodeUtf8 $ B16.encode $ exportEd25519Signature $ + let sender01Sig = PlainSig $ T.decodeUtf8 $ B16.encode $ exportEd25519Signature $ signEd25519 (fst sender01KeyPair) (snd sender01KeyPair) goodCmdHash buildTextCmd v buildSender00Cmd From b81a3f4bfc5ec30fa6f506a241bec6c67a951693 Mon Sep 17 00:00:00 2001 From: Pascal <95504829+CryptoPascal31@users.noreply.github.com> Date: Sun, 18 Oct 2026 13:18:04 +0200 Subject: [PATCH 2/3] Update GHC and Cabal versions in workflow Update GHC version to the latest 9.10.x revision. Freeze cabal version: freezing GHC while not freezing Cabal was a non sense, in leaded to broken builds --- .github/workflows/applications.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/applications.yml b/.github/workflows/applications.yml index e017571e50..5f9e7b83e4 100644 --- a/.github/workflows/applications.yml +++ b/.github/workflows/applications.yml @@ -141,15 +141,15 @@ jobs: MATRIX="$(jq -c '.' < Date: Sun, 18 Oct 2026 11:55:44 +0000 Subject: [PATCH 3/3] Update freeze file after GHC 9.10.3 transition --- cabal.project.freeze | 131 +++++++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 61 deletions(-) diff --git a/cabal.project.freeze b/cabal.project.freeze index d2178df5de..d75da4415f 100644 --- a/cabal.project.freeze +++ b/cabal.project.freeze @@ -12,9 +12,11 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.Only ==0.1, any.QuickCheck ==2.18.0.0, QuickCheck -old-random +templatehaskell, + any.SHA ==1.6.4.4, + SHA -exe, any.StateVar ==1.2.2, any.adjunctions ==4.4.4, - any.aeson ==2.2.5.0, + any.aeson ==2.2.5.1, aeson +ordered-keymap, any.aeson-pretty ==0.8.11, aeson-pretty -lib-only, @@ -26,7 +28,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, ap-normalize -test-with-clang, any.appar ==0.1.8, any.array ==0.5.8.0, - any.asciidoc ==0.1.0.3, + any.asciidoc ==0.1.1.1, any.asn1-encoding ==0.9.6, any.asn1-types ==0.3.4, any.assoc ==1.1.1, @@ -38,9 +40,9 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.attoparsec ==0.14.4, attoparsec -developer, any.attoparsec-aeson ==2.2.2.0, - any.auto-update ==0.2.6, + any.auto-update ==0.2.8, any.barbies ==2.1.1.0, - any.base ==4.20.1.0, + any.base ==4.20.2.0, any.base-compat ==0.15.0, any.base-compat-batteries ==0.15.0, any.base-orphans ==0.9.4, @@ -48,7 +50,8 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, base-unicode-symbols +base-4-8 -old-base, any.base16 ==1.0, any.base16-bytestring ==1.0.2.0, - any.base64 ==1.0, + any.base64 ==2.0, + base64 -simd, any.base64-bytestring ==1.2.1.0, any.base64-bytestring-kadena ==0.1, any.basement ==0.0.16, @@ -77,7 +80,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.bytestring ==0.12.2.0, any.bytestring-builder ==0.10.8.2.0, bytestring-builder +bytestring_has_builder, - any.cabal-doctest ==1.0.12, + any.cabal-doctest ==1.0.13, any.cache ==0.1.3.0, any.call-stack ==0.4.0, any.case-insensitive ==1.2.1.0, @@ -91,7 +94,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.character-ps ==0.1, any.charset ==0.3.12, any.chronos ==1.1.7.0, - any.citeproc ==0.13.0.1, + any.citeproc ==0.14.1, citeproc -executable -icu, any.clock ==0.8.4, clock -llvm, @@ -100,9 +103,9 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.co-log-core ==0.3.2.7, any.code-page ==0.2.1, any.colour ==2.3.7, - any.commonmark ==0.3, - any.commonmark-extensions ==0.2.7, - any.commonmark-pandoc ==0.3, + any.commonmark ==0.3.1, + any.commonmark-extensions ==0.2.7.3, + any.commonmark-pandoc ==0.3.0.2, any.comonad ==5.0.10, comonad +containers +distributive +indexed-traversable, any.concurrent-output ==1.10.21, @@ -123,7 +126,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.crypto-token ==0.2.0, any.cryptohash-md5 ==0.11.101.0, any.cryptohash-sha1 ==0.11.101.0, - any.crypton ==1.1.4, + any.crypton ==2.0.1, crypton -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq +support_pclmuldq +support_rdrand -support_sse +use_target_attributes, any.crypton-asn1-encoding ==0.10.0, any.crypton-asn1-parse ==0.10.0, @@ -132,7 +135,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.crypton-pem ==0.3.0, any.crypton-socks ==0.6.2, crypton-socks -example +network-3-0-0-0, - any.crypton-x509 ==1.9.1, + any.crypton-x509 ==1.9.2, any.crypton-x509-store ==1.9.0, any.crypton-x509-system ==1.9.0, any.crypton-x509-validation ==1.9.1, @@ -157,11 +160,11 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.directory ==1.3.8.5, any.distributive ==0.6.3, distributive +tagged, - any.djot ==0.1.4, + any.djot ==0.1.4.3, any.dlist ==1.0, dlist -werror, - any.doclayout ==0.5.0.3, - any.doctemplates ==0.11.0.1, + any.doclayout ==0.6, + any.doctemplates ==0.11.1, any.easy-file ==0.2.5, any.ech-config ==0.0.1, ech-config -devel, @@ -174,22 +177,24 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.ethereum ==0.1.1, ethereum -ethhash -openssl-use-pkg-config, any.exceptions ==0.10.9, - any.fast-logger ==3.2.6, + any.extra ==1.8.1, + any.fast-logger ==3.2.8, any.file-embed ==0.0.16.0, any.filepath ==1.5.4.0, any.fingertree ==0.1.6.3, any.finite-typelits ==0.2.1.0, any.free ==5.2, + any.generic-arbitrary ==1.0.1.2, any.generic-data ==1.1.0.2, generic-data -enable-inspect, any.generic-lens ==2.3.0.0, any.generic-lens-core ==2.3.0.0, any.generics-sop ==0.5.1.4, any.ghc-bignum ==1.3, - any.ghc-boot-th ==9.10.2, + any.ghc-boot-th ==9.10.3, any.ghc-compact ==0.1.0.0, - any.ghc-heap ==9.10.2, - any.ghc-internal ==9.1002.0, + any.ghc-heap ==9.10.3, + any.ghc-internal ==9.1003.0, any.ghc-prim ==0.12.0, any.gridtables ==0.1.1.0, any.groups ==0.5.3, @@ -209,7 +214,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.heaps ==0.4.1, any.hedgehog ==1.7, any.hourglass ==0.2.12, - any.hpke ==0.1.0, + any.hpke ==0.2.1, any.hsc2hs ==0.68.10, hsc2hs -in-ghc-tree, any.http-api-data ==0.7, @@ -219,9 +224,9 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.http-client-tls ==0.4.0, any.http-date ==0.0.11, any.http-media ==0.8.1.1, - any.http-semantics ==0.4.0, - any.http-types ==0.12.5, - any.http2 ==5.4.1, + any.http-semantics ==0.4.1, + any.http-types ==0.12.6, + any.http2 ==5.4.9, http2 -devel -h2spec, any.indexed-list-literals ==0.2.1.3, any.indexed-profunctors ==0.1.1.1, @@ -249,16 +254,16 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.lifted-base ==0.2.3.12, any.loglevel ==0.1.0.0, any.lrucaching ==0.3.5, - any.lsp ==2.3.0.0, + any.lsp ==2.8.0.0, lsp -demo, - any.lsp-types ==2.1.0.0, + any.lsp-types ==2.4.0.0, lsp-types -force-ospath, any.managed ==1.0.11, any.massiv ==1.0.5.0, massiv -unsafe-checks, any.math-functions ==0.3.4.4, math-functions +system-erf +system-expm1, - any.megaparsec ==9.8.1, + any.megaparsec ==9.8.3, megaparsec -dev, any.memory ==0.18.0, memory +support_bytestring +support_deepseq, @@ -266,7 +271,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.microlens ==0.5.0.0, any.microstache ==1.0.3.1, any.mime-types ==0.1.2.2, - any.mlkem ==0.2.2.0, + any.mlkem ==0.2.3.0, mlkem +use_crypton, any.mmorph ==1.2.2, any.mod ==0.2.2.0, @@ -279,22 +284,22 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.mwc-probability ==2.3.1, any.mwc-random ==0.15.3.0, mwc-random -benchpapi, - any.natural-arithmetic ==0.2.3.0, + any.natural-arithmetic ==0.2.4.0, any.neat-interpolation ==0.5.1.4, - any.network ==3.2.8.0, + any.network ==3.2.9.0, network -devel, any.network-byte-order ==0.1.8, any.network-control ==0.1.7, any.network-info ==0.2.1, any.network-uri ==2.6.4.2, - any.nothunks ==0.3.1, + any.nothunks ==0.3.2, nothunks +bytestring +text +vector, any.old-locale ==1.0.0.7, any.old-time ==1.1.1.0, any.optparse-applicative ==0.19.0.0, optparse-applicative +process, any.ordered-containers ==0.2.4, - any.os-string ==2.0.4, + any.os-string ==2.0.7, any.pact ==4.13.2, pact -build-tool +cryptonite-ed25519 -tests-in-lib, any.pact-json ==0.1.0.0, @@ -302,8 +307,8 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, pact-time -with-time, any.pact-tng ==5.4.1, pact-tng +with-crypto +with-funcall-tracing +with-native-tracing, - any.pandoc ==3.10, - pandoc -embed_data_files +http, + any.pandoc ==3.12.1, + pandoc +embed_data_files +http, any.pandoc-types ==1.23.1.2, any.parallel ==3.3.0.0, any.parsec ==3.1.18.0, @@ -327,26 +332,26 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.primitive-addr ==0.1.0.3, any.primitive-offset ==0.2.0.1, any.primitive-unlifted ==2.1.0.0, - any.process ==1.6.25.0, + any.process ==1.6.26.1, any.profunctors ==5.6.3, any.property-matchers ==0.7.0.0, any.psqueues ==0.2.8.3, any.pvar ==1.0.0.0, any.quickcheck-instances ==0.4, any.ralist ==0.4.1.0, - any.ram ==0.22.0, + any.ram ==0.22.1, any.random ==1.3.1, any.recover-rtti ==0.5.3, - any.recv ==0.1.1, + any.recv ==0.1.2, any.reducers ==3.12.5, any.reflection ==2.1.9, reflection -slow +template-haskell, any.regex ==1.1.0.2, any.regex-base ==0.94.0.3, any.regex-pcre-builtin ==0.95.2.3.8.44, - any.regex-tdfa ==1.3.2.5, + any.regex-tdfa ==1.3.2.6, regex-tdfa +doctest -force-o2, - any.resource-pool ==0.5.0.1, + any.resource-pool ==0.5.1.0, any.resourcet ==1.3.0, any.retry ==0.9.3.1, retry -lib-werror, @@ -359,7 +364,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.safe-exceptions ==0.1.7.4, any.safecopy ==0.10.4.3, any.scheduler ==2.0.1.0, - any.scientific ==0.3.8.1, + any.scientific ==0.3.9.0, scientific -integer-simple, any.selective ==0.7.0.1, any.semialign ==1.4, @@ -380,20 +385,20 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.simple-sendfile ==0.2.32, simple-sendfile +allow-bsd -fallback, any.singleton-bool ==0.1.8, - any.skylighting ==0.14.7, + any.skylighting ==0.15, skylighting -executable, - any.skylighting-core ==0.14.7, + any.skylighting-core ==0.15, skylighting-core -executable, any.skylighting-format-ansi ==0.1, - any.skylighting-format-blaze-html ==0.1.2, + any.skylighting-format-blaze-html ==0.1.2.2, any.skylighting-format-context ==0.1.0.2, any.skylighting-format-latex ==0.1, any.skylighting-format-typst ==0.1, - any.some ==1.1, + any.some ==1.0.6, some +newtype-unsafe, any.sop-core ==0.5.0.2, - any.sorted-list ==0.2.3.1, - any.split ==0.2.5, + any.sorted-list ==0.3.1.0, + any.split ==0.2.5.1, any.splitmix ==0.1.3.2, splitmix -optimised-mixer, any.statistics ==0.16.5.0, @@ -408,7 +413,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.strict ==0.5.1, any.strict-concurrency ==0.2.4.3, any.syb ==0.7.4, - any.tagged ==0.8.10, + any.tagged ==0.8.11, tagged +deepseq +template-haskell, any.tagsoup ==0.14.8, any.tasty ==1.5.4, @@ -424,11 +429,13 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.terminal-progress-bar ==0.4.2, any.terminal-size ==0.3.4, any.terminfo ==0.4.1.7, - any.texmath ==0.13.1.2, + any.texmath ==0.13.3.1, texmath -executable -server, - any.text ==2.1.2, + any.text ==2.1.3, + any.text-builder ==1.0.0.5, + any.text-builder-core ==0.1.1.3, any.text-conversions ==0.3.1.1, - any.text-iso8601 ==0.1.1.1, + any.text-iso8601 ==0.1.1.2, any.text-rope ==0.3, text-rope -debug, any.text-short ==0.1.6.1, @@ -446,8 +453,8 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.time-hourglass ==0.3.0, any.time-locale-compat ==0.1.1.5, time-locale-compat +old-locale, - any.time-manager ==0.3.2, - any.tls ==2.4.3, + any.time-manager ==0.4.0, + any.tls ==2.4.6, tls -devel, any.tls-session-manager ==0.1.0, any.token-bucket ==0.1.0.1, @@ -462,20 +469,20 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.trifecta ==2.1.4, any.tuples ==0.1.0.0, any.typed-process ==0.2.13.0, - any.typst ==0.10, + any.typst ==0.12, typst -executable, - any.typst-symbols ==0.2, + any.typst-symbols ==0.3, any.unicode-collation ==0.1.3.7, unicode-collation -doctests -executable -icu-benchmark, - any.unicode-data ==0.8.0, + any.unicode-data ==0.9.0, unicode-data -dev-has-icu, any.unicode-transforms ==0.4.0.1, unicode-transforms -bench-show -dev -has-icu -has-llvm -use-gauge, any.uniplate ==1.6.13, - any.unix ==2.8.6.0, + any.unix ==2.8.7.0, any.unix-compat ==0.7.4.1, any.unix-time ==0.5.0, - any.unlifted ==0.2.3.0, + any.unlifted ==0.2.4.0, any.unliftio ==0.2.25.1, any.unliftio-core ==0.2.1.0, any.unordered-containers ==0.2.21, @@ -496,7 +503,7 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.vector-th-unbox ==0.2.2, any.void ==0.7.4, void -safe, - any.wai ==3.2.4, + any.wai ==3.2.5, any.wai-app-static ==3.2.1, wai-app-static -print, any.wai-cors ==0.2.7, @@ -505,13 +512,15 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.wai-logger ==2.5.0, any.wai-middleware-throttle ==0.3.0.1, any.wai-middleware-validation ==0.1.0.2, - any.warp ==3.4.13.1, + any.warp ==3.4.16, warp +allow-sendfilefd +include-warp-version -network-bytestring -warp-debug +x509, any.warp-tls ==3.4.14, + any.websockets ==0.13.0.0, + websockets -example, any.wherefrom-compat ==0.2.0.0, any.wide-word ==0.1.9.0, any.witherable ==0.5, - any.wl-pprint-annotated ==0.1.0.1, + any.wl-pprint-annotated ==0.1.0.2, any.word8 ==0.1.3, any.xml ==1.3.14, any.xml-conduit ==1.10.1.0, @@ -521,8 +530,8 @@ constraints: any.Cabal ==3.12.1.0 || ==3.14.2.0, any.yet-another-logger ==0.4.2, yet-another-logger -tbmqueue, any.zigzag ==0.1.0.0, - any.zip-archive ==0.4.3.2, + any.zip-archive ==0.5, zip-archive -executable, any.zlib ==0.7.1.1, zlib -bundled-c-zlib +non-blocking-ffi +pkg-config -index-state: hackage.haskell.org 2026-07-10T18:26:37Z +index-state: hackage.haskell.org 2026-10-18T08:35:38Z