{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Cardano.Ledger.Babbage.Scripts (
AlonzoScript (..),
isPlutusScript,
PlutusScript (..),
) where
import Cardano.Ledger.Allegra.Scripts
import Cardano.Ledger.Alonzo.Core
import Cardano.Ledger.Alonzo.Scripts (
AlonzoPlutusPurpose (..),
AlonzoScript (..),
PlutusScript (..),
alonzoScriptPrefixTag,
isPlutusScript,
)
import Cardano.Ledger.Babbage.Era
import Cardano.Ledger.Babbage.TxCert ()
import Cardano.Ledger.Plutus.Language
import Cardano.Ledger.Shelley.Scripts (ShelleyEraScript (..))
import Control.DeepSeq (NFData (..), rwhnf)
import Data.MemPack
import GHC.Generics
import NoThunks.Class (NoThunks (..))
instance EraScript BabbageEra where
type Script BabbageEra = AlonzoScript BabbageEra
type NativeScript BabbageEra = Timelock BabbageEra
upgradeScript :: EraScript (PreviousEra BabbageEra) =>
Script (PreviousEra BabbageEra) -> Script BabbageEra
upgradeScript = \case
TimelockScript Timelock AlonzoEra
ts -> Timelock BabbageEra -> AlonzoScript BabbageEra
forall era. Timelock era -> AlonzoScript era
TimelockScript (Timelock BabbageEra -> AlonzoScript BabbageEra)
-> Timelock BabbageEra -> AlonzoScript BabbageEra
forall a b. (a -> b) -> a -> b
$ Timelock AlonzoEra -> Timelock BabbageEra
forall era1 era2.
(Era era1, Era era2) =>
Timelock era1 -> Timelock era2
translateTimelock Timelock AlonzoEra
ts
PlutusScript (AlonzoPlutusV1 Plutus 'PlutusV1
ps) -> PlutusScript BabbageEra -> AlonzoScript BabbageEra
forall era. PlutusScript era -> AlonzoScript era
PlutusScript (PlutusScript BabbageEra -> AlonzoScript BabbageEra)
-> PlutusScript BabbageEra -> AlonzoScript BabbageEra
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV1 -> PlutusScript BabbageEra
BabbagePlutusV1 Plutus 'PlutusV1
ps
scriptPrefixTag :: Script BabbageEra -> ByteString
scriptPrefixTag = Script BabbageEra -> ByteString
forall era.
(AlonzoEraScript era, AlonzoScript era ~ Script era) =>
Script era -> ByteString
alonzoScriptPrefixTag
getNativeScript :: Script BabbageEra -> Maybe (NativeScript BabbageEra)
getNativeScript = \case
TimelockScript Timelock BabbageEra
ts -> Timelock BabbageEra -> Maybe (Timelock BabbageEra)
forall a. a -> Maybe a
Just Timelock BabbageEra
ts
Script BabbageEra
_ -> Maybe (Timelock BabbageEra)
Maybe (NativeScript BabbageEra)
forall a. Maybe a
Nothing
fromNativeScript :: NativeScript BabbageEra -> Script BabbageEra
fromNativeScript = Timelock BabbageEra -> AlonzoScript BabbageEra
NativeScript BabbageEra -> Script BabbageEra
forall era. Timelock era -> AlonzoScript era
TimelockScript
instance AlonzoEraScript BabbageEra where
data PlutusScript BabbageEra
= BabbagePlutusV1 !(Plutus 'PlutusV1)
| BabbagePlutusV2 !(Plutus 'PlutusV2)
deriving (PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
(PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool)
-> (PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool)
-> Eq (PlutusScript BabbageEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
== :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
$c/= :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
/= :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
Eq, Eq (PlutusScript BabbageEra)
Eq (PlutusScript BabbageEra) =>
(PlutusScript BabbageEra -> PlutusScript BabbageEra -> Ordering)
-> (PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool)
-> (PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool)
-> (PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool)
-> (PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool)
-> (PlutusScript BabbageEra
-> PlutusScript BabbageEra -> PlutusScript BabbageEra)
-> (PlutusScript BabbageEra
-> PlutusScript BabbageEra -> PlutusScript BabbageEra)
-> Ord (PlutusScript BabbageEra)
PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
PlutusScript BabbageEra -> PlutusScript BabbageEra -> Ordering
PlutusScript BabbageEra
-> PlutusScript BabbageEra -> PlutusScript BabbageEra
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 BabbageEra -> PlutusScript BabbageEra -> Ordering
compare :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Ordering
$c< :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
< :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
$c<= :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
<= :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
$c> :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
> :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
$c>= :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
>= :: PlutusScript BabbageEra -> PlutusScript BabbageEra -> Bool
$cmax :: PlutusScript BabbageEra
-> PlutusScript BabbageEra -> PlutusScript BabbageEra
max :: PlutusScript BabbageEra
-> PlutusScript BabbageEra -> PlutusScript BabbageEra
$cmin :: PlutusScript BabbageEra
-> PlutusScript BabbageEra -> PlutusScript BabbageEra
min :: PlutusScript BabbageEra
-> PlutusScript BabbageEra -> PlutusScript BabbageEra
Ord, Int -> PlutusScript BabbageEra -> ShowS
[PlutusScript BabbageEra] -> ShowS
PlutusScript BabbageEra -> String
(Int -> PlutusScript BabbageEra -> ShowS)
-> (PlutusScript BabbageEra -> String)
-> ([PlutusScript BabbageEra] -> ShowS)
-> Show (PlutusScript BabbageEra)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PlutusScript BabbageEra -> ShowS
showsPrec :: Int -> PlutusScript BabbageEra -> ShowS
$cshow :: PlutusScript BabbageEra -> String
show :: PlutusScript BabbageEra -> String
$cshowList :: [PlutusScript BabbageEra] -> ShowS
showList :: [PlutusScript BabbageEra] -> ShowS
Show, (forall x.
PlutusScript BabbageEra -> Rep (PlutusScript BabbageEra) x)
-> (forall x.
Rep (PlutusScript BabbageEra) x -> PlutusScript BabbageEra)
-> Generic (PlutusScript BabbageEra)
forall x.
Rep (PlutusScript BabbageEra) x -> PlutusScript BabbageEra
forall x.
PlutusScript BabbageEra -> Rep (PlutusScript BabbageEra) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
PlutusScript BabbageEra -> Rep (PlutusScript BabbageEra) x
from :: forall x.
PlutusScript BabbageEra -> Rep (PlutusScript BabbageEra) x
$cto :: forall x.
Rep (PlutusScript BabbageEra) x -> PlutusScript BabbageEra
to :: forall x.
Rep (PlutusScript BabbageEra) x -> PlutusScript BabbageEra
Generic)
type PlutusPurpose f BabbageEra = AlonzoPlutusPurpose f BabbageEra
eraMaxLanguage :: Language
eraMaxLanguage = Language
PlutusV2
mkPlutusScript :: forall (l :: Language).
PlutusLanguage l =>
Plutus l -> Maybe (PlutusScript BabbageEra)
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 BabbageEra -> Maybe (PlutusScript BabbageEra)
forall a. a -> Maybe a
Just (PlutusScript BabbageEra -> Maybe (PlutusScript BabbageEra))
-> PlutusScript BabbageEra -> Maybe (PlutusScript BabbageEra)
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV1 -> PlutusScript BabbageEra
BabbagePlutusV1 Plutus l
Plutus 'PlutusV1
plutus
SLanguage l
SPlutusV2 -> PlutusScript BabbageEra -> Maybe (PlutusScript BabbageEra)
forall a. a -> Maybe a
Just (PlutusScript BabbageEra -> Maybe (PlutusScript BabbageEra))
-> PlutusScript BabbageEra -> Maybe (PlutusScript BabbageEra)
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV2 -> PlutusScript BabbageEra
BabbagePlutusV2 Plutus l
Plutus 'PlutusV2
plutus
SLanguage l
_ -> Maybe (PlutusScript BabbageEra)
forall a. Maybe a
Nothing
withPlutusScript :: forall a.
PlutusScript BabbageEra
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript (BabbagePlutusV1 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
withPlutusScript (BabbagePlutusV2 Plutus 'PlutusV2
plutus) forall (l :: Language). PlutusLanguage l => Plutus l -> a
f = Plutus 'PlutusV2 -> a
forall (l :: Language). PlutusLanguage l => Plutus l -> a
f Plutus 'PlutusV2
plutus
hoistPlutusPurpose :: forall (g :: * -> * -> *) (f :: * -> * -> *).
(forall ix it. g ix it -> f ix it)
-> PlutusPurpose g BabbageEra -> PlutusPurpose f BabbageEra
hoistPlutusPurpose forall ix it. g ix it -> f ix it
f = \case
AlonzoSpending g Word32 TxIn
x -> f Word32 TxIn -> AlonzoPlutusPurpose f BabbageEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending (f Word32 TxIn -> AlonzoPlutusPurpose f BabbageEra)
-> f Word32 TxIn -> AlonzoPlutusPurpose f BabbageEra
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 BabbageEra
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting (f Word32 PolicyID -> AlonzoPlutusPurpose f BabbageEra)
-> f Word32 PolicyID -> AlonzoPlutusPurpose f BabbageEra
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 BabbageEra)
x -> f Word32 (TxCert BabbageEra) -> AlonzoPlutusPurpose f BabbageEra
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying (f Word32 (TxCert BabbageEra) -> AlonzoPlutusPurpose f BabbageEra)
-> f Word32 (TxCert BabbageEra) -> AlonzoPlutusPurpose f BabbageEra
forall a b. (a -> b) -> a -> b
$ g Word32 (ShelleyTxCert BabbageEra)
-> f Word32 (ShelleyTxCert BabbageEra)
forall ix it. g ix it -> f ix it
f g Word32 (TxCert BabbageEra)
g Word32 (ShelleyTxCert BabbageEra)
x
AlonzoRewarding g Word32 RewardAccount
x -> f Word32 RewardAccount -> AlonzoPlutusPurpose f BabbageEra
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding (f Word32 RewardAccount -> AlonzoPlutusPurpose f BabbageEra)
-> f Word32 RewardAccount -> AlonzoPlutusPurpose f BabbageEra
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 BabbageEra
mkSpendingPurpose = f Word32 TxIn -> AlonzoPlutusPurpose f BabbageEra
f Word32 TxIn -> PlutusPurpose f BabbageEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending
toSpendingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f BabbageEra -> 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 BabbageEra
_ = Maybe (f Word32 TxIn)
forall a. Maybe a
Nothing
mkMintingPurpose :: forall (f :: * -> * -> *).
f Word32 PolicyID -> PlutusPurpose f BabbageEra
mkMintingPurpose = f Word32 PolicyID -> AlonzoPlutusPurpose f BabbageEra
f Word32 PolicyID -> PlutusPurpose f BabbageEra
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting
toMintingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f BabbageEra -> 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 BabbageEra
_ = Maybe (f Word32 PolicyID)
forall a. Maybe a
Nothing
mkCertifyingPurpose :: forall (f :: * -> * -> *).
f Word32 (TxCert BabbageEra) -> PlutusPurpose f BabbageEra
mkCertifyingPurpose = f Word32 (TxCert BabbageEra) -> AlonzoPlutusPurpose f BabbageEra
f Word32 (TxCert BabbageEra) -> PlutusPurpose f BabbageEra
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying
toCertifyingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f BabbageEra -> Maybe (f Word32 (TxCert BabbageEra))
toCertifyingPurpose (AlonzoCertifying f Word32 (TxCert BabbageEra)
i) = f Word32 (ShelleyTxCert BabbageEra)
-> Maybe (f Word32 (ShelleyTxCert BabbageEra))
forall a. a -> Maybe a
Just f Word32 (TxCert BabbageEra)
f Word32 (ShelleyTxCert BabbageEra)
i
toCertifyingPurpose PlutusPurpose f BabbageEra
_ = Maybe (f Word32 (TxCert BabbageEra))
Maybe (f Word32 (ShelleyTxCert BabbageEra))
forall a. Maybe a
Nothing
mkRewardingPurpose :: forall (f :: * -> * -> *).
f Word32 RewardAccount -> PlutusPurpose f BabbageEra
mkRewardingPurpose = f Word32 RewardAccount -> AlonzoPlutusPurpose f BabbageEra
f Word32 RewardAccount -> PlutusPurpose f BabbageEra
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding
toRewardingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f BabbageEra -> 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 BabbageEra
_ = Maybe (f Word32 RewardAccount)
forall a. Maybe a
Nothing
upgradePlutusPurposeAsIx :: AlonzoEraScript (PreviousEra BabbageEra) =>
PlutusPurpose AsIx (PreviousEra BabbageEra)
-> PlutusPurpose AsIx BabbageEra
upgradePlutusPurposeAsIx = \case
AlonzoMinting (AsIx Word32
ix) -> AsIx Word32 PolicyID -> AlonzoPlutusPurpose AsIx BabbageEra
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> AlonzoPlutusPurpose f era
AlonzoMinting (Word32 -> AsIx Word32 PolicyID
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)
AlonzoSpending (AsIx Word32
ix) -> AsIx Word32 TxIn -> AlonzoPlutusPurpose AsIx BabbageEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> AlonzoPlutusPurpose f era
AlonzoSpending (Word32 -> AsIx Word32 TxIn
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)
AlonzoRewarding (AsIx Word32
ix) -> AsIx Word32 RewardAccount -> AlonzoPlutusPurpose AsIx BabbageEra
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> AlonzoPlutusPurpose f era
AlonzoRewarding (Word32 -> AsIx Word32 RewardAccount
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)
AlonzoCertifying (AsIx Word32
ix) -> AsIx Word32 (TxCert BabbageEra)
-> AlonzoPlutusPurpose AsIx BabbageEra
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> AlonzoPlutusPurpose f era
AlonzoCertifying (Word32 -> AsIx Word32 (ShelleyTxCert BabbageEra)
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)
instance ShelleyEraScript BabbageEra where
mkRequireSignature :: KeyHash 'Witness -> NativeScript BabbageEra
mkRequireSignature = KeyHash 'Witness -> Timelock BabbageEra
KeyHash 'Witness -> NativeScript BabbageEra
forall era. Era era => KeyHash 'Witness -> Timelock era
mkRequireSignatureTimelock
getRequireSignature :: NativeScript BabbageEra -> Maybe (KeyHash 'Witness)
getRequireSignature = Timelock BabbageEra -> Maybe (KeyHash 'Witness)
NativeScript BabbageEra -> Maybe (KeyHash 'Witness)
forall {k} (era :: k). Timelock era -> Maybe (KeyHash 'Witness)
getRequireSignatureTimelock
mkRequireAllOf :: StrictSeq (NativeScript BabbageEra) -> NativeScript BabbageEra
mkRequireAllOf = StrictSeq (Timelock BabbageEra) -> Timelock BabbageEra
StrictSeq (NativeScript BabbageEra) -> NativeScript BabbageEra
forall era. Era era => StrictSeq (Timelock era) -> Timelock era
mkRequireAllOfTimelock
getRequireAllOf :: NativeScript BabbageEra
-> Maybe (StrictSeq (NativeScript BabbageEra))
getRequireAllOf = Timelock BabbageEra -> Maybe (StrictSeq (Timelock BabbageEra))
NativeScript BabbageEra
-> Maybe (StrictSeq (NativeScript BabbageEra))
forall {k} (era :: k).
Timelock era -> Maybe (StrictSeq (Timelock era))
getRequireAllOfTimelock
mkRequireAnyOf :: StrictSeq (NativeScript BabbageEra) -> NativeScript BabbageEra
mkRequireAnyOf = StrictSeq (Timelock BabbageEra) -> Timelock BabbageEra
StrictSeq (NativeScript BabbageEra) -> NativeScript BabbageEra
forall era. Era era => StrictSeq (Timelock era) -> Timelock era
mkRequireAnyOfTimelock
getRequireAnyOf :: NativeScript BabbageEra
-> Maybe (StrictSeq (NativeScript BabbageEra))
getRequireAnyOf = Timelock BabbageEra -> Maybe (StrictSeq (Timelock BabbageEra))
NativeScript BabbageEra
-> Maybe (StrictSeq (NativeScript BabbageEra))
forall {k} (era :: k).
Timelock era -> Maybe (StrictSeq (Timelock era))
getRequireAnyOfTimelock
mkRequireMOf :: Int
-> StrictSeq (NativeScript BabbageEra) -> NativeScript BabbageEra
mkRequireMOf = Int -> StrictSeq (Timelock BabbageEra) -> Timelock BabbageEra
Int
-> StrictSeq (NativeScript BabbageEra) -> NativeScript BabbageEra
forall era.
Era era =>
Int -> StrictSeq (Timelock era) -> Timelock era
mkRequireMOfTimelock
getRequireMOf :: NativeScript BabbageEra
-> Maybe (Int, StrictSeq (NativeScript BabbageEra))
getRequireMOf = Timelock BabbageEra -> Maybe (Int, StrictSeq (Timelock BabbageEra))
NativeScript BabbageEra
-> Maybe (Int, StrictSeq (NativeScript BabbageEra))
forall {k} (era :: k).
Timelock era -> Maybe (Int, StrictSeq (Timelock era))
getRequireMOfTimelock
instance AllegraEraScript BabbageEra where
mkTimeStart :: SlotNo -> NativeScript BabbageEra
mkTimeStart = SlotNo -> Timelock BabbageEra
SlotNo -> NativeScript BabbageEra
forall era. Era era => SlotNo -> Timelock era
mkTimeStartTimelock
getTimeStart :: NativeScript BabbageEra -> Maybe SlotNo
getTimeStart = Timelock BabbageEra -> Maybe SlotNo
NativeScript BabbageEra -> Maybe SlotNo
forall {k} (era :: k). Timelock era -> Maybe SlotNo
getTimeStartTimelock
mkTimeExpire :: SlotNo -> NativeScript BabbageEra
mkTimeExpire = SlotNo -> Timelock BabbageEra
SlotNo -> NativeScript BabbageEra
forall era. Era era => SlotNo -> Timelock era
mkTimeExpireTimelock
getTimeExpire :: NativeScript BabbageEra -> Maybe SlotNo
getTimeExpire = Timelock BabbageEra -> Maybe SlotNo
NativeScript BabbageEra -> Maybe SlotNo
forall {k} (era :: k). Timelock era -> Maybe SlotNo
getTimeExpireTimelock
instance NFData (PlutusScript BabbageEra) where
rnf :: PlutusScript BabbageEra -> ()
rnf = PlutusScript BabbageEra -> ()
forall a. a -> ()
rwhnf
instance NoThunks (PlutusScript BabbageEra)
instance SafeToHash (PlutusScript BabbageEra) where
originalBytes :: PlutusScript BabbageEra -> ByteString
originalBytes PlutusScript BabbageEra
ps = PlutusScript BabbageEra
-> (forall (l :: Language).
PlutusLanguage l =>
Plutus l -> ByteString)
-> ByteString
forall era a.
AlonzoEraScript era =>
PlutusScript era
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
forall a.
PlutusScript BabbageEra
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript PlutusScript BabbageEra
ps Plutus l -> ByteString
forall t. SafeToHash t => t -> ByteString
forall (l :: Language). PlutusLanguage l => Plutus l -> ByteString
originalBytes
instance MemPack (PlutusScript BabbageEra) where
packedByteCount :: PlutusScript BabbageEra -> Int
packedByteCount = \case
BabbagePlutusV1 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
BabbagePlutusV2 Plutus 'PlutusV2
script -> Int
packedTagByteCount Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Plutus 'PlutusV2 -> Int
forall a. MemPack a => a -> Int
packedByteCount Plutus 'PlutusV2
script
packM :: forall s. PlutusScript BabbageEra -> Pack s ()
packM = \case
BabbagePlutusV1 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 s. Plutus 'PlutusV1 -> Pack s ()
forall a s. MemPack a => a -> Pack s ()
packM Plutus 'PlutusV1
script
BabbagePlutusV2 Plutus 'PlutusV2
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
>> Plutus 'PlutusV2 -> Pack s ()
forall s. Plutus 'PlutusV2 -> Pack s ()
forall a s. MemPack a => a -> Pack s ()
packM Plutus 'PlutusV2
script
{-# INLINE packM #-}
unpackM :: forall b. Buffer b => Unpack b (PlutusScript BabbageEra)
unpackM =
Unpack b Tag
forall b. Buffer b => Unpack b Tag
unpackTagM Unpack b Tag
-> (Tag -> Unpack b (PlutusScript BabbageEra))
-> Unpack b (PlutusScript BabbageEra)
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 BabbageEra
BabbagePlutusV1 (Plutus 'PlutusV1 -> PlutusScript BabbageEra)
-> Unpack b (Plutus 'PlutusV1)
-> Unpack b (PlutusScript BabbageEra)
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
1 -> Plutus 'PlutusV2 -> PlutusScript BabbageEra
BabbagePlutusV2 (Plutus 'PlutusV2 -> PlutusScript BabbageEra)
-> Unpack b (Plutus 'PlutusV2)
-> Unpack b (PlutusScript BabbageEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Unpack b (Plutus 'PlutusV2)
forall a b. (MemPack a, Buffer b) => Unpack b a
forall b. Buffer b => Unpack b (Plutus 'PlutusV2)
unpackM
Tag
n -> forall a (m :: * -> *) b. (MemPack a, MonadFail m) => Tag -> m b
unknownTagM @(PlutusScript BabbageEra) Tag
n
{-# INLINE unpackM #-}