diff --git a/eras/allegra/impl/CHANGELOG.md b/eras/allegra/impl/CHANGELOG.md index 1e67767648d..b826ef13e20 100644 --- a/eras/allegra/impl/CHANGELOG.md +++ b/eras/allegra/impl/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.4.1.0 * Add a `ToJSON` instance for `ValidityInterval` +* Add `metadataAllegraTxAuxDataL` ## 1.4.0.0 diff --git a/eras/allegra/impl/cardano-ledger-allegra.cabal b/eras/allegra/impl/cardano-ledger-allegra.cabal index 3c3704ed2b3..18b92c226c1 100644 --- a/eras/allegra/impl/cardano-ledger-allegra.cabal +++ b/eras/allegra/impl/cardano-ledger-allegra.cabal @@ -67,7 +67,7 @@ library bytestring, cardano-crypto-class, cardano-ledger-binary ^>=1.3, - cardano-ledger-core ^>=1.11, + cardano-ledger-core ^>=1.12, cardano-ledger-shelley ^>=1.10, cardano-strict-containers, cardano-slotting, diff --git a/eras/allegra/impl/src/Cardano/Ledger/Allegra/TxAuxData.hs b/eras/allegra/impl/src/Cardano/Ledger/Allegra/TxAuxData.hs index b73a916bd1d..1163f0d284b 100644 --- a/eras/allegra/impl/src/Cardano/Ledger/Allegra/TxAuxData.hs +++ b/eras/allegra/impl/src/Cardano/Ledger/Allegra/TxAuxData.hs @@ -19,6 +19,7 @@ module Cardano.Ledger.Allegra.TxAuxData ( AllegraTxAuxData (AllegraTxAuxData), AllegraTxAuxDataRaw, + metadataAllegraTxAuxDataL, -- * Deprecations AuxiliaryData, @@ -51,6 +52,7 @@ import Cardano.Ledger.MemoBytes ( Memoized (RawType), getMemoRawType, getMemoSafeHash, + lensMemoRawType, mkMemoized, ) import Cardano.Ledger.SafeHash (HashAnnotated, SafeToHash, hashAnnotated) @@ -71,6 +73,7 @@ import Data.Sequence.Strict (StrictSeq) import qualified Data.Sequence.Strict as StrictSeq import Data.Word (Word64) import GHC.Generics (Generic) +import Lens.Micro (Lens') import NoThunks.Class (NoThunks) -- ======================================= @@ -90,12 +93,20 @@ data AllegraTxAuxDataRaw era = AllegraTxAuxDataRaw instance Crypto c => EraTxAuxData (AllegraEra c) where type TxAuxData (AllegraEra c) = AllegraTxAuxData (AllegraEra c) + mkBasicTxAuxData = AllegraTxAuxData mempty mempty + + metadataTxAuxDataL = metadataAllegraTxAuxDataL + upgradeTxAuxData (ShelleyTxAuxData md) = AllegraTxAuxData md mempty validateTxAuxData _ (AllegraTxAuxData md as) = as `deepseq` all validMetadatum md hashTxAuxData aux = AuxiliaryDataHash (hashAnnotated aux) +metadataAllegraTxAuxDataL :: Era era => Lens' (AllegraTxAuxData era) (Map Word64 Metadatum) +metadataAllegraTxAuxDataL = + lensMemoRawType atadrMetadata $ \txAuxDataRaw md -> txAuxDataRaw {atadrMetadata = md} + 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 17b8e52cf32..c821741bdb3 100644 --- a/eras/alonzo/impl/CHANGELOG.md +++ b/eras/alonzo/impl/CHANGELOG.md @@ -5,6 +5,7 @@ * Change the type of the balance field in `InsufficientCollateral` to `DeltaCoin` * Add `ToJSON` instances for `FailureDescription` and `TagMismatchDescription` * Undeprecate `redeemerPointer`. +* Add `metadataAlonzoTxAuxDataL`. ## 1.7.0.0 diff --git a/eras/alonzo/impl/cardano-ledger-alonzo.cabal b/eras/alonzo/impl/cardano-ledger-alonzo.cabal index a3ad743209b..28194383bf0 100644 --- a/eras/alonzo/impl/cardano-ledger-alonzo.cabal +++ b/eras/alonzo/impl/cardano-ledger-alonzo.cabal @@ -79,7 +79,7 @@ library cardano-ledger-allegra ^>=1.4, cardano-crypto-class, cardano-ledger-binary ^>=1.3, - cardano-ledger-core ^>=1.11, + cardano-ledger-core ^>=1.12, cardano-ledger-mary ^>=1.5, cardano-ledger-shelley ^>=1.10, cardano-slotting, diff --git a/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/TxAuxData.hs b/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/TxAuxData.hs index 28097ab391a..e31bce394d8 100644 --- a/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/TxAuxData.hs +++ b/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/TxAuxData.hs @@ -37,6 +37,7 @@ module Cardano.Ledger.Alonzo.TxAuxData ( validateAlonzoTxAuxData, getAlonzoTxAuxDataScripts, translateAlonzoTxAuxData, + metadataAlonzoTxAuxDataL, -- * Deprecated AuxiliaryData, @@ -77,6 +78,7 @@ import Cardano.Ledger.MemoBytes ( Memoized (RawType), getMemoRawType, getMemoSafeHash, + lensMemoRawType, mkMemoized, ) import Cardano.Ledger.Plutus.Language (Language (..), PlutusBinary (..), guardPlutus) @@ -93,6 +95,7 @@ import qualified Data.Sequence.Strict as StrictSeq import Data.Word (Word64) import GHC.Generics (Generic) import GHC.Stack +import Lens.Micro (Lens') import NoThunks.Class (InspectHeapNamed (..), NoThunks) -- ============================================================================= @@ -254,6 +257,10 @@ type AuxiliaryData era = AlonzoTxAuxData era instance Crypto c => EraTxAuxData (AlonzoEra c) where type TxAuxData (AlonzoEra c) = AlonzoTxAuxData (AlonzoEra c) + mkBasicTxAuxData = AlonzoTxAuxData mempty mempty mempty + + metadataTxAuxDataL = metadataAlonzoTxAuxDataL + upgradeTxAuxData (AllegraTxAuxData md scripts) = mkMemoized $ AlonzoTxAuxDataRaw @@ -266,6 +273,10 @@ instance Crypto c => EraTxAuxData (AlonzoEra c) where validateTxAuxData = validateAlonzoTxAuxData +metadataAlonzoTxAuxDataL :: Era era => Lens' (AlonzoTxAuxData era) (Map Word64 Metadatum) +metadataAlonzoTxAuxDataL = + lensMemoRawType atadrMetadata $ \txAuxDataRaw md -> txAuxDataRaw {atadrMetadata = md} + hashAlonzoTxAuxData :: (HashAlgorithm (HASH c), HashAnnotated x EraIndependentTxAuxData c) => x -> diff --git a/eras/alonzo/test-suite/cardano-ledger-alonzo-test.cabal b/eras/alonzo/test-suite/cardano-ledger-alonzo-test.cabal index 95b08250a8e..e3786b95992 100644 --- a/eras/alonzo/test-suite/cardano-ledger-alonzo-test.cabal +++ b/eras/alonzo/test-suite/cardano-ledger-alonzo-test.cabal @@ -46,7 +46,7 @@ library bytestring, cardano-ledger-alonzo:{cardano-ledger-alonzo, testlib} >=1.7, cardano-ledger-binary:{cardano-ledger-binary, testlib} >=1.0, - cardano-ledger-core:{cardano-ledger-core, testlib} >=1.11 && <1.12, + cardano-ledger-core:{cardano-ledger-core, testlib} >=1.11 && <1.13, cardano-ledger-allegra >=1.2, cardano-ledger-shelley:{cardano-ledger-shelley, testlib} >=1.6 && <1.11, cardano-ledger-shelley-test >=1.2, diff --git a/eras/babbage/impl/cardano-ledger-babbage.cabal b/eras/babbage/impl/cardano-ledger-babbage.cabal index 97638302296..d3faea9a8e5 100644 --- a/eras/babbage/impl/cardano-ledger-babbage.cabal +++ b/eras/babbage/impl/cardano-ledger-babbage.cabal @@ -75,7 +75,7 @@ library cardano-ledger-allegra ^>=1.4, cardano-ledger-alonzo ^>=1.8, cardano-ledger-binary ^>=1.3, - cardano-ledger-core ^>=1.11, + cardano-ledger-core ^>=1.12, cardano-ledger-mary ^>=1.5, cardano-ledger-shelley ^>=1.10, cardano-strict-containers, diff --git a/eras/babbage/impl/src/Cardano/Ledger/Babbage/TxAuxData.hs b/eras/babbage/impl/src/Cardano/Ledger/Babbage/TxAuxData.hs index e4d184b39e2..7eb00438a05 100644 --- a/eras/babbage/impl/src/Cardano/Ledger/Babbage/TxAuxData.hs +++ b/eras/babbage/impl/src/Cardano/Ledger/Babbage/TxAuxData.hs @@ -4,8 +4,9 @@ module Cardano.Ledger.Babbage.TxAuxData () where import Cardano.Ledger.Alonzo.TxAuxData ( - AlonzoTxAuxData, + AlonzoTxAuxData (..), hashAlonzoTxAuxData, + metadataAlonzoTxAuxDataL, translateAlonzoTxAuxData, validateAlonzoTxAuxData, ) @@ -17,6 +18,10 @@ import Cardano.Ledger.Crypto instance Crypto c => EraTxAuxData (BabbageEra c) where type TxAuxData (BabbageEra c) = AlonzoTxAuxData (BabbageEra c) + mkBasicTxAuxData = AlonzoTxAuxData mempty mempty mempty + + metadataTxAuxDataL = metadataAlonzoTxAuxDataL + upgradeTxAuxData = translateAlonzoTxAuxData hashTxAuxData = hashAlonzoTxAuxData diff --git a/eras/conway/impl/cardano-ledger-conway.cabal b/eras/conway/impl/cardano-ledger-conway.cabal index eb23806cd56..57884d3d265 100644 --- a/eras/conway/impl/cardano-ledger-conway.cabal +++ b/eras/conway/impl/cardano-ledger-conway.cabal @@ -90,7 +90,7 @@ library cardano-ledger-allegra ^>=1.4, cardano-ledger-alonzo ^>=1.8, cardano-ledger-babbage ^>=1.8, - cardano-ledger-core ^>=1.11, + cardano-ledger-core ^>=1.12, cardano-ledger-mary ^>=1.5, cardano-ledger-shelley ^>=1.10, cardano-slotting, diff --git a/eras/conway/impl/src/Cardano/Ledger/Conway/TxAuxData.hs b/eras/conway/impl/src/Cardano/Ledger/Conway/TxAuxData.hs index 4b8be90c636..4f7355bfc66 100644 --- a/eras/conway/impl/src/Cardano/Ledger/Conway/TxAuxData.hs +++ b/eras/conway/impl/src/Cardano/Ledger/Conway/TxAuxData.hs @@ -4,8 +4,9 @@ module Cardano.Ledger.Conway.TxAuxData () where import Cardano.Ledger.Alonzo.TxAuxData ( - AlonzoTxAuxData, + AlonzoTxAuxData (..), hashAlonzoTxAuxData, + metadataAlonzoTxAuxDataL, translateAlonzoTxAuxData, validateAlonzoTxAuxData, ) @@ -17,6 +18,10 @@ import Cardano.Ledger.Crypto instance Crypto c => EraTxAuxData (ConwayEra c) where type TxAuxData (ConwayEra c) = AlonzoTxAuxData (ConwayEra c) + mkBasicTxAuxData = AlonzoTxAuxData mempty mempty mempty + + metadataTxAuxDataL = metadataAlonzoTxAuxDataL + upgradeTxAuxData = translateAlonzoTxAuxData hashTxAuxData = hashAlonzoTxAuxData diff --git a/eras/mary/impl/cardano-ledger-mary.cabal b/eras/mary/impl/cardano-ledger-mary.cabal index d850f9464c8..fc1d202c782 100644 --- a/eras/mary/impl/cardano-ledger-mary.cabal +++ b/eras/mary/impl/cardano-ledger-mary.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: cardano-ledger-mary -version: 1.5.1.0 +version: 1.5.1.1 license: Apache-2.0 maintainer: operations@iohk.io author: IOHK @@ -74,9 +74,9 @@ library aeson >=2.2, cardano-crypto-class, cardano-data ^>=1.2, - cardano-ledger-allegra ^>=1.4, + cardano-ledger-allegra ^>=1.4.1, cardano-ledger-binary ^>=1.3, - cardano-ledger-core ^>=1.11, + cardano-ledger-core ^>=1.12, cardano-ledger-shelley ^>=1.10, containers, deepseq, diff --git a/eras/mary/impl/src/Cardano/Ledger/Mary/TxAuxData.hs b/eras/mary/impl/src/Cardano/Ledger/Mary/TxAuxData.hs index 1f72f72ffaf..dc09d437869 100644 --- a/eras/mary/impl/src/Cardano/Ledger/Mary/TxAuxData.hs +++ b/eras/mary/impl/src/Cardano/Ledger/Mary/TxAuxData.hs @@ -12,7 +12,7 @@ module Cardano.Ledger.Mary.TxAuxData ( ) where -import Cardano.Ledger.Allegra.TxAuxData +import Cardano.Ledger.Allegra.TxAuxData (AllegraTxAuxData (..), metadataAllegraTxAuxDataL) import Cardano.Ledger.AuxiliaryData (AuxiliaryDataHash (..)) import Cardano.Ledger.Core (EraTxAuxData (..), upgradeScript) import Cardano.Ledger.Crypto (Crypto) @@ -27,6 +27,10 @@ import Control.DeepSeq (deepseq) instance Crypto c => EraTxAuxData (MaryEra c) where type TxAuxData (MaryEra c) = AllegraTxAuxData (MaryEra c) + mkBasicTxAuxData = AllegraTxAuxData mempty mempty + + metadataTxAuxDataL = metadataAllegraTxAuxDataL + upgradeTxAuxData (AllegraTxAuxData md scripts) = AllegraTxAuxData md $ upgradeScript <$> scripts validateTxAuxData _ (AllegraTxAuxData md as) = as `deepseq` all validMetadatum md diff --git a/eras/shelley/impl/cardano-ledger-shelley.cabal b/eras/shelley/impl/cardano-ledger-shelley.cabal index a2ffe66f473..d2a91fa939e 100644 --- a/eras/shelley/impl/cardano-ledger-shelley.cabal +++ b/eras/shelley/impl/cardano-ledger-shelley.cabal @@ -108,7 +108,7 @@ library cardano-data ^>=1.2.2, cardano-ledger-binary ^>=1.3, cardano-ledger-byron, - cardano-ledger-core ^>=1.11.1, + cardano-ledger-core ^>=1.12, cardano-slotting, vector-map ^>=1.1, containers, diff --git a/eras/shelley/impl/src/Cardano/Ledger/Shelley/TxAuxData.hs b/eras/shelley/impl/src/Cardano/Ledger/Shelley/TxAuxData.hs index 7132087ca9b..666b6ede263 100644 --- a/eras/shelley/impl/src/Cardano/Ledger/Shelley/TxAuxData.hs +++ b/eras/shelley/impl/src/Cardano/Ledger/Shelley/TxAuxData.hs @@ -47,6 +47,7 @@ import Cardano.Ledger.MemoBytes ( Memoized (RawType), getMemoRawType, getMemoSafeHash, + lensMemoRawType, mkMemoized, ) import Cardano.Ledger.Metadata (Metadatum (..), validMetadatum) @@ -107,6 +108,11 @@ type Metadata era = ShelleyTxAuxData era instance Crypto c => EraTxAuxData (ShelleyEra c) where type TxAuxData (ShelleyEra c) = ShelleyTxAuxData (ShelleyEra c) + mkBasicTxAuxData = ShelleyTxAuxData mempty + + metadataTxAuxDataL = + lensMemoRawType stadrMetadata $ \txAuxDataRaw md -> txAuxDataRaw {stadrMetadata = md} + -- Calling this partial function will result in compilation error, since ByronEra has -- no instance for EraTxOut type class. upgradeTxAuxData = error "It is not possible to translate Byron TxOut with 'upgradeTxOut'" diff --git a/eras/shelley/test-suite/cardano-ledger-shelley-test.cabal b/eras/shelley/test-suite/cardano-ledger-shelley-test.cabal index 8d40b694f64..95858e97ee6 100644 --- a/eras/shelley/test-suite/cardano-ledger-shelley-test.cabal +++ b/eras/shelley/test-suite/cardano-ledger-shelley-test.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: cardano-ledger-shelley-test -version: 1.4.0.0 +version: 1.4.0.1 license: Apache-2.0 maintainer: operations@iohk.io author: IOHK @@ -78,7 +78,7 @@ library cardano-data >=1.2, cardano-ledger-binary:{cardano-ledger-binary, testlib} >=1.3, cardano-ledger-byron, - cardano-ledger-core:{cardano-ledger-core, testlib} ^>=1.11, + cardano-ledger-core:{cardano-ledger-core, testlib} >=1.11 && <1.13, cardano-ledger-shelley:{cardano-ledger-shelley, testlib} ^>=1.10, cardano-protocol-tpraos:{cardano-protocol-tpraos, testlib} >=1.0.1, cardano-slotting:{cardano-slotting, testlib}, diff --git a/libs/cardano-ledger-api/CHANGELOG.md b/libs/cardano-ledger-api/CHANGELOG.md index 106dd3f9d93..ed75a92e9df 100644 --- a/libs/cardano-ledger-api/CHANGELOG.md +++ b/libs/cardano-ledger-api/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.9.1.0 * Add `redeemerPointer` and `redeemerPointerInverse`. +* Export `mkBasicTxAuxData` and `metadataTxAuxDataL`. ## 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 7891b2b38f8..6599a70e03a 100644 --- a/libs/cardano-ledger-api/cardano-ledger-api.cabal +++ b/libs/cardano-ledger-api/cardano-ledger-api.cabal @@ -59,7 +59,7 @@ library cardano-ledger-babbage ^>=1.8, cardano-ledger-binary ^>=1.3, cardano-ledger-conway ^>=1.13, - cardano-ledger-core ^>=1.11, + cardano-ledger-core ^>=1.12, cardano-ledger-mary ^>=1.5, cardano-ledger-shelley ^>=1.10, cardano-slotting, 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 531c6352399..6b2d9624429 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 @@ -1,5 +1,7 @@ module Cardano.Ledger.Api.Tx.AuxData ( EraTxAuxData (TxAuxData), + mkBasicTxAuxData, + metadataTxAuxDataL, upgradeTxAuxData, hashTxAuxData, validateTxAuxData, diff --git a/libs/cardano-ledger-core/CHANGELOG.md b/libs/cardano-ledger-core/CHANGELOG.md index 1a2479d24ca..c109cef9fa6 100644 --- a/libs/cardano-ledger-core/CHANGELOG.md +++ b/libs/cardano-ledger-core/CHANGELOG.md @@ -8,6 +8,7 @@ * Add functions `rdRewardCoin`, `rdDepositCoin` in UMap.hs * Add function `mkCoinTxOut` in Core.hs * Move `Metadatum` from `cardano-ledger-shelley` into a new module `Cardano.Ledger.Metadata` +* Add `mkBasicTxAuxData` and `metadataTxAuxDataL` to `EraTxAuxData` type class. ### `testlib` diff --git a/libs/cardano-ledger-core/cardano-ledger-core.cabal b/libs/cardano-ledger-core/cardano-ledger-core.cabal index a65789a9129..2d377cee1da 100644 --- a/libs/cardano-ledger-core/cardano-ledger-core.cabal +++ b/libs/cardano-ledger-core/cardano-ledger-core.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: cardano-ledger-core -version: 1.11.1.0 +version: 1.12.0.0 license: Apache-2.0 maintainer: operations@iohk.io author: IOHK diff --git a/libs/cardano-ledger-core/src/Cardano/Ledger/Core.hs b/libs/cardano-ledger-core/src/Cardano/Ledger/Core.hs index 08f773bebef..e2fe27b18a9 100644 --- a/libs/cardano-ledger-core/src/Cardano/Ledger/Core.hs +++ b/libs/cardano-ledger-core/src/Cardano/Ledger/Core.hs @@ -102,6 +102,7 @@ import Cardano.Ledger.Keys (KeyHash, KeyRole (..)) import Cardano.Ledger.Keys.Bootstrap (BootstrapWitness) import Cardano.Ledger.Keys.WitVKey (WitVKey) import Cardano.Ledger.MemoBytes +import Cardano.Ledger.Metadata import Cardano.Ledger.Rewards (Reward (..), RewardType (..)) import Cardano.Ledger.SafeHash (HashAnnotated (..), SafeToHash (..)) import Cardano.Ledger.TxIn (TxId (..), TxIn (..)) @@ -449,6 +450,10 @@ class where type TxAuxData era = (r :: Type) | r -> era + mkBasicTxAuxData :: TxAuxData era + + metadataTxAuxDataL :: Lens' (TxAuxData era) (Map Word64 Metadatum) + -- | Every era, except Shelley, must be able to upgrade a `TxAuxData` from a previous -- era. --