{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# 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 (..),
Metadatum (..),
) where
import Cardano.Ledger.Binary (Annotator, DecCBOR (..), EncCBOR (..))
import qualified Cardano.Ledger.Binary.Plain as Plain (ToCBOR)
import Cardano.Ledger.Core
import Cardano.Ledger.MemoBytes (
EqRaw (..),
Mem,
MemoBytes,
MemoHashIndex,
Memoized (RawType),
getMemoRawType,
getMemoSafeHash,
lensMemoRawType,
mkMemoizedEra,
)
import Cardano.Ledger.Metadata (Metadatum (..))
import Cardano.Ledger.Shelley.Era (ShelleyEra)
import Control.DeepSeq (NFData)
import Data.Aeson (FromJSON (..), ToJSON (..))
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)
instance Era era => DecCBOR (Annotator (ShelleyTxAuxDataRaw era)) where
decCBOR :: forall s. Decoder s (Annotator (ShelleyTxAuxDataRaw era))
decCBOR = ShelleyTxAuxDataRaw era -> Annotator (ShelleyTxAuxDataRaw era)
forall a. a -> Annotator a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ShelleyTxAuxDataRaw era -> Annotator (ShelleyTxAuxDataRaw era))
-> Decoder s (ShelleyTxAuxDataRaw era)
-> Decoder s (Annotator (ShelleyTxAuxDataRaw era))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (ShelleyTxAuxDataRaw era)
forall s. Decoder s (ShelleyTxAuxDataRaw era)
forall a s. DecCBOR a => Decoder s a
decCBOR
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)
instance Memoized (ShelleyTxAuxData era) where
type RawType (ShelleyTxAuxData era) = ShelleyTxAuxDataRaw era
deriving via
Mem (ShelleyTxAuxDataRaw era)
instance
Era era => DecCBOR (Annotator (ShelleyTxAuxData 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}
validateTxAuxData :: ProtVer -> TxAuxData ShelleyEra -> Bool
validateTxAuxData ProtVer
_ TxAuxData ShelleyEra
_ = Bool
True
instance EqRaw (ShelleyTxAuxData era)
instance Era era => ToJSON (ShelleyTxAuxData era) where
toJSON :: ShelleyTxAuxData era -> Value
toJSON (ShelleyTxAuxData Map Word64 Metadatum
m) = Map Word64 Metadatum -> Value
forall a. ToJSON a => a -> Value
toJSON Map Word64 Metadatum
m
instance Era era => FromJSON (ShelleyTxAuxData era) where
parseJSON :: Value -> Parser (ShelleyTxAuxData era)
parseJSON Value
v = Map Word64 Metadatum -> ShelleyTxAuxData era
forall era. Era era => Map Word64 Metadatum -> ShelleyTxAuxData era
ShelleyTxAuxData (Map Word64 Metadatum -> ShelleyTxAuxData era)
-> Parser (Map Word64 Metadatum) -> Parser (ShelleyTxAuxData era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser (Map Word64 Metadatum)
forall a. FromJSON a => Value -> Parser a
parseJSON Value
v
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
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