{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# 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 TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Dijkstra.Scripts (
  PlutusScript (..),
  DijkstraPlutusPurpose (..),
  DijkstraEraScript (..),
  DijkstraNativeScript (MkDijkstraNativeScript),
  DijkstraNativeScriptRaw (..),
  pattern GuardingPurpose,
  pattern RequireGuard,
  evalDijkstraNativeScript,
  upgradeTimelock,
) where

import Cardano.Ledger.Address (RewardAccount)
import Cardano.Ledger.Allegra.Scripts
import Cardano.Ledger.Alonzo.Scripts (
  AlonzoEraScript (..),
  AsItem,
  AsIx (..),
  AsIxItem,
  alonzoScriptPrefixTag,
 )
import Cardano.Ledger.BaseTypes
import Cardano.Ledger.Binary (
  Annotator,
  CBORGroup (..),
  DecCBOR (decCBOR),
  DecCBORGroup (..),
  EncCBOR (encCBOR),
  EncCBORGroup (..),
  ToCBOR (..),
  decodeWord8,
  encodeWord8,
  encodedSizeExpr,
 )
import Cardano.Ledger.Binary.Coders (
  Decode (..),
  Encode (..),
  Wrapped (..),
  decode,
  encode,
  (!>),
  (<!),
  (<*!),
 )
import Cardano.Ledger.Conway (ConwayEra)
import Cardano.Ledger.Conway.Governance (ProposalProcedure, Voter)
import Cardano.Ledger.Conway.Scripts
import Cardano.Ledger.Core
import Cardano.Ledger.Credential (Credential)
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
import Cardano.Ledger.Dijkstra.PParams ()
import Cardano.Ledger.Dijkstra.TxCert ()
import Cardano.Ledger.Mary.Value (PolicyID)
import Cardano.Ledger.MemoBytes
import Cardano.Ledger.Plutus (Language (..), Plutus, SLanguage (..), plutusSLanguage)
import Cardano.Ledger.Shelley.Scripts
import Cardano.Ledger.TxIn (TxIn)
import Control.DeepSeq (NFData (..), rwhnf)
import Data.Aeson (KeyValue (..), ToJSON (..))
import Data.MemPack (MemPack (..), packTagM, packedTagByteCount, unknownTagM, unpackTagM)
import Data.OSet.Strict (OSet)
import qualified Data.OSet.Strict as OSet
import Data.Sequence.Strict (StrictSeq)
import Data.Sequence.Strict as Seq (StrictSeq (Empty, (:<|)))
import qualified Data.Sequence.Strict as SSeq
import Data.Set as Set (Set, member)
import Data.Typeable (Proxy (..), Typeable)
import Data.Word (Word16, Word32, Word8)
import GHC.Generics (Generic)
import NoThunks.Class (NoThunks)

