{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Test.Cardano.Ledger.Alonzo.Translation.TranslationInstance (
TranslationInstance (..),
deserializeTranslationInstances,
VersionedTxInfo (..),
) where
import Cardano.Ledger.Alonzo.Plutus.Context (EraPlutusContext, SupportedLanguage)
import Cardano.Ledger.Alonzo.Scripts (AlonzoEraScript, AsIx, PlutusPurpose)
import Cardano.Ledger.BaseTypes (ProtVer)
import Cardano.Ledger.Binary (
DecCBOR (..),
DecoderError,
EncCBOR (..),
decodeFull,
decodeRecordNamed,
encodeListLen,
fromPlainDecoder,
fromPlainEncoding,
)
import Cardano.Ledger.Core
import Cardano.Ledger.State (UTxO (..))
import qualified Codec.Serialise as Cborg (Serialise (..))
import qualified Data.ByteString.Lazy as BSL
import GHC.Generics (Generic)
import qualified PlutusLedgerApi.V1 as PV1
import qualified PlutusLedgerApi.V2 as PV2
import qualified PlutusLedgerApi.V3 as PV3
data VersionedTxInfo
= TxInfoPV1 PV1.TxInfo
| TxInfoPV2 PV2.TxInfo
| TxInfoPV3 PV3.TxInfo
| TxInfoPV4 PV3.TxInfo
deriving (Int -> VersionedTxInfo -> ShowS
[VersionedTxInfo] -> ShowS
VersionedTxInfo -> String
(Int -> VersionedTxInfo -> ShowS)
-> (VersionedTxInfo -> String)
-> ([VersionedTxInfo] -> ShowS)
-> Show VersionedTxInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VersionedTxInfo -> ShowS
showsPrec :: Int -> VersionedTxInfo -> ShowS
$cshow :: VersionedTxInfo -> String
show :: VersionedTxInfo -> String
$cshowList :: [VersionedTxInfo] -> ShowS
showList :: [VersionedTxInfo] -> ShowS
Show, VersionedTxInfo -> VersionedTxInfo -> Bool
(VersionedTxInfo -> VersionedTxInfo -> Bool)
-> (VersionedTxInfo -> VersionedTxInfo -> Bool)
-> Eq VersionedTxInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VersionedTxInfo -> VersionedTxInfo -> Bool
== :: VersionedTxInfo -> VersionedTxInfo -> Bool
$c/= :: VersionedTxInfo -> VersionedTxInfo -> Bool
/= :: VersionedTxInfo -> VersionedTxInfo -> Bool
Eq, (forall x. VersionedTxInfo -> Rep VersionedTxInfo x)
-> (forall x. Rep VersionedTxInfo x -> VersionedTxInfo)
-> Generic VersionedTxInfo
forall x. Rep VersionedTxInfo x -> VersionedTxInfo
forall x. VersionedTxInfo -> Rep VersionedTxInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. VersionedTxInfo -> Rep VersionedTxInfo x
from :: forall x. VersionedTxInfo -> Rep VersionedTxInfo x
$cto :: forall x. Rep VersionedTxInfo x -> VersionedTxInfo
to :: forall x. Rep VersionedTxInfo x -> VersionedTxInfo
Generic)
data TranslationInstance era = TranslationInstance
{ forall era. TranslationInstance era -> ProtVer
tiProtVer :: ProtVer
, forall era. TranslationInstance era -> SupportedLanguage era
tiLanguage :: SupportedLanguage era
, forall era. TranslationInstance era -> UTxO era
tiUtxo :: UTxO era
, forall era. TranslationInstance era -> Tx TopTx era
tiTx :: Tx TopTx era
, forall era. TranslationInstance era -> PlutusPurpose AsIx era
tiPlutusPurpose :: PlutusPurpose AsIx era
, forall era. TranslationInstance era -> VersionedTxInfo
tiResult :: VersionedTxInfo
}
deriving ((forall x.
TranslationInstance era -> Rep (TranslationInstance era) x)
-> (forall x.
Rep (TranslationInstance era) x -> TranslationInstance era)
-> Generic (TranslationInstance era)
forall x.
Rep (TranslationInstance era) x -> TranslationInstance era
forall x.
TranslationInstance era -> Rep (TranslationInstance era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (TranslationInstance era) x -> TranslationInstance era
forall era x.
TranslationInstance era -> Rep (TranslationInstance era) x
$cfrom :: forall era x.
TranslationInstance era -> Rep (TranslationInstance era) x
from :: forall x.
TranslationInstance era -> Rep (TranslationInstance era) x
$cto :: forall era x.
Rep (TranslationInstance era) x -> TranslationInstance era
to :: forall x.
Rep (TranslationInstance era) x -> TranslationInstance era
Generic)
deriving instance
(AlonzoEraScript era, Eq (PParams era), Eq (UTxO era), Eq (Tx TopTx era)) =>
Eq (TranslationInstance era)
deriving instance
(AlonzoEraScript era, Show (PParams era), Show (UTxO era), Show (Tx TopTx era)) =>
Show (TranslationInstance era)
instance Cborg.Serialise PV1.DCert
instance Cborg.Serialise PV1.TxInInfo
instance Cborg.Serialise PV1.TxInfo
instance Cborg.Serialise PV1.TxOut
instance Cborg.Serialise PV2.ScriptPurpose
instance Cborg.Serialise PV2.TxId
instance Cborg.Serialise PV2.TxOutRef
instance Cborg.Serialise PV2.TxInInfo
instance Cborg.Serialise PV2.TxInfo
instance Cborg.Serialise PV3.Address
instance Cborg.Serialise PV3.BuiltinData
instance Cborg.Serialise PV3.ChangedParameters
instance Cborg.Serialise PV3.ColdCommitteeCredential
instance Cborg.Serialise PV3.Committee
instance Cborg.Serialise PV3.Constitution
instance Cborg.Serialise PV3.Credential
instance Cborg.Serialise PV3.CurrencySymbol
instance Cborg.Serialise PV3.DRep
instance Cborg.Serialise PV3.DRepCredential
instance Cborg.Serialise PV3.DatumHash
instance Cborg.Serialise PV3.Delegatee
instance Cborg.Serialise PV3.GovernanceAction
instance Cborg.Serialise PV3.GovernanceActionId
instance Cborg.Serialise PV3.HotCommitteeCredential
instance Cborg.Serialise PV3.Lovelace
instance Cborg.Serialise PV3.MintValue
instance Cborg.Serialise PV3.OutputDatum
instance Cborg.Serialise PV3.POSIXTime
instance Cborg.Serialise PV3.ProposalProcedure
instance Cborg.Serialise PV3.ProtocolVersion
instance Cborg.Serialise PV3.PubKeyHash
instance Cborg.Serialise PV3.ScriptHash
instance Cborg.Serialise PV3.ScriptPurpose
instance Cborg.Serialise PV3.StakingCredential
instance Cborg.Serialise PV3.TokenName
instance Cborg.Serialise PV3.TxCert
instance Cborg.Serialise PV3.TxId
instance Cborg.Serialise PV3.TxInInfo
instance Cborg.Serialise PV3.TxInfo
instance Cborg.Serialise PV3.TxOut
instance Cborg.Serialise PV3.TxOutRef
instance Cborg.Serialise PV3.Value
instance Cborg.Serialise PV3.Vote
instance Cborg.Serialise PV3.Voter
instance (Cborg.Serialise k, Cborg.Serialise v) => Cborg.Serialise (PV3.Map k v)
instance Cborg.Serialise a => Cborg.Serialise (PV3.Extended a)
instance Cborg.Serialise a => Cborg.Serialise (PV3.Interval a)
instance Cborg.Serialise a => Cborg.Serialise (PV3.LowerBound a)
instance Cborg.Serialise a => Cborg.Serialise (PV3.UpperBound a)
instance Cborg.Serialise PV3.Rational
instance Cborg.Serialise VersionedTxInfo
instance EncCBOR VersionedTxInfo where
encCBOR :: VersionedTxInfo -> Encoding
encCBOR = Encoding -> Encoding
fromPlainEncoding (Encoding -> Encoding)
-> (VersionedTxInfo -> Encoding) -> VersionedTxInfo -> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. VersionedTxInfo -> Encoding
forall a. Serialise a => a -> Encoding
Cborg.encode
instance DecCBOR VersionedTxInfo where
decCBOR :: forall s. Decoder s VersionedTxInfo
decCBOR = Decoder s VersionedTxInfo -> Decoder s VersionedTxInfo
forall s a. Decoder s a -> Decoder s a
fromPlainDecoder Decoder s VersionedTxInfo
forall s. Decoder s VersionedTxInfo
forall a s. Serialise a => Decoder s a
Cborg.decode
instance
( AlonzoEraScript era
, EncCBOR (UTxO era)
, EncCBOR (Tx TopTx era)
) =>
EncCBOR (TranslationInstance era)
where
encCBOR :: TranslationInstance era -> Encoding
encCBOR (TranslationInstance ProtVer
pp SupportedLanguage era
l UTxO era
u Tx TopTx era
tx PlutusPurpose AsIx era
p VersionedTxInfo
r) =
Word -> Encoding
encodeListLen Word
6
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> ProtVer -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR ProtVer
pp
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> SupportedLanguage era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR SupportedLanguage era
l
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> UTxO era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR UTxO era
u
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Tx TopTx era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR Tx TopTx era
tx
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> PlutusPurpose AsIx era -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR PlutusPurpose AsIx era
p
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> VersionedTxInfo -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR VersionedTxInfo
r
instance
( DecCBOR (PParams era)
, DecCBOR (UTxO era)
, DecCBOR (Tx TopTx era)
, EraPlutusContext era
) =>
DecCBOR (TranslationInstance era)
where
decCBOR :: forall s. Decoder s (TranslationInstance era)
decCBOR =
Text
-> (TranslationInstance era -> Int)
-> Decoder s (TranslationInstance era)
-> Decoder s (TranslationInstance era)
forall a s. Text -> (a -> Int) -> Decoder s a -> Decoder s a
decodeRecordNamed Text
"TranslationInstance" (Int -> TranslationInstance era -> Int
forall a b. a -> b -> a
const Int
6) (Decoder s (TranslationInstance era)
-> Decoder s (TranslationInstance era))
-> Decoder s (TranslationInstance era)
-> Decoder s (TranslationInstance era)
forall a b. (a -> b) -> a -> b
$
ProtVer
-> SupportedLanguage era
-> UTxO era
-> Tx TopTx era
-> PlutusPurpose AsIx era
-> VersionedTxInfo
-> TranslationInstance era
forall era.
ProtVer
-> SupportedLanguage era
-> UTxO era
-> Tx TopTx era
-> PlutusPurpose AsIx era
-> VersionedTxInfo
-> TranslationInstance era
TranslationInstance
(ProtVer
-> SupportedLanguage era
-> UTxO era
-> Tx TopTx era
-> PlutusPurpose AsIx era
-> VersionedTxInfo
-> TranslationInstance era)
-> Decoder s ProtVer
-> Decoder
s
(SupportedLanguage era
-> UTxO era
-> Tx TopTx era
-> PlutusPurpose AsIx era
-> VersionedTxInfo
-> TranslationInstance era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s ProtVer
forall s. Decoder s ProtVer
forall a s. DecCBOR a => Decoder s a
decCBOR
Decoder
s
(SupportedLanguage era
-> UTxO era
-> Tx TopTx era
-> PlutusPurpose AsIx era
-> VersionedTxInfo
-> TranslationInstance era)
-> Decoder s (SupportedLanguage era)
-> Decoder
s
(UTxO era
-> Tx TopTx era
-> PlutusPurpose AsIx era
-> VersionedTxInfo
-> TranslationInstance era)
forall a b. Decoder s (a -> b) -> Decoder s a -> Decoder s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decoder s (SupportedLanguage era)
forall s. Decoder s (SupportedLanguage era)
forall a s. DecCBOR a => Decoder s a
decCBOR
Decoder
s
(UTxO era
-> Tx TopTx era
-> PlutusPurpose AsIx era
-> VersionedTxInfo
-> TranslationInstance era)
-> Decoder s (UTxO era)
-> Decoder
s
(Tx TopTx era
-> PlutusPurpose AsIx era
-> VersionedTxInfo
-> TranslationInstance era)
forall a b. Decoder s (a -> b) -> Decoder s a -> Decoder s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decoder s (UTxO era)
forall s. Decoder s (UTxO era)
forall a s. DecCBOR a => Decoder s a
decCBOR
Decoder
s
(Tx TopTx era
-> PlutusPurpose AsIx era
-> VersionedTxInfo
-> TranslationInstance era)
-> Decoder s (Tx TopTx era)
-> Decoder
s
(PlutusPurpose AsIx era
-> VersionedTxInfo -> TranslationInstance era)
forall a b. Decoder s (a -> b) -> Decoder s a -> Decoder s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decoder s (Tx TopTx era)
forall s. Decoder s (Tx TopTx era)
forall a s. DecCBOR a => Decoder s a
decCBOR
Decoder
s
(PlutusPurpose AsIx era
-> VersionedTxInfo -> TranslationInstance era)
-> Decoder s (PlutusPurpose AsIx era)
-> Decoder s (VersionedTxInfo -> TranslationInstance era)
forall a b. Decoder s (a -> b) -> Decoder s a -> Decoder s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decoder s (PlutusPurpose AsIx era)
forall s. Decoder s (PlutusPurpose AsIx era)
forall a s. DecCBOR a => Decoder s a
decCBOR
Decoder s (VersionedTxInfo -> TranslationInstance era)
-> Decoder s VersionedTxInfo -> Decoder s (TranslationInstance era)
forall a b. Decoder s (a -> b) -> Decoder s a -> Decoder s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decoder s VersionedTxInfo
forall s. Decoder s VersionedTxInfo
forall a s. DecCBOR a => Decoder s a
decCBOR
deserializeTranslationInstances ::
forall era.
( DecCBOR (PParams era)
, DecCBOR (UTxO era)
, DecCBOR (Tx TopTx era)
, EraPlutusContext era
) =>
BSL.ByteString ->
Either DecoderError [TranslationInstance era]
deserializeTranslationInstances :: forall era.
(DecCBOR (PParams era), DecCBOR (UTxO era), DecCBOR (Tx TopTx era),
EraPlutusContext era) =>
ByteString -> Either DecoderError [TranslationInstance era]
deserializeTranslationInstances = Version
-> ByteString -> Either DecoderError [TranslationInstance era]
forall a.
DecCBOR a =>
Version -> ByteString -> Either DecoderError a
decodeFull (forall era. Era era => Version
eraProtVerHigh @era)