Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,77 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

#### Purescript lbr-plutus -->

## LambdaBuffers v2.1.0

Cardano van Rossem hard fork (intra-era Conway, major protocol version 11) support,
with all Cardano-related dependencies updated to current PV11-compatible versions.

The van Rossem hard fork introduces new Plutus builtins (CIP-109 `expModInteger`,
CIP-132 `dropList`, CIP-133 BLS12-381 multi-scalar multiplication, CIP-138 arrays,
CIP-153 `Value` builtins) and updated cost models, without a new ledger era or a new
Plutus ledger language version. No LambdaBuffers API or serialization changes were
required; all serialization formats remain backward compatible.

Notable dependency and Nix environment changes:

- All Haskell Plutus projects are pinned to a uniform
`plutus-core`/`plutus-ledger-api`/`plutus-tx`/`plutus-tx-plugin` `==1.65.0.0`
(the newest version supported by Plutarch; PV11-capable, which requires `>=1.63`),
resolved from Cardano Haskell Packages (CHaP) at rev `f77658b` (2026-07).
- The GHC compiler was bumped from 9.6.7 to **9.12.1**. This is required: Plutarch 1.14
uses `TypeAbstractions` (GHC `>=9.8`), while `plutus-tx-plugin` 1.65 is only buildable
on GHC 9.6.x or 9.12.x — GHC 9.12 is the only version that satisfies both.
- The `flake-lang` input is pinned and its `cardano-haskell-packages` (CHaP) input is
overridden to the 2026-07 rev for plutus 1.65. haskell.nix and its bundled hackage.nix
are left at flake-lang's defaults (whose GHC 9.12.1 is cache-built), so the Hackage
index-state stays at `2025-09-27`. The few packages that only gained GHC 9.12 support
later than that — `proto-lens` 0.7.1.7 — are injected per-project as haskell.nix
extraHackage source dependencies (`settings.haskell.proto-lens-deps`) rather than via a
hackage input override, which keeps the flake evaluable by Hercules CI in pure mode.
- Plutarch bumped to [1.14.0](https://github.com/Plutonomicon/plutarch-plutus/tree/c3b4771901b2bc5ba0c1e1fed66de3c0f5523069)
(`ClosedTerm` removed, `PMap`/`PValue` replaced by `PSortedMap`/`PSortedValue`;
the lbr-plutarch runtime was migrated accordingly).
- Purescript projects bumped to [purescript-cardano-package-set v4.1.0](https://github.com/mlabs-haskell/purescript-cardano-package-set/tree/v4.1.0)
and cardano-transaction-lib pinned to the [van Rossem compatibility PR #1687](https://github.com/Plutonomicon/cardano-transaction-lib/pull/1687)
(to be re-pinned once merged).
- Rust testsuite bumped to [plutus-ledger-api 3.1.0](https://crates.io/crates/plutus-ledger-api/3.1.0).
- The shared dev shell now includes `nix-prefetch-git` (required by `spago2nix generate`).

### Schemas

#### lbf-plutus

##### Purescript

Target: [cardano-transaction-lib van Rossem HF compatibility (PR #1687, unreleased)](https://github.com/Plutonomicon/cardano-transaction-lib/tree/eedf26dda9cb19088975981af8e2311b054c2f07)

##### Rust

Target: [plutus-ledger-api 3.1.0](https://crates.io/crates/plutus-ledger-api/3.1.0)

##### Haskell

Target: [plutus-tx 1.65.0.0](https://github.com/IntersectMBO/plutus/releases/tag/1.65.0.0) on [ghc 9.12.1](https://www.haskell.org/ghc/download_ghc_9_12_1.html)

##### Typescript

Target: [plutus-ledger-api-typescript 1.2.2](https://github.com/mlabs-haskell/plutus-ledger-api-typescript/releases/tag/v1.2.2) (unchanged)

##### Plutarch

Target: [plutarch 1.14.0](https://github.com/Plutonomicon/plutarch-plutus/tree/c3b4771901b2bc5ba0c1e1fed66de3c0f5523069)

##### PlutusTx

Target: [plutus-tx 1.65.0.0](https://github.com/IntersectMBO/plutus/releases/tag/1.65.0.0)

### Runtimes

#### Plutarch lbr-plutus v.1.1.0

Migrated to Plutarch 1.14.0: `ClosedTerm` usages replaced with polymorphic `Term`
signatures, `PMap` now aliases `PSortedMap`, and `PValue` now aliases `PSortedValue`.

## LambdaBuffers v2.0.0

Conway support, with new V3 types and updated dependencies.
Expand Down
5 changes: 3 additions & 2 deletions docs/plutarch/app/Example.hs
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ import Plutarch.Evaluate (evalScript)
import Plutarch.Internal.Term (
Config (Tracing),
LogLevel (LogInfo),
S,
TracingMode (DoTracing),
compile,
)
import Plutarch.LedgerApi.V1 (PCurrencySymbol (PCurrencySymbol), PTokenName (PTokenName), pposixTime)
import Plutarch.LedgerApi.Value (PAssetClass (PAssetClass))
import Plutarch.Maybe qualified as Scott
import Plutarch.Prelude (ClosedTerm, PAsData, PBool (PFalse, PTrue), PBuiltinList, PByteString, PEq ((#==)), PIsData, PlutusType, Term, pcon, pconstant, pdata, perror, pfind, pfromData, pif, plam, pletC, pmatch, pmatchC, ppairDataBuiltin, pshow, ptraceInfo, unTermCont, (#), (#&&), (:-->))
import Plutarch.Prelude (PAsData, PBool (PFalse, PTrue), PBuiltinList, PByteString, PEq ((#==)), PIsData, PlutusType, Term, pcon, pconstant, pdata, perror, pfind, pfromData, pif, plam, pletC, pmatch, pmatchC, ppairDataBuiltin, pshow, ptraceInfo, unTermCont, (#), (#&&), (:-->))

userRef :: Text -> Term s (Ref User)
userRef userName = userRef' (textToBytes userName)
Expand Down Expand Up @@ -101,7 +102,7 @@ textToBytes = pconstant . Text.encodeUtf8
toBuiltinList :: Term s (Lb.PList a :--> PBuiltinList (PAsData a))
toBuiltinList = plam $ \xs -> pmatch xs (\(Lb.PList xs') -> xs')

evalBool :: ClosedTerm PBool -> IO ()
evalBool :: (forall (s :: S). Term s PBool) -> IO ()
evalBool t =
case compile (Tracing LogInfo DoTracing) (pif t (pcon PTrue) (ptraceInfo "Term evaluated to False" perror)) of
Left err -> print ("Error while compiling a Plutarch Term" :: String, err)
Expand Down
4 changes: 2 additions & 2 deletions docs/plutarch/build.nix
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
# Api
"${config.packages.lbf-plutarch-example-api}"
# Plutarch itself
"${inputs.plutarch}"
"${inputs.plutarch}/plutarch-ledger-api"
"${config.settings.haskell.plutarch-src}"
"${config.settings.haskell.plutarch-src}/plutarch-ledger-api"
];

devShellTools = config.settings.shell.tools;
Expand Down
8 changes: 8 additions & 0 deletions docs/plutarch/cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,11 @@ allow-newer:
ral:QuickCheck,
fin:QuickCheck,
bin:QuickCheck,

-- Uniform plutus version across all LambdaBuffers projects (van Rossem/PV11 compatible,
-- newest supported by plutarch 1.14.0)
constraints:
plutus-core ==1.65.0.0
, plutus-ledger-api ==1.65.0.0
, plutus-tx ==1.65.0.0
, plutus-tx-plugin ==1.65.0.0
4 changes: 3 additions & 1 deletion docs/plutarch/plutarch-example.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ common common-language
-Wall -Wcompat -fprint-explicit-foralls -fprint-explicit-kinds
-fwarn-missing-import-lists -Weverything -Wno-unsafe
-Wno-missing-safe-haskell-mode -Wno-implicit-prelude
-Wno-missing-kind-signatures -Wno-all-missed-specializations
-Wno-missing-kind-signatures -Wno-missing-role-annotations
-Wno-missing-poly-kind-signatures -Wno-unused-packages
-Wno-all-missed-specializations

if !flag(dev)
ghc-options: -Werror
Expand Down
11 changes: 11 additions & 0 deletions docs/plutustx/cabal.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
packages: ./.

tests: true

-- Uniform plutus version across all LambdaBuffers projects (van Rossem/PV11 compatible,
-- newest supported by plutarch 1.14.0)
constraints:
plutus-core ==1.65.0.0
, plutus-ledger-api ==1.65.0.0
, plutus-tx ==1.65.0.0
, plutus-tx-plugin ==1.65.0.0
4 changes: 3 additions & 1 deletion docs/plutustx/plutustx-example.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ common common-language
-Wall -Wcompat -fprint-explicit-foralls -fprint-explicit-kinds
-fwarn-missing-import-lists -Weverything -Wno-unsafe
-Wno-missing-safe-haskell-mode -Wno-implicit-prelude
-Wno-missing-kind-signatures -Wno-all-missed-specializations
-Wno-missing-kind-signatures -Wno-missing-role-annotations
-Wno-missing-poly-kind-signatures -Wno-unused-packages
-Wno-all-missed-specializations

if !flag(dev)
ghc-options: -Werror
Expand Down
4 changes: 2 additions & 2 deletions extras/dev-shells/plutus-haskell/build.nix
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
"${config.packages.lbf-plutus-plutarch}"

# Plutarch itself
"${inputs.plutarch}"
"${inputs.plutarch}/plutarch-ledger-api"
"${config.settings.haskell.plutarch-src}"
"${config.settings.haskell.plutarch-src}/plutarch-ledger-api"
];

devShellTools = config.settings.shell.tools ++ [
Expand Down
8 changes: 8 additions & 0 deletions extras/dev-shells/plutus-haskell/cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,11 @@ allow-newer:
ral:QuickCheck,
fin:QuickCheck,
bin:QuickCheck,

-- Uniform plutus version across all LambdaBuffers projects (van Rossem/PV11 compatible,
-- newest supported by plutarch 1.14.0)
constraints:
plutus-core ==1.65.0.0
, plutus-ledger-api ==1.65.0.0
, plutus-tx ==1.65.0.0
, plutus-tx-plugin ==1.65.0.0
4 changes: 3 additions & 1 deletion extras/dev-shells/plutus-haskell/plutus-haskell.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ common common-language
-Wall -Wcompat -fprint-explicit-foralls -fprint-explicit-kinds
-fwarn-missing-import-lists -Weverything -Wno-unsafe
-Wno-missing-safe-haskell-mode -Wno-implicit-prelude
-Wno-missing-kind-signatures -Wno-all-missed-specializations
-Wno-missing-kind-signatures -Wno-missing-role-annotations
-Wno-missing-poly-kind-signatures -Wno-unused-packages
-Wno-all-missed-specializations

if !flag(dev)
ghc-options: -Werror
Expand Down
4 changes: 3 additions & 1 deletion extras/dev-shells/prelude-haskell/prelude-haskell.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ common common-language
-Wall -Wcompat -fprint-explicit-foralls -fprint-explicit-kinds
-fwarn-missing-import-lists -Weverything -Wno-unsafe
-Wno-missing-safe-haskell-mode -Wno-implicit-prelude
-Wno-missing-kind-signatures -Wno-all-missed-specializations
-Wno-missing-kind-signatures -Wno-missing-role-annotations
-Wno-missing-poly-kind-signatures -Wno-unused-packages
-Wno-all-missed-specializations

if !flag(dev)
ghc-options: -Werror
Expand Down
3 changes: 2 additions & 1 deletion extras/lambda-buffers-utils/lambda-buffers-utils.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ common common-language
-fwarn-missing-import-lists -Weverything -Wno-unsafe
-Wno-missing-safe-haskell-mode -Wno-implicit-prelude
-Wno-missed-specialisations -Wno-all-missed-specialisations
-Wno-missing-kind-signatures
-Wno-missing-kind-signatures -Wno-missing-role-annotations
-Wno-missing-poly-kind-signatures -Wno-unused-packages

if !flag(dev)
ghc-options: -Werror
Expand Down
2 changes: 1 addition & 1 deletion extras/lbf-nix/lbf-rust.nix
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ let
features = [ "arbitrary_precision" ];
};
plutus-ledger-api = {
version = "^3.0.1";
version = "^3.1.0";
features = [ "lbf" ];
};
lbr-prelude = {
Expand Down
10 changes: 10 additions & 0 deletions extras/patches/freer-simple-ghc912.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
--- a/src/Control/Monad/Freer/Internal.hs
+++ b/src/Control/Monad/Freer/Internal.hs
@@ -153,7 +153,7 @@
E u q >>= k = E u (q |> k)
{-# INLINE (>>=) #-}

-instance (MonadBase b m, LastMember m effs) => MonadBase b (Eff effs) where
+instance (MonadBase b m, LastMember m effs, Monad b) => MonadBase b (Eff effs) where
liftBase = sendM . liftBase
{-# INLINE liftBase #-}
Loading