{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Cardano.Ledger.Shelley.TxAuxData (
ShelleyTxAuxData (
MkShelleyTxAuxData,
ShelleyTxAuxData
),
ShelleyTxAuxDataRaw (..),
hashShelleyTxAuxData,
Metadatum (..),
validMetadatum,
) where
import Cardano.Ledger.Binary (DecCBOR (..), EncCBOR (..))
import qualified Cardano.Ledger.Binary.Plain as Plain (ToCBOR)
import Cardano.Ledger.Core
import Cardano.Ledger.MemoBytes (
EqRaw (..),
MemoBytes,
MemoHashIndex,
Memoized (RawType),
getMemoRawType,
getMemoSafeHash,
lensMemoRawType,
mkMemoizedEra,
)
import Cardano.Ledger.Metadata (Metadatum (..), validMetadatum)
import Cardano.Ledger.Shelley.Era (ShelleyEra)
import Control.DeepSeq (NFData)
import Data.Map.Strict (Map)
import Data.Word (Word64)
import GHC.Generics (Generic)
import NoThunks.Class (InspectHeapNamed (..), NoThunks (..))
newtype ShelleyTxAuxDataRaw era = ShelleyTxAuxDataRaw
{ forall era. ShelleyTxAuxDataRaw era -> Map Word64 Metadatum
stadrMetadata :: Map Word64 Metadatum
}
deriving (ShelleyTxAuxDataRaw era -> ShelleyTxAuxDataRaw era -> Bool
(ShelleyTxAuxDataRaw era -> ShelleyTxAuxDataRaw era -> Bool)
-> (ShelleyTxAuxDataRaw era -> ShelleyTxAuxDataRaw era -> Bool)
-> Eq (ShelleyTxAuxDataRaw era)
forall era.
ShelleyTxAuxDataRaw era -> ShelleyTxAuxDataRaw era -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall era.
ShelleyTxAuxDataRaw era -> ShelleyTxAuxDataRaw era -> Bool
== :: ShelleyTxAuxDataRaw era -> ShelleyTxAuxDataRaw era -> Bool
$c/= :: forall era.
ShelleyTxAuxDataRaw era -> ShelleyTxAuxDataRaw era -> Bool
/= :: ShelleyTxAuxDataRaw era -> ShelleyTxAuxDataRaw era -> Bool
Eq, Int -> ShelleyTxAuxDataRaw era -> ShowS
[ShelleyTxAuxDataRaw era] -> ShowS
ShelleyTxAuxDataRaw era -> String
(Int -> ShelleyTxAuxDataRaw era -> ShowS)
-> (ShelleyTxAuxDataRaw era -> String)
-> ([ShelleyTxAuxDataRaw era] -> ShowS)
-> Show (ShelleyTxAuxDataRaw era)
forall era. Int -> ShelleyTxAuxDataRaw era -> ShowS
forall era. [ShelleyTxAuxDataRaw era] -> ShowS
forall era. ShelleyTxAuxDataRaw era -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall era. Int -> ShelleyTxAuxDataRaw era -> ShowS
showsPrec :: Int -> ShelleyTxAuxDataRaw era -> ShowS
$cshow :: forall era. ShelleyTxAuxDataRaw era -> String
show :: ShelleyTxAuxDataRaw era -> String
$cshowList :: forall era. [ShelleyTxAuxDataRaw era] -> ShowS
showList :: [ShelleyTxAuxDataRaw era] -> ShowS
Show, (forall x.
ShelleyTxAuxDataRaw era -> Rep (ShelleyTxAuxDataRaw era) x)
-> (forall x.
Rep (ShelleyTxAuxDataRaw era) x -> ShelleyTxAuxDataRaw era)
-> Generic (ShelleyTxAuxDataRaw era)
forall x.
Rep (ShelleyTxAuxDataRaw era) x -> ShelleyTxAuxDataRaw era
forall x.
ShelleyTxAuxDataRaw era -> Rep (ShelleyTxAuxDataRaw era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (ShelleyTxAuxDataRaw era) x -> ShelleyTxAuxDataRaw era
forall era x.
ShelleyTxAuxDataRaw era -> Rep (ShelleyTxAuxDataRaw era) x
$cfrom :: forall era x.
ShelleyTxAuxDataRaw era -> Rep (ShelleyTxAuxDataRaw era) x
from :: forall x.
ShelleyTxAuxDataRaw era -> Rep (ShelleyTxAuxDataRaw era) x
$cto :: forall era x.
Rep (ShelleyTxAuxDataRaw era) x -> ShelleyTxAuxDataRaw era
to :: forall x.
Rep (ShelleyTxAuxDataRaw era) x -> ShelleyTxAuxDataRaw era
Generic)
deriving newtype (ShelleyTxAuxDataRaw era -> ()
(ShelleyTxAuxDataRaw era -> ()) -> NFData (ShelleyTxAuxDataRaw era)
forall era. ShelleyTxAuxDataRaw era -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall era. ShelleyTxAuxDataRaw era -> ()
rnf :: ShelleyTxAuxDataRaw era -> ()
NFData)
deriving via
InspectHeapNamed "ShelleyTxAuxDataRaw" (ShelleyTxAuxDataRaw era)
instance
NoThunks (ShelleyTxAuxDataRaw era)
deriving newtype instance Era era => EncCBOR (ShelleyTxAuxDataRaw era)
deriving newtype instance Era era => DecCBOR (ShelleyTxAuxDataRaw era)
deriving via
InspectHeapNamed "ShelleyTxAuxDataRaw" (ShelleyTxAuxData era)
instance
NoThunks (ShelleyTxAuxData era)
newtype ShelleyTxAuxData era
= MkShelleyTxAuxData (MemoBytes (ShelleyTxAuxDataRaw era))
deriving (ShelleyTxAuxData era -> ShelleyTxAuxData era -> Bool
(ShelleyTxAuxData era -> ShelleyTxAuxData era -> Bool)
-> (ShelleyTxAuxData era -> ShelleyTxAuxData era -> Bool)
-> Eq (ShelleyTxAuxData era)
forall era. ShelleyTxAuxData era -> ShelleyTxAuxData era -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall era. ShelleyTxAuxData era -> ShelleyTxAuxData era -> Bool
== :: ShelleyTxAuxData era -> ShelleyTxAuxData era -> Bool
$c/= :: forall era. ShelleyTxAuxData era -> ShelleyTxAuxData era -> Bool
/= :: ShelleyTxAuxData era -> ShelleyTxAuxData era -> Bool
Eq, Int -> ShelleyTxAuxData era -> ShowS
[ShelleyTxAuxData era] -> ShowS
ShelleyTxAuxData era -> String
(Int -> ShelleyTxAuxData era -> ShowS)
-> (ShelleyTxAuxData era -> String)
-> ([ShelleyTxAuxData era] -> ShowS)
-> Show (ShelleyTxAuxData era)
forall era. Int -> ShelleyTxAuxData era -> ShowS
forall era. [ShelleyTxAuxData era] -> ShowS
forall era. ShelleyTxAuxData era -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall era. Int -> ShelleyTxAuxData era -> ShowS
showsPrec :: Int -> ShelleyTxAuxData era -> ShowS
$cshow :: forall era. ShelleyTxAuxData era -> String
show :: ShelleyTxAuxData era -> String
$cshowList :: forall era. [ShelleyTxAuxData era] -> ShowS
showList :: [ShelleyTxAuxData era] -> ShowS
Show, (forall x. ShelleyTxAuxData era -> Rep (ShelleyTxAuxData era) x)
-> (forall x. Rep (ShelleyTxAuxData era) x -> ShelleyTxAuxData era)
-> Generic (ShelleyTxAuxData era)
forall x. Rep (ShelleyTxAuxData era) x -> ShelleyTxAuxData era
forall x. ShelleyTxAuxData era -> Rep (ShelleyTxAuxData era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x. Rep (ShelleyTxAuxData era) x -> ShelleyTxAuxData era
forall era x. ShelleyTxAuxData era -> Rep (ShelleyTxAuxData era) x
$cfrom :: forall era x. ShelleyTxAuxData era -> Rep (ShelleyTxAuxData era) x
from :: forall x. ShelleyTxAuxData era -> Rep (ShelleyTxAuxData era) x
$cto :: forall era x. Rep (ShelleyTxAuxData era) x -> ShelleyTxAuxData era
to :: forall x. Rep (ShelleyTxAuxData era) x -> ShelleyTxAuxData era
Generic)
deriving newtype (ShelleyTxAuxData era -> ()
(ShelleyTxAuxData era -> ()) -> NFData (ShelleyTxAuxData era)
forall era. ShelleyTxAuxData era -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall era. ShelleyTxAuxData era -> ()
rnf :: ShelleyTxAuxData era -> ()
NFData, Typeable (ShelleyTxAuxData era)
Typeable (ShelleyTxAuxData era) =>
(ShelleyTxAuxData era -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (ShelleyTxAuxData era) -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [ShelleyTxAuxData era] -> Size)
-> ToCBOR (ShelleyTxAuxData era)
ShelleyTxAuxData era -> Encoding
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [ShelleyTxAuxData era] -> Size
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (ShelleyTxAuxData era) -> Size
forall era. Typeable era => Typeable (ShelleyTxAuxData era)
forall era. Typeable era => ShelleyTxAuxData era -> Encoding
forall a.
Typeable a =>
(a -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy a -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy [a] -> Size)
-> ToCBOR a
forall era.
Typeable era =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [ShelleyTxAuxData era] -> Size
forall era.
Typeable era =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (ShelleyTxAuxData era) -> Size
$ctoCBOR :: forall era. Typeable era => ShelleyTxAuxData era -> Encoding
toCBOR :: ShelleyTxAuxData era -> Encoding
$cencodedSizeExpr :: forall era.
Typeable era =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (ShelleyTxAuxData era) -> Size
encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (ShelleyTxAuxData era) -> Size
$cencodedListSizeExpr :: forall era.
Typeable era =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [ShelleyTxAuxData era] -> Size
encodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [ShelleyTxAuxData era] -> Size
Plain.ToCBOR, ShelleyTxAuxData era -> Int
ShelleyTxAuxData era -> ByteString
(ShelleyTxAuxData era -> ByteString)
-> (ShelleyTxAuxData era -> Int)
-> (forall i. Proxy i -> ShelleyTxAuxData era -> SafeHash i)
-> SafeToHash (ShelleyTxAuxData era)
forall i. Proxy i -> ShelleyTxAuxData era -> SafeHash i
forall era. ShelleyTxAuxData era -> Int
forall era. ShelleyTxAuxData era -> ByteString
forall t.
(t -> ByteString)
-> (t -> Int)
-> (forall i. Proxy i -> t -> SafeHash i)
-> SafeToHash t
forall era i. Proxy i -> ShelleyTxAuxData era -> SafeHash i
$coriginalBytes :: forall era. ShelleyTxAuxData era -> ByteString
originalBytes :: ShelleyTxAuxData era -> ByteString
$coriginalBytesSize :: forall era. ShelleyTxAuxData era -> Int
originalBytesSize :: ShelleyTxAuxData era -> Int
$cmakeHashWithExplicitProxys :: forall era i. Proxy i -> ShelleyTxAuxData era -> SafeHash i
makeHashWithExplicitProxys :: forall i. Proxy i -> ShelleyTxAuxData era -> SafeHash i
SafeToHash, Typeable (ShelleyTxAuxData era)
Typeable (ShelleyTxAuxData era) =>
(forall s. Decoder s (ShelleyTxAuxData era))
-> (forall s. Proxy (ShelleyTxAuxData era) -> Decoder s ())
-> (Proxy (ShelleyTxAuxData era) -> Text)
-> DecCBOR (ShelleyTxAuxData era)
Proxy (ShelleyTxAuxData era) -> Text
forall s. Decoder s (ShelleyTxAuxData era)
forall a.
Typeable a =>
(forall s. Decoder s a)
-> (forall s. Proxy a -> Decoder s ())
-> (Proxy a -> Text)
-> DecCBOR a
forall s. Proxy (ShelleyTxAuxData era) -> Decoder s ()
forall era. Era era => Typeable (ShelleyTxAuxData era)
forall era. Era era => Proxy (ShelleyTxAuxData era) -> Text
forall era s. Era era => Decoder s (ShelleyTxAuxData era)
forall era s.
Era era =>
Proxy (ShelleyTxAuxData era) -> Decoder s ()
$cdecCBOR :: forall era s. Era era => Decoder s (ShelleyTxAuxData era)
decCBOR :: forall s. Decoder s (ShelleyTxAuxData era)
$cdropCBOR :: forall era s.
Era era =>
Proxy (ShelleyTxAuxData era) -> Decoder s ()
dropCBOR :: forall s. Proxy (ShelleyTxAuxData era) -> Decoder s ()
$clabel :: forall era. Era era => Proxy (ShelleyTxAuxData era) -> Text
label :: Proxy (ShelleyTxAuxData era) -> Text
DecCBOR)
instance Memoized (ShelleyTxAuxData era) where
type RawType (ShelleyTxAuxData era) = ShelleyTxAuxDataRaw era
instance EraTxAuxData ShelleyEra where
type TxAuxData ShelleyEra = ShelleyTxAuxData ShelleyEra
mkBasicTxAuxData :: TxAuxData ShelleyEra
mkBasicTxAuxData = Map Word64 Metadatum -> ShelleyTxAuxData ShelleyEra
forall era. Era era => Map Word64 Metadatum -> ShelleyTxAuxData era
ShelleyTxAuxData Map Word64 Metadatum
forall a. Monoid a => a
mempty
metadataTxAuxDataL :: Lens' (TxAuxData ShelleyEra) (Map Word64 Metadatum)
metadataTxAuxDataL =
forall era t a b.
(Era era, EncCBOR (RawType t), Memoized t) =>
(RawType t -> a) -> (RawType t -> b -> RawType t) -> Lens t t a b
lensMemoRawType @ShelleyEra RawType (TxAuxData ShelleyEra) -> Map Word64 Metadatum
ShelleyTxAuxDataRaw ShelleyEra -> Map Word64 Metadatum
forall era. ShelleyTxAuxDataRaw era -> Map Word64 Metadatum
stadrMetadata ((RawType (TxAuxData ShelleyEra)
-> Map Word64 Metadatum -> RawType (TxAuxData ShelleyEra))
-> Lens' (TxAuxData ShelleyEra) (Map Word64 Metadatum))
-> (RawType (TxAuxData ShelleyEra)
-> Map Word64 Metadatum -> RawType (TxAuxData ShelleyEra))
-> Lens' (TxAuxData ShelleyEra) (Map Word64 Metadatum)
forall a b. (a -> b) -> a -> b
$
\RawType (TxAuxData ShelleyEra)
txAuxDataRaw Map Word64 Metadatum
md -> RawType (TxAuxData ShelleyEra)
txAuxDataRaw {stadrMetadata = md}
upgradeTxAuxData :: EraTxAuxData (PreviousEra ShelleyEra) =>
TxAuxData (PreviousEra ShelleyEra) -> TxAuxData ShelleyEra
upgradeTxAuxData = String -> TxAuxData ByronEra -> ShelleyTxAuxData ShelleyEra
forall a. HasCallStack => String -> a
error String
"It is not possible to translate Byron TxOut with 'upgradeTxOut'"
validateTxAuxData :: ProtVer -> TxAuxData ShelleyEra -> Bool
validateTxAuxData ProtVer
_ (ShelleyTxAuxData Map Word64 Metadatum
m) = (Metadatum -> Bool) -> Map Word64 Metadatum -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all Metadatum -> Bool
validMetadatum Map Word64 Metadatum
m
instance EqRaw (ShelleyTxAuxData era)
instance HashAnnotated (ShelleyTxAuxData era) EraIndependentTxAuxData where
hashAnnotated :: ShelleyTxAuxData era -> SafeHash EraIndependentTxAuxData
hashAnnotated = ShelleyTxAuxData era -> SafeHash EraIndependentTxAuxData
ShelleyTxAuxData era
-> SafeHash (MemoHashIndex (RawType (ShelleyTxAuxData era)))
forall t. Memoized t => t -> SafeHash (MemoHashIndex (RawType t))
getMemoSafeHash
hashShelleyTxAuxData ::
ShelleyTxAuxData era ->
SafeHash EraIndependentTxAuxData
hashShelleyTxAuxData :: forall era.
ShelleyTxAuxData era -> SafeHash EraIndependentTxAuxData
hashShelleyTxAuxData = ShelleyTxAuxData era -> SafeHash EraIndependentTxAuxData
forall x i. HashAnnotated x i => x -> SafeHash i
hashAnnotated
{-# DEPRECATED hashShelleyTxAuxData "In favor of `hashAnnotated`" #-}
pattern ShelleyTxAuxData :: forall era. Era era => Map Word64 Metadatum -> ShelleyTxAuxData era
pattern $mShelleyTxAuxData :: forall {r} {era}.
Era era =>
ShelleyTxAuxData era
-> (Map Word64 Metadatum -> r) -> ((# #) -> r) -> r
$bShelleyTxAuxData :: forall era. Era era => Map Word64 Metadatum -> ShelleyTxAuxData era
ShelleyTxAuxData m <-
(getMemoRawType -> ShelleyTxAuxDataRaw m)
where
ShelleyTxAuxData Map Word64 Metadatum
m = forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @era (RawType (ShelleyTxAuxData era) -> ShelleyTxAuxData era)
-> RawType (ShelleyTxAuxData era) -> ShelleyTxAuxData era
forall a b. (a -> b) -> a -> b
$ Map Word64 Metadatum -> ShelleyTxAuxDataRaw era
forall era. Map Word64 Metadatum -> ShelleyTxAuxDataRaw era
ShelleyTxAuxDataRaw Map Word64 Metadatum
m
{-# COMPLETE ShelleyTxAuxData #-}
instance Era era => EncCBOR (ShelleyTxAuxData era)
type instance MemoHashIndex (ShelleyTxAuxDataRaw era) = EraIndependentTxAuxData