data DijkstraPlutusPurpose f era
  = DijkstraSpending !(f Word32 TxIn)
  | DijkstraMinting !(f Word32 PolicyID)
  | DijkstraCertifying !(f Word32 (TxCert era))
  | DijkstraRewarding !(f Word32 RewardAccount)
  | DijkstraVoting !(f Word32 Voter)
  | DijkstraProposing !(f Word32 (ProposalProcedure era))
  | DijkstraGuarding !(f Word32 ScriptHash)
  deriving ((forall x.
 DijkstraPlutusPurpose f era -> Rep (DijkstraPlutusPurpose f era) x)
-> (forall x.
    Rep (DijkstraPlutusPurpose f era) x -> DijkstraPlutusPurpose f era)
-> Generic (DijkstraPlutusPurpose f era)
forall x.
Rep (DijkstraPlutusPurpose f era) x -> DijkstraPlutusPurpose f era
forall x.
DijkstraPlutusPurpose f era -> Rep (DijkstraPlutusPurpose f era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (f :: * -> * -> *) era x.
Rep (DijkstraPlutusPurpose f era) x -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era x.
DijkstraPlutusPurpose f era -> Rep (DijkstraPlutusPurpose f era) x
$cfrom :: forall (f :: * -> * -> *) era x.
DijkstraPlutusPurpose f era -> Rep (DijkstraPlutusPurpose f era) x
from :: forall x.
DijkstraPlutusPurpose f era -> Rep (DijkstraPlutusPurpose f era) x
$cto :: forall (f :: * -> * -> *) era x.
Rep (DijkstraPlutusPurpose f era) x -> DijkstraPlutusPurpose f era
to :: forall x.
Rep (DijkstraPlutusPurpose f era) x -> DijkstraPlutusPurpose f era
Generic)

instance Inject (ConwayPlutusPurpose f era) (DijkstraPlutusPurpose f era) where
  inject :: ConwayPlutusPurpose f era -> DijkstraPlutusPurpose f era
inject = \case
    ConwaySpending f Word32 TxIn
p -> f Word32 TxIn -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 TxIn -> DijkstraPlutusPurpose f era
DijkstraSpending f Word32 TxIn
p
    ConwayMinting f Word32 PolicyID
p -> f Word32 PolicyID -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> DijkstraPlutusPurpose f era
DijkstraMinting f Word32 PolicyID
p
    ConwayCertifying f Word32 (TxCert era)
p -> f Word32 (TxCert era) -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> DijkstraPlutusPurpose f era
DijkstraCertifying f Word32 (TxCert era)
p
    ConwayRewarding f Word32 RewardAccount
p -> f Word32 RewardAccount -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> DijkstraPlutusPurpose f era
DijkstraRewarding f Word32 RewardAccount
p
    ConwayVoting f Word32 Voter
p -> f Word32 Voter -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 Voter -> DijkstraPlutusPurpose f era
DijkstraVoting f Word32 Voter
p
    ConwayProposing f Word32 (ProposalProcedure era)
p -> f Word32 (ProposalProcedure era) -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 (ProposalProcedure era) -> DijkstraPlutusPurpose f era
DijkstraProposing f Word32 (ProposalProcedure era)
p

deriving via
  CBORGroup (DijkstraPlutusPurpose f era)
  instance
    ( Typeable f
    , EraPParams era
    , forall a b. (DecCBOR a, DecCBOR b) => DecCBOR (f a b)
    , forall a b. (EncCBOR a, EncCBOR b) => EncCBOR (f a b)
    , EraTxCert era
    ) =>
    DecCBOR (DijkstraPlutusPurpose f era)

deriving via
  CBORGroup (DijkstraPlutusPurpose f era)
  instance
    ( Typeable f
    , EraPParams era
    , forall a b. (EncCBOR a, EncCBOR b) => EncCBOR (f a b)
    , EraTxCert era
    ) =>
    EncCBOR (DijkstraPlutusPurpose f era)

instance
  ( Typeable f
  , EraPParams era
  , forall a b. (DecCBOR a, DecCBOR b) => DecCBOR (f a b)
  , DecCBOR (TxCert era)
  ) =>
  DecCBORGroup (DijkstraPlutusPurpose f era)
  where
  decCBORGroup :: forall s. Decoder s (DijkstraPlutusPurpose f era)
decCBORGroup =
    Decoder s Word8
forall s. Decoder s Word8
decodeWord8 Decoder s Word8
-> (Word8 -> Decoder s (DijkstraPlutusPurpose f era))
-> Decoder s (DijkstraPlutusPurpose f 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 -> f Word32 TxIn -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 TxIn -> DijkstraPlutusPurpose f era
DijkstraSpending (f Word32 TxIn -> DijkstraPlutusPurpose f era)
-> Decoder s (f Word32 TxIn)
-> Decoder s (DijkstraPlutusPurpose f era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (f Word32 TxIn)
forall s. Decoder s (f Word32 TxIn)
forall a s. DecCBOR a => Decoder s a
decCBOR
      Word8
1 -> f Word32 PolicyID -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> DijkstraPlutusPurpose f era
DijkstraMinting (f Word32 PolicyID -> DijkstraPlutusPurpose f era)
-> Decoder s (f Word32 PolicyID)
-> Decoder s (DijkstraPlutusPurpose f era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (f Word32 PolicyID)
forall s. Decoder s (f Word32 PolicyID)
forall a s. DecCBOR a => Decoder s a
decCBOR
      Word8
2 -> f Word32 (TxCert era) -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> DijkstraPlutusPurpose f era
DijkstraCertifying (f Word32 (TxCert era) -> DijkstraPlutusPurpose f era)
-> Decoder s (f Word32 (TxCert era))
-> Decoder s (DijkstraPlutusPurpose f era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (f Word32 (TxCert era))
forall s. Decoder s (f Word32 (TxCert era))
forall a s. DecCBOR a => Decoder s a
decCBOR
      Word8
3 -> f Word32 RewardAccount -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> DijkstraPlutusPurpose f era
DijkstraRewarding (f Word32 RewardAccount -> DijkstraPlutusPurpose f era)
-> Decoder s (f Word32 RewardAccount)
-> Decoder s (DijkstraPlutusPurpose f era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (f Word32 RewardAccount)
forall s. Decoder s (f Word32 RewardAccount)
forall a s. DecCBOR a => Decoder s a
decCBOR
      Word8
4 -> f Word32 Voter -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 Voter -> DijkstraPlutusPurpose f era
DijkstraVoting (f Word32 Voter -> DijkstraPlutusPurpose f era)
-> Decoder s (f Word32 Voter)
-> Decoder s (DijkstraPlutusPurpose f era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (f Word32 Voter)
forall s. Decoder s (f Word32 Voter)
forall a s. DecCBOR a => Decoder s a
decCBOR
      Word8
5 -> f Word32 (ProposalProcedure era) -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 (ProposalProcedure era) -> DijkstraPlutusPurpose f era
DijkstraProposing (f Word32 (ProposalProcedure era) -> DijkstraPlutusPurpose f era)
-> Decoder s (f Word32 (ProposalProcedure era))
-> Decoder s (DijkstraPlutusPurpose f era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (f Word32 (ProposalProcedure era))
forall s. Decoder s (f Word32 (ProposalProcedure era))
forall a s. DecCBOR a => Decoder s a
decCBOR
      Word8
6 -> f Word32 ScriptHash -> DijkstraPlutusPurpose f era
forall (f :: * -> * -> *) era.
f Word32 ScriptHash -> DijkstraPlutusPurpose f era
DijkstraGuarding (f Word32 ScriptHash -> DijkstraPlutusPurpose f era)
-> Decoder s (f Word32 ScriptHash)
-> Decoder s (DijkstraPlutusPurpose f era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (f Word32 ScriptHash)
forall s. Decoder s (f Word32 ScriptHash)
forall a s. DecCBOR a => Decoder s a
decCBOR
      Word8
n -> String -> Decoder s (DijkstraPlutusPurpose f era)
forall a. String -> Decoder s a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Decoder s (DijkstraPlutusPurpose f era))
-> String -> Decoder s (DijkstraPlutusPurpose f era)
forall a b. (a -> b) -> a -> b
$ String
"Unexpected tag for DijkstraPlutusPurpose: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Word8 -> String
forall a. Show a => a -> String
show Word8
n

instance
  ( Typeable f
  , EraPParams era
  , forall a b. (EncCBOR a, EncCBOR b) => EncCBOR (f a b)
  , EncCBOR (TxCert era)
  ) =>
  EncCBORGroup (DijkstraPlutusPurpose f era)
  where
  listLen :: DijkstraPlutusPurpose f era -> Word
listLen DijkstraPlutusPurpose f era
_ = Word
2
  listLenBound :: Proxy (DijkstraPlutusPurpose f era) -> Word
listLenBound Proxy (DijkstraPlutusPurpose f era)
_ = Word
2
  encCBORGroup :: DijkstraPlutusPurpose f era -> Encoding
encCBORGroup = \case
    DijkstraSpending f Word32 TxIn
p -> Word8 -> Encoding
encodeWord8 Word8
0 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> f Word32 TxIn -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR f Word32 TxIn
p
    DijkstraMinting f Word32 PolicyID
p -> Word8 -> Encoding
encodeWord8 Word8
1 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> f Word32 PolicyID -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR f Word32 PolicyID
p
    DijkstraCertifying f Word32 (TxCert era)
p -> Word8 -> Encoding
encodeWord8 Word8
2 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> f Word32 (TxCert era) -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR f Word32 (TxCert era)
p
    DijkstraRewarding f Word32 RewardAccount
p -> Word8 -> Encoding
encodeWord8 Word8
3 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> f Word32 RewardAccount -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR f Word32 RewardAccount
p
    DijkstraVoting f Word32 Voter
p -> Word8 -> Encoding
encodeWord8 Word8
4 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> f Word32 Voter -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR f Word32 Voter
p
    DijkstraProposing f Word32 (ProposalProcedure era)
p -> Word8 -> Encoding
encodeWord8 Word8
5 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> f Word32 (ProposalProcedure era) -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR f Word32 (ProposalProcedure era)
p
    DijkstraGuarding f Word32 ScriptHash
p -> Word8 -> Encoding
encodeWord8 Word8
6 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> f Word32 ScriptHash -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR f Word32 ScriptHash
p
  encodedGroupSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (DijkstraPlutusPurpose f era) -> Size
encodedGroupSizeExpr forall t. EncCBOR t => Proxy t -> Size
size_ Proxy (DijkstraPlutusPurpose f 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_ (forall t. Proxy t
forall {k} (t :: k). Proxy t
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_ (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @Word16)

instance
  ( forall a b. (ToJSON a, ToJSON b) => ToJSON (f a b)
  , ToJSON (TxCert era)
  , EraPParams era
  ) =>
  ToJSON (DijkstraPlutusPurpose f era)
  where
  toJSON :: DijkstraPlutusPurpose f era -> Value
toJSON = \case
    DijkstraSpending f Word32 TxIn
n -> Text -> f Word32 TxIn -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"DijkstraSpending" f Word32 TxIn
n
    DijkstraMinting f Word32 PolicyID
n -> Text -> f Word32 PolicyID -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"DijkstraMinting" f Word32 PolicyID
n
    DijkstraCertifying f Word32 (TxCert era)
n -> Text -> f Word32 (TxCert era) -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"DijkstraCertifying" f Word32 (TxCert era)
n
    DijkstraRewarding f Word32 RewardAccount
n -> Text -> f Word32 RewardAccount -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"DijkstraRewarding" f Word32 RewardAccount
n
    DijkstraVoting f Word32 Voter
n -> Text -> f Word32 Voter -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"DijkstraVoting" f Word32 Voter
n
    DijkstraProposing f Word32 (ProposalProcedure era)
n -> Text -> f Word32 (ProposalProcedure era) -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"DijkstraProposing" f Word32 (ProposalProcedure era)
n
    DijkstraGuarding f Word32 ScriptHash
n -> Text -> f Word32 ScriptHash -> Value
forall {v}. ToJSON v => Text -> v -> Value
kindObjectWithValue Text
"DijkstraGuarding" f Word32 ScriptHash
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]

deriving instance (EraTxCert era, EraPParams era) => Eq (DijkstraPlutusPurpose AsItem era)

deriving instance (EraTxCert era, EraPParams era) => Eq (DijkstraPlutusPurpose AsIx era)

deriving instance (EraTxCert era, EraPParams era) => Eq (DijkstraPlutusPurpose AsIxItem era)

instance (EraPParams era, NFData (TxCert era)) => NFData (DijkstraPlutusPurpose AsItem era)

instance (EraPParams era, NFData (TxCert era)) => NFData (DijkstraPlutusPurpose AsIx era)

instance (EraPParams era, NFData (TxCert era)) => NFData (DijkstraPlutusPurpose AsIxItem era)

instance (EraPParams era, NoThunks (TxCert era)) => NoThunks (DijkstraPlutusPurpose AsItem era)

instance (EraPParams era, NoThunks (TxCert era)) => NoThunks (DijkstraPlutusPurpose AsIx era)

instance (EraPParams era, NoThunks (TxCert era)) => NoThunks (DijkstraPlutusPurpose AsIxItem era)

deriving instance (EraPParams era, EraTxCert era) => Ord (DijkstraPlutusPurpose AsItem era)

deriving instance (EraPParams era, EraTxCert era) => Ord (DijkstraPlutusPurpose AsIx era)

deriving instance (EraPParams era, EraTxCert era) => Ord (DijkstraPlutusPurpose AsIxItem era)

deriving instance (EraPParams era, EraTxCert era) => Show (DijkstraPlutusPurpose AsItem era)

deriving instance (EraPParams era, EraTxCert era) => Show (DijkstraPlutusPurpose AsIx era)

deriving instance (EraPParams era, EraTxCert era) => Show (DijkstraPlutusPurpose AsIxItem era)

data DijkstraNativeScriptRaw era
  = DijkstraRequireSignature !(KeyHash 'Witness)
  | DijkstraRequireAllOf !(StrictSeq (DijkstraNativeScript era))
  | DijkstraRequireAnyOf !(StrictSeq (DijkstraNativeScript era))
  | DijkstraRequireMOf !Int !(StrictSeq (DijkstraNativeScript era))
  | DijkstraTimeStart !SlotNo
  | DijkstraTimeExpire !SlotNo
  | DijkstraRequireGuard (Credential 'Guard)
  deriving (DijkstraNativeScriptRaw era -> DijkstraNativeScriptRaw era -> Bool
(DijkstraNativeScriptRaw era
 -> DijkstraNativeScriptRaw era -> Bool)
-> (DijkstraNativeScriptRaw era
    -> DijkstraNativeScriptRaw era -> Bool)
-> Eq (DijkstraNativeScriptRaw era)
forall era.
DijkstraNativeScriptRaw era -> DijkstraNativeScriptRaw era -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall era.
DijkstraNativeScriptRaw era -> DijkstraNativeScriptRaw era -> Bool
== :: DijkstraNativeScriptRaw era -> DijkstraNativeScriptRaw era -> Bool
$c/= :: forall era.
DijkstraNativeScriptRaw era -> DijkstraNativeScriptRaw era -> Bool
/= :: DijkstraNativeScriptRaw era -> DijkstraNativeScriptRaw era -> Bool
Eq, (forall x.
 DijkstraNativeScriptRaw era -> Rep (DijkstraNativeScriptRaw era) x)
-> (forall x.
    Rep (DijkstraNativeScriptRaw era) x -> DijkstraNativeScriptRaw era)
-> Generic (DijkstraNativeScriptRaw era)
forall x.
Rep (DijkstraNativeScriptRaw era) x -> DijkstraNativeScriptRaw era
forall x.
DijkstraNativeScriptRaw era -> Rep (DijkstraNativeScriptRaw era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraNativeScriptRaw era) x -> DijkstraNativeScriptRaw era
forall era x.
DijkstraNativeScriptRaw era -> Rep (DijkstraNativeScriptRaw era) x
$cfrom :: forall era x.
DijkstraNativeScriptRaw era -> Rep (DijkstraNativeScriptRaw era) x
from :: forall x.
DijkstraNativeScriptRaw era -> Rep (DijkstraNativeScriptRaw era) x
$cto :: forall era x.
Rep (DijkstraNativeScriptRaw era) x -> DijkstraNativeScriptRaw era
to :: forall x.
Rep (DijkstraNativeScriptRaw era) x -> DijkstraNativeScriptRaw era
Generic, DijkstraNativeScriptRaw era -> ()
(DijkstraNativeScriptRaw era -> ())
-> NFData (DijkstraNativeScriptRaw era)
forall era. DijkstraNativeScriptRaw era -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall era. DijkstraNativeScriptRaw era -> ()
rnf :: DijkstraNativeScriptRaw era -> ()
NFData)

deriving instance Show (DijkstraNativeScriptRaw era)

deriving instance Era era => NoThunks (DijkstraNativeScriptRaw era)

instance Era era => EncCBOR (DijkstraNativeScriptRaw era) where
  encCBOR :: DijkstraNativeScriptRaw era -> Encoding
encCBOR =
    Encode 'Open (DijkstraNativeScriptRaw era) -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode 'Open (DijkstraNativeScriptRaw era) -> Encoding)
-> (DijkstraNativeScriptRaw era
    -> Encode 'Open (DijkstraNativeScriptRaw era))
-> DijkstraNativeScriptRaw era
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
      DijkstraRequireSignature KeyHash 'Witness
hash -> (KeyHash 'Witness -> DijkstraNativeScriptRaw era)
-> Word
-> Encode 'Open (KeyHash 'Witness -> DijkstraNativeScriptRaw era)
forall t. t -> Word -> Encode 'Open t
Sum KeyHash 'Witness -> DijkstraNativeScriptRaw era
forall era. KeyHash 'Witness -> DijkstraNativeScriptRaw era
DijkstraRequireSignature Word
0 Encode 'Open (KeyHash 'Witness -> DijkstraNativeScriptRaw era)
-> Encode ('Closed 'Dense) (KeyHash 'Witness)
-> Encode 'Open (DijkstraNativeScriptRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> KeyHash 'Witness -> Encode ('Closed 'Dense) (KeyHash 'Witness)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To KeyHash 'Witness
hash
      DijkstraRequireAllOf StrictSeq (DijkstraNativeScript era)
xs -> (StrictSeq (DijkstraNativeScript era)
 -> DijkstraNativeScriptRaw era)
-> Word
-> Encode
     'Open
     (StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era)
forall t. t -> Word -> Encode 'Open t
Sum StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
forall era.
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
DijkstraRequireAllOf Word
1 Encode
  'Open
  (StrictSeq (DijkstraNativeScript era)
   -> DijkstraNativeScriptRaw era)
-> Encode ('Closed 'Dense) (StrictSeq (DijkstraNativeScript era))
-> Encode 'Open (DijkstraNativeScriptRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> StrictSeq (DijkstraNativeScript era)
-> Encode ('Closed 'Dense) (StrictSeq (DijkstraNativeScript era))
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To StrictSeq (DijkstraNativeScript era)
xs
      DijkstraRequireAnyOf StrictSeq (DijkstraNativeScript era)
xs -> (StrictSeq (DijkstraNativeScript era)
 -> DijkstraNativeScriptRaw era)
-> Word
-> Encode
     'Open
     (StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era)
forall t. t -> Word -> Encode 'Open t
Sum StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
forall era.
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
DijkstraRequireAnyOf Word
2 Encode
  'Open
  (StrictSeq (DijkstraNativeScript era)
   -> DijkstraNativeScriptRaw era)
-> Encode ('Closed 'Dense) (StrictSeq (DijkstraNativeScript era))
-> Encode 'Open (DijkstraNativeScriptRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> StrictSeq (DijkstraNativeScript era)
-> Encode ('Closed 'Dense) (StrictSeq (DijkstraNativeScript era))
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To StrictSeq (DijkstraNativeScript era)
xs
      DijkstraRequireMOf Int
m StrictSeq (DijkstraNativeScript era)
xs -> (Int
 -> StrictSeq (DijkstraNativeScript era)
 -> DijkstraNativeScriptRaw era)
-> Word
-> Encode
     'Open
     (Int
      -> StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era)
forall t. t -> Word -> Encode 'Open t
Sum Int
-> StrictSeq (DijkstraNativeScript era)
-> DijkstraNativeScriptRaw era
forall era.
Int
-> StrictSeq (DijkstraNativeScript era)
-> DijkstraNativeScriptRaw era
DijkstraRequireMOf Word
3 Encode
  'Open
  (Int
   -> StrictSeq (DijkstraNativeScript era)
   -> DijkstraNativeScriptRaw era)
-> Encode ('Closed 'Dense) Int
-> Encode
     'Open
     (StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Int -> Encode ('Closed 'Dense) Int
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Int
m Encode
  'Open
  (StrictSeq (DijkstraNativeScript era)
   -> DijkstraNativeScriptRaw era)
-> Encode ('Closed 'Dense) (StrictSeq (DijkstraNativeScript era))
-> Encode 'Open (DijkstraNativeScriptRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> StrictSeq (DijkstraNativeScript era)
-> Encode ('Closed 'Dense) (StrictSeq (DijkstraNativeScript era))
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To StrictSeq (DijkstraNativeScript era)
xs
      DijkstraTimeStart SlotNo
m -> (SlotNo -> DijkstraNativeScriptRaw era)
-> Word -> Encode 'Open (SlotNo -> DijkstraNativeScriptRaw era)
forall t. t -> Word -> Encode 'Open t
Sum SlotNo -> DijkstraNativeScriptRaw era
forall era. SlotNo -> DijkstraNativeScriptRaw era
DijkstraTimeStart Word
4 Encode 'Open (SlotNo -> DijkstraNativeScriptRaw era)
-> Encode ('Closed 'Dense) SlotNo
-> Encode 'Open (DijkstraNativeScriptRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> SlotNo -> Encode ('Closed 'Dense) SlotNo
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To SlotNo
m
      DijkstraTimeExpire SlotNo
m -> (SlotNo -> DijkstraNativeScriptRaw era)
-> Word -> Encode 'Open (SlotNo -> DijkstraNativeScriptRaw era)
forall t. t -> Word -> Encode 'Open t
Sum SlotNo -> DijkstraNativeScriptRaw era
forall era. SlotNo -> DijkstraNativeScriptRaw era
DijkstraTimeExpire Word
5 Encode 'Open (SlotNo -> DijkstraNativeScriptRaw era)
-> Encode ('Closed 'Dense) SlotNo
-> Encode 'Open (DijkstraNativeScriptRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> SlotNo -> Encode ('Closed 'Dense) SlotNo
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To SlotNo
m
      DijkstraRequireGuard Credential 'Guard
cred -> (Credential 'Guard -> DijkstraNativeScriptRaw era)
-> Word
-> Encode 'Open (Credential 'Guard -> DijkstraNativeScriptRaw era)
forall t. t -> Word -> Encode 'Open t
Sum Credential 'Guard -> DijkstraNativeScriptRaw era
forall era. Credential 'Guard -> DijkstraNativeScriptRaw era
DijkstraRequireGuard Word
6 Encode 'Open (Credential 'Guard -> DijkstraNativeScriptRaw era)
-> Encode ('Closed 'Dense) (Credential 'Guard)
-> Encode 'Open (DijkstraNativeScriptRaw era)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Credential 'Guard -> Encode ('Closed 'Dense) (Credential 'Guard)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Credential 'Guard
cred

instance Era era => DecCBOR (Annotator (DijkstraNativeScriptRaw era)) where
  decCBOR :: forall s. Decoder s (Annotator (DijkstraNativeScriptRaw era))
decCBOR = Decode ('Closed 'Dense) (Annotator (DijkstraNativeScriptRaw era))
-> Decoder s (Annotator (DijkstraNativeScriptRaw era))
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Text
-> (Word -> Decode 'Open (Annotator (DijkstraNativeScriptRaw era)))
-> Decode
     ('Closed 'Dense) (Annotator (DijkstraNativeScriptRaw era))
forall t.
Text -> (Word -> Decode 'Open t) -> Decode ('Closed 'Dense) t
Summands Text
"DijkstraNativeScriptRaw" Word -> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
decRaw)
    where
      decRaw :: Word -> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
      decRaw :: Word -> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
decRaw Word
0 = Decode 'Open (DijkstraNativeScriptRaw era)
-> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
forall t1 (w :: Wrapped).
Typeable t1 =>
Decode w t1 -> Decode w (Annotator t1)
Ann ((KeyHash 'Witness -> DijkstraNativeScriptRaw era)
-> Decode 'Open (KeyHash 'Witness -> DijkstraNativeScriptRaw era)
forall t. t -> Decode 'Open t
SumD KeyHash 'Witness -> DijkstraNativeScriptRaw era
forall era. KeyHash 'Witness -> DijkstraNativeScriptRaw era
DijkstraRequireSignature Decode 'Open (KeyHash 'Witness -> DijkstraNativeScriptRaw era)
-> Decode ('Closed Any) (KeyHash 'Witness)
-> Decode 'Open (DijkstraNativeScriptRaw era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) (KeyHash 'Witness)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From)
      decRaw Word
1 = Decode
  'Open
  (StrictSeq (DijkstraNativeScript era)
   -> DijkstraNativeScriptRaw era)
-> Decode
     'Open
     (Annotator
        (StrictSeq (DijkstraNativeScript era)
         -> DijkstraNativeScriptRaw era))
forall t1 (w :: Wrapped).
Typeable t1 =>
Decode w t1 -> Decode w (Annotator t1)
Ann ((StrictSeq (DijkstraNativeScript era)
 -> DijkstraNativeScriptRaw era)
-> Decode
     'Open
     (StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era)
forall t. t -> Decode 'Open t
SumD StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
forall era.
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
DijkstraRequireAllOf) Decode
  'Open
  (Annotator
     (StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era))
-> Decode
     ('Closed 'Dense) (Annotator (StrictSeq (DijkstraNativeScript era)))
-> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
forall a t (w1 :: Wrapped) (d :: Density).
(Typeable a, Typeable t) =>
Decode w1 (Annotator (a -> t))
-> Decode ('Closed d) (Annotator a) -> Decode w1 (Annotator t)
<*! (forall s.
 Decoder s (Annotator (StrictSeq (DijkstraNativeScript era))))
-> Decode
     ('Closed 'Dense) (Annotator (StrictSeq (DijkstraNativeScript era)))
forall t. (forall s. Decoder s t) -> Decode ('Closed 'Dense) t
D (StrictSeq (Annotator (DijkstraNativeScript era))
-> Annotator (StrictSeq (DijkstraNativeScript era))
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a.
Monad m =>
StrictSeq (m a) -> m (StrictSeq a)
sequence (StrictSeq (Annotator (DijkstraNativeScript era))
 -> Annotator (StrictSeq (DijkstraNativeScript era)))
-> Decoder s (StrictSeq (Annotator (DijkstraNativeScript era)))
-> Decoder s (Annotator (StrictSeq (DijkstraNativeScript era)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (StrictSeq (Annotator (DijkstraNativeScript era)))
forall s.
Decoder s (StrictSeq (Annotator (DijkstraNativeScript era)))
forall a s. DecCBOR a => Decoder s a
decCBOR)
      decRaw Word
2 = Decode
  'Open
  (StrictSeq (DijkstraNativeScript era)
   -> DijkstraNativeScriptRaw era)
-> Decode
     'Open
     (Annotator
        (StrictSeq (DijkstraNativeScript era)
         -> DijkstraNativeScriptRaw era))
forall t1 (w :: Wrapped).
Typeable t1 =>
Decode w t1 -> Decode w (Annotator t1)
Ann ((StrictSeq (DijkstraNativeScript era)
 -> DijkstraNativeScriptRaw era)
-> Decode
     'Open
     (StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era)
forall t. t -> Decode 'Open t
SumD StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
forall era.
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
DijkstraRequireAnyOf) Decode
  'Open
  (Annotator
     (StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era))
-> Decode
     ('Closed 'Dense) (Annotator (StrictSeq (DijkstraNativeScript era)))
-> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
forall a t (w1 :: Wrapped) (d :: Density).
(Typeable a, Typeable t) =>
Decode w1 (Annotator (a -> t))
-> Decode ('Closed d) (Annotator a) -> Decode w1 (Annotator t)
<*! (forall s.
 Decoder s (Annotator (StrictSeq (DijkstraNativeScript era))))
-> Decode
     ('Closed 'Dense) (Annotator (StrictSeq (DijkstraNativeScript era)))
forall t. (forall s. Decoder s t) -> Decode ('Closed 'Dense) t
D (StrictSeq (Annotator (DijkstraNativeScript era))
-> Annotator (StrictSeq (DijkstraNativeScript era))
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a.
Monad m =>
StrictSeq (m a) -> m (StrictSeq a)
sequence (StrictSeq (Annotator (DijkstraNativeScript era))
 -> Annotator (StrictSeq (DijkstraNativeScript era)))
-> Decoder s (StrictSeq (Annotator (DijkstraNativeScript era)))
-> Decoder s (Annotator (StrictSeq (DijkstraNativeScript era)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (StrictSeq (Annotator (DijkstraNativeScript era)))
forall s.
Decoder s (StrictSeq (Annotator (DijkstraNativeScript era)))
forall a s. DecCBOR a => Decoder s a
decCBOR)
      decRaw Word
3 = Decode
  'Open
  (Int
   -> StrictSeq (DijkstraNativeScript era)
   -> DijkstraNativeScriptRaw era)
-> Decode
     'Open
     (Annotator
        (Int
         -> StrictSeq (DijkstraNativeScript era)
         -> DijkstraNativeScriptRaw era))
forall t1 (w :: Wrapped).
Typeable t1 =>
Decode w t1 -> Decode w (Annotator t1)
Ann ((Int
 -> StrictSeq (DijkstraNativeScript era)
 -> DijkstraNativeScriptRaw era)
-> Decode
     'Open
     (Int
      -> StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era)
forall t. t -> Decode 'Open t
SumD Int
-> StrictSeq (DijkstraNativeScript era)
-> DijkstraNativeScriptRaw era
forall era.
Int
-> StrictSeq (DijkstraNativeScript era)
-> DijkstraNativeScriptRaw era
DijkstraRequireMOf) Decode
  'Open
  (Annotator
     (Int
      -> StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era))
-> Decode ('Closed Any) (Annotator Int)
-> Decode
     'Open
     (Annotator
        (StrictSeq (DijkstraNativeScript era)
         -> DijkstraNativeScriptRaw era))
forall a t (w1 :: Wrapped) (d :: Density).
(Typeable a, Typeable t) =>
Decode w1 (Annotator (a -> t))
-> Decode ('Closed d) (Annotator a) -> Decode w1 (Annotator t)
<*! Decode ('Closed Any) Int -> Decode ('Closed Any) (Annotator Int)
forall t1 (w :: Wrapped).
Typeable t1 =>
Decode w t1 -> Decode w (Annotator t1)
Ann Decode ('Closed Any) Int
forall t (w :: Wrapped). DecCBOR t => Decode w t
From Decode
  'Open
  (Annotator
     (StrictSeq (DijkstraNativeScript era)
      -> DijkstraNativeScriptRaw era))
-> Decode
     ('Closed 'Dense) (Annotator (StrictSeq (DijkstraNativeScript era)))
-> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
forall a t (w1 :: Wrapped) (d :: Density).
(Typeable a, Typeable t) =>
Decode w1 (Annotator (a -> t))
-> Decode ('Closed d) (Annotator a) -> Decode w1 (Annotator t)
<*! (forall s.
 Decoder s (Annotator (StrictSeq (DijkstraNativeScript era))))
-> Decode
     ('Closed 'Dense) (Annotator (StrictSeq (DijkstraNativeScript era)))
forall t. (forall s. Decoder s t) -> Decode ('Closed 'Dense) t
D (StrictSeq (Annotator (DijkstraNativeScript era))
-> Annotator (StrictSeq (DijkstraNativeScript era))
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a.
Monad m =>
StrictSeq (m a) -> m (StrictSeq a)
sequence (StrictSeq (Annotator (DijkstraNativeScript era))
 -> Annotator (StrictSeq (DijkstraNativeScript era)))
-> Decoder s (StrictSeq (Annotator (DijkstraNativeScript era)))
-> Decoder s (Annotator (StrictSeq (DijkstraNativeScript era)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (StrictSeq (Annotator (DijkstraNativeScript era)))
forall s.
Decoder s (StrictSeq (Annotator (DijkstraNativeScript era)))
forall a s. DecCBOR a => Decoder s a
decCBOR)
      decRaw Word
4 = Decode 'Open (DijkstraNativeScriptRaw era)
-> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
forall t1 (w :: Wrapped).
Typeable t1 =>
Decode w t1 -> Decode w (Annotator t1)
Ann ((SlotNo -> DijkstraNativeScriptRaw era)
-> Decode 'Open (SlotNo -> DijkstraNativeScriptRaw era)
forall t. t -> Decode 'Open t
SumD SlotNo -> DijkstraNativeScriptRaw era
forall era. SlotNo -> DijkstraNativeScriptRaw era
DijkstraTimeStart Decode 'Open (SlotNo -> DijkstraNativeScriptRaw era)
-> Decode ('Closed Any) SlotNo
-> Decode 'Open (DijkstraNativeScriptRaw era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) SlotNo
forall t (w :: Wrapped). DecCBOR t => Decode w t
From)
      decRaw Word
5 = Decode 'Open (DijkstraNativeScriptRaw era)
-> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
forall t1 (w :: Wrapped).
Typeable t1 =>
Decode w t1 -> Decode w (Annotator t1)
Ann ((SlotNo -> DijkstraNativeScriptRaw era)
-> Decode 'Open (SlotNo -> DijkstraNativeScriptRaw era)
forall t. t -> Decode 'Open t
SumD SlotNo -> DijkstraNativeScriptRaw era
forall era. SlotNo -> DijkstraNativeScriptRaw era
DijkstraTimeExpire Decode 'Open (SlotNo -> DijkstraNativeScriptRaw era)
-> Decode ('Closed Any) SlotNo
-> Decode 'Open (DijkstraNativeScriptRaw era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) SlotNo
forall t (w :: Wrapped). DecCBOR t => Decode w t
From)
      decRaw Word
6 = Decode 'Open (DijkstraNativeScriptRaw era)
-> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
forall t1 (w :: Wrapped).
Typeable t1 =>
Decode w t1 -> Decode w (Annotator t1)
Ann ((Credential 'Guard -> DijkstraNativeScriptRaw era)
-> Decode 'Open (Credential 'Guard -> DijkstraNativeScriptRaw era)
forall t. t -> Decode 'Open t
SumD Credential 'Guard -> DijkstraNativeScriptRaw era
forall era. Credential 'Guard -> DijkstraNativeScriptRaw era
DijkstraRequireGuard Decode 'Open (Credential 'Guard -> DijkstraNativeScriptRaw era)
-> Decode ('Closed Any) (Credential 'Guard)
-> Decode 'Open (DijkstraNativeScriptRaw era)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) (Credential 'Guard)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From)
      decRaw Word
n = Word -> Decode 'Open (Annotator (DijkstraNativeScriptRaw era))
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
n

newtype DijkstraNativeScript era = MkDijkstraNativeScript (MemoBytes (DijkstraNativeScriptRaw era))
  deriving (DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
(DijkstraNativeScript era -> DijkstraNativeScript era -> Bool)
-> (DijkstraNativeScript era -> DijkstraNativeScript era -> Bool)
-> Eq (DijkstraNativeScript era)
forall era.
DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall era.
DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
== :: DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
$c/= :: forall era.
DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
/= :: DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
Eq, (forall x.
 DijkstraNativeScript era -> Rep (DijkstraNativeScript era) x)
-> (forall x.
    Rep (DijkstraNativeScript era) x -> DijkstraNativeScript era)
-> Generic (DijkstraNativeScript era)
forall x.
Rep (DijkstraNativeScript era) x -> DijkstraNativeScript era
forall x.
DijkstraNativeScript era -> Rep (DijkstraNativeScript era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraNativeScript era) x -> DijkstraNativeScript era
forall era x.
DijkstraNativeScript era -> Rep (DijkstraNativeScript era) x
$cfrom :: forall era x.
DijkstraNativeScript era -> Rep (DijkstraNativeScript era) x
from :: forall x.
DijkstraNativeScript era -> Rep (DijkstraNativeScript era) x
$cto :: forall era x.
Rep (DijkstraNativeScript era) x -> DijkstraNativeScript era
to :: forall x.
Rep (DijkstraNativeScript era) x -> DijkstraNativeScript era
Generic)
  deriving newtype (Typeable (DijkstraNativeScript era)
Typeable (DijkstraNativeScript era) =>
(DijkstraNativeScript era -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy (DijkstraNativeScript era) -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy [DijkstraNativeScript era] -> Size)
-> ToCBOR (DijkstraNativeScript era)
DijkstraNativeScript era -> Encoding
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [DijkstraNativeScript era] -> Size
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (DijkstraNativeScript era) -> Size
forall era. Typeable era => Typeable (DijkstraNativeScript era)
forall era. Typeable era => DijkstraNativeScript era -> Encoding
forall a.
Typeable a =>
(a -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy a -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy [a] -> Size)
-> ToCBOR a
forall era.
Typeable era =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [DijkstraNativeScript era] -> Size
forall era.
Typeable era =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (DijkstraNativeScript era) -> Size
$ctoCBOR :: forall era. Typeable era => DijkstraNativeScript era -> Encoding
toCBOR :: DijkstraNativeScript era -> Encoding
$cencodedSizeExpr :: forall era.
Typeable era =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (DijkstraNativeScript era) -> Size
encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (DijkstraNativeScript era) -> Size
$cencodedListSizeExpr :: forall era.
Typeable era =>
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [DijkstraNativeScript era] -> Size
encodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [DijkstraNativeScript era] -> Size
ToCBOR, DijkstraNativeScript era -> ()
(DijkstraNativeScript era -> ())
-> NFData (DijkstraNativeScript era)
forall era. DijkstraNativeScript era -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall era. DijkstraNativeScript era -> ()
rnf :: DijkstraNativeScript era -> ()
NFData, DijkstraNativeScript era -> Int
DijkstraNativeScript era -> ByteString
(DijkstraNativeScript era -> ByteString)
-> (DijkstraNativeScript era -> Int)
-> (forall i. Proxy i -> DijkstraNativeScript era -> SafeHash i)
-> SafeToHash (DijkstraNativeScript era)
forall i. Proxy i -> DijkstraNativeScript era -> SafeHash i
forall era. DijkstraNativeScript era -> Int
forall era. DijkstraNativeScript era -> ByteString
forall t.
(t -> ByteString)
-> (t -> Int)
-> (forall i. Proxy i -> t -> SafeHash i)
-> SafeToHash t
forall era i. Proxy i -> DijkstraNativeScript era -> SafeHash i
$coriginalBytes :: forall era. DijkstraNativeScript era -> ByteString
originalBytes :: DijkstraNativeScript era -> ByteString
$coriginalBytesSize :: forall era. DijkstraNativeScript era -> Int
originalBytesSize :: DijkstraNativeScript era -> Int
$cmakeHashWithExplicitProxys :: forall era i. Proxy i -> DijkstraNativeScript era -> SafeHash i
makeHashWithExplicitProxys :: forall i. Proxy i -> DijkstraNativeScript era -> SafeHash i
SafeToHash)

deriving instance Show (DijkstraNativeScript era)

instance Era era => NoThunks (DijkstraNativeScript era)

instance Era era => EncCBOR (DijkstraNativeScript era)

instance Era era => DecCBOR (Annotator (DijkstraNativeScript era)) where
  decCBOR :: forall s. Decoder s (Annotator (DijkstraNativeScript era))
decCBOR = (MemoBytes (DijkstraNativeScriptRaw era)
 -> DijkstraNativeScript era)
-> Annotator (MemoBytes (DijkstraNativeScriptRaw era))
-> Annotator (DijkstraNativeScript era)
forall a b. (a -> b) -> Annotator a -> Annotator b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap MemoBytes (DijkstraNativeScriptRaw era) -> DijkstraNativeScript era
forall era.
MemoBytes (DijkstraNativeScriptRaw era) -> DijkstraNativeScript era
MkDijkstraNativeScript (Annotator (MemoBytes (DijkstraNativeScriptRaw era))
 -> Annotator (DijkstraNativeScript era))
-> Decoder s (Annotator (MemoBytes (DijkstraNativeScriptRaw era)))
-> Decoder s (Annotator (DijkstraNativeScript era))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (Annotator (MemoBytes (DijkstraNativeScriptRaw era)))
forall s.
Decoder s (Annotator (MemoBytes (DijkstraNativeScriptRaw era)))
forall a s. DecCBOR a => Decoder s a
decCBOR

instance Memoized (DijkstraNativeScript era) where
  type RawType (DijkstraNativeScript era) = DijkstraNativeScriptRaw era

instance EqRaw (DijkstraNativeScript era) where
  eqRaw :: DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
eqRaw = DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
forall {era} {era}.
DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
eqRawDijkstraNativeScript
    where
      eqRawDijkstraNativeScript :: DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
eqRawDijkstraNativeScript DijkstraNativeScript era
dns1 DijkstraNativeScript era
dns2 = DijkstraNativeScriptRaw era -> DijkstraNativeScriptRaw era -> Bool
go (DijkstraNativeScript era -> RawType (DijkstraNativeScript era)
forall t. Memoized t => t -> RawType t
getMemoRawType DijkstraNativeScript era
dns1) (DijkstraNativeScript era -> RawType (DijkstraNativeScript era)
forall t. Memoized t => t -> RawType t
getMemoRawType DijkstraNativeScript era
dns2)
      seqEq :: StrictSeq (DijkstraNativeScript era)
-> StrictSeq (DijkstraNativeScript era) -> Bool
seqEq StrictSeq (DijkstraNativeScript era)
Empty StrictSeq (DijkstraNativeScript era)
Empty = Bool
True
      seqEq (DijkstraNativeScript era
x :<| StrictSeq (DijkstraNativeScript era)
xs) (DijkstraNativeScript era
y :<| StrictSeq (DijkstraNativeScript era)
ys) = DijkstraNativeScript era -> DijkstraNativeScript era -> Bool
eqRawDijkstraNativeScript DijkstraNativeScript era
x DijkstraNativeScript era
y Bool -> Bool -> Bool
&& StrictSeq (DijkstraNativeScript era)
-> StrictSeq (DijkstraNativeScript era) -> Bool
seqEq StrictSeq (DijkstraNativeScript era)
xs StrictSeq (DijkstraNativeScript era)
ys
      seqEq StrictSeq (DijkstraNativeScript era)
_ StrictSeq (DijkstraNativeScript era)
_ = Bool
False
      go :: DijkstraNativeScriptRaw era -> DijkstraNativeScriptRaw era -> Bool
go (DijkstraRequireSignature KeyHash 'Witness
kh1) (DijkstraRequireSignature KeyHash 'Witness
kh2) = KeyHash 'Witness
kh1 KeyHash 'Witness -> KeyHash 'Witness -> Bool
forall a. Eq a => a -> a -> Bool
== KeyHash 'Witness
kh2
      go (DijkstraRequireAllOf StrictSeq (DijkstraNativeScript era)
ts1) (DijkstraRequireAllOf StrictSeq (DijkstraNativeScript era)
ts2) = StrictSeq (DijkstraNativeScript era)
-> StrictSeq (DijkstraNativeScript era) -> Bool
seqEq StrictSeq (DijkstraNativeScript era)
ts1 StrictSeq (DijkstraNativeScript era)
ts2
      go (DijkstraRequireAnyOf StrictSeq (DijkstraNativeScript era)
ts1) (DijkstraRequireAnyOf StrictSeq (DijkstraNativeScript era)
ts2) = StrictSeq (DijkstraNativeScript era)
-> StrictSeq (DijkstraNativeScript era) -> Bool
seqEq StrictSeq (DijkstraNativeScript era)
ts1 StrictSeq (DijkstraNativeScript era)
ts2
      go (DijkstraRequireMOf Int
n1 StrictSeq (DijkstraNativeScript era)
ts1) (DijkstraRequireMOf Int
n2 StrictSeq (DijkstraNativeScript era)
ts2) = Int
n1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
n2 Bool -> Bool -> Bool
&& StrictSeq (DijkstraNativeScript era)
-> StrictSeq (DijkstraNativeScript era) -> Bool
seqEq StrictSeq (DijkstraNativeScript era)
ts1 StrictSeq (DijkstraNativeScript era)
ts2
      go (DijkstraTimeStart SlotNo
sn1) (DijkstraTimeStart SlotNo
sn2) = SlotNo
sn1 SlotNo -> SlotNo -> Bool
forall a. Eq a => a -> a -> Bool
== SlotNo
sn2
      go (DijkstraTimeExpire SlotNo
sn1) (DijkstraTimeExpire SlotNo
sn2) = SlotNo
sn1 SlotNo -> SlotNo -> Bool
forall a. Eq a => a -> a -> Bool
== SlotNo
sn2
      go (DijkstraRequireGuard Credential 'Guard
cred1) (DijkstraRequireGuard Credential 'Guard
cred2) = Credential 'Guard
cred1 Credential 'Guard -> Credential 'Guard -> Bool
forall a. Eq a => a -> a -> Bool
== Credential 'Guard
cred2
      go DijkstraNativeScriptRaw era
_ DijkstraNativeScriptRaw era
_ = Bool
False

instance Era era => MemPack (DijkstraNativeScript era) where
  packedByteCount :: DijkstraNativeScript era -> Int
packedByteCount (MkDijkstraNativeScript MemoBytes (DijkstraNativeScriptRaw era)
mb) = MemoBytes (DijkstraNativeScriptRaw era) -> Int
forall t. MemoBytes t -> Int
byteCountMemoBytes MemoBytes (DijkstraNativeScriptRaw era)
mb
  packM :: forall s. DijkstraNativeScript era -> Pack s ()
packM (MkDijkstraNativeScript MemoBytes (DijkstraNativeScriptRaw era)
mb) = MemoBytes (DijkstraNativeScriptRaw era) -> Pack s ()
forall t s. MemoBytes t -> Pack s ()
packMemoBytesM MemoBytes (DijkstraNativeScriptRaw era)
mb
  unpackM :: forall b s. Buffer b => Unpack s b (DijkstraNativeScript era)
unpackM = MemoBytes (DijkstraNativeScriptRaw era) -> DijkstraNativeScript era
forall era.
MemoBytes (DijkstraNativeScriptRaw era) -> DijkstraNativeScript era
MkDijkstraNativeScript (MemoBytes (DijkstraNativeScriptRaw era)
 -> DijkstraNativeScript era)
-> Unpack s b (MemoBytes (DijkstraNativeScriptRaw era))
-> Unpack s b (DijkstraNativeScript era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Version -> Unpack s b (MemoBytes (DijkstraNativeScriptRaw era))
forall t b s.
(DecCBOR (Annotator t), Typeable t, Buffer b) =>
Version -> Unpack s b (MemoBytes t)
unpackMemoBytesM (forall era. Era era => Version
eraProtVerLow @era)

instance EraScript DijkstraEra where
  type Script DijkstraEra = AlonzoScript DijkstraEra
  type NativeScript DijkstraEra = DijkstraNativeScript DijkstraEra

  upgradeScript :: EraScript (PreviousEra DijkstraEra) =>
Script (PreviousEra DijkstraEra) -> Script DijkstraEra
upgradeScript = \case
    NativeScript NativeScript ConwayEra
ts -> NativeScript DijkstraEra -> AlonzoScript DijkstraEra
forall era. NativeScript era -> AlonzoScript era
NativeScript (NativeScript DijkstraEra -> AlonzoScript DijkstraEra)
-> NativeScript DijkstraEra -> AlonzoScript DijkstraEra
forall a b. (a -> b) -> a -> b
$ NativeScript ConwayEra -> NativeScript DijkstraEra
upgradeTimelock NativeScript ConwayEra
ts
    PlutusScript (ConwayPlutusV1 Plutus 'PlutusV1
s) -> PlutusScript DijkstraEra -> AlonzoScript DijkstraEra
forall era. PlutusScript era -> AlonzoScript era
PlutusScript (PlutusScript DijkstraEra -> AlonzoScript DijkstraEra)
-> PlutusScript DijkstraEra -> AlonzoScript DijkstraEra
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV1 -> PlutusScript DijkstraEra
DijkstraPlutusV1 Plutus 'PlutusV1
s
    PlutusScript (ConwayPlutusV2 Plutus 'PlutusV2
s) -> PlutusScript DijkstraEra -> AlonzoScript DijkstraEra
forall era. PlutusScript era -> AlonzoScript era
PlutusScript (PlutusScript DijkstraEra -> AlonzoScript DijkstraEra)
-> PlutusScript DijkstraEra -> AlonzoScript DijkstraEra
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV2 -> PlutusScript DijkstraEra
DijkstraPlutusV2 Plutus 'PlutusV2
s
    PlutusScript (ConwayPlutusV3 Plutus 'PlutusV3
s) -> PlutusScript DijkstraEra -> AlonzoScript DijkstraEra
forall era. PlutusScript era -> AlonzoScript era
PlutusScript (PlutusScript DijkstraEra -> AlonzoScript DijkstraEra)
-> PlutusScript DijkstraEra -> AlonzoScript DijkstraEra
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV3 -> PlutusScript DijkstraEra
DijkstraPlutusV3 Plutus 'PlutusV3
s

  scriptPrefixTag :: Script DijkstraEra -> ByteString
scriptPrefixTag = Script DijkstraEra -> ByteString
forall era.
(AlonzoEraScript era, AlonzoScript era ~ Script era) =>
Script era -> ByteString
alonzoScriptPrefixTag

  getNativeScript :: Script DijkstraEra -> Maybe (NativeScript DijkstraEra)
getNativeScript (NativeScript NativeScript DijkstraEra
ts) = DijkstraNativeScript DijkstraEra
-> Maybe (DijkstraNativeScript DijkstraEra)
forall a. a -> Maybe a
Just NativeScript DijkstraEra
DijkstraNativeScript DijkstraEra
ts
  getNativeScript Script DijkstraEra
_ = Maybe (NativeScript DijkstraEra)
Maybe (DijkstraNativeScript DijkstraEra)
forall a. Maybe a
Nothing

  fromNativeScript :: NativeScript DijkstraEra -> Script DijkstraEra
fromNativeScript = NativeScript DijkstraEra -> Script DijkstraEra
NativeScript DijkstraEra -> AlonzoScript DijkstraEra
forall era. NativeScript era -> AlonzoScript era
NativeScript

upgradeTimelock :: NativeScript ConwayEra -> NativeScript DijkstraEra
upgradeTimelock :: NativeScript ConwayEra -> NativeScript DijkstraEra
upgradeTimelock = \case
  RequireSignature KeyHash 'Witness
keyHash -> KeyHash 'Witness -> NativeScript DijkstraEra
forall era.
ShelleyEraScript era =>
KeyHash 'Witness -> NativeScript era
RequireSignature KeyHash 'Witness
keyHash
  RequireAllOf StrictSeq (NativeScript ConwayEra)
sigs -> StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
forall era.
ShelleyEraScript era =>
StrictSeq (NativeScript era) -> NativeScript era
RequireAllOf (StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra)
-> StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
forall a b. (a -> b) -> a -> b
$ Timelock ConwayEra -> DijkstraNativeScript DijkstraEra
NativeScript ConwayEra -> NativeScript DijkstraEra
upgradeTimelock (Timelock ConwayEra -> DijkstraNativeScript DijkstraEra)
-> StrictSeq (Timelock ConwayEra)
-> StrictSeq (DijkstraNativeScript DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StrictSeq (Timelock ConwayEra)
StrictSeq (NativeScript ConwayEra)
sigs
  RequireAnyOf StrictSeq (NativeScript ConwayEra)
sigs -> StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
forall era.
ShelleyEraScript era =>
StrictSeq (NativeScript era) -> NativeScript era
RequireAnyOf (StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra)
-> StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
forall a b. (a -> b) -> a -> b
$ Timelock ConwayEra -> DijkstraNativeScript DijkstraEra
NativeScript ConwayEra -> NativeScript DijkstraEra
upgradeTimelock (Timelock ConwayEra -> DijkstraNativeScript DijkstraEra)
-> StrictSeq (Timelock ConwayEra)
-> StrictSeq (DijkstraNativeScript DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StrictSeq (Timelock ConwayEra)
StrictSeq (NativeScript ConwayEra)
sigs
  RequireMOf Int
n StrictSeq (NativeScript ConwayEra)
sigs -> Int
-> StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
forall era.
ShelleyEraScript era =>
Int -> StrictSeq (NativeScript era) -> NativeScript era
RequireMOf Int
n (StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra)
-> StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
forall a b. (a -> b) -> a -> b
$ Timelock ConwayEra -> DijkstraNativeScript DijkstraEra
NativeScript ConwayEra -> NativeScript DijkstraEra
upgradeTimelock (Timelock ConwayEra -> DijkstraNativeScript DijkstraEra)
-> StrictSeq (Timelock ConwayEra)
-> StrictSeq (DijkstraNativeScript DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StrictSeq (Timelock ConwayEra)
StrictSeq (NativeScript ConwayEra)
sigs
  RequireTimeStart SlotNo
mslot -> SlotNo -> NativeScript DijkstraEra
forall era. AllegraEraScript era => SlotNo -> NativeScript era
RequireTimeStart SlotNo
mslot
  RequireTimeExpire SlotNo
mslot -> SlotNo -> NativeScript DijkstraEra
forall era. AllegraEraScript era => SlotNo -> NativeScript era
RequireTimeExpire SlotNo
mslot
  NativeScript ConwayEra
_ -> String -> DijkstraNativeScript DijkstraEra
forall a. HasCallStack => String -> a
error String
"Impossible: All NativeScripts should have been accounted for"

instance MemPack (PlutusScript DijkstraEra) where
  packedByteCount :: PlutusScript DijkstraEra -> Int
packedByteCount = \case
    DijkstraPlutusV1 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
    DijkstraPlutusV2 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
    DijkstraPlutusV3 Plutus 'PlutusV3
script -> Int
packedTagByteCount Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Plutus 'PlutusV3 -> Int
forall a. MemPack a => a -> Int
packedByteCount Plutus 'PlutusV3
script
    DijkstraPlutusV4 Plutus 'PlutusV4
script -> Int
packedTagByteCount Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Plutus 'PlutusV4 -> Int
forall a. MemPack a => a -> Int
packedByteCount Plutus 'PlutusV4
script
  packM :: forall s. PlutusScript DijkstraEra -> Pack s ()
packM = \case
    DijkstraPlutusV1 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
    DijkstraPlutusV2 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
    DijkstraPlutusV3 Plutus 'PlutusV3
script -> Tag -> Pack s ()
forall s. Tag -> Pack s ()
packTagM Tag
2 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 'PlutusV3 -> Pack s ()
forall s. Plutus 'PlutusV3 -> Pack s ()
forall a s. MemPack a => a -> Pack s ()
packM Plutus 'PlutusV3
script
    DijkstraPlutusV4 Plutus 'PlutusV4
script -> Tag -> Pack s ()
forall s. Tag -> Pack s ()
packTagM Tag
3 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 'PlutusV4 -> Pack s ()
forall s. Plutus 'PlutusV4 -> Pack s ()
forall a s. MemPack a => a -> Pack s ()
packM Plutus 'PlutusV4
script
  {-# INLINE packM #-}
  unpackM :: forall b s. Buffer b => Unpack s b (PlutusScript DijkstraEra)
unpackM =
    Unpack s b Tag
forall b s. Buffer b => Unpack s b Tag
unpackTagM Unpack s b Tag
-> (Tag -> Unpack s b (PlutusScript DijkstraEra))
-> Unpack s b (PlutusScript DijkstraEra)
forall a b. Unpack s b a -> (a -> Unpack s b b) -> Unpack s b b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
      Tag
0 -> Plutus 'PlutusV1 -> PlutusScript DijkstraEra
DijkstraPlutusV1 (Plutus 'PlutusV1 -> PlutusScript DijkstraEra)
-> Unpack s b (Plutus 'PlutusV1)
-> Unpack s b (PlutusScript DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Unpack s b (Plutus 'PlutusV1)
forall a b s. (MemPack a, Buffer b) => Unpack s b a
forall b s. Buffer b => Unpack s b (Plutus 'PlutusV1)
unpackM
      Tag
1 -> Plutus 'PlutusV2 -> PlutusScript DijkstraEra
DijkstraPlutusV2 (Plutus 'PlutusV2 -> PlutusScript DijkstraEra)
-> Unpack s b (Plutus 'PlutusV2)
-> Unpack s b (PlutusScript DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Unpack s b (Plutus 'PlutusV2)
forall a b s. (MemPack a, Buffer b) => Unpack s b a
forall b s. Buffer b => Unpack s b (Plutus 'PlutusV2)
unpackM
      Tag
2 -> Plutus 'PlutusV3 -> PlutusScript DijkstraEra
DijkstraPlutusV3 (Plutus 'PlutusV3 -> PlutusScript DijkstraEra)
-> Unpack s b (Plutus 'PlutusV3)
-> Unpack s b (PlutusScript DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Unpack s b (Plutus 'PlutusV3)
forall a b s. (MemPack a, Buffer b) => Unpack s b a
forall b s. Buffer b => Unpack s b (Plutus 'PlutusV3)
unpackM
      Tag
3 -> Plutus 'PlutusV4 -> PlutusScript DijkstraEra
DijkstraPlutusV4 (Plutus 'PlutusV4 -> PlutusScript DijkstraEra)
-> Unpack s b (Plutus 'PlutusV4)
-> Unpack s b (PlutusScript DijkstraEra)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Unpack s b (Plutus 'PlutusV4)
forall a b s. (MemPack a, Buffer b) => Unpack s b a
forall b s. Buffer b => Unpack s b (Plutus 'PlutusV4)
unpackM
      Tag
n -> forall a (m :: * -> *) b. (MemPack a, MonadFail m) => Tag -> m b
unknownTagM @(PlutusScript DijkstraEra) Tag
n
  {-# INLINE unpackM #-}

instance NFData (PlutusScript DijkstraEra) where
  rnf :: PlutusScript DijkstraEra -> ()
rnf = PlutusScript DijkstraEra -> ()
forall a. a -> ()
rwhnf

instance NoThunks (PlutusScript DijkstraEra)

instance SafeToHash (PlutusScript DijkstraEra) where
  originalBytes :: PlutusScript DijkstraEra -> ByteString
originalBytes PlutusScript DijkstraEra
ps = PlutusScript DijkstraEra
-> (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 DijkstraEra
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript PlutusScript DijkstraEra
ps Plutus l -> ByteString
forall t. SafeToHash t => t -> ByteString
forall (l :: Language). PlutusLanguage l => Plutus l -> ByteString
originalBytes

instance AlonzoEraScript DijkstraEra where
  data PlutusScript DijkstraEra
    = DijkstraPlutusV1 !(Plutus 'PlutusV1)
    | DijkstraPlutusV2 !(Plutus 'PlutusV2)
    | DijkstraPlutusV3 !(Plutus 'PlutusV3)
    | DijkstraPlutusV4 !(Plutus 'PlutusV4)
    deriving (PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
(PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool)
-> (PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool)
-> Eq (PlutusScript DijkstraEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
== :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
$c/= :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
/= :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
Eq, Eq (PlutusScript DijkstraEra)
Eq (PlutusScript DijkstraEra) =>
(PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Ordering)
-> (PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool)
-> (PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool)
-> (PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool)
-> (PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool)
-> (PlutusScript DijkstraEra
    -> PlutusScript DijkstraEra -> PlutusScript DijkstraEra)
-> (PlutusScript DijkstraEra
    -> PlutusScript DijkstraEra -> PlutusScript DijkstraEra)
-> Ord (PlutusScript DijkstraEra)
PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Ordering
PlutusScript DijkstraEra
-> PlutusScript DijkstraEra -> PlutusScript DijkstraEra
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 DijkstraEra -> PlutusScript DijkstraEra -> Ordering
compare :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Ordering
$c< :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
< :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
$c<= :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
<= :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
$c> :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
> :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
$c>= :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
>= :: PlutusScript DijkstraEra -> PlutusScript DijkstraEra -> Bool
$cmax :: PlutusScript DijkstraEra
-> PlutusScript DijkstraEra -> PlutusScript DijkstraEra
max :: PlutusScript DijkstraEra
-> PlutusScript DijkstraEra -> PlutusScript DijkstraEra
$cmin :: PlutusScript DijkstraEra
-> PlutusScript DijkstraEra -> PlutusScript DijkstraEra
min :: PlutusScript DijkstraEra
-> PlutusScript DijkstraEra -> PlutusScript DijkstraEra
Ord, Int -> PlutusScript DijkstraEra -> String -> String
[PlutusScript DijkstraEra] -> String -> String
PlutusScript DijkstraEra -> String
(Int -> PlutusScript DijkstraEra -> String -> String)
-> (PlutusScript DijkstraEra -> String)
-> ([PlutusScript DijkstraEra] -> String -> String)
-> Show (PlutusScript DijkstraEra)
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> PlutusScript DijkstraEra -> String -> String
showsPrec :: Int -> PlutusScript DijkstraEra -> String -> String
$cshow :: PlutusScript DijkstraEra -> String
show :: PlutusScript DijkstraEra -> String
$cshowList :: [PlutusScript DijkstraEra] -> String -> String
showList :: [PlutusScript DijkstraEra] -> String -> String
Show, (forall x.
 PlutusScript DijkstraEra -> Rep (PlutusScript DijkstraEra) x)
-> (forall x.
    Rep (PlutusScript DijkstraEra) x -> PlutusScript DijkstraEra)
-> Generic (PlutusScript DijkstraEra)
forall x.
Rep (PlutusScript DijkstraEra) x -> PlutusScript DijkstraEra
forall x.
PlutusScript DijkstraEra -> Rep (PlutusScript DijkstraEra) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
PlutusScript DijkstraEra -> Rep (PlutusScript DijkstraEra) x
from :: forall x.
PlutusScript DijkstraEra -> Rep (PlutusScript DijkstraEra) x
$cto :: forall x.
Rep (PlutusScript DijkstraEra) x -> PlutusScript DijkstraEra
to :: forall x.
Rep (PlutusScript DijkstraEra) x -> PlutusScript DijkstraEra
Generic)

  type PlutusPurpose f DijkstraEra = DijkstraPlutusPurpose f DijkstraEra

  eraMaxLanguage :: Language
eraMaxLanguage = Language
PlutusV3

  mkPlutusScript :: forall (l :: Language) (m :: * -> *).
(PlutusLanguage l, MonadFail m) =>
Plutus l -> m (PlutusScript DijkstraEra)
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 DijkstraEra -> m (PlutusScript DijkstraEra)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra))
-> PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra)
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV1 -> PlutusScript DijkstraEra
DijkstraPlutusV1 Plutus l
Plutus 'PlutusV1
plutus
      SLanguage l
SPlutusV2 -> PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra))
-> PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra)
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV2 -> PlutusScript DijkstraEra
DijkstraPlutusV2 Plutus l
Plutus 'PlutusV2
plutus
      SLanguage l
SPlutusV3 -> PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra))
-> PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra)
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV3 -> PlutusScript DijkstraEra
DijkstraPlutusV3 Plutus l
Plutus 'PlutusV3
plutus
      SLanguage l
SPlutusV4 -> PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra))
-> PlutusScript DijkstraEra -> m (PlutusScript DijkstraEra)
forall a b. (a -> b) -> a -> b
$ Plutus 'PlutusV4 -> PlutusScript DijkstraEra
DijkstraPlutusV4 Plutus l
Plutus 'PlutusV4
plutus

  withPlutusScript :: forall a.
PlutusScript DijkstraEra
-> (forall (l :: Language). PlutusLanguage l => Plutus l -> a) -> a
withPlutusScript (DijkstraPlutusV1 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 (DijkstraPlutusV2 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
  withPlutusScript (DijkstraPlutusV3 Plutus 'PlutusV3
plutus) forall (l :: Language). PlutusLanguage l => Plutus l -> a
f = Plutus 'PlutusV3 -> a
forall (l :: Language). PlutusLanguage l => Plutus l -> a
f Plutus 'PlutusV3
plutus
  withPlutusScript (DijkstraPlutusV4 Plutus 'PlutusV4
plutus) forall (l :: Language). PlutusLanguage l => Plutus l -> a
f = Plutus 'PlutusV4 -> a
forall (l :: Language). PlutusLanguage l => Plutus l -> a
f Plutus 'PlutusV4
plutus

  hoistPlutusPurpose :: forall (g :: * -> * -> *) (f :: * -> * -> *).
(forall ix it. g ix it -> f ix it)
-> PlutusPurpose g DijkstraEra -> PlutusPurpose f DijkstraEra
hoistPlutusPurpose forall ix it. g ix it -> f ix it
f = \case
    DijkstraSpending g Word32 TxIn
x -> f Word32 TxIn -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> DijkstraPlutusPurpose f era
DijkstraSpending (f Word32 TxIn -> DijkstraPlutusPurpose f DijkstraEra)
-> f Word32 TxIn -> DijkstraPlutusPurpose f DijkstraEra
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
    DijkstraMinting g Word32 PolicyID
x -> f Word32 PolicyID -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> DijkstraPlutusPurpose f era
DijkstraMinting (f Word32 PolicyID -> DijkstraPlutusPurpose f DijkstraEra)
-> f Word32 PolicyID -> DijkstraPlutusPurpose f DijkstraEra
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
    DijkstraCertifying g Word32 (TxCert DijkstraEra)
x -> f Word32 (TxCert DijkstraEra)
-> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> DijkstraPlutusPurpose f era
DijkstraCertifying (f Word32 (TxCert DijkstraEra)
 -> DijkstraPlutusPurpose f DijkstraEra)
-> f Word32 (TxCert DijkstraEra)
-> DijkstraPlutusPurpose f DijkstraEra
forall a b. (a -> b) -> a -> b
$ g Word32 (DijkstraTxCert DijkstraEra)
-> f Word32 (DijkstraTxCert DijkstraEra)
forall ix it. g ix it -> f ix it
f g Word32 (TxCert DijkstraEra)
g Word32 (DijkstraTxCert DijkstraEra)
x
    DijkstraRewarding g Word32 RewardAccount
x -> f Word32 RewardAccount -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> DijkstraPlutusPurpose f era
DijkstraRewarding (f Word32 RewardAccount -> DijkstraPlutusPurpose f DijkstraEra)
-> f Word32 RewardAccount -> DijkstraPlutusPurpose f DijkstraEra
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
    DijkstraVoting g Word32 Voter
x -> f Word32 Voter -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 Voter -> DijkstraPlutusPurpose f era
DijkstraVoting (f Word32 Voter -> DijkstraPlutusPurpose f DijkstraEra)
-> f Word32 Voter -> DijkstraPlutusPurpose f DijkstraEra
forall a b. (a -> b) -> a -> b
$ g Word32 Voter -> f Word32 Voter
forall ix it. g ix it -> f ix it
f g Word32 Voter
x
    DijkstraProposing g Word32 (ProposalProcedure DijkstraEra)
x -> f Word32 (ProposalProcedure DijkstraEra)
-> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 (ProposalProcedure era) -> DijkstraPlutusPurpose f era
DijkstraProposing (f Word32 (ProposalProcedure DijkstraEra)
 -> DijkstraPlutusPurpose f DijkstraEra)
-> f Word32 (ProposalProcedure DijkstraEra)
-> DijkstraPlutusPurpose f DijkstraEra
forall a b. (a -> b) -> a -> b
$ g Word32 (ProposalProcedure DijkstraEra)
-> f Word32 (ProposalProcedure DijkstraEra)
forall ix it. g ix it -> f ix it
f g Word32 (ProposalProcedure DijkstraEra)
x
    DijkstraGuarding g Word32 ScriptHash
x -> f Word32 ScriptHash -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 ScriptHash -> DijkstraPlutusPurpose f era
DijkstraGuarding (f Word32 ScriptHash -> DijkstraPlutusPurpose f DijkstraEra)
-> f Word32 ScriptHash -> DijkstraPlutusPurpose f DijkstraEra
forall a b. (a -> b) -> a -> b
$ g Word32 ScriptHash -> f Word32 ScriptHash
forall ix it. g ix it -> f ix it
f g Word32 ScriptHash
x

  mkSpendingPurpose :: forall (f :: * -> * -> *).
f Word32 TxIn -> PlutusPurpose f DijkstraEra
mkSpendingPurpose = f Word32 TxIn -> PlutusPurpose f DijkstraEra
f Word32 TxIn -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> DijkstraPlutusPurpose f era
DijkstraSpending

  toSpendingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f DijkstraEra -> Maybe (f Word32 TxIn)
toSpendingPurpose (DijkstraSpending f Word32 TxIn
i) = f Word32 TxIn -> Maybe (f Word32 TxIn)
forall a. a -> Maybe a
Just f Word32 TxIn
i
  toSpendingPurpose PlutusPurpose f DijkstraEra
_ = Maybe (f Word32 TxIn)
forall a. Maybe a
Nothing

  mkMintingPurpose :: forall (f :: * -> * -> *).
f Word32 PolicyID -> PlutusPurpose f DijkstraEra
mkMintingPurpose = f Word32 PolicyID -> PlutusPurpose f DijkstraEra
f Word32 PolicyID -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> DijkstraPlutusPurpose f era
DijkstraMinting

  toMintingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f DijkstraEra -> Maybe (f Word32 PolicyID)
toMintingPurpose (DijkstraMinting f Word32 PolicyID
i) = f Word32 PolicyID -> Maybe (f Word32 PolicyID)
forall a. a -> Maybe a
Just f Word32 PolicyID
i
  toMintingPurpose PlutusPurpose f DijkstraEra
_ = Maybe (f Word32 PolicyID)
forall a. Maybe a
Nothing

  mkCertifyingPurpose :: forall (f :: * -> * -> *).
f Word32 (TxCert DijkstraEra) -> PlutusPurpose f DijkstraEra
mkCertifyingPurpose = f Word32 (TxCert DijkstraEra) -> PlutusPurpose f DijkstraEra
f Word32 (TxCert DijkstraEra)
-> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> DijkstraPlutusPurpose f era
DijkstraCertifying

  toCertifyingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f DijkstraEra
-> Maybe (f Word32 (TxCert DijkstraEra))
toCertifyingPurpose (DijkstraCertifying f Word32 (TxCert DijkstraEra)
i) = f Word32 (DijkstraTxCert DijkstraEra)
-> Maybe (f Word32 (DijkstraTxCert DijkstraEra))
forall a. a -> Maybe a
Just f Word32 (TxCert DijkstraEra)
f Word32 (DijkstraTxCert DijkstraEra)
i
  toCertifyingPurpose PlutusPurpose f DijkstraEra
_ = Maybe (f Word32 (TxCert DijkstraEra))
Maybe (f Word32 (DijkstraTxCert DijkstraEra))
forall a. Maybe a
Nothing

  mkRewardingPurpose :: forall (f :: * -> * -> *).
f Word32 RewardAccount -> PlutusPurpose f DijkstraEra
mkRewardingPurpose = f Word32 RewardAccount -> PlutusPurpose f DijkstraEra
f Word32 RewardAccount -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> DijkstraPlutusPurpose f era
DijkstraRewarding

  toRewardingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f DijkstraEra -> Maybe (f Word32 RewardAccount)
toRewardingPurpose (DijkstraRewarding f Word32 RewardAccount
i) = f Word32 RewardAccount -> Maybe (f Word32 RewardAccount)
forall a. a -> Maybe a
Just f Word32 RewardAccount
i
  toRewardingPurpose PlutusPurpose f DijkstraEra
_ = Maybe (f Word32 RewardAccount)
forall a. Maybe a
Nothing

  upgradePlutusPurposeAsIx :: AlonzoEraScript (PreviousEra DijkstraEra) =>
PlutusPurpose AsIx (PreviousEra DijkstraEra)
-> PlutusPurpose AsIx DijkstraEra
upgradePlutusPurposeAsIx = \case
    ConwaySpending (AsIx Word32
ix) -> AsIx Word32 TxIn -> DijkstraPlutusPurpose AsIx DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 TxIn -> DijkstraPlutusPurpose f era
DijkstraSpending (Word32 -> AsIx Word32 TxIn
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)
    ConwayMinting (AsIx Word32
ix) -> AsIx Word32 PolicyID -> DijkstraPlutusPurpose AsIx DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 PolicyID -> DijkstraPlutusPurpose f era
DijkstraMinting (Word32 -> AsIx Word32 PolicyID
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)
    ConwayCertifying (AsIx Word32
ix) -> AsIx Word32 (TxCert DijkstraEra)
-> DijkstraPlutusPurpose AsIx DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 (TxCert era) -> DijkstraPlutusPurpose f era
DijkstraCertifying (Word32 -> AsIx Word32 (DijkstraTxCert DijkstraEra)
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)
    ConwayRewarding (AsIx Word32
ix) -> AsIx Word32 RewardAccount -> DijkstraPlutusPurpose AsIx DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 RewardAccount -> DijkstraPlutusPurpose f era
DijkstraRewarding (Word32 -> AsIx Word32 RewardAccount
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)
    ConwayVoting (AsIx Word32
ix) -> AsIx Word32 Voter -> DijkstraPlutusPurpose AsIx DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 Voter -> DijkstraPlutusPurpose f era
DijkstraVoting (Word32 -> AsIx Word32 Voter
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)
    ConwayProposing (AsIx Word32
ix) -> AsIx Word32 (ProposalProcedure DijkstraEra)
-> DijkstraPlutusPurpose AsIx DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 (ProposalProcedure era) -> DijkstraPlutusPurpose f era
DijkstraProposing (Word32 -> AsIx Word32 (ProposalProcedure DijkstraEra)
forall ix it. ix -> AsIx ix it
AsIx Word32
ix)

instance ShelleyEraScript DijkstraEra where
  mkRequireSignature :: KeyHash 'Witness -> NativeScript DijkstraEra
mkRequireSignature = KeyHash 'Witness -> NativeScript DijkstraEra
KeyHash 'Witness -> DijkstraNativeScript DijkstraEra
forall era. Era era => KeyHash 'Witness -> DijkstraNativeScript era
mkDijkstraRequireSignature
  getRequireSignature :: NativeScript DijkstraEra -> Maybe (KeyHash 'Witness)
getRequireSignature = NativeScript DijkstraEra -> Maybe (KeyHash 'Witness)
DijkstraNativeScript DijkstraEra -> Maybe (KeyHash 'Witness)
forall era. DijkstraNativeScript era -> Maybe (KeyHash 'Witness)
getDijkstraRequireSignature

  mkRequireAllOf :: StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
mkRequireAllOf = StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
StrictSeq (DijkstraNativeScript DijkstraEra)
-> DijkstraNativeScript DijkstraEra
forall era.
Era era =>
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScript era
mkDijkstraRequireAllOf
  getRequireAllOf :: NativeScript DijkstraEra
-> Maybe (StrictSeq (NativeScript DijkstraEra))
getRequireAllOf = NativeScript DijkstraEra
-> Maybe (StrictSeq (NativeScript DijkstraEra))
DijkstraNativeScript DijkstraEra
-> Maybe (StrictSeq (DijkstraNativeScript DijkstraEra))
forall era.
DijkstraNativeScript era
-> Maybe (StrictSeq (DijkstraNativeScript era))
getDijkstraRequireAllOf

  mkRequireAnyOf :: StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
mkRequireAnyOf = StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
StrictSeq (DijkstraNativeScript DijkstraEra)
-> DijkstraNativeScript DijkstraEra
forall era.
Era era =>
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScript era
mkDijkstraRequireAnyOf
  getRequireAnyOf :: NativeScript DijkstraEra
-> Maybe (StrictSeq (NativeScript DijkstraEra))
getRequireAnyOf = NativeScript DijkstraEra
-> Maybe (StrictSeq (NativeScript DijkstraEra))
DijkstraNativeScript DijkstraEra
-> Maybe (StrictSeq (DijkstraNativeScript DijkstraEra))
forall era.
DijkstraNativeScript era
-> Maybe (StrictSeq (DijkstraNativeScript era))
getDijkstraRequireAnyOf

  mkRequireMOf :: Int
-> StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
mkRequireMOf = Int
-> StrictSeq (NativeScript DijkstraEra) -> NativeScript DijkstraEra
Int
-> StrictSeq (DijkstraNativeScript DijkstraEra)
-> DijkstraNativeScript DijkstraEra
forall era.
Era era =>
Int
-> StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScript era
mkDijkstraRequireMOf
  getRequireMOf :: NativeScript DijkstraEra
-> Maybe (Int, StrictSeq (NativeScript DijkstraEra))
getRequireMOf = NativeScript DijkstraEra
-> Maybe (Int, StrictSeq (NativeScript DijkstraEra))
DijkstraNativeScript DijkstraEra
-> Maybe (Int, StrictSeq (DijkstraNativeScript DijkstraEra))
forall era.
DijkstraNativeScript era
-> Maybe (Int, StrictSeq (DijkstraNativeScript era))
getDijkstraRequireMOf

instance AllegraEraScript DijkstraEra where
  mkTimeStart :: SlotNo -> NativeScript DijkstraEra
mkTimeStart = SlotNo -> NativeScript DijkstraEra
SlotNo -> DijkstraNativeScript DijkstraEra
forall era. Era era => SlotNo -> DijkstraNativeScript era
mkDijkstraTimeStart
  getTimeStart :: NativeScript DijkstraEra -> Maybe SlotNo
getTimeStart = NativeScript DijkstraEra -> Maybe SlotNo
DijkstraNativeScript DijkstraEra -> Maybe SlotNo
forall era. DijkstraNativeScript era -> Maybe SlotNo
getDijkstraTimeStart

  mkTimeExpire :: SlotNo -> NativeScript DijkstraEra
mkTimeExpire = SlotNo -> NativeScript DijkstraEra
SlotNo -> DijkstraNativeScript DijkstraEra
forall era. Era era => SlotNo -> DijkstraNativeScript era
mkDijkstraTimeExpire
  getTimeExpire :: NativeScript DijkstraEra -> Maybe SlotNo
getTimeExpire = NativeScript DijkstraEra -> Maybe SlotNo
DijkstraNativeScript DijkstraEra -> Maybe SlotNo
forall era. DijkstraNativeScript era -> Maybe SlotNo
getDijkstraTimeExpire

instance ConwayEraScript DijkstraEra where
  mkVotingPurpose :: forall (f :: * -> * -> *).
f Word32 Voter -> PlutusPurpose f DijkstraEra
mkVotingPurpose = f Word32 Voter -> PlutusPurpose f DijkstraEra
f Word32 Voter -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 Voter -> DijkstraPlutusPurpose f era
DijkstraVoting

  toVotingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f DijkstraEra -> Maybe (f Word32 Voter)
toVotingPurpose (DijkstraVoting f Word32 Voter
i) = f Word32 Voter -> Maybe (f Word32 Voter)
forall a. a -> Maybe a
Just f Word32 Voter
i
  toVotingPurpose PlutusPurpose f DijkstraEra
_ = Maybe (f Word32 Voter)
forall a. Maybe a
Nothing

  mkProposingPurpose :: forall (f :: * -> * -> *).
f Word32 (ProposalProcedure DijkstraEra)
-> PlutusPurpose f DijkstraEra
mkProposingPurpose = f Word32 (ProposalProcedure DijkstraEra)
-> PlutusPurpose f DijkstraEra
f Word32 (ProposalProcedure DijkstraEra)
-> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 (ProposalProcedure era) -> DijkstraPlutusPurpose f era
DijkstraProposing

  toProposingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f DijkstraEra
-> Maybe (f Word32 (ProposalProcedure DijkstraEra))
toProposingPurpose (DijkstraProposing f Word32 (ProposalProcedure DijkstraEra)
i) = f Word32 (ProposalProcedure DijkstraEra)
-> Maybe (f Word32 (ProposalProcedure DijkstraEra))
forall a. a -> Maybe a
Just f Word32 (ProposalProcedure DijkstraEra)
i
  toProposingPurpose PlutusPurpose f DijkstraEra
_ = Maybe (f Word32 (ProposalProcedure DijkstraEra))
forall a. Maybe a
Nothing

class ConwayEraScript era => DijkstraEraScript era where
  mkGuardingPurpose :: f Word32 ScriptHash -> PlutusPurpose f era
  toGuardingPurpose :: PlutusPurpose f era -> Maybe (f Word32 ScriptHash)

  mkRequireGuard :: Credential 'Guard -> NativeScript era
  getRequireGuard :: NativeScript era -> Maybe (Credential 'Guard)

instance DijkstraEraScript DijkstraEra where
  mkGuardingPurpose :: forall (f :: * -> * -> *).
f Word32 ScriptHash -> PlutusPurpose f DijkstraEra
mkGuardingPurpose = f Word32 ScriptHash -> PlutusPurpose f DijkstraEra
f Word32 ScriptHash -> DijkstraPlutusPurpose f DijkstraEra
forall (f :: * -> * -> *) era.
f Word32 ScriptHash -> DijkstraPlutusPurpose f era
DijkstraGuarding

  toGuardingPurpose :: forall (f :: * -> * -> *).
PlutusPurpose f DijkstraEra -> Maybe (f Word32 ScriptHash)
toGuardingPurpose (DijkstraGuarding f Word32 ScriptHash
i) = f Word32 ScriptHash -> Maybe (f Word32 ScriptHash)
forall a. a -> Maybe a
Just f Word32 ScriptHash
i
  toGuardingPurpose PlutusPurpose f DijkstraEra
_ = Maybe (f Word32 ScriptHash)
forall a. Maybe a
Nothing

  mkRequireGuard :: Credential 'Guard -> NativeScript DijkstraEra
mkRequireGuard = Credential 'Guard -> NativeScript DijkstraEra
Credential 'Guard -> DijkstraNativeScript DijkstraEra
forall era.
Era era =>
Credential 'Guard -> DijkstraNativeScript era
mkDijkstraRequireGuard
  getRequireGuard :: NativeScript DijkstraEra -> Maybe (Credential 'Guard)
getRequireGuard = NativeScript DijkstraEra -> Maybe (Credential 'Guard)
DijkstraNativeScript DijkstraEra -> Maybe (Credential 'Guard)
forall era. DijkstraNativeScript era -> Maybe (Credential 'Guard)
getDijkstraRequireGuard

pattern GuardingPurpose ::
  DijkstraEraScript era => f Word32 ScriptHash -> PlutusPurpose f era
pattern $mGuardingPurpose :: forall {r} {era} {f :: * -> * -> *}.
DijkstraEraScript era =>
PlutusPurpose f era
-> (f Word32 ScriptHash -> r) -> ((# #) -> r) -> r
$bGuardingPurpose :: forall era (f :: * -> * -> *).
DijkstraEraScript era =>
f Word32 ScriptHash -> PlutusPurpose f era
GuardingPurpose c <- (toGuardingPurpose -> Just c)
  where
    GuardingPurpose f Word32 ScriptHash
c = f Word32 ScriptHash -> PlutusPurpose f era
forall era (f :: * -> * -> *).
DijkstraEraScript era =>
f Word32 ScriptHash -> PlutusPurpose f era
forall (f :: * -> * -> *).
f Word32 ScriptHash -> PlutusPurpose f era
mkGuardingPurpose f Word32 ScriptHash
c

pattern RequireGuard :: DijkstraEraScript era => Credential 'Guard -> NativeScript era
pattern $mRequireGuard :: forall {r} {era}.
DijkstraEraScript era =>
NativeScript era -> (Credential 'Guard -> r) -> ((# #) -> r) -> r
$bRequireGuard :: forall era.
DijkstraEraScript era =>
Credential 'Guard -> NativeScript era
RequireGuard cred <- (getRequireGuard -> Just cred)
  where
    RequireGuard Credential 'Guard
cred = Credential 'Guard -> NativeScript era
forall era.
DijkstraEraScript era =>
Credential 'Guard -> NativeScript era
mkRequireGuard Credential 'Guard
cred

evalDijkstraNativeScript ::
  (DijkstraEraScript era, NativeScript era ~ DijkstraNativeScript era) =>
  Set.Set (KeyHash 'Witness) ->
  ValidityInterval ->
  OSet (Credential 'Guard) ->
  NativeScript era ->
  Bool
evalDijkstraNativeScript :: forall era.
(DijkstraEraScript era,
 NativeScript era ~ DijkstraNativeScript era) =>
Set (KeyHash 'Witness)
-> ValidityInterval
-> OSet (Credential 'Guard)
-> NativeScript era
-> Bool
evalDijkstraNativeScript Set (KeyHash 'Witness)
keyHashes (ValidityInterval StrictMaybe SlotNo
txStart StrictMaybe SlotNo
txExp) OSet (Credential 'Guard)
guards = NativeScript era -> Bool
go
  where
    -- the evaluation will stop as soon as it reaches the required number of valid scripts
    isValidMOf :: Int -> StrictSeq (NativeScript era) -> Bool
isValidMOf Int
n StrictSeq (NativeScript era)
SSeq.Empty = Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
0
    isValidMOf Int
n (NativeScript era
ts SSeq.:<| StrictSeq (NativeScript era)
tss) =
      Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
0 Bool -> Bool -> Bool
|| if NativeScript era -> Bool
go NativeScript era
ts then Int -> StrictSeq (NativeScript era) -> Bool
isValidMOf (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) StrictSeq (NativeScript era)
tss else Int -> StrictSeq (NativeScript era) -> Bool
isValidMOf Int
n StrictSeq (NativeScript era)
tss
    go :: NativeScript era -> Bool
go = \case
      RequireTimeStart SlotNo
lockStart -> SlotNo
lockStart SlotNo -> StrictMaybe SlotNo -> Bool
`lteNegInfty` StrictMaybe SlotNo
txStart
      RequireTimeExpire SlotNo
lockExp -> StrictMaybe SlotNo
txExp StrictMaybe SlotNo -> SlotNo -> Bool
`ltePosInfty` SlotNo
lockExp
      RequireSignature KeyHash 'Witness
hash -> KeyHash 'Witness
hash KeyHash 'Witness -> Set (KeyHash 'Witness) -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set (KeyHash 'Witness)
keyHashes
      RequireAllOf StrictSeq (NativeScript era)
xs -> (NativeScript era -> Bool) -> StrictSeq (NativeScript era) -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all NativeScript era -> Bool
go StrictSeq (NativeScript era)
xs
      RequireAnyOf StrictSeq (NativeScript era)
xs -> (NativeScript era -> Bool) -> StrictSeq (NativeScript era) -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any NativeScript era -> Bool
go StrictSeq (NativeScript era)
xs
      RequireMOf Int
m StrictSeq (NativeScript era)
xs -> Int -> StrictSeq (NativeScript era) -> Bool
isValidMOf Int
m StrictSeq (NativeScript era)
xs
      RequireGuard Credential 'Guard
cred -> Credential 'Guard
cred Credential 'Guard -> OSet (Credential 'Guard) -> Bool
forall a. Ord a => a -> OSet a -> Bool
`OSet.member` OSet (Credential 'Guard)
guards
      NativeScript era
_ -> String -> Bool
forall a. HasCallStack => String -> a
error String
"Impossible: All NativeScripts should have been accounted for"

mkDijkstraRequireSignature :: forall era. Era era => KeyHash 'Witness -> DijkstraNativeScript era
mkDijkstraRequireSignature :: forall era. Era era => KeyHash 'Witness -> DijkstraNativeScript era
mkDijkstraRequireSignature = forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @era (DijkstraNativeScriptRaw era -> DijkstraNativeScript era)
-> (KeyHash 'Witness -> DijkstraNativeScriptRaw era)
-> KeyHash 'Witness
-> DijkstraNativeScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. KeyHash 'Witness -> DijkstraNativeScriptRaw era
forall era. KeyHash 'Witness -> DijkstraNativeScriptRaw era
DijkstraRequireSignature

getDijkstraRequireSignature :: DijkstraNativeScript era -> Maybe (KeyHash 'Witness)
getDijkstraRequireSignature :: forall era. DijkstraNativeScript era -> Maybe (KeyHash 'Witness)
getDijkstraRequireSignature (MkDijkstraNativeScript (Memo (DijkstraRequireSignature KeyHash 'Witness
kh) ShortByteString
_)) = KeyHash 'Witness -> Maybe (KeyHash 'Witness)
forall a. a -> Maybe a
Just KeyHash 'Witness
kh
getDijkstraRequireSignature DijkstraNativeScript era
_ = Maybe (KeyHash 'Witness)
forall a. Maybe a
Nothing

mkDijkstraRequireAllOf ::
  forall era. Era era => StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScript era
mkDijkstraRequireAllOf :: forall era.
Era era =>
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScript era
mkDijkstraRequireAllOf = forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @era (DijkstraNativeScriptRaw era -> DijkstraNativeScript era)
-> (StrictSeq (DijkstraNativeScript era)
    -> DijkstraNativeScriptRaw era)
-> StrictSeq (DijkstraNativeScript era)
-> DijkstraNativeScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
forall era.
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
DijkstraRequireAllOf

getDijkstraRequireAllOf :: DijkstraNativeScript era -> Maybe (StrictSeq (DijkstraNativeScript era))
getDijkstraRequireAllOf :: forall era.
DijkstraNativeScript era
-> Maybe (StrictSeq (DijkstraNativeScript era))
getDijkstraRequireAllOf (MkDijkstraNativeScript (Memo (DijkstraRequireAllOf StrictSeq (DijkstraNativeScript era)
ms) ShortByteString
_)) = StrictSeq (DijkstraNativeScript era)
-> Maybe (StrictSeq (DijkstraNativeScript era))
forall a. a -> Maybe a
Just StrictSeq (DijkstraNativeScript era)
ms
getDijkstraRequireAllOf DijkstraNativeScript era
_ = Maybe (StrictSeq (DijkstraNativeScript era))
forall a. Maybe a
Nothing

mkDijkstraRequireAnyOf ::
  forall era. Era era => StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScript era
mkDijkstraRequireAnyOf :: forall era.
Era era =>
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScript era
mkDijkstraRequireAnyOf = forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @era (DijkstraNativeScriptRaw era -> DijkstraNativeScript era)
-> (StrictSeq (DijkstraNativeScript era)
    -> DijkstraNativeScriptRaw era)
-> StrictSeq (DijkstraNativeScript era)
-> DijkstraNativeScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
forall era.
StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScriptRaw era
DijkstraRequireAnyOf

getDijkstraRequireAnyOf :: DijkstraNativeScript era -> Maybe (StrictSeq (DijkstraNativeScript era))
getDijkstraRequireAnyOf :: forall era.
DijkstraNativeScript era
-> Maybe (StrictSeq (DijkstraNativeScript era))
getDijkstraRequireAnyOf (MkDijkstraNativeScript (Memo (DijkstraRequireAnyOf StrictSeq (DijkstraNativeScript era)
ms) ShortByteString
_)) = StrictSeq (DijkstraNativeScript era)
-> Maybe (StrictSeq (DijkstraNativeScript era))
forall a. a -> Maybe a
Just StrictSeq (DijkstraNativeScript era)
ms
getDijkstraRequireAnyOf DijkstraNativeScript era
_ = Maybe (StrictSeq (DijkstraNativeScript era))
forall a. Maybe a
Nothing

mkDijkstraRequireMOf ::
  forall era. Era era => Int -> StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScript era
mkDijkstraRequireMOf :: forall era.
Era era =>
Int
-> StrictSeq (DijkstraNativeScript era) -> DijkstraNativeScript era
mkDijkstraRequireMOf Int
n = forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @era (DijkstraNativeScriptRaw era -> DijkstraNativeScript era)
-> (StrictSeq (DijkstraNativeScript era)
    -> DijkstraNativeScriptRaw era)
-> StrictSeq (DijkstraNativeScript era)
-> DijkstraNativeScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int
-> StrictSeq (DijkstraNativeScript era)
-> DijkstraNativeScriptRaw era
forall era.
Int
-> StrictSeq (DijkstraNativeScript era)
-> DijkstraNativeScriptRaw era
DijkstraRequireMOf Int
n

getDijkstraRequireMOf ::
  DijkstraNativeScript era -> Maybe (Int, StrictSeq (DijkstraNativeScript era))
getDijkstraRequireMOf :: forall era.
DijkstraNativeScript era
-> Maybe (Int, StrictSeq (DijkstraNativeScript era))
getDijkstraRequireMOf (MkDijkstraNativeScript (Memo (DijkstraRequireMOf Int
n StrictSeq (DijkstraNativeScript era)
ms) ShortByteString
_)) = (Int, StrictSeq (DijkstraNativeScript era))
-> Maybe (Int, StrictSeq (DijkstraNativeScript era))
forall a. a -> Maybe a
Just (Int
n, StrictSeq (DijkstraNativeScript era)
ms)
getDijkstraRequireMOf DijkstraNativeScript era
_ = Maybe (Int, StrictSeq (DijkstraNativeScript era))
forall a. Maybe a
Nothing

mkDijkstraTimeStart :: forall era. Era era => SlotNo -> DijkstraNativeScript era
mkDijkstraTimeStart :: forall era. Era era => SlotNo -> DijkstraNativeScript era
mkDijkstraTimeStart = forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @era (DijkstraNativeScriptRaw era -> DijkstraNativeScript era)
-> (SlotNo -> DijkstraNativeScriptRaw era)
-> SlotNo
-> DijkstraNativeScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SlotNo -> DijkstraNativeScriptRaw era
forall era. SlotNo -> DijkstraNativeScriptRaw era
DijkstraTimeStart

getDijkstraTimeStart :: DijkstraNativeScript era -> Maybe SlotNo
getDijkstraTimeStart :: forall era. DijkstraNativeScript era -> Maybe SlotNo
getDijkstraTimeStart (MkDijkstraNativeScript (Memo (DijkstraTimeStart SlotNo
mslot) ShortByteString
_)) = SlotNo -> Maybe SlotNo
forall a. a -> Maybe a
Just SlotNo
mslot
getDijkstraTimeStart DijkstraNativeScript era
_ = Maybe SlotNo
forall a. Maybe a
Nothing

mkDijkstraTimeExpire :: forall era. Era era => SlotNo -> DijkstraNativeScript era
mkDijkstraTimeExpire :: forall era. Era era => SlotNo -> DijkstraNativeScript era
mkDijkstraTimeExpire = forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @era (DijkstraNativeScriptRaw era -> DijkstraNativeScript era)
-> (SlotNo -> DijkstraNativeScriptRaw era)
-> SlotNo
-> DijkstraNativeScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SlotNo -> DijkstraNativeScriptRaw era
forall era. SlotNo -> DijkstraNativeScriptRaw era
DijkstraTimeExpire

getDijkstraTimeExpire :: DijkstraNativeScript era -> Maybe SlotNo
getDijkstraTimeExpire :: forall era. DijkstraNativeScript era -> Maybe SlotNo
getDijkstraTimeExpire (MkDijkstraNativeScript (Memo (DijkstraTimeExpire SlotNo
mslot) ShortByteString
_)) = SlotNo -> Maybe SlotNo
forall a. a -> Maybe a
Just SlotNo
mslot
getDijkstraTimeExpire DijkstraNativeScript era
_ = Maybe SlotNo
forall a. Maybe a
Nothing

mkDijkstraRequireGuard :: forall era. Era era => Credential 'Guard -> DijkstraNativeScript era
mkDijkstraRequireGuard :: forall era.
Era era =>
Credential 'Guard -> DijkstraNativeScript era
mkDijkstraRequireGuard = forall era t.
(Era era, EncCBOR (RawType t), Memoized t) =>
RawType t -> t
mkMemoizedEra @era (DijkstraNativeScriptRaw era -> DijkstraNativeScript era)
-> (Credential 'Guard -> DijkstraNativeScriptRaw era)
-> Credential 'Guard
-> DijkstraNativeScript era
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Credential 'Guard -> DijkstraNativeScriptRaw era
forall era. Credential 'Guard -> DijkstraNativeScriptRaw era
DijkstraRequireGuard

getDijkstraRequireGuard :: DijkstraNativeScript era -> Maybe (Credential 'Guard)
getDijkstraRequireGuard :: forall era. DijkstraNativeScript era -> Maybe (Credential 'Guard)
getDijkstraRequireGuard (MkDijkstraNativeScript (Memo (DijkstraRequireGuard Credential 'Guard
cred) ShortByteString
_)) = Credential 'Guard -> Maybe (Credential 'Guard)
forall a. a -> Maybe a
Just Credential 'Guard
cred
getDijkstraRequireGuard DijkstraNativeScript era
_ = Maybe (Credential 'Guard)
forall a. Maybe a
Nothing