{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilyDependencies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Cardano.Ledger.Alonzo.Scripts (
PlutusBinary (..),
AlonzoScript (TimelockScript, PlutusScript),
Script,
isPlutusScript,
validScript,
eqAlonzoScriptRaw,
AlonzoEraScript (..),
eraLanguages,
PlutusScript (..),
withPlutusScriptLanguage,
plutusScriptLanguage,
decodePlutusScript,
plutusScriptBinary,
mkBinaryPlutusScript,
isValidPlutusScript,
toPlutusSLanguage,
alonzoScriptPrefixTag,
lookupPlutusScript,
pattern SpendingPurpose,
pattern MintingPurpose,
pattern CertifyingPurpose,
pattern RewardingPurpose,
AlonzoPlutusPurpose (..),
AsItem (..),
AsIx (..),
AsIxItem (..),
toAsItem,
toAsIx,
module Cardano.Ledger.Plutus.CostModels,
module Cardano.Ledger.Plutus.ExUnits,
) where
import Cardano.Ledger.Address (RewardAccount)
import Cardano.Ledger.Allegra.Scripts
import Cardano.Ledger.Alonzo.Era (AlonzoEra)
import Cardano.Ledger.Alonzo.TxCert ()
import Cardano.Ledger.BaseTypes (ProtVer (..), kindObject)
import Cardano.Ledger.Binary (
DecCBOR (decCBOR),
DecCBORGroup (..),
Decoder,
EncCBOR (..),
EncCBORGroup (..),
ToCBOR (toCBOR),
Version,
decodeWord8,
encodeWord8,
)
import Cardano.Ledger.Binary.Coders (
Decode (D, From, Invalid, SumD, Summands),
Encode (Sum, To),
Wrapped (..),
decode,
encode,
(!>),
(<!),
)
import Cardano.Ledger.Binary.Plain (serializeAsHexText)
import Cardano.Ledger.Core
import Cardano.Ledger.Mary.Value (PolicyID)
import Cardano.Ledger.MemoBytes (EqRaw (..))
import Cardano.Ledger.Plutus.CostModels
import Cardano.Ledger.Plutus.ExUnits
import Cardano.Ledger.Plutus.Language (
Language (..),
Plutus (..),
PlutusBinary (..),
PlutusLanguage (..),
SLanguage (..),
asSLanguage,
isValidPlutus,
plutusLanguage,
plutusSLanguage,
withSLanguage,
)
import Cardano.Ledger.Shelley.Scripts (ShelleyEraScript (..), nativeMultiSigTag)
import Cardano.Ledger.TxIn (TxIn)
import Control.DeepSeq (NFData (..), deepseq)
import Control.Monad (guard, (>=>))
import Data.Aeson (ToJSON (..), Value (String), object, (.=))
import qualified Data.ByteString as BS
import Data.Kind (Type)
import qualified Data.Map.Strict as Map
import Data.Maybe (fromJust, isJust)
import Data.MemPack
import Data.Typeable
import Data.Word (Word16, Word32, Word8)
import GHC.Generics (Generic)
import GHC.Stack
import NoThunks.Class (NoThunks (..))
class
( EraScript era
, Eq (PlutusScript era)
, Ord (PlutusScript era)
, Show (PlutusScript era)
, NoThunks (PlutusScript era)
, NFData (PlutusScript era)
, SafeToHash (PlutusScript era)
, Eq (PlutusPurpose AsItem era)
, Show (PlutusPurpose AsItem era)
, EncCBOR (PlutusPurpose AsItem era)
, DecCBOR (PlutusPurpose AsItem era)
, NoThunks (PlutusPurpose AsItem era)
, NFData (PlutusPurpose AsItem era)
, Eq (PlutusPurpose AsIx era)
, Ord (PlutusPurpose AsIx era)
, Show (PlutusPurpose AsIx era)
, EncCBOR (PlutusPurpose AsIx era)
, DecCBOR (PlutusPurpose AsIx era)
, EncCBORGroup (PlutusPurpose AsIx era)
, DecCBORGroup (PlutusPurpose AsIx era)
, NoThunks (PlutusPurpose AsIx era)
, NFData (PlutusPurpose AsIx era)
, Eq (PlutusPurpose AsIxItem era)
, Show (PlutusPurpose AsIxItem era)
, NoThunks (PlutusPurpose AsIxItem era)
, NFData (PlutusPurpose AsIxItem era)
, AllegraEraScript era
) =>
AlonzoEraScript era
where
data PlutusScript era :: Type
type PlutusPurpose (f :: Type -> Type -> Type) era = (r :: Type) | r -> era
eraMaxLanguage :: Language
toPlutusScript :: Script era -> Maybe (PlutusScript era)
default toPlutusScript :: Script era ~ AlonzoScript era => Script era -> Maybe (PlutusScript era)
toPlutusScript = \case
PlutusScript PlutusScript era
ps -> PlutusScript era -> Maybe (PlutusScript era)
forall a. a -> Maybe a
Just PlutusScript era
ps
Script era
_ -> Maybe (PlutusScript era)
forall a. Maybe a
Nothing
fromPlutusScript :: PlutusScript era -> Script era
default fromPlutusScript :: Script era ~ AlonzoScript era => PlutusScript era -> Script era
fromPlutusScript = PlutusScript era -> Script era
PlutusScript era -> AlonzoScript era
forall era. PlutusScript era -> AlonzoScript era
PlutusScript
mkPlutusScript :: PlutusLanguage l => Plutus l -> Maybe (PlutusScript era)
withPlutusScript ::
PlutusScript era ->
(forall l. PlutusLanguage l => Plutus l -> a) ->
a
hoistPlutusPurpose ::
(forall ix it. g ix it -> f ix it) ->
PlutusPurpose g era ->
PlutusPurpose f era
mkSpendingPurpose :: f Word32 TxIn -> PlutusPurpose f era
toSpendingPurpose :: PlutusPurpose f era -> Maybe (f Word32 TxIn)
mkMintingPurpose :: f Word32 PolicyID -> PlutusPurpose f era
toMintingPurpose :: PlutusPurpose f era -> Maybe (f Word32 PolicyID)
mkCertifyingPurpose :: f Word32 (TxCert era) -> PlutusPurpose f era
toCertifyingPurpose :: PlutusPurpose f era -> Maybe (f Word32 (TxCert era))
mkRewardingPurpose :: f Word32 RewardAccount -> PlutusPurpose f era
toRewardingPurpose :: PlutusPurpose f era -> Maybe (f Word32 RewardAccount)
upgradePlutusPurposeAsIx ::
AlonzoEraScript (PreviousEra era) =>
PlutusPurpose AsIx (PreviousEra era) ->
PlutusPurpose AsIx era
mkBinaryPlutusScript :: AlonzoEraScript era => Language -> PlutusBinary -> Maybe (PlutusScript era)
mkBinaryPlutusScript :: forall era.
AlonzoEraScript era =>
Language -> PlutusBinary -> Maybe (PlutusScript era)
mkBinaryPlutusScript Language
lang PlutusBinary
pb = Language
-> (forall (l :: Language).
PlutusLanguage l =>
SLanguage l -> Maybe (PlutusScript era))
-> Maybe (PlutusScript era)
forall a.
Language
-> (forall (l :: Language). PlutusLanguage l => SLanguage l -> a)
-> a
withSLanguage Language
lang (Plutus l -> Maybe (PlutusScript era)
forall era (l :: Language).
(AlonzoEraScript era, PlutusLanguage l) =>
Plutus l -> Maybe (PlutusScript era)
forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (PlutusScript era)
mkPlutusScript (Plutus l -> Maybe (PlutusScript era))
-> (SLanguage l -> Plutus l)
-> SLanguage l
-> Maybe (PlutusScript era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SLanguage l -> Plutus l -> Plutus l
forall (l :: Language) (proxy :: Language -> *).
SLanguage l -> proxy l -> proxy l
`asSLanguage` PlutusBinary -> Plutus l
forall (l :: Language). PlutusBinary -> Plutus l
Plutus PlutusBinary
pb))
withPlutusScriptLanguage ::
AlonzoEraScript era =>
Language ->
PlutusScript era ->
(forall l. PlutusLanguage l => Plutus l -> a) ->
Maybe a
withPlutusScriptLanguage :: forall era a.
AlonzoEraScript era =>
Language
-> PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a)
-> Maybe a
withPlutusScriptLanguage Language
lang PlutusScript era
ps forall (l :: Language). PlutusLanguage l => Plutus l -> a
f =
PlutusScript era
-> (forall {l :: Language}.
PlutusLanguage l =>
Plutus l -> Maybe a)
-> Maybe a
forall era a.
AlonzoEraScript era =>
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
forall a.
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript PlutusScript era
ps ((forall {l :: Language}. PlutusLanguage l => Plutus l -> Maybe a)
-> Maybe a)
-> (forall {l :: Language}.
PlutusLanguage l =>
Plutus l -> Maybe a)
-> Maybe a
forall a b. (a -> b) -> a -> b
$ \Plutus l
plutus ->
Plutus l -> a
forall (l :: Language). PlutusLanguage l => Plutus l -> a
f Plutus l
plutus a -> Maybe () -> Maybe a
forall a b. a -> Maybe b -> Maybe a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Bool -> Maybe ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Plutus l -> Language
forall (l :: Language) (proxy :: Language -> *).
PlutusLanguage l =>
proxy l -> Language
plutusLanguage Plutus l
plutus Language -> Language -> Bool
forall a. Eq a => a -> a -> Bool
== Language
lang)
toPlutusSLanguage ::
forall l era.
(PlutusLanguage l, AlonzoEraScript era) =>
SLanguage l ->
PlutusScript era ->
Maybe (Plutus l)
toPlutusSLanguage :: forall (l :: Language) era.
(PlutusLanguage l, AlonzoEraScript era) =>
SLanguage l -> PlutusScript era -> Maybe (Plutus l)
toPlutusSLanguage SLanguage l
_ PlutusScript era
ps = PlutusScript era
-> (forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (Plutus l))
-> Maybe (Plutus l)
forall era a.
AlonzoEraScript era =>
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
forall a.
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript PlutusScript era
ps Plutus l -> Maybe (Plutus l)
forall {k} (a :: k) (b :: k) (c :: k -> *).
(Typeable a, Typeable b) =>
c a -> Maybe (c b)
forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (Plutus l)
gcast
plutusScriptLanguage :: AlonzoEraScript era => PlutusScript era -> Language
plutusScriptLanguage :: forall era. AlonzoEraScript era => PlutusScript era -> Language
plutusScriptLanguage PlutusScript era
ps = PlutusScript era
-> (forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Language)
-> Language
forall era a.
AlonzoEraScript era =>
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
forall a.
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript PlutusScript era
ps Plutus l -> Language
forall (l :: Language). PlutusLanguage l => Plutus l -> Language
forall (l :: Language) (proxy :: Language -> *).
PlutusLanguage l =>
proxy l -> Language
plutusLanguage
plutusScriptBinary :: AlonzoEraScript era => PlutusScript era -> PlutusBinary
plutusScriptBinary :: forall era. AlonzoEraScript era => PlutusScript era -> PlutusBinary
plutusScriptBinary PlutusScript era
ps = PlutusScript era
-> (forall (l :: Language).
PlutusLanguage l =>
Plutus l -> PlutusBinary)
-> PlutusBinary
forall era a.
AlonzoEraScript era =>
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
forall a.
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript PlutusScript era
ps Plutus l -> PlutusBinary
forall (l :: Language).
PlutusLanguage l =>
Plutus l -> PlutusBinary
forall (l :: Language). Plutus l -> PlutusBinary
plutusBinary
isValidPlutusScript :: AlonzoEraScript era => Version -> PlutusScript era -> Bool
isValidPlutusScript :: forall era.
AlonzoEraScript era =>
Version -> PlutusScript era -> Bool
isValidPlutusScript Version
pv PlutusScript era
ps = PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> Bool)
-> Bool
forall era a.
AlonzoEraScript era =>
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
forall a.
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript PlutusScript era
ps (Version -> Plutus l -> Bool
forall (l :: Language).
PlutusLanguage l =>
Version -> Plutus l -> Bool
isValidPlutus Version
pv)
newtype AsIx ix it = AsIx {forall ix it. AsIx ix it -> ix
unAsIx :: ix}
deriving stock (Int -> AsIx ix it -> ShowS
[AsIx ix it] -> ShowS
AsIx ix it -> String
(Int -> AsIx ix it -> ShowS)
-> (AsIx ix it -> String)
-> ([AsIx ix it] -> ShowS)
-> Show (AsIx ix it)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall ix it. Show ix => Int -> AsIx ix it -> ShowS
forall ix it. Show ix => [AsIx ix it] -> ShowS
forall ix it. Show ix => AsIx ix it -> String
$cshowsPrec :: forall ix it. Show ix => Int -> AsIx ix it -> ShowS
showsPrec :: Int -> AsIx ix it -> ShowS
$cshow :: forall ix it. Show ix => AsIx ix it -> String
show :: AsIx ix it -> String
$cshowList :: forall ix it. Show ix => [AsIx ix it] -> ShowS
showList :: [AsIx ix it] -> ShowS
Show)
deriving newtype (AsIx ix it -> AsIx ix it -> Bool
(AsIx ix it -> AsIx ix it -> Bool)
-> (AsIx ix it -> AsIx ix it -> Bool) -> Eq (AsIx ix it)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall ix it. Eq ix => AsIx ix it -> AsIx ix it -> Bool
$c== :: forall ix it. Eq ix => AsIx ix it -> AsIx ix it -> Bool
== :: AsIx ix it -> AsIx ix it -> Bool
$c/= :: forall ix it. Eq ix => AsIx ix it -> AsIx ix it -> Bool
/= :: AsIx ix it -> AsIx ix it -> Bool
Eq, Eq (AsIx ix it)
Eq (AsIx ix it) =>
(AsIx ix it -> AsIx ix it -> Ordering)
-> (AsIx ix it -> AsIx ix it -> Bool)
-> (AsIx ix it -> AsIx ix it -> Bool)
-> (AsIx ix it -> AsIx ix it -> Bool)
-> (AsIx ix it -> AsIx ix it -> Bool)
-> (AsIx ix it -> AsIx ix it -> AsIx ix it)
-> (AsIx ix it -> AsIx ix it -> AsIx ix it)
-> Ord (AsIx ix it)
AsIx ix it -> AsIx ix it -> Bool
AsIx ix it -> AsIx ix it -> Ordering
AsIx ix it -> AsIx ix it -> AsIx ix it
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall ix it. Ord ix => Eq (AsIx ix it)
forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> Bool
forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> Ordering
forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> AsIx ix it
$ccompare :: forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> Ordering
compare :: AsIx ix it -> AsIx ix it -> Ordering
$c< :: forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> Bool
< :: AsIx ix it -> AsIx ix it -> Bool
$c<= :: forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> Bool
<= :: AsIx ix it -> AsIx ix it -> Bool
$c> :: forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> Bool
> :: AsIx ix it -> AsIx ix it -> Bool
$c>= :: forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> Bool
>= :: AsIx ix it -> AsIx ix it -> Bool
$cmax :: forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> AsIx ix it
max :: AsIx ix it -> AsIx ix it -> AsIx ix it
$cmin :: forall ix it. Ord ix => AsIx ix it -> AsIx ix it -> AsIx ix it
min :: AsIx ix it -> AsIx ix it -> AsIx ix it
Ord, AsIx ix it -> ()
(AsIx ix it -> ()) -> NFData (AsIx ix it)
forall a. (a -> ()) -> NFData a
forall ix it. NFData ix => AsIx ix it -> ()
$crnf :: forall ix it. NFData ix => AsIx ix it -> ()
rnf :: AsIx ix it -> ()
NFData, Context -> AsIx ix it -> IO (Maybe ThunkInfo)
Proxy (AsIx ix it) -> String
(Context -> AsIx ix it -> IO (Maybe ThunkInfo))
-> (Context -> AsIx ix it -> IO (Maybe ThunkInfo))
-> (Proxy (AsIx ix it) -> String)
-> NoThunks (AsIx ix it)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
forall ix it.
NoThunks ix =>
Context -> AsIx ix it -> IO (Maybe ThunkInfo)
forall ix it. NoThunks ix => Proxy (AsIx ix it) -> String
$cnoThunks :: forall ix it.
NoThunks ix =>
Context -> AsIx ix it -> IO (Maybe ThunkInfo)
noThunks :: Context -> AsIx ix it -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall ix it.
NoThunks ix =>
Context -> AsIx ix it -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> AsIx ix it -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall ix it. NoThunks ix => Proxy (AsIx ix it) -> String
showTypeOf :: Proxy (AsIx ix it) -> String
NoThunks, Typeable (AsIx ix it)
Typeable (AsIx ix it) =>
(AsIx ix it -> Encoding)
-> ((forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsIx ix it) -> Size)
-> ((forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsIx ix it] -> Size)
-> EncCBOR (AsIx ix it)
AsIx ix it -> Encoding
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsIx ix it] -> Size
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsIx ix it) -> Size
forall a.
Typeable a =>
(a -> Encoding)
-> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy a -> Size)
-> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy [a] -> Size)
-> EncCBOR a
forall ix it. (Typeable it, EncCBOR ix) => Typeable (AsIx ix it)
forall ix it. (Typeable it, EncCBOR ix) => AsIx ix it -> Encoding
forall ix it.
(Typeable it, EncCBOR ix) =>
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsIx ix it] -> Size
forall ix it.
(Typeable it, EncCBOR ix) =>
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsIx ix it) -> Size
$cencCBOR :: forall ix it. (Typeable it, EncCBOR ix) => AsIx ix it -> Encoding
encCBOR :: AsIx ix it -> Encoding
$cencodedSizeExpr :: forall ix it.
(Typeable it, EncCBOR ix) =>
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsIx ix it) -> Size
encodedSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsIx ix it) -> Size
$cencodedListSizeExpr :: forall ix it.
(Typeable it, EncCBOR ix) =>
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsIx ix it] -> Size
encodedListSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsIx ix it] -> Size
EncCBOR, Typeable (AsIx ix it)
Typeable (AsIx ix it) =>
(forall s. Decoder s (AsIx ix it))
-> (forall s. Proxy (AsIx ix it) -> Decoder s ())
-> (Proxy (AsIx ix it) -> Text)
-> DecCBOR (AsIx ix it)
Proxy (AsIx ix it) -> Text
forall s. Decoder s (AsIx ix it)
forall a.
Typeable a =>
(forall s. Decoder s a)
-> (forall s. Proxy a -> Decoder s ())
-> (Proxy a -> Text)
-> DecCBOR a
forall s. Proxy (AsIx ix it) -> Decoder s ()
forall ix it. (Typeable it, DecCBOR ix) => Typeable (AsIx ix it)
forall ix it.
(Typeable it, DecCBOR ix) =>
Proxy (AsIx ix it) -> Text
forall ix it s. (Typeable it, DecCBOR ix) => Decoder s (AsIx ix it)
forall ix it s.
(Typeable it, DecCBOR ix) =>
Proxy (AsIx ix it) -> Decoder s ()
$cdecCBOR :: forall ix it s. (Typeable it, DecCBOR ix) => Decoder s (AsIx ix it)
decCBOR :: forall s. Decoder s (AsIx ix it)
$cdropCBOR :: forall ix it s.
(Typeable it, DecCBOR ix) =>
Proxy (AsIx ix it) -> Decoder s ()
dropCBOR :: forall s. Proxy (AsIx ix it) -> Decoder s ()
$clabel :: forall ix it.
(Typeable it, DecCBOR ix) =>
Proxy (AsIx ix it) -> Text
label :: Proxy (AsIx ix it) -> Text
DecCBOR, (forall x. AsIx ix it -> Rep (AsIx ix it) x)
-> (forall x. Rep (AsIx ix it) x -> AsIx ix it)
-> Generic (AsIx ix it)
forall x. Rep (AsIx ix it) x -> AsIx ix it
forall x. AsIx ix it -> Rep (AsIx ix it) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall ix it x. Generic ix => Rep (AsIx ix it) x -> AsIx ix it
forall ix it x. Generic ix => AsIx ix it -> Rep (AsIx ix it) x
$cfrom :: forall ix it x. Generic ix => AsIx ix it -> Rep (AsIx ix it) x
from :: forall x. AsIx ix it -> Rep (AsIx ix it) x
$cto :: forall ix it x. Generic ix => Rep (AsIx ix it) x -> AsIx ix it
to :: forall x. Rep (AsIx ix it) x -> AsIx ix it
Generic)
newtype AsItem ix it = AsItem {forall ix it. AsItem ix it -> it
unAsItem :: it}
deriving stock (Int -> AsItem ix it -> ShowS
[AsItem ix it] -> ShowS
AsItem ix it -> String
(Int -> AsItem ix it -> ShowS)
-> (AsItem ix it -> String)
-> ([AsItem ix it] -> ShowS)
-> Show (AsItem ix it)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall ix it. Show it => Int -> AsItem ix it -> ShowS
forall ix it. Show it => [AsItem ix it] -> ShowS
forall ix it. Show it => AsItem ix it -> String
$cshowsPrec :: forall ix it. Show it => Int -> AsItem ix it -> ShowS
showsPrec :: Int -> AsItem ix it -> ShowS
$cshow :: forall ix it. Show it => AsItem ix it -> String
show :: AsItem ix it -> String
$cshowList :: forall ix it. Show it => [AsItem ix it] -> ShowS
showList :: [AsItem ix it] -> ShowS
Show)
deriving newtype (AsItem ix it -> AsItem ix it -> Bool
(AsItem ix it -> AsItem ix it -> Bool)
-> (AsItem ix it -> AsItem ix it -> Bool) -> Eq (AsItem ix it)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall ix it. Eq it => AsItem ix it -> AsItem ix it -> Bool
$c== :: forall ix it. Eq it => AsItem ix it -> AsItem ix it -> Bool
== :: AsItem ix it -> AsItem ix it -> Bool
$c/= :: forall ix it. Eq it => AsItem ix it -> AsItem ix it -> Bool
/= :: AsItem ix it -> AsItem ix it -> Bool
Eq, Eq (AsItem ix it)
Eq (AsItem ix it) =>
(AsItem ix it -> AsItem ix it -> Ordering)
-> (AsItem ix it -> AsItem ix it -> Bool)
-> (AsItem ix it -> AsItem ix it -> Bool)
-> (AsItem ix it -> AsItem ix it -> Bool)
-> (AsItem ix it -> AsItem ix it -> Bool)
-> (AsItem ix it -> AsItem ix it -> AsItem ix it)
-> (AsItem ix it -> AsItem ix it -> AsItem ix it)
-> Ord (AsItem ix it)
AsItem ix it -> AsItem ix it -> Bool
AsItem ix it -> AsItem ix it -> Ordering
AsItem ix it -> AsItem ix it -> AsItem ix it
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall ix it. Ord it => Eq (AsItem ix it)
forall ix it. Ord it => AsItem ix it -> AsItem ix it -> Bool
forall ix it. Ord it => AsItem ix it -> AsItem ix it -> Ordering
forall ix it.
Ord it =>
AsItem ix it -> AsItem ix it -> AsItem ix it
$ccompare :: forall ix it. Ord it => AsItem ix it -> AsItem ix it -> Ordering
compare :: AsItem ix it -> AsItem ix it -> Ordering
$c< :: forall ix it. Ord it => AsItem ix it -> AsItem ix it -> Bool
< :: AsItem ix it -> AsItem ix it -> Bool
$c<= :: forall ix it. Ord it => AsItem ix it -> AsItem ix it -> Bool
<= :: AsItem ix it -> AsItem ix it -> Bool
$c> :: forall ix it. Ord it => AsItem ix it -> AsItem ix it -> Bool
> :: AsItem ix it -> AsItem ix it -> Bool
$c>= :: forall ix it. Ord it => AsItem ix it -> AsItem ix it -> Bool
>= :: AsItem ix it -> AsItem ix it -> Bool
$cmax :: forall ix it.
Ord it =>
AsItem ix it -> AsItem ix it -> AsItem ix it
max :: AsItem ix it -> AsItem ix it -> AsItem ix it
$cmin :: forall ix it.
Ord it =>
AsItem ix it -> AsItem ix it -> AsItem ix it
min :: AsItem ix it -> AsItem ix it -> AsItem ix it
Ord, AsItem ix it -> ()
(AsItem ix it -> ()) -> NFData (AsItem ix it)
forall a. (a -> ()) -> NFData a
forall ix it. NFData it => AsItem ix it -> ()
$crnf :: forall ix it. NFData it => AsItem ix it -> ()
rnf :: AsItem ix it -> ()
NFData, Context -> AsItem ix it -> IO (Maybe ThunkInfo)
Proxy (AsItem ix it) -> String
(Context -> AsItem ix it -> IO (Maybe ThunkInfo))
-> (Context -> AsItem ix it -> IO (Maybe ThunkInfo))
-> (Proxy (AsItem ix it) -> String)
-> NoThunks (AsItem ix it)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
forall ix it.
NoThunks it =>
Context -> AsItem ix it -> IO (Maybe ThunkInfo)
forall ix it. NoThunks it => Proxy (AsItem ix it) -> String
$cnoThunks :: forall ix it.
NoThunks it =>
Context -> AsItem ix it -> IO (Maybe ThunkInfo)
noThunks :: Context -> AsItem ix it -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall ix it.
NoThunks it =>
Context -> AsItem ix it -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> AsItem ix it -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall ix it. NoThunks it => Proxy (AsItem ix it) -> String
showTypeOf :: Proxy (AsItem ix it) -> String
NoThunks, Typeable (AsItem ix it)
Typeable (AsItem ix it) =>
(AsItem ix it -> Encoding)
-> ((forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsItem ix it) -> Size)
-> ((forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsItem ix it] -> Size)
-> EncCBOR (AsItem ix it)
AsItem ix it -> Encoding
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsItem ix it] -> Size
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsItem ix it) -> Size
forall a.
Typeable a =>
(a -> Encoding)
-> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy a -> Size)
-> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy [a] -> Size)
-> EncCBOR a
forall ix it. (Typeable ix, EncCBOR it) => Typeable (AsItem ix it)
forall ix it. (Typeable ix, EncCBOR it) => AsItem ix it -> Encoding
forall ix it.
(Typeable ix, EncCBOR it) =>
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsItem ix it] -> Size
forall ix it.
(Typeable ix, EncCBOR it) =>
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsItem ix it) -> Size
$cencCBOR :: forall ix it. (Typeable ix, EncCBOR it) => AsItem ix it -> Encoding
encCBOR :: AsItem ix it -> Encoding
$cencodedSizeExpr :: forall ix it.
(Typeable ix, EncCBOR it) =>
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsItem ix it) -> Size
encodedSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AsItem ix it) -> Size
$cencodedListSizeExpr :: forall ix it.
(Typeable ix, EncCBOR it) =>
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsItem ix it] -> Size
encodedListSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [AsItem ix it] -> Size
EncCBOR, Typeable (AsItem ix it)
Typeable (AsItem ix it) =>
(forall s. Decoder s (AsItem ix it))
-> (forall s. Proxy (AsItem ix it) -> Decoder s ())
-> (Proxy (AsItem ix it) -> Text)
-> DecCBOR (AsItem ix it)
Proxy (AsItem ix it) -> Text
forall s. Decoder s (AsItem ix it)
forall a.
Typeable a =>
(forall s. Decoder s a)
-> (forall s. Proxy a -> Decoder s ())
-> (Proxy a -> Text)
-> DecCBOR a
forall s. Proxy (AsItem ix it) -> Decoder s ()
forall ix it. (Typeable ix, DecCBOR it) => Typeable (AsItem ix it)
forall ix it.
(Typeable ix, DecCBOR it) =>
Proxy (AsItem ix it) -> Text
forall ix it s.
(Typeable ix, DecCBOR it) =>
Decoder s (AsItem ix it)
forall ix it s.
(Typeable ix, DecCBOR it) =>
Proxy (AsItem ix it) -> Decoder s ()
$cdecCBOR :: forall ix it s.
(Typeable ix, DecCBOR it) =>
Decoder s (AsItem ix it)
decCBOR :: forall s. Decoder s (AsItem ix it)
$cdropCBOR :: forall ix it s.
(Typeable ix, DecCBOR it) =>
Proxy (AsItem ix it) -> Decoder s ()
dropCBOR :: forall s. Proxy (AsItem ix it) -> Decoder s ()
$clabel :: forall ix it.
(Typeable ix, DecCBOR it) =>
Proxy (AsItem ix it) -> Text
label :: Proxy (AsItem ix it) -> Text
DecCBOR, (forall x. AsItem ix it -> Rep (AsItem ix it) x)
-> (forall x. Rep (AsItem ix it) x -> AsItem ix it)
-> Generic (AsItem ix it)
forall x. Rep (AsItem ix it) x -> AsItem ix it
forall x. AsItem ix it -> Rep (AsItem ix it) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall ix it x. Generic it => Rep (AsItem ix it) x -> AsItem ix it
forall ix it x. Generic it => AsItem ix it -> Rep (AsItem ix it) x
$cfrom :: forall ix it x. Generic it => AsItem ix it -> Rep (AsItem ix it) x
from :: forall x. AsItem ix it -> Rep (AsItem ix it) x
$cto :: forall ix it x. Generic it => Rep (AsItem ix it) x -> AsItem ix it
to :: forall x. Rep (AsItem ix it) x -> AsItem ix it
Generic)
data AsIxItem ix it = AsIxItem
{ forall ix it. AsIxItem ix it -> ix
asIndex :: !ix
, forall ix it. AsIxItem ix it -> it
asItem :: !it
}
deriving (AsIxItem ix it -> AsIxItem ix it -> Bool
(AsIxItem ix it -> AsIxItem ix it -> Bool)
-> (AsIxItem ix it -> AsIxItem ix it -> Bool)
-> Eq (AsIxItem ix it)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall ix it.
(Eq ix, Eq it) =>
AsIxItem ix it -> AsIxItem ix it -> Bool
$c== :: forall ix it.
(Eq ix, Eq it) =>
AsIxItem ix it -> AsIxItem ix it -> Bool
== :: AsIxItem ix it -> AsIxItem ix it -> Bool
$c/= :: forall ix it.
(Eq ix, Eq it) =>
AsIxItem ix it -> AsIxItem ix it -> Bool
/= :: AsIxItem ix it -> AsIxItem ix it -> Bool
Eq, Eq (AsIxItem ix it)
Eq (AsIxItem ix it) =>
(AsIxItem ix it -> AsIxItem ix it -> Ordering)
-> (AsIxItem ix it -> AsIxItem ix it -> Bool)
-> (AsIxItem ix it -> AsIxItem ix it -> Bool)
-> (AsIxItem ix it -> AsIxItem ix it -> Bool)
-> (AsIxItem ix it -> AsIxItem ix it -> Bool)
-> (AsIxItem ix it -> AsIxItem ix it -> AsIxItem ix it)
-> (AsIxItem ix it -> AsIxItem ix it -> AsIxItem ix it)
-> Ord (AsIxItem ix it)
AsIxItem ix it -> AsIxItem ix it -> Bool
AsIxItem ix it -> AsIxItem ix it -> Ordering
AsIxItem ix it -> AsIxItem ix it -> AsIxItem ix it
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall ix it. (Ord ix, Ord it) => Eq (AsIxItem ix it)
forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> Bool
forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> Ordering
forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> AsIxItem ix it
$ccompare :: forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> Ordering
compare :: AsIxItem ix it -> AsIxItem ix it -> Ordering
$c< :: forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> Bool
< :: AsIxItem ix it -> AsIxItem ix it -> Bool
$c<= :: forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> Bool
<= :: AsIxItem ix it -> AsIxItem ix it -> Bool
$c> :: forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> Bool
> :: AsIxItem ix it -> AsIxItem ix it -> Bool
$c>= :: forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> Bool
>= :: AsIxItem ix it -> AsIxItem ix it -> Bool
$cmax :: forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> AsIxItem ix it
max :: AsIxItem ix it -> AsIxItem ix it -> AsIxItem ix it
$cmin :: forall ix it.
(Ord ix, Ord it) =>
AsIxItem ix it -> AsIxItem ix it -> AsIxItem ix it
min :: AsIxItem ix it -> AsIxItem ix it -> AsIxItem ix it
Ord, Int -> AsIxItem ix it -> ShowS
[AsIxItem ix it] -> ShowS
AsIxItem ix it -> String
(Int -> AsIxItem ix it -> ShowS)
-> (AsIxItem ix it -> String)
-> ([AsIxItem ix it] -> ShowS)
-> Show (AsIxItem ix it)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall ix it. (Show ix, Show it) => Int -> AsIxItem ix it -> ShowS
forall ix it. (Show ix, Show it) => [AsIxItem ix it] -> ShowS
forall ix it. (Show ix, Show it) => AsIxItem ix it -> String
$cshowsPrec :: forall ix it. (Show ix, Show it) => Int -> AsIxItem ix it -> ShowS
showsPrec :: Int -> AsIxItem ix it -> ShowS
$cshow :: forall ix it. (Show ix, Show it) => AsIxItem ix it -> String
show :: AsIxItem ix it -> String
$cshowList :: forall ix it. (Show ix, Show it) => [AsIxItem ix it] -> ShowS
showList :: [AsIxItem ix it] -> ShowS
Show, (forall x. AsIxItem ix it -> Rep (AsIxItem ix it) x)
-> (forall x. Rep (AsIxItem ix it) x -> AsIxItem ix it)
-> Generic (AsIxItem ix it)
forall x. Rep (AsIxItem ix it) x -> AsIxItem ix it
forall x. AsIxItem ix it -> Rep (AsIxItem ix it) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall ix it x. Rep (AsIxItem ix it) x -> AsIxItem ix it
forall ix it x. AsIxItem ix it -> Rep (AsIxItem ix it) x
$cfrom :: forall ix it x. AsIxItem ix it -> Rep (AsIxItem ix it) x
from :: forall x. AsIxItem ix it -> Rep (AsIxItem ix it) x
$cto :: forall ix it x. Rep (AsIxItem ix it) x -> AsIxItem ix it
to :: forall x. Rep (AsIxItem ix it) x -> AsIxItem ix it
Generic)
instance (NoThunks ix, NoThunks it) => NoThunks (AsIxItem ix it)
instance (NFData ix, NFData it) => NFData (AsIxItem ix it) where
rnf :: AsIxItem ix it -> ()
rnf (AsIxItem ix
ix it
it) = ix
ix ix -> () -> ()
forall a b. NFData a => a -> b -> b
`deepseq` it -> ()
forall a. NFData a => a -> ()
rnf it
it
instance ToJSON ix => ToJSON (AsIx ix it) where
toJSON :: AsIx ix it -> Value
toJSON (AsIx ix
i) = [Pair] -> Value
object [Key
"index" Key -> Value -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ix -> Value
forall a. ToJSON a => a -> Value
toJSON ix
i]
instance ToJSON it => ToJSON (AsItem ix it) where
toJSON :: AsItem ix it -> Value
toJSON (AsItem it
i) = [Pair] -> Value
object [Key
"item" Key -> Value -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= it -> Value
forall a. ToJSON a => a -> Value
toJSON it
i]
instance (ToJSON ix, ToJSON it) => ToJSON (AsIxItem ix it) where
toJSON :: AsIxItem ix it -> Value
toJSON (AsIxItem ix
ix it
it) =
[Pair] -> Value
object
[ Key
"index" Key -> Value -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= ix -> Value
forall a. ToJSON a => a -> Value
toJSON ix
ix
, Key
"item" Key -> Value -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= it -> Value
forall a. ToJSON a => a -> Value
toJSON it
it
]
toAsItem :: AsIxItem ix it -> AsItem ix it
toAsItem :: forall ix it. AsIxItem ix it -> AsItem ix it
toAsItem (AsIxItem ix
_ it
it) = it -> AsItem ix it
forall ix it. it -> AsItem ix it
AsItem it
it
toAsIx :: AsIxItem ix it -> AsIx ix it
toAsIx :: forall ix it. AsIxItem ix it -> AsIx ix it
toAsIx (AsIxItem ix
ix it
_) = ix -> AsIx ix it
forall ix it. ix -> AsIx ix it
AsIx ix
ix
data AlonzoPlutusPurpose f era
= AlonzoSpending !(f Word32 TxIn)
| AlonzoMinting !(f Word32 PolicyID)
| AlonzoCertifying !(f Word32 (TxCert era))
| AlonzoRewarding !(f Word32 RewardAccount)
deriving ((forall x.
AlonzoPlutusPurpose f era -> Rep (AlonzoPlutusPurpose f era) x)
-> (forall x.
Rep (AlonzoPlutusPurpose f era) x -> AlonzoPlutusPurpose f era)
-> Generic (AlonzoPlutusPurpose f era)
forall x.
Rep (AlonzoPlutusPurpose f era) x -> AlonzoPlutusPurpose f era
forall x.
AlonzoPlutusPurpose f era -> Rep (AlonzoPlutusPurpose f era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (f :: * -> * -> *) era x.
Rep (AlonzoPlutusPurpose f era) x -> AlonzoPlutusPurpose f era
forall (f :: * -> * -> *) era x.
AlonzoPlutusPurpose f era -> Rep (AlonzoPlutusPurpose f era) x
$cfrom :: forall (f :: * -> * -> *) era x.
AlonzoPlutusPurpose f era -> Rep (AlonzoPlutusPurpose f era) x
from :: forall x.
AlonzoPlutusPurpose f era -> Rep (AlonzoPlutusPurpose f era) x
$cto :: forall (f :: * -> * -> *) era x.
Rep (AlonzoPlutusPurpose f era) x -> AlonzoPlutusPurpose f era
to :: forall x.
Rep (AlonzoPlutusPurpose f era) x -> AlonzoPlutusPurpose f era
Generic)
deriving instance Eq (AlonzoPlutusPurpose AsIx era)
deriving instance Ord (AlonzoPlutusPurpose AsIx era)
deriving instance Show (AlonzoPlutusPurpose AsIx era)
instance NoThunks (AlonzoPlutusPurpose AsIx era)
deriving instance Eq (TxCert era) => Eq (AlonzoPlutusPurpose AsItem era)
deriving instance Show (TxCert era) => Show (AlonzoPlutusPurpose AsItem era)
instance NoThunks (TxCert era) => NoThunks (AlonzoPlutusPurpose AsItem era)
deriving instance Eq (TxCert era) => Eq (AlonzoPlutusPurpose AsIxItem era)
deriving instance Show (TxCert era) => Show (AlonzoPlutusPurpose AsIxItem era)
instance NoThunks (TxCert era) => NoThunks (AlonzoPlutusPurpose AsIxItem era)
instance
(forall a b. (NFData a, NFData b) => NFData (f a b), NFData (TxCert era), Era era) =>
NFData (AlonzoPlutusPurpose f era)
where
rnf :: AlonzoPlutusPurpose f era -> ()
rnf = \case
AlonzoSpending f Word32 TxIn
x -> f Word32 TxIn -> ()
forall a. NFData a => a -> ()
rnf f Word32 TxIn
x
AlonzoMinting f Word32 PolicyID
x -> f Word32 PolicyID -> ()
forall a. NFData a => a -> ()
rnf f Word32 PolicyID
x
AlonzoCertifying f Word32 (TxCert era)
x -> f Word32 (TxCert era) -> ()
forall a. NFData a => a -> ()
rnf f Word32 (TxCert era)
x
AlonzoRewarding f Word32 RewardAccount
x -> f Word32 RewardAccount -> ()
forall a. NFData a => a -> ()
rnf f Word32 RewardAccount
x
instance Era era => EncCBORGroup (AlonzoPlutusPurpose AsIx era) where
listLen :: AlonzoPlutusPurpose AsIx era -> Word
listLen AlonzoPlutusPurpose AsIx era
_ = Word
2
listLenBound :: Proxy (AlonzoPlutusPurpose AsIx era) -> Word
listLenBound Proxy (AlonzoPlutusPurpose AsIx era)
_ = Word
2
encCBORGroup :: AlonzoPlutusPurpose AsIx era -> Encoding
encCBORGroup = \case
AlonzoSpending (AsIx Word32
redeemerIx) -> Word8 -> Encoding
encodeWord8 Word8
0 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word32 -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR Word32
redeemerIx
AlonzoMinting (AsIx Word32
redeemerIx) -> Word8 -> Encoding
encodeWord8 Word8
1 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word32 -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR Word32
redeemerIx
AlonzoCertifying (AsIx Word32
redeemerIx) -> Word8 -> Encoding
encodeWord8 Word8
2 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word32 -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR Word32
redeemerIx
AlonzoRewarding (AsIx Word32
redeemerIx) -> Word8 -> Encoding
encodeWord8 Word8
3 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word32 -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR Word32
redeemerIx
encodedGroupSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (AlonzoPlutusPurpose AsIx era) -> Size
encodedGroupSizeExpr forall t. EncCBOR t => Proxy t -> Size
size_ Proxy (AlonzoPlutusPurpose AsIx era)
_proxy =
(forall t. EncCBOR t => Proxy t -> Size) -> Proxy Word8 -> Size
forall a.
EncCBOR a =>
(forall t. EncCBOR t => Proxy t -> Size) -> Proxy a -> Size
encodedSizeExpr Proxy t -> Size
forall t. EncCBOR t => Proxy t -> Size
size_ (Proxy Word8
forall {k} (t :: k). Proxy t
Proxy :: Proxy Word8)
Size -> Size -> Size
forall a. Num a => a -> a -> a
+ (forall t. EncCBOR t => Proxy t -> Size) -> Proxy Word16 -> Size
forall a.
EncCBOR a =>
(forall t. EncCBOR t => Proxy t -> Size) -> Proxy a -> Size
encodedSizeExpr Proxy t -> Size
forall t. EncCBOR t => Proxy t -> Size
size_ (Proxy Word16
forall {k} (t :: k). Proxy t
Proxy :: Proxy Word16)
instance Era era => DecCBORGroup (AlonzoPlutusPurpose AsIx era) where
decCBORGroup :: forall s. Decoder s (AlonzoPlutusPurpose AsIx era)
decCBORGroup =
Decoder s Word8
forall s. Decoder s Word8
decodeWord8 Decoder s Word8
-> (Word8 -> Decoder s (AlonzoPlutusPurpose AsIx era))
-> Decoder s (AlonzoPlutusPurpose AsIx era)
forall a b. Decoder s a -> (a -> Decoder s b) -> Decoder s b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Word8
0 -> AsIx Word32 TxIn -> AlonzoPlutusPurpose AsIx era
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending (AsIx Word32 TxIn -> AlonzoPlutusPurpose AsIx era)
-> (Word32 -> AsIx Word32 TxIn)
-> Word32
-> AlonzoPlutusPurpose AsIx era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> AsIx Word32 TxIn
forall ix it. ix -> AsIx ix it
AsIx (Word32 -> AlonzoPlutusPurpose AsIx era)
-> Decoder s Word32 -> Decoder s (AlonzoPlutusPurpose AsIx era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s Word32
forall s. Decoder s Word32
forall a s. DecCBOR a => Decoder s a
decCBOR
Word8
1 -> AsIx Word32 PolicyID -> AlonzoPlutusPurpose AsIx era
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting (AsIx Word32 PolicyID -> AlonzoPlutusPurpose AsIx era)
-> (Word32 -> AsIx Word32 PolicyID)
-> Word32
-> AlonzoPlutusPurpose AsIx era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> AsIx Word32 PolicyID
forall ix it. ix -> AsIx ix it
AsIx (Word32 -> AlonzoPlutusPurpose AsIx era)
-> Decoder s Word32 -> Decoder s (AlonzoPlutusPurpose AsIx era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s Word32
forall s. Decoder s Word32
forall a s. DecCBOR a => Decoder s a
decCBOR
Word8
2 -> AsIx Word32 (TxCert era) -> AlonzoPlutusPurpose AsIx era
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying (AsIx Word32 (TxCert era) -> AlonzoPlutusPurpose AsIx era)
-> (Word32 -> AsIx Word32 (TxCert era))
-> Word32
-> AlonzoPlutusPurpose AsIx era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> AsIx Word32 (TxCert era)
forall ix it. ix -> AsIx ix it
AsIx (Word32 -> AlonzoPlutusPurpose AsIx era)
-> Decoder s Word32 -> Decoder s (AlonzoPlutusPurpose AsIx era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s Word32
forall s. Decoder s Word32
forall a s. DecCBOR a => Decoder s a
decCBOR
Word8
3 -> AsIx Word32 RewardAccount -> AlonzoPlutusPurpose AsIx era
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding (AsIx Word32 RewardAccount -> AlonzoPlutusPurpose AsIx era)
-> (Word32 -> AsIx Word32 RewardAccount)
-> Word32
-> AlonzoPlutusPurpose AsIx era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> AsIx Word32 RewardAccount
forall ix it. ix -> AsIx ix it
AsIx (Word32 -> AlonzoPlutusPurpose AsIx era)
-> Decoder s Word32 -> Decoder s (AlonzoPlutusPurpose AsIx era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s Word32
forall s. Decoder s Word32
forall a s. DecCBOR a => Decoder s a
decCBOR
Word8
n -> String -> Decoder s (AlonzoPlutusPurpose AsIx era)
forall a. String -> Decoder s a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Decoder s (AlonzoPlutusPurpose AsIx era))
-> String -> Decoder s (AlonzoPlutusPurpose AsIx era)
forall a b. (a -> b) -> a -> b
$ String
"Unexpected tag for AlonzoPlutusPurpose: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> Word8 -> String
forall a. Show a => a -> String
show Word8
n
instance Era era => EncCBOR (AlonzoPlutusPurpose AsIx era) where
encCBOR :: AlonzoPlutusPurpose AsIx era -> Encoding
encCBOR = AlonzoPlutusPurpose AsIx era -> Encoding
forall a. EncCBORGroup a => a -> Encoding
encCBORGroup
instance Era era => DecCBOR (AlonzoPlutusPurpose AsIx era) where
decCBOR :: forall s. Decoder s (AlonzoPlutusPurpose AsIx era)
decCBOR = Decoder s (AlonzoPlutusPurpose AsIx era)
forall s. Decoder s (AlonzoPlutusPurpose AsIx era)
forall a s. DecCBORGroup a => Decoder s a
decCBORGroup
instance
( forall a b. (ToJSON a, ToJSON b) => ToJSON (f a b)
, ToJSON (TxCert era)
, Era era
) =>
ToJSON (AlonzoPlutusPurpose f era)
where
toJSON :: AlonzoPlutusPurpose f era -> Value
toJSON = \case
AlonzoSpending f Word32 TxIn
n -> Text -> f Word32 TxIn -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"AlonzoSpending" f Word32 TxIn
n
AlonzoMinting f Word32 PolicyID
n -> Text -> f Word32 PolicyID -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"AlonzoMinting" f Word32 PolicyID
n
AlonzoCertifying f Word32 (TxCert era)
n -> Text -> f Word32 (TxCert era) -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"AlonzoCertifying" f Word32 (TxCert era)
n
AlonzoRewarding f Word32 RewardAccount
n -> Text -> f Word32 RewardAccount -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"AlonzoRewarding" f Word32 RewardAccount
n
where
kindObjectWithValue :: Text -> v -> Value
kindObjectWithValue Text
name v
n = Text -> [Pair] -> Value
kindObject Text
name [Key
"value" Key -> v -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= v
n]
instance (Era era, EncCBOR (TxCert era)) => EncCBOR (AlonzoPlutusPurpose AsItem era) where
encCBOR :: AlonzoPlutusPurpose AsItem era -> Encoding
encCBOR = \case
AlonzoSpending (AsItem TxIn
x) -> Encode 'Open (AlonzoPlutusPurpose AsItem era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode ((TxIn -> AlonzoPlutusPurpose AsItem era)
-> Word -> Encode 'Open (TxIn -> AlonzoPlutusPurpose AsItem era)
forall t. t -> Word -> Encode 'Open t
Sum (forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending @_ @era (AsItem Word32 TxIn -> AlonzoPlutusPurpose AsItem era)
-> (TxIn -> AsItem Word32 TxIn)
-> TxIn
-> AlonzoPlutusPurpose AsItem era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn -> AsItem Word32 TxIn
forall ix it. it -> AsItem ix it
AsItem) Word
1 Encode 'Open (TxIn -> AlonzoPlutusPurpose AsItem era)
-> Encode ('Closed 'Dense) TxIn
-> Encode 'Open (AlonzoPlutusPurpose AsItem era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> TxIn -> Encode ('Closed 'Dense) TxIn
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To TxIn
x)
AlonzoMinting (AsItem PolicyID
x) -> Encode 'Open (AlonzoPlutusPurpose AsItem era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode ((PolicyID -> AlonzoPlutusPurpose AsItem era)
-> Word
-> Encode 'Open (PolicyID -> AlonzoPlutusPurpose AsItem era)
forall t. t -> Word -> Encode 'Open t
Sum (forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting @_ @era (AsItem Word32 PolicyID -> AlonzoPlutusPurpose AsItem era)
-> (PolicyID -> AsItem Word32 PolicyID)
-> PolicyID
-> AlonzoPlutusPurpose AsItem era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PolicyID -> AsItem Word32 PolicyID
forall ix it. it -> AsItem ix it
AsItem) Word
0 Encode 'Open (PolicyID -> AlonzoPlutusPurpose AsItem era)
-> Encode ('Closed 'Dense) PolicyID
-> Encode 'Open (AlonzoPlutusPurpose AsItem era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> PolicyID -> Encode ('Closed 'Dense) PolicyID
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To PolicyID
x)
AlonzoCertifying (AsItem TxCert era
x) -> Encode 'Open (AlonzoPlutusPurpose AsItem era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode ((TxCert era -> AlonzoPlutusPurpose AsItem era)
-> Word
-> Encode 'Open (TxCert era -> AlonzoPlutusPurpose AsItem era)
forall t. t -> Word -> Encode 'Open t
Sum (AsItem Word32 (TxCert era) -> AlonzoPlutusPurpose AsItem era
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying (AsItem Word32 (TxCert era) -> AlonzoPlutusPurpose AsItem era)
-> (TxCert era -> AsItem Word32 (TxCert era))
-> TxCert era
-> AlonzoPlutusPurpose AsItem era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxCert era -> AsItem Word32 (TxCert era)
forall ix it. it -> AsItem ix it
AsItem) Word
3 Encode 'Open (TxCert era -> AlonzoPlutusPurpose AsItem era)
-> Encode ('Closed 'Dense) (TxCert era)
-> Encode 'Open (AlonzoPlutusPurpose AsItem era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> TxCert era -> Encode ('Closed 'Dense) (TxCert era)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To TxCert era
x)
AlonzoRewarding (AsItem RewardAccount
x) -> Encode 'Open (AlonzoPlutusPurpose AsItem era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode ((RewardAccount -> AlonzoPlutusPurpose AsItem era)
-> Word
-> Encode 'Open (RewardAccount -> AlonzoPlutusPurpose AsItem era)
forall t. t -> Word -> Encode 'Open t
Sum (forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding @_ @era (AsItem Word32 RewardAccount -> AlonzoPlutusPurpose AsItem era)
-> (RewardAccount -> AsItem Word32 RewardAccount)
-> RewardAccount
-> AlonzoPlutusPurpose AsItem era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RewardAccount -> AsItem Word32 RewardAccount
forall ix it. it -> AsItem ix it
AsItem) Word
2 Encode 'Open (RewardAccount -> AlonzoPlutusPurpose AsItem era)
-> Encode ('Closed 'Dense) RewardAccount
-> Encode 'Open (AlonzoPlutusPurpose AsItem era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> RewardAccount -> Encode ('Closed 'Dense) RewardAccount
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To RewardAccount
x)
instance (Era era, DecCBOR (TxCert era)) => DecCBOR (AlonzoPlutusPurpose AsItem era) where
decCBOR :: forall s. Decoder s (AlonzoPlutusPurpose AsItem era)
decCBOR = Decode ('Closed 'Dense) (AlonzoPlutusPurpose AsItem era)
-> Decoder s (AlonzoPlutusPurpose AsItem era)
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Text
-> (Word -> Decode 'Open (AlonzoPlutusPurpose AsItem era))
-> Decode ('Closed 'Dense) (AlonzoPlutusPurpose AsItem era)
forall t.
Text -> (Word -> Decode 'Open t) -> Decode ('Closed 'Dense) t
Summands Text
"AlonzoPlutusPurpose" Word -> Decode 'Open (AlonzoPlutusPurpose AsItem era)
forall {era}.
DecCBOR (TxCert era) =>
Word -> Decode 'Open (AlonzoPlutusPurpose AsItem era)
dec)
where
dec :: Word -> Decode 'Open (AlonzoPlutusPurpose AsItem era)
dec Word
1 = (TxIn -> AlonzoPlutusPurpose AsItem era)
-> Decode 'Open (TxIn -> AlonzoPlutusPurpose AsItem era)
forall t. t -> Decode 'Open t
SumD (AsItem Word32 TxIn -> AlonzoPlutusPurpose AsItem era
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending (AsItem Word32 TxIn -> AlonzoPlutusPurpose AsItem era)
-> (TxIn -> AsItem Word32 TxIn)
-> TxIn
-> AlonzoPlutusPurpose AsItem era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxIn -> AsItem Word32 TxIn
forall ix it. it -> AsItem ix it
AsItem) Decode 'Open (TxIn -> AlonzoPlutusPurpose AsItem era)
-> Decode ('Closed Any) TxIn
-> Decode 'Open (AlonzoPlutusPurpose AsItem era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) TxIn
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
dec Word
0 = (PolicyID -> AlonzoPlutusPurpose AsItem era)
-> Decode 'Open (PolicyID -> AlonzoPlutusPurpose AsItem era)
forall t. t -> Decode 'Open t
SumD (AsItem Word32 PolicyID -> AlonzoPlutusPurpose AsItem era
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting (AsItem Word32 PolicyID -> AlonzoPlutusPurpose AsItem era)
-> (PolicyID -> AsItem Word32 PolicyID)
-> PolicyID
-> AlonzoPlutusPurpose AsItem era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PolicyID -> AsItem Word32 PolicyID
forall ix it. it -> AsItem ix it
AsItem) Decode 'Open (PolicyID -> AlonzoPlutusPurpose AsItem era)
-> Decode ('Closed Any) PolicyID
-> Decode 'Open (AlonzoPlutusPurpose AsItem era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) PolicyID
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
dec Word
3 = (TxCert era -> AlonzoPlutusPurpose AsItem era)
-> Decode 'Open (TxCert era -> AlonzoPlutusPurpose AsItem era)
forall t. t -> Decode 'Open t
SumD (AsItem Word32 (TxCert era) -> AlonzoPlutusPurpose AsItem era
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying (AsItem Word32 (TxCert era) -> AlonzoPlutusPurpose AsItem era)
-> (TxCert era -> AsItem Word32 (TxCert era))
-> TxCert era
-> AlonzoPlutusPurpose AsItem era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxCert era -> AsItem Word32 (TxCert era)
forall ix it. it -> AsItem ix it
AsItem) Decode 'Open (TxCert era -> AlonzoPlutusPurpose AsItem era)
-> Decode ('Closed Any) (TxCert era)
-> Decode 'Open (AlonzoPlutusPurpose AsItem era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) (TxCert era)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
dec Word
2 = (RewardAccount -> AlonzoPlutusPurpose AsItem era)
-> Decode 'Open (RewardAccount -> AlonzoPlutusPurpose AsItem era)
forall t. t -> Decode 'Open t
SumD (AsItem Word32 RewardAccount -> AlonzoPlutusPurpose AsItem era
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding (AsItem Word32 RewardAccount -> AlonzoPlutusPurpose AsItem era)
-> (RewardAccount -> AsItem Word32 RewardAccount)
-> RewardAccount
-> AlonzoPlutusPurpose AsItem era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RewardAccount -> AsItem Word32 RewardAccount
forall ix it. it -> AsItem ix it
AsItem) Decode 'Open (RewardAccount -> AlonzoPlutusPurpose AsItem era)
-> Decode ('Closed Any) RewardAccount
-> Decode 'Open (AlonzoPlutusPurpose AsItem era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) RewardAccount
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
dec Word
n = Word -> Decode 'Open (AlonzoPlutusPurpose AsItem era)
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
n
pattern SpendingPurpose ::
AlonzoEraScript era => f Word32 TxIn -> PlutusPurpose f era
pattern $mSpendingPurpose :: forall {r} {era} {f :: * -> * -> *}.
AlonzoEraScript era =>
PlutusPurpose f era -> (f Word32 TxIn -> r) -> ((# #) -> r) -> r
$bSpendingPurpose :: forall era (f :: * -> * -> *).
AlonzoEraScript era =>
f Word32 TxIn -> PlutusPurpose f era
SpendingPurpose c <- (toSpendingPurpose -> Just c)
where
SpendingPurpose f Word32 TxIn
c = f Word32 TxIn -> PlutusPurpose f era
forall era (f :: * -> * -> *).
AlonzoEraScript era =>
f Word32 TxIn -> PlutusPurpose f era
forall (f :: * -> * -> *). f Word32 TxIn -> PlutusPurpose f era
mkSpendingPurpose f Word32 TxIn
c
pattern MintingPurpose ::
AlonzoEraScript era => f Word32 PolicyID -> PlutusPurpose f era
pattern $mMintingPurpose :: forall {r} {era} {f :: * -> * -> *}.
AlonzoEraScript era =>
PlutusPurpose f era
-> (f Word32 PolicyID -> r) -> ((# #) -> r) -> r
$bMintingPurpose :: forall era (f :: * -> * -> *).
AlonzoEraScript era =>
f Word32 PolicyID -> PlutusPurpose f era
MintingPurpose c <- (toMintingPurpose -> Just c)
where
MintingPurpose f Word32 PolicyID
c = f Word32 PolicyID -> PlutusPurpose f era
forall era (f :: * -> * -> *).
AlonzoEraScript era =>
f Word32 PolicyID -> PlutusPurpose f era
forall (f :: * -> * -> *). f Word32 PolicyID -> PlutusPurpose f era
mkMintingPurpose f Word32 PolicyID
c
pattern CertifyingPurpose ::
AlonzoEraScript era => f Word32 (TxCert era) -> PlutusPurpose f era
pattern $mCertifyingPurpose :: forall {r} {era} {f :: * -> * -> *}.
AlonzoEraScript era =>
PlutusPurpose f era
-> (f Word32 (TxCert era) -> r) -> ((# #) -> r) -> r
$bCertifyingPurpose :: forall era (f :: * -> * -> *).
AlonzoEraScript era =>
f Word32 (TxCert era) -> PlutusPurpose f era
CertifyingPurpose c <- (toCertifyingPurpose -> Just c)
where
CertifyingPurpose f Word32 (TxCert era)
c = f Word32 (TxCert era) -> PlutusPurpose f era
forall era (f :: * -> * -> *).
AlonzoEraScript era =>
f Word32 (TxCert era) -> PlutusPurpose f era
forall (f :: * -> * -> *).
f Word32 (TxCert era) -> PlutusPurpose f era
mkCertifyingPurpose f Word32 (TxCert era)
c
pattern RewardingPurpose ::
AlonzoEraScript era => f Word32 RewardAccount -> PlutusPurpose f era
pattern $mRewardingPurpose :: forall {r} {era} {f :: * -> * -> *}.
AlonzoEraScript era =>
PlutusPurpose f era
-> (f Word32 RewardAccount -> r) -> ((# #) -> r) -> r
$bRewardingPurpose :: forall era (f :: * -> * -> *).
AlonzoEraScript era =>
f Word32 RewardAccount -> PlutusPurpose f era
RewardingPurpose c <- (toRewardingPurpose -> Just c)
where
RewardingPurpose f Word32 RewardAccount
c = f Word32 RewardAccount -> PlutusPurpose f era
forall era (f :: * -> * -> *).
AlonzoEraScript era =>
f Word32 RewardAccount -> PlutusPurpose f era
forall (f :: * -> * -> *).
f Word32 RewardAccount -> PlutusPurpose f era
mkRewardingPurpose f Word32 RewardAccount
c
data AlonzoScript era
= TimelockScript !(Timelock era)
| PlutusScript !(PlutusScript era)
deriving ((forall x. AlonzoScript era -> Rep (AlonzoScript era) x)
-> (forall x. Rep (AlonzoScript era) x -> AlonzoScript era)
-> Generic (AlonzoScript era)
forall x. Rep (AlonzoScript era) x -> AlonzoScript era
forall x. AlonzoScript era -> Rep (AlonzoScript era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x. Rep (AlonzoScript era) x -> AlonzoScript era
forall era x. AlonzoScript era -> Rep (AlonzoScript era) x
$cfrom :: forall era x. AlonzoScript era -> Rep (AlonzoScript era) x
from :: forall x. AlonzoScript era -> Rep (AlonzoScript era) x
$cto :: forall era x. Rep (AlonzoScript era) x -> AlonzoScript era
to :: forall x. Rep (AlonzoScript era) x -> AlonzoScript era
Generic)
instance (Era era, MemPack (PlutusScript era)) => MemPack (AlonzoScript era) where
packedByteCount :: AlonzoScript era -> Int
packedByteCount = \case
TimelockScript Timelock era
script -> Int
packedTagByteCount Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Timelock era -> Int
forall a. MemPack a => a -> Int
packedByteCount Timelock era
script
PlutusScript PlutusScript era
script -> Int
packedTagByteCount Int -> Int -> Int
forall a. Num a => a -> a -> a
+ PlutusScript era -> Int
forall a. MemPack a => a -> Int
packedByteCount PlutusScript era
script
packM :: forall s. AlonzoScript era -> Pack s ()
packM = \case
TimelockScript Timelock era
script -> Tag -> Pack s ()
forall s. Tag -> Pack s ()
packTagM Tag
0 Pack s () -> Pack s () -> Pack s ()
forall a b. Pack s a -> Pack s b -> Pack s b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Timelock era -> Pack s ()
forall s. Timelock era -> Pack s ()
forall a s. MemPack a => a -> Pack s ()
packM Timelock era
script
PlutusScript PlutusScript era
script -> Tag -> Pack s ()
forall s. Tag -> Pack s ()
packTagM Tag
1 Pack s () -> Pack s () -> Pack s ()
forall a b. Pack s a -> Pack s b -> Pack s b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> PlutusScript era -> Pack s ()
forall a s. MemPack a => a -> Pack s ()
forall s. PlutusScript era -> Pack s ()
packM PlutusScript era
script
{-# INLINE packM #-}
unpackM :: forall b. Buffer b => Unpack b (AlonzoScript era)
unpackM =
Unpack b Tag
forall b. Buffer b => Unpack b Tag
unpackTagM Unpack b Tag
-> (Tag -> Unpack b (AlonzoScript era))
-> Unpack b (AlonzoScript era)
forall a b. Unpack b a -> (a -> Unpack b b) -> Unpack b b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Tag
0 -> Timelock era -> AlonzoScript era
forall era. Timelock era -> AlonzoScript era
TimelockScript (Timelock era -> AlonzoScript era)
-> Unpack b (Timelock era) -> Unpack b (AlonzoScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Unpack b (Timelock era)
forall a b. (MemPack a, Buffer b) => Unpack b a
forall b. Buffer b => Unpack b (Timelock era)
unpackM
Tag
1 -> PlutusScript era -> AlonzoScript era
forall era. PlutusScript era -> AlonzoScript era
PlutusScript (PlutusScript era -> AlonzoScript era)
-> Unpack b (PlutusScript era) -> Unpack b (AlonzoScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Unpack b (PlutusScript era)
forall a b. (MemPack a, Buffer b) => Unpack b a
forall b. Buffer b => Unpack b (PlutusScript era)
unpackM
Tag
n -> forall a (m :: * -> *) b. (MemPack a, MonadFail m) => Tag -> m b
unknownTagM @(AlonzoScript era) Tag
n
{-# INLINE unpackM #-}
deriving instance Eq (PlutusScript era) => Eq (AlonzoScript era)
instance (Era era, NoThunks (PlutusScript era)) => NoThunks (AlonzoScript era)
instance NFData (PlutusScript era) => NFData (AlonzoScript era) where
rnf :: AlonzoScript era -> ()
rnf = \case
TimelockScript Timelock era
ts -> Timelock era -> ()
forall a. NFData a => a -> ()
rnf Timelock era
ts
PlutusScript PlutusScript era
ps -> PlutusScript era -> ()
forall a. NFData a => a -> ()
rnf PlutusScript era
ps
instance (AlonzoEraScript era, Script era ~ AlonzoScript era) => Show (AlonzoScript era) where
show :: AlonzoScript era -> String
show (TimelockScript Timelock era
x) = String
"TimelockScript " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Timelock era -> String
forall a. Show a => a -> String
show Timelock era
x
show s :: AlonzoScript era
s@(PlutusScript PlutusScript era
plutus) =
String
"PlutusScript " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Language -> String
forall a. Show a => a -> String
show (PlutusScript era -> Language
forall era. AlonzoEraScript era => PlutusScript era -> Language
plutusScriptLanguage PlutusScript era
plutus) String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ScriptHash -> String
forall a. Show a => a -> String
show (forall era. EraScript era => Script era -> ScriptHash
hashScript @era Script era
AlonzoScript era
s)
instance SafeToHash (PlutusScript era) => SafeToHash (AlonzoScript era) where
originalBytes :: AlonzoScript era -> ByteString
originalBytes (TimelockScript Timelock era
t) = Timelock era -> ByteString
forall t. SafeToHash t => t -> ByteString
originalBytes Timelock era
t
originalBytes (PlutusScript PlutusScript era
plutus) = PlutusScript era -> ByteString
forall t. SafeToHash t => t -> ByteString
originalBytes PlutusScript era
plutus
isPlutusScript :: AlonzoEraScript era => Script era -> Bool
isPlutusScript :: forall era. AlonzoEraScript era => Script era -> Bool
isPlutusScript = Maybe (PlutusScript era) -> Bool
forall a. Maybe a -> Bool
isJust (Maybe (PlutusScript era) -> Bool)
-> (Script era -> Maybe (PlutusScript era)) -> Script era -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Script era -> Maybe (PlutusScript era)
forall era.
AlonzoEraScript era =>
Script era -> Maybe (PlutusScript era)
toPlutusScript
instance EraScript AlonzoEra where
type Script AlonzoEra = AlonzoScript AlonzoEra
type NativeScript AlonzoEra = Timelock AlonzoEra
upgradeScript :: EraScript (PreviousEra AlonzoEra) =>
Script (PreviousEra AlonzoEra) -> Script AlonzoEra
upgradeScript = Timelock AlonzoEra -> AlonzoScript AlonzoEra
forall era. Timelock era -> AlonzoScript era
TimelockScript (Timelock AlonzoEra -> AlonzoScript AlonzoEra)
-> (Timelock MaryEra -> Timelock AlonzoEra)
-> Timelock MaryEra
-> AlonzoScript AlonzoEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Timelock MaryEra -> Timelock AlonzoEra
forall era1 era2.
(Era era1, Era era2) =>
Timelock era1 -> Timelock era2
translateTimelock
scriptPrefixTag :: Script AlonzoEra -> ByteString
scriptPrefixTag = Script AlonzoEra -> ByteString
forall era.
(AlonzoEraScript era, AlonzoScript era ~ Script era) =>
Script era -> ByteString
alonzoScriptPrefixTag
getNativeScript :: Script AlonzoEra -> Maybe (NativeScript AlonzoEra)
getNativeScript = \case
TimelockScript Timelock AlonzoEra
ts -> Timelock AlonzoEra -> Maybe (Timelock AlonzoEra)
forall a. a -> Maybe a
Just Timelock AlonzoEra
ts
Script AlonzoEra
_ -> Maybe (Timelock AlonzoEra)
Maybe (NativeScript AlonzoEra)
forall a. Maybe a
Nothing
fromNativeScript :: NativeScript AlonzoEra -> Script AlonzoEra
fromNativeScript = Timelock AlonzoEra -> AlonzoScript AlonzoEra
NativeScript AlonzoEra -> Script AlonzoEra
forall era. Timelock era -> AlonzoScript era
TimelockScript
alonzoScriptPrefixTag ::
(AlonzoEraScript era, AlonzoScript era ~ Script era) =>
Script era ->
BS.ByteString
alonzoScriptPrefixTag :: forall era.
(AlonzoEraScript era, AlonzoScript era ~ Script era) =>
Script era -> ByteString
alonzoScriptPrefixTag = \case
TimelockScript Timelock era
_ -> ByteString
nativeMultiSigTag
PlutusScript PlutusScript era
plutusScript -> Word8 -> ByteString
BS.singleton (PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> Word8)
-> Word8
forall era a.
AlonzoEraScript era =>
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
forall a.
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript PlutusScript era
plutusScript Plutus l -> Word8
forall (l :: Language). PlutusLanguage l => Plutus l -> Word8
plutusLanguageTag)
instance ShelleyEraScript AlonzoEra where
mkRequireSignature :: KeyHash 'Witness -> NativeScript AlonzoEra
mkRequireSignature = KeyHash 'Witness -> Timelock AlonzoEra
KeyHash 'Witness -> NativeScript AlonzoEra
forall era. Era era => KeyHash 'Witness -> Timelock era
mkRequireSignatureTimelock
getRequireSignature :: NativeScript AlonzoEra -> Maybe (KeyHash 'Witness)
getRequireSignature = Timelock AlonzoEra -> Maybe (KeyHash 'Witness)
NativeScript AlonzoEra -> Maybe (KeyHash 'Witness)
forall {k} (era :: k). Timelock era -> Maybe (KeyHash 'Witness)
getRequireSignatureTimelock
mkRequireAllOf :: StrictSeq (NativeScript AlonzoEra) -> NativeScript AlonzoEra
mkRequireAllOf = StrictSeq (Timelock AlonzoEra) -> Timelock AlonzoEra
StrictSeq (NativeScript AlonzoEra) -> NativeScript AlonzoEra
forall era. Era era => StrictSeq (Timelock era) -> Timelock era
mkRequireAllOfTimelock
getRequireAllOf :: NativeScript AlonzoEra
-> Maybe (StrictSeq (NativeScript AlonzoEra))
getRequireAllOf = Timelock AlonzoEra -> Maybe (StrictSeq (Timelock AlonzoEra))
NativeScript AlonzoEra
-> Maybe (StrictSeq (NativeScript AlonzoEra))
forall {k} (era :: k).
Timelock era -> Maybe (StrictSeq (Timelock era))
getRequireAllOfTimelock
mkRequireAnyOf :: StrictSeq (NativeScript AlonzoEra) -> NativeScript AlonzoEra
mkRequireAnyOf = StrictSeq (Timelock AlonzoEra) -> Timelock AlonzoEra
StrictSeq (NativeScript AlonzoEra) -> NativeScript AlonzoEra
forall era. Era era => StrictSeq (Timelock era) -> Timelock era
mkRequireAnyOfTimelock
getRequireAnyOf :: NativeScript AlonzoEra
-> Maybe (StrictSeq (NativeScript AlonzoEra))
getRequireAnyOf = Timelock AlonzoEra -> Maybe (StrictSeq (Timelock AlonzoEra))
NativeScript AlonzoEra
-> Maybe (StrictSeq (NativeScript AlonzoEra))
forall {k} (era :: k).
Timelock era -> Maybe (StrictSeq (Timelock era))
getRequireAnyOfTimelock
mkRequireMOf :: Int -> StrictSeq (NativeScript AlonzoEra) -> NativeScript AlonzoEra
mkRequireMOf = Int -> StrictSeq (Timelock AlonzoEra) -> Timelock AlonzoEra
Int -> StrictSeq (NativeScript AlonzoEra) -> NativeScript AlonzoEra
forall era.
Era era =>
Int -> StrictSeq (Timelock era) -> Timelock era
mkRequireMOfTimelock
getRequireMOf :: NativeScript AlonzoEra
-> Maybe (Int, StrictSeq (NativeScript AlonzoEra))
getRequireMOf = Timelock AlonzoEra -> Maybe (Int, StrictSeq (Timelock AlonzoEra))
NativeScript AlonzoEra
-> Maybe (Int, StrictSeq (NativeScript AlonzoEra))
forall {k} (era :: k).
Timelock era -> Maybe (Int, StrictSeq (Timelock era))
getRequireMOfTimelock
instance AllegraEraScript AlonzoEra where
mkTimeStart :: SlotNo -> NativeScript AlonzoEra
mkTimeStart = SlotNo -> Timelock AlonzoEra
SlotNo -> NativeScript AlonzoEra
forall era. Era era => SlotNo -> Timelock era
mkTimeStartTimelock
getTimeStart :: NativeScript AlonzoEra -> Maybe SlotNo
getTimeStart = Timelock AlonzoEra -> Maybe SlotNo
NativeScript AlonzoEra -> Maybe SlotNo
forall {k} (era :: k). Timelock era -> Maybe SlotNo
getTimeStartTimelock
mkTimeExpire :: SlotNo -> NativeScript AlonzoEra
mkTimeExpire = SlotNo -> Timelock AlonzoEra
SlotNo -> NativeScript AlonzoEra
forall era. Era era => SlotNo -> Timelock era
mkTimeExpireTimelock
getTimeExpire :: NativeScript AlonzoEra -> Maybe SlotNo
getTimeExpire = Timelock AlonzoEra -> Maybe SlotNo
NativeScript AlonzoEra -> Maybe SlotNo
forall {k} (era :: k). Timelock era -> Maybe SlotNo
getTimeExpireTimelock
instance AlonzoEraScript AlonzoEra where
newtype PlutusScript AlonzoEra = AlonzoPlutusV1 (Plutus 'PlutusV1)
deriving newtype (PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
(PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool)
-> (PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool)
-> Eq (PlutusScript AlonzoEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
== :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
$c/= :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
/= :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
Eq, Eq (PlutusScript AlonzoEra)
Eq (PlutusScript AlonzoEra) =>
(PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Ordering)
-> (PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool)
-> (PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool)
-> (PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool)
-> (PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool)
-> (PlutusScript AlonzoEra
-> PlutusScript AlonzoEra -> PlutusScript AlonzoEra)
-> (PlutusScript AlonzoEra
-> PlutusScript AlonzoEra -> PlutusScript AlonzoEra)
-> Ord (PlutusScript AlonzoEra)
PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Ordering
PlutusScript AlonzoEra
-> PlutusScript AlonzoEra -> PlutusScript AlonzoEra
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Ordering
compare :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Ordering
$c< :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
< :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
$c<= :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
<= :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
$c> :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
> :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
$c>= :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
>= :: PlutusScript AlonzoEra -> PlutusScript AlonzoEra -> Bool
$cmax :: PlutusScript AlonzoEra
-> PlutusScript AlonzoEra -> PlutusScript AlonzoEra
max :: PlutusScript AlonzoEra
-> PlutusScript AlonzoEra -> PlutusScript AlonzoEra
$cmin :: PlutusScript AlonzoEra
-> PlutusScript AlonzoEra -> PlutusScript AlonzoEra
min :: PlutusScript AlonzoEra
-> PlutusScript AlonzoEra -> PlutusScript AlonzoEra
Ord, Int -> PlutusScript AlonzoEra -> ShowS
[PlutusScript AlonzoEra] -> ShowS
PlutusScript AlonzoEra -> String
(Int -> PlutusScript AlonzoEra -> ShowS)
-> (PlutusScript AlonzoEra -> String)
-> ([PlutusScript AlonzoEra] -> ShowS)
-> Show (PlutusScript AlonzoEra)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PlutusScript AlonzoEra -> ShowS
showsPrec :: Int -> PlutusScript AlonzoEra -> ShowS
$cshow :: PlutusScript AlonzoEra -> String
show :: PlutusScript AlonzoEra -> String
$cshowList :: [PlutusScript AlonzoEra] -> ShowS
showList :: [PlutusScript AlonzoEra] -> ShowS
Show, PlutusScript AlonzoEra -> ()
(PlutusScript AlonzoEra -> ()) -> NFData (PlutusScript AlonzoEra)
forall a. (a -> ()) -> NFData a
$crnf :: PlutusScript AlonzoEra -> ()
rnf :: PlutusScript AlonzoEra -> ()
NFData, Context -> PlutusScript AlonzoEra -> IO (Maybe ThunkInfo)
Proxy (PlutusScript AlonzoEra) -> String
(Context -> PlutusScript AlonzoEra -> IO (Maybe ThunkInfo))
-> (Context -> PlutusScript AlonzoEra -> IO (Maybe ThunkInfo))
-> (Proxy (PlutusScript AlonzoEra) -> String)
-> NoThunks (PlutusScript AlonzoEra)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> PlutusScript AlonzoEra -> IO (Maybe ThunkInfo)
noThunks :: Context -> PlutusScript AlonzoEra -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> PlutusScript AlonzoEra -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PlutusScript AlonzoEra -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (PlutusScript AlonzoEra) -> String
showTypeOf :: Proxy (PlutusScript AlonzoEra) -> String
NoThunks, PlutusScript AlonzoEra -> Int
PlutusScript AlonzoEra -> ByteString
(PlutusScript AlonzoEra -> ByteString)
-> (PlutusScript AlonzoEra -> Int)
-> (forall i. Proxy i -> PlutusScript AlonzoEra -> SafeHash i)
-> SafeToHash (PlutusScript AlonzoEra)
forall i. Proxy i -> PlutusScript AlonzoEra -> SafeHash i
forall t.
(t -> ByteString)
-> (t -> Int)
-> (forall i. Proxy i -> t -> SafeHash i)
-> SafeToHash t
$coriginalBytes :: PlutusScript AlonzoEra -> ByteString
originalBytes :: PlutusScript AlonzoEra -> ByteString
$coriginalBytesSize :: PlutusScript AlonzoEra -> Int
originalBytesSize :: PlutusScript AlonzoEra -> Int
$cmakeHashWithExplicitProxys :: forall i. Proxy i -> PlutusScript AlonzoEra -> SafeHash i
makeHashWithExplicitProxys :: forall i. Proxy i -> PlutusScript AlonzoEra -> SafeHash i
SafeToHash, (forall x.
PlutusScript AlonzoEra -> Rep (PlutusScript AlonzoEra) x)
-> (forall x.
Rep (PlutusScript AlonzoEra) x -> PlutusScript AlonzoEra)
-> Generic (PlutusScript AlonzoEra)
forall x. Rep (PlutusScript AlonzoEra) x -> PlutusScript AlonzoEra
forall x. PlutusScript AlonzoEra -> Rep (PlutusScript AlonzoEra) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PlutusScript AlonzoEra -> Rep (PlutusScript AlonzoEra) x
from :: forall x. PlutusScript AlonzoEra -> Rep (PlutusScript AlonzoEra) x
$cto :: forall x. Rep (PlutusScript AlonzoEra) x -> PlutusScript AlonzoEra
to :: forall x. Rep (PlutusScript AlonzoEra) x -> PlutusScript AlonzoEra
Generic)
type PlutusPurpose f AlonzoEra = AlonzoPlutusPurpose f AlonzoEra
eraMaxLanguage :: Language
eraMaxLanguage = Language
PlutusV1
mkPlutusScript :: forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (PlutusScript AlonzoEra)
mkPlutusScript Plutus l
plutus =
case Plutus l -> SLanguage l
forall (l :: Language) (proxy :: Language -> *).
PlutusLanguage l =>
proxy l -> SLanguage l
plutusSLanguage Plutus l
plutus of
SLanguage l
SPlutusV1 -> PlutusScript AlonzoEra -> Maybe (PlutusScript AlonzoEra)
forall a. a -> Maybe a
Just (PlutusScript AlonzoEra -> Maybe (PlutusScript AlonzoEra))
-> PlutusScript AlonzoEra -> Maybe (PlutusScript AlonzoEra)
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV1 -> PlutusScript AlonzoEra
AlonzoPlutusV1 Plutus l
Plutus 'PlutusV1
plutus
SLanguage l
_ -> Maybe (PlutusScript AlonzoEra)
forall a. Maybe a
Nothing
withPlutusScript :: forall a.
PlutusScript AlonzoEra
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript (AlonzoPlutusV1 Plutus 'PlutusV1
plutus) forall (l :: Language). PlutusLanguage l => Plutus l -> a
f = Plutus 'PlutusV1 -> a
forall (l :: Language). PlutusLanguage l => Plutus l -> a
f Plutus 'PlutusV1
plutus
hoistPlutusPurpose :: forall (g :: * -> * -> *) (f :: * -> * -> *).
(forall ix it. g ix it -> f ix it)
-> PlutusPurpose g AlonzoEra -> PlutusPurpose f AlonzoEra
hoistPlutusPurpose forall ix it. g ix it -> f ix it
f = \case
AlonzoSpending g Word32 TxIn
x -> f Word32 TxIn -> AlonzoPlutusPurpose f AlonzoEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending (f Word32 TxIn -> AlonzoPlutusPurpose f AlonzoEra)
-> f Word32 TxIn -> AlonzoPlutusPurpose f AlonzoEra
forall a b. (a -> b) -> a -> b
$ g Word32 TxIn -> f Word32 TxIn
forall ix it. g ix it -> f ix it
f g Word32 TxIn
x
AlonzoMinting g Word32 PolicyID
x -> f Word32 PolicyID -> AlonzoPlutusPurpose f AlonzoEra
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting (f Word32 PolicyID -> AlonzoPlutusPurpose f AlonzoEra)
-> f Word32 PolicyID -> AlonzoPlutusPurpose f AlonzoEra
forall a b. (a -> b) -> a -> b
$ g Word32 PolicyID -> f Word32 PolicyID
forall ix it. g ix it -> f ix it
f g Word32 PolicyID
x
AlonzoCertifying g Word32 (TxCert AlonzoEra)
x -> f Word32 (TxCert AlonzoEra) -> AlonzoPlutusPurpose f AlonzoEra
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying (f Word32 (TxCert AlonzoEra) -> AlonzoPlutusPurpose f AlonzoEra)
-> f Word32 (TxCert AlonzoEra) -> AlonzoPlutusPurpose f AlonzoEra
forall a b. (a -> b) -> a -> b
$ g Word32 (ShelleyTxCert AlonzoEra)
-> f Word32 (ShelleyTxCert AlonzoEra)
forall ix it. g ix it -> f ix it
f g Word32 (TxCert AlonzoEra)
g Word32 (ShelleyTxCert AlonzoEra)
x
AlonzoRewarding g Word32 RewardAccount
x -> f Word32 RewardAccount -> AlonzoPlutusPurpose f AlonzoEra
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding (f Word32 RewardAccount -> AlonzoPlutusPurpose f AlonzoEra)
-> f Word32 RewardAccount -> AlonzoPlutusPurpose f AlonzoEra
forall a b. (a -> b) -> a -> b
$ g Word32 RewardAccount -> f Word32 RewardAccount
forall ix it. g ix it -> f ix it
f g Word32 RewardAccount
x
mkSpendingPurpose :: forall (f :: * -> * -> *).
f Word32 TxIn -> PlutusPurpose f AlonzoEra
mkSpendingPurpose = f Word32 TxIn -> AlonzoPlutusPurpose f AlonzoEra
f Word32 TxIn -> PlutusPurpose f AlonzoEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending
toSpendingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f AlonzoEra -> Maybe (f Word32 TxIn)
toSpendingPurpose (AlonzoSpending f Word32 TxIn
i) = f Word32 TxIn -> Maybe (f Word32 TxIn)
forall a. a -> Maybe a
Just f Word32 TxIn
i
toSpendingPurpose PlutusPurpose f AlonzoEra
_ = Maybe (f Word32 TxIn)
forall a. Maybe a
Nothing
mkMintingPurpose :: forall (f :: * -> * -> *).
f Word32 PolicyID -> PlutusPurpose f AlonzoEra
mkMintingPurpose = f Word32 PolicyID -> AlonzoPlutusPurpose f AlonzoEra
f Word32 PolicyID -> PlutusPurpose f AlonzoEra
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting
toMintingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f AlonzoEra -> Maybe (f Word32 PolicyID)
toMintingPurpose (AlonzoMinting f Word32 PolicyID
i) = f Word32 PolicyID -> Maybe (f Word32 PolicyID)
forall a. a -> Maybe a
Just f Word32 PolicyID
i
toMintingPurpose PlutusPurpose f AlonzoEra
_ = Maybe (f Word32 PolicyID)
forall a. Maybe a
Nothing
mkCertifyingPurpose :: forall (f :: * -> * -> *).
f Word32 (TxCert AlonzoEra) -> PlutusPurpose f AlonzoEra
mkCertifyingPurpose = f Word32 (TxCert AlonzoEra) -> AlonzoPlutusPurpose f AlonzoEra
f Word32 (TxCert AlonzoEra) -> PlutusPurpose f AlonzoEra
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying
toCertifyingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f AlonzoEra -> Maybe (f Word32 (TxCert AlonzoEra))
toCertifyingPurpose (AlonzoCertifying f Word32 (TxCert AlonzoEra)
i) = f Word32 (ShelleyTxCert AlonzoEra)
-> Maybe (f Word32 (ShelleyTxCert AlonzoEra))
forall a. a -> Maybe a
Just f Word32 (TxCert AlonzoEra)
f Word32 (ShelleyTxCert AlonzoEra)
i
toCertifyingPurpose PlutusPurpose f AlonzoEra
_ = Maybe (f Word32 (TxCert AlonzoEra))
Maybe (f Word32 (ShelleyTxCert AlonzoEra))
forall a. Maybe a
Nothing
mkRewardingPurpose :: forall (f :: * -> * -> *).
f Word32 RewardAccount -> PlutusPurpose f AlonzoEra
mkRewardingPurpose = f Word32 RewardAccount -> AlonzoPlutusPurpose f AlonzoEra
f Word32 RewardAccount -> PlutusPurpose f AlonzoEra
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding
toRewardingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f AlonzoEra -> Maybe (f Word32 RewardAccount)
toRewardingPurpose (AlonzoRewarding f Word32 RewardAccount
i) = f Word32 RewardAccount -> Maybe (f Word32 RewardAccount)
forall a. a -> Maybe a
Just f Word32 RewardAccount
i
toRewardingPurpose PlutusPurpose f AlonzoEra
_ = Maybe (f Word32 RewardAccount)
forall a. Maybe a
Nothing
upgradePlutusPurposeAsIx :: AlonzoEraScript (PreviousEra AlonzoEra) =>
PlutusPurpose AsIx (PreviousEra AlonzoEra)
-> PlutusPurpose AsIx AlonzoEra
upgradePlutusPurposeAsIx =
String
-> PlutusPurpose AsIx MaryEra -> AlonzoPlutusPurpose AsIx AlonzoEra
forall a. HasCallStack => String -> a
error String
"Impossible: No `PlutusScript` and `AlonzoEraScript` instances in the previous era"
instance Eq (PlutusScript era) => EqRaw (AlonzoScript era) where
eqRaw :: AlonzoScript era -> AlonzoScript era -> Bool
eqRaw = AlonzoScript era -> AlonzoScript era -> Bool
forall era.
Eq (PlutusScript era) =>
AlonzoScript era -> AlonzoScript era -> Bool
eqAlonzoScriptRaw
instance AlonzoEraScript era => ToJSON (AlonzoScript era) where
toJSON :: AlonzoScript era -> Value
toJSON = Text -> Value
String (Text -> Value)
-> (AlonzoScript era -> Text) -> AlonzoScript era -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoScript era -> Text
forall a. ToCBOR a => a -> Text
serializeAsHexText
instance MemPack (PlutusScript AlonzoEra) where
packedByteCount :: PlutusScript AlonzoEra -> Int
packedByteCount = \case
AlonzoPlutusV1 Plutus 'PlutusV1
script -> Int
packedTagByteCount Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Plutus 'PlutusV1 -> Int
forall a. MemPack a => a -> Int
packedByteCount Plutus 'PlutusV1
script
packM :: forall s. PlutusScript AlonzoEra -> Pack s ()
packM = \case
AlonzoPlutusV1 Plutus 'PlutusV1
script -> Tag -> Pack s ()
forall s. Tag -> Pack s ()
packTagM Tag
0 Pack s () -> Pack s () -> Pack s ()
forall a b. Pack s a -> Pack s b -> Pack s b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Plutus 'PlutusV1 -> Pack s ()
forall a s. MemPack a => a -> Pack s ()
forall s. Plutus 'PlutusV1 -> Pack s ()
packM Plutus 'PlutusV1
script
{-# INLINE packM #-}
unpackM :: forall b. Buffer b => Unpack b (PlutusScript AlonzoEra)
unpackM =
Unpack b Tag
forall b. Buffer b => Unpack b Tag
unpackTagM Unpack b Tag
-> (Tag -> Unpack b (PlutusScript AlonzoEra))
-> Unpack b (PlutusScript AlonzoEra)
forall a b. Unpack b a -> (a -> Unpack b b) -> Unpack b b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Tag
0 -> Plutus 'PlutusV1 -> PlutusScript AlonzoEra
AlonzoPlutusV1 (Plutus 'PlutusV1 -> PlutusScript AlonzoEra)
-> Unpack b (Plutus 'PlutusV1) -> Unpack b (PlutusScript AlonzoEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Unpack b (Plutus 'PlutusV1)
forall a b. (MemPack a, Buffer b) => Unpack b a
forall b. Buffer b => Unpack b (Plutus 'PlutusV1)
unpackM
Tag
n -> forall a (m :: * -> *) b. (MemPack a, MonadFail m) => Tag -> m b
unknownTagM @(PlutusScript AlonzoEra) Tag
n
{-# INLINE unpackM #-}
decodePlutusScript ::
forall era l s.
(AlonzoEraScript era, PlutusLanguage l) =>
SLanguage l ->
Decoder s (PlutusScript era)
decodePlutusScript :: forall era (l :: Language) s.
(AlonzoEraScript era, PlutusLanguage l) =>
SLanguage l -> Decoder s (PlutusScript era)
decodePlutusScript SLanguage l
slang = do
PlutusBinary
pb <- Decoder s PlutusBinary
forall s. Decoder s PlutusBinary
forall a s. DecCBOR a => Decoder s a
decCBOR
case Plutus l -> Maybe (PlutusScript era)
forall era (l :: Language).
(AlonzoEraScript era, PlutusLanguage l) =>
Plutus l -> Maybe (PlutusScript era)
forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (PlutusScript era)
mkPlutusScript (Plutus l -> Maybe (PlutusScript era))
-> Plutus l -> Maybe (PlutusScript era)
forall a b. (a -> b) -> a -> b
$ SLanguage l -> Plutus l -> Plutus l
forall (l :: Language) (proxy :: Language -> *).
SLanguage l -> proxy l -> proxy l
asSLanguage SLanguage l
slang (Plutus l -> Plutus l) -> Plutus l -> Plutus l
forall a b. (a -> b) -> a -> b
$ PlutusBinary -> Plutus l
forall (l :: Language). PlutusBinary -> Plutus l
Plutus PlutusBinary
pb of
Maybe (PlutusScript era)
Nothing ->
String -> Decoder s (PlutusScript era)
forall a. String -> Decoder s a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Decoder s (PlutusScript era))
-> String -> Decoder s (PlutusScript era)
forall a b. (a -> b) -> a -> b
$ Language -> String
forall a. Show a => a -> String
show (SLanguage l -> Language
forall (l :: Language) (proxy :: Language -> *).
PlutusLanguage l =>
proxy l -> Language
plutusLanguage SLanguage l
slang) String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" is not supported in " String -> ShowS
forall a. [a] -> [a] -> [a]
++ forall era. Era era => String
eraName @era String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" era."
Just PlutusScript era
plutusScript -> PlutusScript era -> Decoder s (PlutusScript era)
forall a. a -> Decoder s a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PlutusScript era
plutusScript
instance AlonzoEraScript era => EncCBOR (AlonzoScript era)
instance AlonzoEraScript era => ToCBOR (AlonzoScript era) where
toCBOR :: AlonzoScript era -> Encoding
toCBOR = forall era t. (Era era, EncCBOR t) => t -> Encoding
toEraCBOR @era (Encoding -> Encoding)
-> (AlonzoScript era -> Encoding) -> AlonzoScript era -> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Encode 'Open (AlonzoScript era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode 'Open (AlonzoScript era) -> Encoding)
-> (AlonzoScript era -> Encode 'Open (AlonzoScript era))
-> AlonzoScript era
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoScript era -> Encode 'Open (AlonzoScript era)
forall era.
AlonzoEraScript era =>
AlonzoScript era -> Encode 'Open (AlonzoScript era)
encodeScript
encodeScript :: AlonzoEraScript era => AlonzoScript era -> Encode 'Open (AlonzoScript era)
encodeScript :: forall era.
AlonzoEraScript era =>
AlonzoScript era -> Encode 'Open (AlonzoScript era)
encodeScript = \case
TimelockScript Timelock era
i -> (Timelock era -> AlonzoScript era)
-> Word -> Encode 'Open (Timelock era -> AlonzoScript era)
forall t. t -> Word -> Encode 'Open t
Sum Timelock era -> AlonzoScript era
forall era. Timelock era -> AlonzoScript era
TimelockScript Word
0 Encode 'Open (Timelock era -> AlonzoScript era)
-> Encode ('Closed 'Dense) (Timelock era)
-> Encode 'Open (AlonzoScript era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Timelock era -> Encode ('Closed 'Dense) (Timelock era)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Timelock era
i
PlutusScript PlutusScript era
plutusScript -> PlutusScript era
-> (forall {l :: Language}.
PlutusLanguage l =>
Plutus l -> Encode 'Open (AlonzoScript era))
-> Encode 'Open (AlonzoScript era)
forall era a.
AlonzoEraScript era =>
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
forall a.
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript PlutusScript era
plutusScript ((forall {l :: Language}.
PlutusLanguage l =>
Plutus l -> Encode 'Open (AlonzoScript era))
-> Encode 'Open (AlonzoScript era))
-> (forall {l :: Language}.
PlutusLanguage l =>
Plutus l -> Encode 'Open (AlonzoScript era))
-> Encode 'Open (AlonzoScript era)
forall a b. (a -> b) -> a -> b
$ \plutus :: Plutus l
plutus@(Plutus PlutusBinary
pb) ->
case Plutus l -> SLanguage l
forall (l :: Language) (proxy :: Language -> *).
PlutusLanguage l =>
proxy l -> SLanguage l
plutusSLanguage Plutus l
plutus of
SLanguage l
SPlutusV1 -> (PlutusBinary -> AlonzoScript era)
-> Word -> Encode 'Open (PlutusBinary -> AlonzoScript era)
forall t. t -> Word -> Encode 'Open t
Sum (PlutusScript era -> AlonzoScript era
forall era. PlutusScript era -> AlonzoScript era
PlutusScript (PlutusScript era -> AlonzoScript era)
-> (PlutusBinary -> PlutusScript era)
-> PlutusBinary
-> AlonzoScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe (PlutusScript era) -> PlutusScript era
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (PlutusScript era) -> PlutusScript era)
-> (PlutusBinary -> Maybe (PlutusScript era))
-> PlutusBinary
-> PlutusScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Plutus 'PlutusV1 -> Maybe (PlutusScript era)
forall era (l :: Language).
(AlonzoEraScript era, PlutusLanguage l) =>
Plutus l -> Maybe (PlutusScript era)
forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (PlutusScript era)
mkPlutusScript (Plutus 'PlutusV1 -> Maybe (PlutusScript era))
-> (PlutusBinary -> Plutus 'PlutusV1)
-> PlutusBinary
-> Maybe (PlutusScript era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (l :: Language). PlutusBinary -> Plutus l
Plutus @'PlutusV1) Word
1 Encode 'Open (PlutusBinary -> AlonzoScript era)
-> Encode ('Closed 'Dense) PlutusBinary
-> Encode 'Open (AlonzoScript era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> PlutusBinary -> Encode ('Closed 'Dense) PlutusBinary
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To PlutusBinary
pb
SLanguage l
SPlutusV2 -> (PlutusBinary -> AlonzoScript era)
-> Word -> Encode 'Open (PlutusBinary -> AlonzoScript era)
forall t. t -> Word -> Encode 'Open t
Sum (PlutusScript era -> AlonzoScript era
forall era. PlutusScript era -> AlonzoScript era
PlutusScript (PlutusScript era -> AlonzoScript era)
-> (PlutusBinary -> PlutusScript era)
-> PlutusBinary
-> AlonzoScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe (PlutusScript era) -> PlutusScript era
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (PlutusScript era) -> PlutusScript era)
-> (PlutusBinary -> Maybe (PlutusScript era))
-> PlutusBinary
-> PlutusScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Plutus 'PlutusV2 -> Maybe (PlutusScript era)
forall era (l :: Language).
(AlonzoEraScript era, PlutusLanguage l) =>
Plutus l -> Maybe (PlutusScript era)
forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (PlutusScript era)
mkPlutusScript (Plutus 'PlutusV2 -> Maybe (PlutusScript era))
-> (PlutusBinary -> Plutus 'PlutusV2)
-> PlutusBinary
-> Maybe (PlutusScript era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (l :: Language). PlutusBinary -> Plutus l
Plutus @'PlutusV2) Word
2 Encode 'Open (PlutusBinary -> AlonzoScript era)
-> Encode ('Closed 'Dense) PlutusBinary
-> Encode 'Open (AlonzoScript era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> PlutusBinary -> Encode ('Closed 'Dense) PlutusBinary
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To PlutusBinary
pb
SLanguage l
SPlutusV3 -> (PlutusBinary -> AlonzoScript era)
-> Word -> Encode 'Open (PlutusBinary -> AlonzoScript era)
forall t. t -> Word -> Encode 'Open t
Sum (PlutusScript era -> AlonzoScript era
forall era. PlutusScript era -> AlonzoScript era
PlutusScript (PlutusScript era -> AlonzoScript era)
-> (PlutusBinary -> PlutusScript era)
-> PlutusBinary
-> AlonzoScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe (PlutusScript era) -> PlutusScript era
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (PlutusScript era) -> PlutusScript era)
-> (PlutusBinary -> Maybe (PlutusScript era))
-> PlutusBinary
-> PlutusScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Plutus 'PlutusV3 -> Maybe (PlutusScript era)
forall era (l :: Language).
(AlonzoEraScript era, PlutusLanguage l) =>
Plutus l -> Maybe (PlutusScript era)
forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (PlutusScript era)
mkPlutusScript (Plutus 'PlutusV3 -> Maybe (PlutusScript era))
-> (PlutusBinary -> Plutus 'PlutusV3)
-> PlutusBinary
-> Maybe (PlutusScript era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (l :: Language). PlutusBinary -> Plutus l
Plutus @'PlutusV3) Word
3 Encode 'Open (PlutusBinary -> AlonzoScript era)
-> Encode ('Closed 'Dense) PlutusBinary
-> Encode 'Open (AlonzoScript era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> PlutusBinary -> Encode ('Closed 'Dense) PlutusBinary
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To PlutusBinary
pb
instance AlonzoEraScript era => DecCBOR (AlonzoScript era) where
decCBOR :: forall s. Decoder s (AlonzoScript era)
decCBOR = Decode ('Closed 'Dense) (AlonzoScript era)
-> Decoder s (AlonzoScript era)
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Text
-> (Word -> Decode 'Open (AlonzoScript era))
-> Decode ('Closed 'Dense) (AlonzoScript era)
forall t.
Text -> (Word -> Decode 'Open t) -> Decode ('Closed 'Dense) t
Summands Text
"AlonzoScript" Word -> Decode 'Open (AlonzoScript era)
decodeScript)
where
decodeScript :: Word -> Decode 'Open (AlonzoScript era)
decodeScript = \case
Word
0 -> (Timelock era -> AlonzoScript era)
-> Decode 'Open (Timelock era -> AlonzoScript era)
forall t. t -> Decode 'Open t
SumD Timelock era -> AlonzoScript era
forall era. Timelock era -> AlonzoScript era
TimelockScript Decode 'Open (Timelock era -> AlonzoScript era)
-> Decode ('Closed Any) (Timelock era)
-> Decode 'Open (AlonzoScript era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) (Timelock era)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
Word
1 -> SLanguage 'PlutusV1 -> Decode 'Open (AlonzoScript era)
forall {era} {l :: Language}.
(Assert
(OrdCond
(CmpNat (ProtVerLow era) (ProtVerHigh era)) 'True 'True 'False)
(TypeError ...),
Assert
(OrdCond (CmpNat MinVersion (ProtVerLow era)) 'True 'True 'False)
(TypeError ...),
Assert
(OrdCond (CmpNat MinVersion (ProtVerHigh era)) 'True 'True 'False)
(TypeError ...),
AlonzoEraScript era, PlutusLanguage l) =>
SLanguage l -> Decode 'Open (AlonzoScript era)
decodePlutus SLanguage 'PlutusV1
SPlutusV1
Word
2 -> SLanguage 'PlutusV2 -> Decode 'Open (AlonzoScript era)
forall {era} {l :: Language}.
(Assert
(OrdCond
(CmpNat (ProtVerLow era) (ProtVerHigh era)) 'True 'True 'False)
(TypeError ...),
Assert
(OrdCond (CmpNat MinVersion (ProtVerLow era)) 'True 'True 'False)
(TypeError ...),
Assert
(OrdCond (CmpNat MinVersion (ProtVerHigh era)) 'True 'True 'False)
(TypeError ...),
AlonzoEraScript era, PlutusLanguage l) =>
SLanguage l -> Decode 'Open (AlonzoScript era)
decodePlutus SLanguage 'PlutusV2
SPlutusV2
Word
3 -> SLanguage 'PlutusV3 -> Decode 'Open (AlonzoScript era)
forall {era} {l :: Language}.
(Assert
(OrdCond
(CmpNat (ProtVerLow era) (ProtVerHigh era)) 'True 'True 'False)
(TypeError ...),
Assert
(OrdCond (CmpNat MinVersion (ProtVerLow era)) 'True 'True 'False)
(TypeError ...),
Assert
(OrdCond (CmpNat MinVersion (ProtVerHigh era)) 'True 'True 'False)
(TypeError ...),
AlonzoEraScript era, PlutusLanguage l) =>
SLanguage l -> Decode 'Open (AlonzoScript era)
decodePlutus SLanguage 'PlutusV3
SPlutusV3
Word
n -> Word -> Decode 'Open (AlonzoScript era)
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
n
decodePlutus :: SLanguage l -> Decode 'Open (AlonzoScript era)
decodePlutus SLanguage l
slang =
(PlutusScript era -> AlonzoScript era)
-> Decode 'Open (PlutusScript era -> AlonzoScript era)
forall t. t -> Decode 'Open t
SumD PlutusScript era -> AlonzoScript era
forall era. PlutusScript era -> AlonzoScript era
PlutusScript Decode 'Open (PlutusScript era -> AlonzoScript era)
-> Decode ('Closed 'Dense) (PlutusScript era)
-> Decode 'Open (AlonzoScript era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! (forall s. Decoder s (PlutusScript era))
-> Decode ('Closed 'Dense) (PlutusScript era)
forall t. (forall s. Decoder s t) -> Decode ('Closed 'Dense) t
D (SLanguage l -> Decoder s (PlutusScript era)
forall era (l :: Language) s.
(AlonzoEraScript era, PlutusLanguage l) =>
SLanguage l -> Decoder s (PlutusScript era)
decodePlutusScript SLanguage l
slang)
validScript :: (HasCallStack, AlonzoEraScript era) => ProtVer -> Script era -> Bool
validScript :: forall era.
(HasCallStack, AlonzoEraScript era) =>
ProtVer -> Script era -> Bool
validScript ProtVer
pv Script era
script =
case Script era -> Maybe (PlutusScript era)
forall era.
AlonzoEraScript era =>
Script era -> Maybe (PlutusScript era)
toPlutusScript Script era
script of
Just PlutusScript era
plutusScript -> Version -> PlutusScript era -> Bool
forall era.
AlonzoEraScript era =>
Version -> PlutusScript era -> Bool
isValidPlutusScript (ProtVer -> Version
pvMajor ProtVer
pv) PlutusScript era
plutusScript
Maybe (PlutusScript era)
Nothing ->
case Script era -> Maybe (NativeScript era)
forall era. EraScript era => Script era -> Maybe (NativeScript era)
getNativeScript Script era
script of
Just NativeScript era
timelockScript -> NativeScript era -> Bool -> Bool
forall a b. NFData a => a -> b -> b
deepseq NativeScript era
timelockScript Bool
True
Maybe (NativeScript era)
Nothing -> String -> Bool
forall a. HasCallStack => String -> a
error String
"Impossible: There are only Native and Plutus scripts available"
eqAlonzoScriptRaw :: Eq (PlutusScript era) => AlonzoScript era -> AlonzoScript era -> Bool
eqAlonzoScriptRaw :: forall era.
Eq (PlutusScript era) =>
AlonzoScript era -> AlonzoScript era -> Bool
eqAlonzoScriptRaw (TimelockScript Timelock era
t1) (TimelockScript Timelock era
t2) = Timelock era -> Timelock era -> Bool
forall {k} (era :: k). Timelock era -> Timelock era -> Bool
eqTimelockRaw Timelock era
t1 Timelock era
t2
eqAlonzoScriptRaw (PlutusScript PlutusScript era
ps1) (PlutusScript PlutusScript era
ps2) = PlutusScript era
ps1 PlutusScript era -> PlutusScript era -> Bool
forall a. Eq a => a -> a -> Bool
== PlutusScript era
ps2
eqAlonzoScriptRaw AlonzoScript era
_ AlonzoScript era
_ = Bool
False
eraLanguages :: forall era. AlonzoEraScript era => [Language]
eraLanguages :: forall era. AlonzoEraScript era => [Language]
eraLanguages = [Language
forall a. Bounded a => a
minBound .. forall era. AlonzoEraScript era => Language
eraMaxLanguage @era]
lookupPlutusScript ::
AlonzoEraScript era =>
ScriptHash ->
Map.Map ScriptHash (Script era) ->
Maybe (PlutusScript era)
lookupPlutusScript :: forall era.
AlonzoEraScript era =>
ScriptHash
-> Map ScriptHash (Script era) -> Maybe (PlutusScript era)
lookupPlutusScript ScriptHash
scriptHash = ScriptHash -> Map ScriptHash (Script era) -> Maybe (Script era)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup ScriptHash
scriptHash (Map ScriptHash (Script era) -> Maybe (Script era))
-> (Script era -> Maybe (PlutusScript era))
-> Map ScriptHash (Script era)
-> Maybe (PlutusScript era)
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> Script era -> Maybe (PlutusScript era)
forall era.
AlonzoEraScript era =>
Script era -> Maybe (PlutusScript era)
toPlutusScript