From a562f6393ec48a5bb34ed3497d231a5c69ad20d6 Mon Sep 17 00:00:00 2001 From: Alexey Kuleshevich Date: Mon, 15 Apr 2024 20:42:24 -0600 Subject: [PATCH] Introduce `AllegraEraTxAuxData` with `timelockScriptsTxAuxDataL` --- eras/allegra/impl/CHANGELOG.md | 2 ++ .../impl/src/Cardano/Ledger/Allegra/Core.hs | 2 ++ .../impl/src/Cardano/Ledger/Allegra/TxAuxData.hs | 14 ++++++++++++++ eras/alonzo/impl/CHANGELOG.md | 2 +- .../impl/src/Cardano/Ledger/Alonzo/TxAuxData.hs | 11 ++++++++++- .../impl/src/Cardano/Ledger/Babbage/TxAuxData.hs | 6 +++++- .../impl/src/Cardano/Ledger/Conway/TxAuxData.hs | 6 +++++- .../mary/impl/src/Cardano/Ledger/Mary/TxAuxData.hs | 10 +++++++++- libs/cardano-ledger-api/CHANGELOG.md | 1 + libs/cardano-ledger-api/cardano-ledger-api.cabal | 2 +- .../src/Cardano/Ledger/Api/Tx/AuxData.hs | 4 +++- 11 files changed, 53 insertions(+), 7 deletions(-) diff --git a/eras/allegra/impl/CHANGELOG.md b/eras/allegra/impl/CHANGELOG.md index b826ef13e20..1783ff1bfc7 100644 --- a/eras/allegra/impl/CHANGELOG.md +++ b/eras/allegra/impl/CHANGELOG.md @@ -4,6 +4,8 @@ * Add a `ToJSON` instance for `ValidityInterval` * Add `metadataAllegraTxAuxDataL` +* Add `AllegraEraTxAuxData` with `timelockScriptsTxAuxDataL` and helper + `timelockScriptsAllegraTxAuxDataL` ## 1.4.0.0 diff --git a/eras/allegra/impl/src/Cardano/Ledger/Allegra/Core.hs b/eras/allegra/impl/src/Cardano/Ledger/Allegra/Core.hs index 9816a68d56f..dc6442a6452 100644 --- a/eras/allegra/impl/src/Cardano/Ledger/Allegra/Core.hs +++ b/eras/allegra/impl/src/Cardano/Ledger/Allegra/Core.hs @@ -1,11 +1,13 @@ module Cardano.Ledger.Allegra.Core ( AllegraEraTxBody (..), ValidityInterval (..), + AllegraEraTxAuxData (..), module Cardano.Ledger.Shelley.Core, ) where import Cardano.Ledger.Allegra.Scripts (ValidityInterval (..)) import Cardano.Ledger.Allegra.Tx () +import Cardano.Ledger.Allegra.TxAuxData (AllegraEraTxAuxData (..)) import Cardano.Ledger.Allegra.TxBody (AllegraEraTxBody (..)) import Cardano.Ledger.Shelley.Core diff --git a/eras/allegra/impl/src/Cardano/Ledger/Allegra/TxAuxData.hs b/eras/allegra/impl/src/Cardano/Ledger/Allegra/TxAuxData.hs index 1163f0d284b..3430094ea1c 100644 --- a/eras/allegra/impl/src/Cardano/Ledger/Allegra/TxAuxData.hs +++ b/eras/allegra/impl/src/Cardano/Ledger/Allegra/TxAuxData.hs @@ -13,6 +13,7 @@ {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE UndecidableSuperClasses #-} {-# LANGUAGE ViewPatterns #-} {-# OPTIONS_GHC -Wno-orphans #-} @@ -20,6 +21,8 @@ module Cardano.Ledger.Allegra.TxAuxData ( AllegraTxAuxData (AllegraTxAuxData), AllegraTxAuxDataRaw, metadataAllegraTxAuxDataL, + AllegraEraTxAuxData (..), + timelockScriptsAllegraTxAuxDataL, -- * Deprecations AuxiliaryData, @@ -90,6 +93,9 @@ data AllegraTxAuxDataRaw era = AllegraTxAuxDataRaw } deriving (Generic, Eq) +class EraTxAuxData era => AllegraEraTxAuxData era where + timelockScriptsTxAuxDataL :: Lens' (TxAuxData era) (StrictSeq (Timelock era)) + instance Crypto c => EraTxAuxData (AllegraEra c) where type TxAuxData (AllegraEra c) = AllegraTxAuxData (AllegraEra c) @@ -107,6 +113,14 @@ metadataAllegraTxAuxDataL :: Era era => Lens' (AllegraTxAuxData era) (Map Word64 metadataAllegraTxAuxDataL = lensMemoRawType atadrMetadata $ \txAuxDataRaw md -> txAuxDataRaw {atadrMetadata = md} +instance Crypto c => AllegraEraTxAuxData (AllegraEra c) where + timelockScriptsTxAuxDataL = timelockScriptsAllegraTxAuxDataL + +timelockScriptsAllegraTxAuxDataL :: + Era era => Lens' (AllegraTxAuxData era) (StrictSeq (Timelock era)) +timelockScriptsAllegraTxAuxDataL = + lensMemoRawType atadrTimelock $ \txAuxDataRaw ts -> txAuxDataRaw {atadrTimelock = ts} + deriving instance HashAlgorithm (HASH (EraCrypto era)) => Show (AllegraTxAuxDataRaw era) deriving instance Era era => NoThunks (AllegraTxAuxDataRaw era) diff --git a/eras/alonzo/impl/CHANGELOG.md b/eras/alonzo/impl/CHANGELOG.md index c821741bdb3..d62a98df84e 100644 --- a/eras/alonzo/impl/CHANGELOG.md +++ b/eras/alonzo/impl/CHANGELOG.md @@ -5,7 +5,7 @@ * Change the type of the balance field in `InsufficientCollateral` to `DeltaCoin` * Add `ToJSON` instances for `FailureDescription` and `TagMismatchDescription` * Undeprecate `redeemerPointer`. -* Add `metadataAlonzoTxAuxDataL`. +* Add `metadataAlonzoTxAuxDataL`, `timelockScriptsAlonzoTxAuxDataL`. ## 1.7.0.0 diff --git a/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/TxAuxData.hs b/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/TxAuxData.hs index e31bce394d8..c1c73d70b91 100644 --- a/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/TxAuxData.hs +++ b/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/TxAuxData.hs @@ -38,6 +38,7 @@ module Cardano.Ledger.Alonzo.TxAuxData ( getAlonzoTxAuxDataScripts, translateAlonzoTxAuxData, metadataAlonzoTxAuxDataL, + timelockScriptsAlonzoTxAuxDataL, -- * Deprecated AuxiliaryData, @@ -46,7 +47,7 @@ where import Cardano.Crypto.Hash.Class (HashAlgorithm) import Cardano.Ledger.Allegra.Scripts (Timelock, translateTimelock) -import Cardano.Ledger.Allegra.TxAuxData (AllegraTxAuxData (..)) +import Cardano.Ledger.Allegra.TxAuxData (AllegraEraTxAuxData (..), AllegraTxAuxData (..)) import Cardano.Ledger.Alonzo.Era import Cardano.Ledger.Alonzo.Scripts ( AlonzoEraScript (..), @@ -292,6 +293,14 @@ validateAlonzoTxAuxData pv auxData@AlonzoTxAuxData {atadMetadata = metadata} = all validMetadatum metadata && all (validScript pv) (getAlonzoTxAuxDataScripts auxData) +instance Crypto c => AllegraEraTxAuxData (AlonzoEra c) where + timelockScriptsTxAuxDataL = timelockScriptsAlonzoTxAuxDataL + +timelockScriptsAlonzoTxAuxDataL :: + Era era => Lens' (AlonzoTxAuxData era) (StrictSeq (Timelock era)) +timelockScriptsAlonzoTxAuxDataL = + lensMemoRawType atadrTimelock $ \txAuxDataRaw ts -> txAuxDataRaw {atadrTimelock = ts} + instance EraCrypto era ~ c => HashAnnotated (AuxiliaryData era) EraIndependentTxAuxData c where hashAnnotated = getMemoSafeHash diff --git a/eras/babbage/impl/src/Cardano/Ledger/Babbage/TxAuxData.hs b/eras/babbage/impl/src/Cardano/Ledger/Babbage/TxAuxData.hs index 7eb00438a05..873c27c74d1 100644 --- a/eras/babbage/impl/src/Cardano/Ledger/Babbage/TxAuxData.hs +++ b/eras/babbage/impl/src/Cardano/Ledger/Babbage/TxAuxData.hs @@ -3,16 +3,17 @@ module Cardano.Ledger.Babbage.TxAuxData () where +import Cardano.Ledger.Alonzo.Core import Cardano.Ledger.Alonzo.TxAuxData ( AlonzoTxAuxData (..), hashAlonzoTxAuxData, metadataAlonzoTxAuxDataL, + timelockScriptsAlonzoTxAuxDataL, translateAlonzoTxAuxData, validateAlonzoTxAuxData, ) import Cardano.Ledger.Babbage.Era import Cardano.Ledger.Babbage.Scripts () -import Cardano.Ledger.Core import Cardano.Ledger.Crypto instance Crypto c => EraTxAuxData (BabbageEra c) where @@ -27,3 +28,6 @@ instance Crypto c => EraTxAuxData (BabbageEra c) where hashTxAuxData = hashAlonzoTxAuxData validateTxAuxData = validateAlonzoTxAuxData + +instance Crypto c => AllegraEraTxAuxData (BabbageEra c) where + timelockScriptsTxAuxDataL = timelockScriptsAlonzoTxAuxDataL diff --git a/eras/conway/impl/src/Cardano/Ledger/Conway/TxAuxData.hs b/eras/conway/impl/src/Cardano/Ledger/Conway/TxAuxData.hs index 4f7355bfc66..8b0e7c5374c 100644 --- a/eras/conway/impl/src/Cardano/Ledger/Conway/TxAuxData.hs +++ b/eras/conway/impl/src/Cardano/Ledger/Conway/TxAuxData.hs @@ -3,16 +3,17 @@ module Cardano.Ledger.Conway.TxAuxData () where +import Cardano.Ledger.Alonzo.Core import Cardano.Ledger.Alonzo.TxAuxData ( AlonzoTxAuxData (..), hashAlonzoTxAuxData, metadataAlonzoTxAuxDataL, + timelockScriptsAlonzoTxAuxDataL, translateAlonzoTxAuxData, validateAlonzoTxAuxData, ) import Cardano.Ledger.Conway.Era import Cardano.Ledger.Conway.Scripts () -import Cardano.Ledger.Core import Cardano.Ledger.Crypto instance Crypto c => EraTxAuxData (ConwayEra c) where @@ -27,3 +28,6 @@ instance Crypto c => EraTxAuxData (ConwayEra c) where hashTxAuxData = hashAlonzoTxAuxData validateTxAuxData = validateAlonzoTxAuxData + +instance Crypto c => AllegraEraTxAuxData (ConwayEra c) where + timelockScriptsTxAuxDataL = timelockScriptsAlonzoTxAuxDataL diff --git a/eras/mary/impl/src/Cardano/Ledger/Mary/TxAuxData.hs b/eras/mary/impl/src/Cardano/Ledger/Mary/TxAuxData.hs index dc09d437869..b525e78a135 100644 --- a/eras/mary/impl/src/Cardano/Ledger/Mary/TxAuxData.hs +++ b/eras/mary/impl/src/Cardano/Ledger/Mary/TxAuxData.hs @@ -12,7 +12,12 @@ module Cardano.Ledger.Mary.TxAuxData ( ) where -import Cardano.Ledger.Allegra.TxAuxData (AllegraTxAuxData (..), metadataAllegraTxAuxDataL) +import Cardano.Ledger.Allegra.TxAuxData ( + AllegraEraTxAuxData (..), + AllegraTxAuxData (..), + metadataAllegraTxAuxDataL, + timelockScriptsAllegraTxAuxDataL, + ) import Cardano.Ledger.AuxiliaryData (AuxiliaryDataHash (..)) import Cardano.Ledger.Core (EraTxAuxData (..), upgradeScript) import Cardano.Ledger.Crypto (Crypto) @@ -36,3 +41,6 @@ instance Crypto c => EraTxAuxData (MaryEra c) where validateTxAuxData _ (AllegraTxAuxData md as) = as `deepseq` all validMetadatum md hashTxAuxData aux = AuxiliaryDataHash (hashAnnotated aux) + +instance Crypto c => AllegraEraTxAuxData (MaryEra c) where + timelockScriptsTxAuxDataL = timelockScriptsAllegraTxAuxDataL diff --git a/libs/cardano-ledger-api/CHANGELOG.md b/libs/cardano-ledger-api/CHANGELOG.md index ed75a92e9df..7afa46d3056 100644 --- a/libs/cardano-ledger-api/CHANGELOG.md +++ b/libs/cardano-ledger-api/CHANGELOG.md @@ -4,6 +4,7 @@ * Add `redeemerPointer` and `redeemerPointerInverse`. * Export `mkBasicTxAuxData` and `metadataTxAuxDataL`. +* Export `AllegraEraTxAuxData` and `timelockScriptsTxAuxDataL` ## 1.9.0.0 diff --git a/libs/cardano-ledger-api/cardano-ledger-api.cabal b/libs/cardano-ledger-api/cardano-ledger-api.cabal index 6599a70e03a..c99b0414df4 100644 --- a/libs/cardano-ledger-api/cardano-ledger-api.cabal +++ b/libs/cardano-ledger-api/cardano-ledger-api.cabal @@ -54,7 +54,7 @@ library base >=4.14 && <5, aeson >=2.2, bytestring, - cardano-ledger-allegra ^>=1.4, + cardano-ledger-allegra ^>=1.4.1, cardano-ledger-alonzo ^>=1.8, cardano-ledger-babbage ^>=1.8, cardano-ledger-binary ^>=1.3, diff --git a/libs/cardano-ledger-api/src/Cardano/Ledger/Api/Tx/AuxData.hs b/libs/cardano-ledger-api/src/Cardano/Ledger/Api/Tx/AuxData.hs index 6b2d9624429..34121799d82 100644 --- a/libs/cardano-ledger-api/src/Cardano/Ledger/Api/Tx/AuxData.hs +++ b/libs/cardano-ledger-api/src/Cardano/Ledger/Api/Tx/AuxData.hs @@ -11,6 +11,8 @@ module Cardano.Ledger.Api.Tx.AuxData ( Metadatum (..), -- * Allegra + AllegraEraTxAuxData, + timelockScriptsTxAuxDataL, AllegraTxAuxData (..), -- * Alonzo @@ -20,7 +22,7 @@ module Cardano.Ledger.Api.Tx.AuxData ( ) where -import Cardano.Ledger.Allegra.TxAuxData (AllegraTxAuxData (..)) +import Cardano.Ledger.Allegra.TxAuxData (AllegraEraTxAuxData (..), AllegraTxAuxData (..)) import Cardano.Ledger.Alonzo.TxAuxData ( AlonzoTxAuxData (..), getAlonzoTxAuxDataScripts,