{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -Wno-simplifiable-class-constraints #-}
{-# OPTIONS_GHC -fexpose-all-unfoldings #-}
{-# OPTIONS_GHC -fno-omit-interface-pragmas #-}
{-# OPTIONS_GHC -fno-specialise #-}
{-# OPTIONS_GHC -fno-strictness #-}

module PlutusLedgerApi.V4.Data.Contexts
  ( ColdCommitteeCredential (..)
  , HotCommitteeCredential (..)
  , DRepCredential (..)
  , DRep
  , matchDRep
  , pattern DRep
  , pattern DRepAlwaysAbstain
  , pattern DRepAlwaysNoConfidence
  , Delegatee
  , matchDelegatee
  , pattern DelegStake
  , pattern DelegVote
  , pattern DelegStakeVote
  , AccountId (..)
  , AccountBalanceInterval
  , matchAccountBalanceInterval
  , pattern AccountBalanceLowerBound
  , pattern AccountBalanceUpperBound
  , pattern AccountBalanceBothBounds
  , pattern AccountBalanceExact
  , AccountBalanceIntervals (..)
  , TxCert
  , matchTxCert
  , pattern TxCertRegAccount
  , pattern TxCertUnRegAccount
  , pattern TxCertDelegAccount
  , pattern TxCertRegAccountDeleg
  , pattern TxCertRegDRep
  , pattern TxCertUpdateDRep
  , pattern TxCertUnRegDRep
  , pattern TxCertPoolRegister
  , pattern TxCertPoolRetire
  , pattern TxCertAuthHotCommittee
  , pattern TxCertResignColdCommittee
  , Voter
  , matchVoter
  , pattern CommitteeVoter
  , pattern DRepVoter
  , pattern StakePoolVoter
  , Vote
  , matchVote
  , pattern VoteNo
  , pattern VoteYes
  , pattern Abstain
  , GovernanceActionId
  , pattern GovernanceActionId
  , matchGovernanceActionId
  , gaidTxId
  , gaidGovActionIx
  , Committee
  , pattern Committee
  , matchCommittee
  , committeeMembers
  , committeeQuorum
  , Constitution (..)
  , ProtocolVersion
  , pattern ProtocolVersion
  , matchProtocolVersion
  , pvMajor
  , pvMinor
  , ChangedParameters (..)
  , GovernanceAction
  , matchGovernanceAction
  , pattern ParameterChange
  , pattern HardForkInitiation
  , pattern TreasuryWithdrawals
  , pattern NoConfidence
  , pattern UpdateCommittee
  , pattern NewConstitution
  , pattern InfoAction
  , ProposalProcedure
  , pattern ProposalProcedure
  , matchProposalProcedure
  , ppDeposit
  , ppReturnAddr
  , ppGovernanceAction
  , ScriptPurpose
  , matchScriptPurpose
  , pattern Minting
  , pattern Spending
  , pattern Withdrawing
  , pattern Certifying
  , pattern Voting
  , pattern Proposing
  , pattern Guarding
  , TxInInfo
  , pattern TxInInfo
  , matchTxInInfo
  , txInInfoOutRef
  , txInInfoResolved
  , TxInfo
  , pattern TxInfo
  , matchTxInfo
  , txInfoId
  , txInfoSubTxIx
  , txInfoInputs
  , txInfoReferenceInputs
  , txInfoOutputs
  , txInfoFee
  , txInfoMint
  , txInfoTxCerts
  , txInfoWithdrawals
  , txInfoDirectDeposits
  , txInfoAccountBalanceIntervals
  , txInfoValidRange
  , txInfoGuards
  , txInfoRequiredTopLevelGuards
  , txInfoRedeemers
  , txInfoData
  , txInfoVotes
  , txInfoProposalProcedures
  , txInfoCurrentTreasuryAmount
  , txInfoTreasuryDonation
  , TopTxInfoSimplified
  , pattern TopTxInfoSimplified
  , matchTopTxInfoSimplified
  , ttisIds
  , ttisInputs
  , ttisReferenceInputs
  , ttisOutputs
  , ttisMints
  , ttisBurns
  , ttisTxCerts
  , ttisWithdrawals
  , ttisDirectDeposits
  , ttisValidRange
  , ttisGuards
  , ttisScriptPurposes
  , ttisData
  , ttisVotes
  , ttisProposalProcedures
  , ttisCurrentTreasuryAmount
  , ttisTreasuryDonations
  , TopTxInfo
  , pattern TopTxInfo
  , matchTopTxInfo
  , topTxInfoSubTransactions
  , topTxInfoDatums
  , topTxInfoStartingBalanceIntervals
  , topTxInfoSimplified
  , ScriptInfo
  , matchScriptInfo
  , pattern MintingScript
  , pattern SpendingScript
  , pattern WithdrawingScript
  , pattern CertifyingScript
  , pattern VotingScript
  , pattern ProposingScript
  , pattern GuardingScript
  , ScriptContext
  , pattern ScriptContext
  , matchScriptContext
  , scriptContextTxInfo
  , scriptContextRedeemer
  , scriptContextScriptInfo
  , scriptContextScriptHash
  , findOwnInput
  , findDatum
  , findDatumHash
  , findTxInByTxOutRef
  , findContinuingOutputs
  , getContinuingOutputs
  , txSignedBy
  , pubKeyOutputsAt
  , valuePaidTo
  , valueSpent
  , valueProduced
  , ownCurrencySymbol
  , spendsOutput
  ) where

import GHC.Generics (Generic)
import Prettyprinter (nest, vsep, (<+>))
import Prettyprinter.Extras

import PlutusLedgerApi.Data.V2 qualified as V2
import PlutusLedgerApi.V3.Data.Contexts
  ( ChangedParameters (..)
  , ColdCommitteeCredential (..)
  , Committee
  , Constitution (..)
  , DRep
  , DRepCredential (..)
  , Delegatee
  , GovernanceAction
  , GovernanceActionId
  , HotCommitteeCredential (..)
  , ProposalProcedure
  , ProtocolVersion
  , TxInInfo
  , Vote
  , Voter
  , committeeMembers
  , committeeQuorum
  , gaidGovActionIx
  , gaidTxId
  , matchCommittee
  , matchDRep
  , matchDelegatee
  , matchGovernanceAction
  , matchGovernanceActionId
  , matchProposalProcedure
  , matchProtocolVersion
  , matchTxInInfo
  , matchVote
  , matchVoter
  , ppDeposit
  , ppGovernanceAction
  , ppReturnAddr
  , pvMajor
  , pvMinor
  , txInInfoOutRef
  , txInInfoResolved
  , pattern Abstain
  , pattern Committee
  , pattern CommitteeVoter
  , pattern DRep
  , pattern DRepAlwaysAbstain
  , pattern DRepAlwaysNoConfidence
  , pattern DRepVoter
  , pattern DelegStake
  , pattern DelegStakeVote
  , pattern DelegVote
  , pattern GovernanceActionId
  , pattern HardForkInitiation
  , pattern InfoAction
  , pattern NewConstitution
  , pattern NoConfidence
  , pattern ParameterChange
  , pattern ProposalProcedure
  , pattern ProtocolVersion
  , pattern StakePoolVoter
  , pattern TreasuryWithdrawals
  , pattern TxInInfo
  , pattern UpdateCommittee
  , pattern VoteNo
  , pattern VoteYes
  )
import PlutusLedgerApi.V3.Data.MintValue qualified as V3
import PlutusLedgerApi.V3.Data.Tx qualified as V3
import PlutusTx qualified
import PlutusTx.AsData qualified as PlutusTx
import PlutusTx.BuiltinList qualified as BuiltinList
import PlutusTx.Builtins.Internal qualified as Builtins
import PlutusTx.Data.AssocMap
import PlutusTx.Data.List (List)
import PlutusTx.Data.List qualified as Data.List
import PlutusTx.Prelude qualified as PlutusTx

import Prelude qualified as Haskell

newtype AccountId = AccountId V2.Credential
  deriving stock ((forall x. AccountId -> Rep AccountId x)
-> (forall x. Rep AccountId x -> AccountId) -> Generic AccountId
forall x. Rep AccountId x -> AccountId
forall x. AccountId -> Rep AccountId x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. AccountId -> Rep AccountId x
from :: forall x. AccountId -> Rep AccountId x
$cto :: forall x. Rep AccountId x -> AccountId
to :: forall x. Rep AccountId x -> AccountId
Generic)
  deriving ((forall ann. AccountId -> Doc ann)
-> (forall ann. [AccountId] -> Doc ann) -> Pretty AccountId
forall ann. [AccountId] -> Doc ann
forall ann. AccountId -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. AccountId -> Doc ann
pretty :: forall ann. AccountId -> Doc ann
$cprettyList :: forall ann. [AccountId] -> Doc ann
prettyList :: forall ann. [AccountId] -> Doc ann
Pretty) via (PrettyShow AccountId)
  deriving newtype
    ( AccountId -> AccountId -> Bool
(AccountId -> AccountId -> Bool)
-> (AccountId -> AccountId -> Bool) -> Eq AccountId
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AccountId -> AccountId -> Bool
== :: AccountId -> AccountId -> Bool
$c/= :: AccountId -> AccountId -> Bool
/= :: AccountId -> AccountId -> Bool
Haskell.Eq
    , Int -> AccountId -> ShowS
[AccountId] -> ShowS
AccountId -> String
(Int -> AccountId -> ShowS)
-> (AccountId -> String)
-> ([AccountId] -> ShowS)
-> Show AccountId
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AccountId -> ShowS
showsPrec :: Int -> AccountId -> ShowS
$cshow :: AccountId -> String
show :: AccountId -> String
$cshowList :: [AccountId] -> ShowS
showList :: [AccountId] -> ShowS
Haskell.Show
    , AccountId -> AccountId -> Bool
(AccountId -> AccountId -> Bool) -> Eq AccountId
forall a. (a -> a -> Bool) -> Eq a
$c== :: AccountId -> AccountId -> Bool
== :: AccountId -> AccountId -> Bool
PlutusTx.Eq
    , AccountId -> BuiltinData
(AccountId -> BuiltinData) -> ToData AccountId
forall a. (a -> BuiltinData) -> ToData a
$ctoBuiltinData :: AccountId -> BuiltinData
toBuiltinData :: AccountId -> BuiltinData
PlutusTx.ToData
    , BuiltinData -> Maybe AccountId
(BuiltinData -> Maybe AccountId) -> FromData AccountId
forall a. (BuiltinData -> Maybe a) -> FromData a
$cfromBuiltinData :: BuiltinData -> Maybe AccountId
fromBuiltinData :: BuiltinData -> Maybe AccountId
PlutusTx.FromData
    , BuiltinData -> AccountId
(BuiltinData -> AccountId) -> UnsafeFromData AccountId
forall a. (BuiltinData -> a) -> UnsafeFromData a
$cunsafeFromBuiltinData :: BuiltinData -> AccountId
unsafeFromBuiltinData :: BuiltinData -> AccountId
PlutusTx.UnsafeFromData
    )

PlutusTx.makeLift ''AccountId

PlutusTx.asData
  [d|
    data AccountBalanceInterval
      = AccountBalanceLowerBound V2.Lovelace
      | AccountBalanceUpperBound V2.Lovelace
      | AccountBalanceBothBounds V2.Lovelace V2.Lovelace
      | AccountBalanceExact V2.Lovelace
      deriving stock (Generic, Haskell.Show, Haskell.Eq)
      deriving newtype (PlutusTx.FromData, PlutusTx.UnsafeFromData, PlutusTx.ToData)
      deriving (Pretty) via (PrettyShow AccountBalanceInterval)
    |]

PlutusTx.deriveEq ''AccountBalanceInterval
PlutusTx.makeLift ''AccountBalanceInterval

newtype AccountBalanceIntervals
  = AccountBalanceIntervals (Map AccountId AccountBalanceInterval)
  deriving stock ((forall x.
 AccountBalanceIntervals -> Rep AccountBalanceIntervals x)
-> (forall x.
    Rep AccountBalanceIntervals x -> AccountBalanceIntervals)
-> Generic AccountBalanceIntervals
forall x. Rep AccountBalanceIntervals x -> AccountBalanceIntervals
forall x. AccountBalanceIntervals -> Rep AccountBalanceIntervals x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. AccountBalanceIntervals -> Rep AccountBalanceIntervals x
from :: forall x. AccountBalanceIntervals -> Rep AccountBalanceIntervals x
$cto :: forall x. Rep AccountBalanceIntervals x -> AccountBalanceIntervals
to :: forall x. Rep AccountBalanceIntervals x -> AccountBalanceIntervals
Generic)
  deriving ((forall ann. AccountBalanceIntervals -> Doc ann)
-> (forall ann. [AccountBalanceIntervals] -> Doc ann)
-> Pretty AccountBalanceIntervals
forall ann. [AccountBalanceIntervals] -> Doc ann
forall ann. AccountBalanceIntervals -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. AccountBalanceIntervals -> Doc ann
pretty :: forall ann. AccountBalanceIntervals -> Doc ann
$cprettyList :: forall ann. [AccountBalanceIntervals] -> Doc ann
prettyList :: forall ann. [AccountBalanceIntervals] -> Doc ann
Pretty) via (PrettyShow AccountBalanceIntervals)
  deriving newtype
    ( Int -> AccountBalanceIntervals -> ShowS
[AccountBalanceIntervals] -> ShowS
AccountBalanceIntervals -> String
(Int -> AccountBalanceIntervals -> ShowS)
-> (AccountBalanceIntervals -> String)
-> ([AccountBalanceIntervals] -> ShowS)
-> Show AccountBalanceIntervals
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AccountBalanceIntervals -> ShowS
showsPrec :: Int -> AccountBalanceIntervals -> ShowS
$cshow :: AccountBalanceIntervals -> String
show :: AccountBalanceIntervals -> String
$cshowList :: [AccountBalanceIntervals] -> ShowS
showList :: [AccountBalanceIntervals] -> ShowS
Haskell.Show
    , AccountBalanceIntervals -> BuiltinData
(AccountBalanceIntervals -> BuiltinData)
-> ToData AccountBalanceIntervals
forall a. (a -> BuiltinData) -> ToData a
$ctoBuiltinData :: AccountBalanceIntervals -> BuiltinData
toBuiltinData :: AccountBalanceIntervals -> BuiltinData
PlutusTx.ToData
    , BuiltinData -> Maybe AccountBalanceIntervals
(BuiltinData -> Maybe AccountBalanceIntervals)
-> FromData AccountBalanceIntervals
forall a. (BuiltinData -> Maybe a) -> FromData a
$cfromBuiltinData :: BuiltinData -> Maybe AccountBalanceIntervals
fromBuiltinData :: BuiltinData -> Maybe AccountBalanceIntervals
PlutusTx.FromData
    , BuiltinData -> AccountBalanceIntervals
(BuiltinData -> AccountBalanceIntervals)
-> UnsafeFromData AccountBalanceIntervals
forall a. (BuiltinData -> a) -> UnsafeFromData a
$cunsafeFromBuiltinData :: BuiltinData -> AccountBalanceIntervals
unsafeFromBuiltinData :: BuiltinData -> AccountBalanceIntervals
PlutusTx.UnsafeFromData
    )

PlutusTx.makeLift ''AccountBalanceIntervals

PlutusTx.asData
  [d|
    data TxCert
      = TxCertRegAccount AccountId V2.Lovelace
      | TxCertUnRegAccount AccountId V2.Lovelace
      | TxCertDelegAccount AccountId Delegatee
      | TxCertRegAccountDeleg AccountId Delegatee V2.Lovelace
      | TxCertRegDRep DRepCredential V2.Lovelace
      | TxCertUpdateDRep DRepCredential
      | TxCertUnRegDRep DRepCredential V2.Lovelace
      | TxCertPoolRegister V2.PubKeyHash V2.PubKeyHash
      | TxCertPoolRetire V2.PubKeyHash Haskell.Integer
      | TxCertAuthHotCommittee ColdCommitteeCredential HotCommitteeCredential
      | TxCertResignColdCommittee ColdCommitteeCredential
      deriving stock (Generic, Haskell.Show, Haskell.Eq)
      deriving newtype (PlutusTx.FromData, PlutusTx.UnsafeFromData, PlutusTx.ToData)
      deriving (Pretty) via (PrettyShow TxCert)
    |]

PlutusTx.deriveEq ''TxCert
PlutusTx.makeLift ''TxCert

PlutusTx.asData
  [d|
    data ScriptPurpose
      = Minting V2.ScriptHash V2.CurrencySymbol
      | Spending V2.ScriptHash V3.TxOutRef
      | Withdrawing V2.ScriptHash V2.Credential
      | Certifying V2.ScriptHash Haskell.Integer TxCert
      | Voting V2.ScriptHash Voter
      | Proposing V2.ScriptHash Haskell.Integer ProposalProcedure
      | Guarding V2.ScriptHash Haskell.Integer
      deriving stock (Generic, Haskell.Show)
      deriving newtype (PlutusTx.FromData, PlutusTx.UnsafeFromData, PlutusTx.ToData)
      deriving (Pretty) via (PrettyShow ScriptPurpose)
    |]

PlutusTx.makeLift ''ScriptPurpose

PlutusTx.asData
  [d|
    data TxInfo = TxInfo
      { txInfoId :: V3.TxId
      , txInfoSubTxIx :: Haskell.Maybe Haskell.Integer
      , txInfoInputs :: List TxInInfo
      , txInfoReferenceInputs :: List TxInInfo
      , txInfoOutputs :: List V2.TxOut
      , txInfoFee :: V2.Lovelace
      , txInfoMint :: V3.MintValue
      , txInfoTxCerts :: List TxCert
      , txInfoWithdrawals :: Map AccountId V2.Lovelace
      , txInfoDirectDeposits :: Map AccountId V2.Lovelace
      , txInfoAccountBalanceIntervals :: AccountBalanceIntervals
      , txInfoValidRange :: V2.POSIXTimeRange
      , txInfoGuards :: List V2.Credential
      , txInfoRequiredTopLevelGuards :: Map V2.Credential (Haskell.Maybe V2.Datum)
      , txInfoRedeemers :: Map ScriptPurpose V2.Redeemer
      , txInfoData :: Map V2.DatumHash V2.Datum
      , txInfoVotes :: Map Voter (Map GovernanceActionId Vote)
      , txInfoProposalProcedures :: List ProposalProcedure
      , txInfoCurrentTreasuryAmount :: Haskell.Maybe V2.Lovelace
      , txInfoTreasuryDonation :: V2.Lovelace
      }
      deriving stock (Generic, Haskell.Show)
      deriving newtype (PlutusTx.FromData, PlutusTx.UnsafeFromData, PlutusTx.ToData)
    |]

PlutusTx.makeLift ''TxInfo

PlutusTx.asData
  [d|
    data TopTxInfoSimplified = TopTxInfoSimplified
      { ttisIds :: List V3.TxId
      , ttisInputs :: List TxInInfo
      , ttisReferenceInputs :: List TxInInfo
      , ttisOutputs :: List V2.TxOut
      , ttisMints :: V3.MintValue
      , ttisBurns :: V3.MintValue
      , ttisTxCerts :: List TxCert
      , ttisWithdrawals :: Map AccountId V2.Lovelace
      , ttisDirectDeposits :: Map AccountId V2.Lovelace
      , ttisValidRange :: V2.POSIXTimeRange
      , ttisGuards :: Map V2.Credential ()
      , ttisScriptPurposes :: Map ScriptPurpose ()
      , ttisData :: Map V2.DatumHash V2.Datum
      , ttisVotes :: Map Voter (Map GovernanceActionId Vote)
      , ttisProposalProcedures :: List ProposalProcedure
      , ttisCurrentTreasuryAmount :: Haskell.Maybe V2.Lovelace
      , ttisTreasuryDonations :: V2.Lovelace
      }
      deriving stock (Generic, Haskell.Show)
      deriving newtype (PlutusTx.FromData, PlutusTx.UnsafeFromData, PlutusTx.ToData)
      deriving (Pretty) via (PrettyShow TopTxInfoSimplified)
    |]

PlutusTx.makeLift ''TopTxInfoSimplified

PlutusTx.asData
  [d|
    data TopTxInfo = TopTxInfo
      { topTxInfoSubTransactions :: List TxInfo
      , topTxInfoDatums :: Map Haskell.Integer V2.Datum
      , topTxInfoStartingBalanceIntervals :: AccountBalanceIntervals
      , topTxInfoSimplified :: TopTxInfoSimplified
      }
      deriving stock (Generic, Haskell.Show)
      deriving newtype (PlutusTx.FromData, PlutusTx.UnsafeFromData, PlutusTx.ToData)
      deriving (Pretty) via (PrettyShow TopTxInfo)
    |]

PlutusTx.makeLift ''TopTxInfo

PlutusTx.asData
  [d|
    data ScriptInfo
      = MintingScript V2.CurrencySymbol
      | SpendingScript V3.TxOutRef (Haskell.Maybe V2.Datum)
      | WithdrawingScript AccountId
      | CertifyingScript Haskell.Integer TxCert
      | VotingScript Voter
      | ProposingScript Haskell.Integer ProposalProcedure
      | GuardingScript Haskell.Integer (Haskell.Maybe TopTxInfo)
      deriving stock (Generic, Haskell.Show)
      deriving newtype (PlutusTx.FromData, PlutusTx.UnsafeFromData, PlutusTx.ToData)
      deriving (Pretty) via (PrettyShow ScriptInfo)
    |]

PlutusTx.makeLift ''ScriptInfo

PlutusTx.asData
  [d|
    data ScriptContext = ScriptContext
      { scriptContextTxInfo :: TxInfo
      , scriptContextRedeemer :: V2.Redeemer
      , scriptContextScriptInfo :: ScriptInfo
      , scriptContextScriptHash :: V2.ScriptHash
      }
      deriving stock (Generic, Haskell.Show)
      deriving newtype (PlutusTx.FromData, PlutusTx.UnsafeFromData, PlutusTx.ToData)
    |]

PlutusTx.makeLift ''ScriptContext

{-# INLINEABLE findOwnInput #-}
findOwnInput :: ScriptContext -> Haskell.Maybe TxInInfo
findOwnInput :: ScriptContext -> Maybe TxInInfo
findOwnInput
  ScriptContext
    { scriptContextTxInfo :: ScriptContext -> TxInfo
scriptContextTxInfo = TxInfo {List TxInInfo
txInfoInputs :: TxInfo -> List TxInInfo
txInfoInputs :: List TxInInfo
txInfoInputs}
    , scriptContextScriptInfo :: ScriptContext -> ScriptInfo
scriptContextScriptInfo = SpendingScript TxOutRef
txOutRef Maybe Datum
_
    } =
    (TxInInfo -> Bool) -> List TxInInfo -> Maybe TxInInfo
forall a. UnsafeFromData a => (a -> Bool) -> List a -> Maybe a
Data.List.find
      (\TxInInfo {TxOutRef
txInInfoOutRef :: TxInInfo -> TxOutRef
txInInfoOutRef :: TxOutRef
txInInfoOutRef} -> TxOutRef
txInInfoOutRef TxOutRef -> TxOutRef -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== TxOutRef
txOutRef)
      List TxInInfo
txInfoInputs
findOwnInput ScriptContext
_ = Maybe TxInInfo
forall a. Maybe a
Haskell.Nothing

{-# INLINEABLE findDatum #-}
findDatum :: V2.DatumHash -> TxInfo -> Haskell.Maybe V2.Datum
findDatum :: DatumHash -> TxInfo -> Maybe Datum
findDatum DatumHash
dsh TxInfo {Map DatumHash Datum
txInfoData :: TxInfo -> Map DatumHash Datum
txInfoData :: Map DatumHash Datum
txInfoData} = DatumHash -> Map DatumHash Datum -> Maybe Datum
forall k a. (ToData k, UnsafeFromData a) => k -> Map k a -> Maybe a
lookup DatumHash
dsh Map DatumHash Datum
txInfoData

{-# INLINEABLE findDatumHash #-}
findDatumHash :: V2.Datum -> TxInfo -> Haskell.Maybe V2.DatumHash
findDatumHash :: Datum -> TxInfo -> Maybe DatumHash
findDatumHash Datum
ds TxInfo {Map DatumHash Datum
txInfoData :: TxInfo -> Map DatumHash Datum
txInfoData :: Map DatumHash Datum
txInfoData} =
  BuiltinPair BuiltinData BuiltinData -> DatumHash
forall {b}. BuiltinPair BuiltinData b -> DatumHash
getHash (BuiltinPair BuiltinData BuiltinData -> DatumHash)
-> Maybe (BuiltinPair BuiltinData BuiltinData) -> Maybe DatumHash
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
PlutusTx.<$> (BuiltinPair BuiltinData BuiltinData -> Bool)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Maybe (BuiltinPair BuiltinData BuiltinData)
forall a. (a -> Bool) -> BuiltinList a -> Maybe a
BuiltinList.find BuiltinPair BuiltinData BuiltinData -> Bool
forall {a}. BuiltinPair a BuiltinData -> Bool
matchDatum (Map DatumHash Datum
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall k a.
Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
toBuiltinList Map DatumHash Datum
txInfoData)
  where
    getHash :: BuiltinPair BuiltinData b -> DatumHash
getHash = BuiltinData -> DatumHash
forall a. UnsafeFromData a => BuiltinData -> a
PlutusTx.unsafeFromBuiltinData (BuiltinData -> DatumHash)
-> (BuiltinPair BuiltinData b -> BuiltinData)
-> BuiltinPair BuiltinData b
-> DatumHash
forall b c a. (b -> c) -> (a -> b) -> a -> c
PlutusTx.. BuiltinPair BuiltinData b -> BuiltinData
forall a b. BuiltinPair a b -> a
Builtins.fst
    matchDatum :: BuiltinPair a BuiltinData -> Bool
matchDatum BuiltinPair a BuiltinData
pair = BuiltinPair a BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
Builtins.snd BuiltinPair a BuiltinData
pair BuiltinData -> BuiltinData -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== Datum -> BuiltinData
V2.getDatum Datum
ds

{-# INLINEABLE findTxInByTxOutRef #-}
findTxInByTxOutRef :: V3.TxOutRef -> TxInfo -> Haskell.Maybe TxInInfo
findTxInByTxOutRef :: TxOutRef -> TxInfo -> Maybe TxInInfo
findTxInByTxOutRef TxOutRef
outRef TxInfo {List TxInInfo
txInfoInputs :: TxInfo -> List TxInInfo
txInfoInputs :: List TxInInfo
txInfoInputs} =
  (TxInInfo -> Bool) -> List TxInInfo -> Maybe TxInInfo
forall a. UnsafeFromData a => (a -> Bool) -> List a -> Maybe a
Data.List.find
    (\TxInInfo {TxOutRef
txInInfoOutRef :: TxInInfo -> TxOutRef
txInInfoOutRef :: TxOutRef
txInInfoOutRef} -> TxOutRef
txInInfoOutRef TxOutRef -> TxOutRef -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== TxOutRef
outRef)
    List TxInInfo
txInfoInputs

{-# INLINEABLE findContinuingOutputs #-}

{-| Find the indices of outputs in the current sub-transaction or top-level transaction
that pay to the same script address we are currently spending from. This does not search
the outputs of the whole transaction. -}
findContinuingOutputs :: ScriptContext -> List Haskell.Integer
findContinuingOutputs :: ScriptContext -> List Integer
findContinuingOutputs ScriptContext
ctx
  | Haskell.Just TxInInfo {txInInfoResolved :: TxInInfo -> TxOut
txInInfoResolved = V2.TxOut {Address
txOutAddress :: TxOut -> Address
txOutAddress :: Address
txOutAddress}} <- ScriptContext -> Maybe TxInInfo
findOwnInput ScriptContext
ctx =
      (TxOut -> Bool) -> List TxOut -> List Integer
forall a. UnsafeFromData a => (a -> Bool) -> List a -> List Integer
Data.List.findIndices
        (Address -> TxOut -> Bool
f Address
txOutAddress)
        (TxInfo -> List TxOut
txInfoOutputs (ScriptContext -> TxInfo
scriptContextTxInfo ScriptContext
ctx))
  where
    f :: Address -> TxOut -> Bool
f Address
addr V2.TxOut {txOutAddress :: TxOut -> Address
txOutAddress = Address
otherAddress} = Address
addr Address -> Address -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== Address
otherAddress
findContinuingOutputs ScriptContext
_ = BuiltinString -> List Integer
forall a. BuiltinString -> a
PlutusTx.traceError BuiltinString
"Le"

{-# INLINEABLE getContinuingOutputs #-}

{-| Get the outputs in the current sub-transaction or top-level transaction that pay to
the same script address we are currently spending from. This does not search the outputs
of the whole transaction. -}
getContinuingOutputs :: ScriptContext -> List V2.TxOut
getContinuingOutputs :: ScriptContext -> List TxOut
getContinuingOutputs ScriptContext
ctx
  | Haskell.Just TxInInfo {txInInfoResolved :: TxInInfo -> TxOut
txInInfoResolved = V2.TxOut {Address
txOutAddress :: TxOut -> Address
txOutAddress :: Address
txOutAddress}} <- ScriptContext -> Maybe TxInInfo
findOwnInput ScriptContext
ctx =
      (TxOut -> Bool) -> List TxOut -> List TxOut
forall a.
(UnsafeFromData a, ToData a) =>
(a -> Bool) -> List a -> List a
Data.List.filter (Address -> TxOut -> Bool
f Address
txOutAddress) (TxInfo -> List TxOut
txInfoOutputs (ScriptContext -> TxInfo
scriptContextTxInfo ScriptContext
ctx))
  where
    f :: Address -> TxOut -> Bool
f Address
addr V2.TxOut {txOutAddress :: TxOut -> Address
txOutAddress = Address
otherAddress} = Address
addr Address -> Address -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== Address
otherAddress
getContinuingOutputs ScriptContext
_ = BuiltinString -> List TxOut
forall a. BuiltinString -> a
PlutusTx.traceError BuiltinString
"Lf"

{-# INLINEABLE txSignedBy #-}
txSignedBy :: TxInfo -> V2.PubKeyHash -> Haskell.Bool
txSignedBy :: TxInfo -> PubKeyHash -> Bool
txSignedBy TxInfo {List Credential
txInfoGuards :: TxInfo -> List Credential
txInfoGuards :: List Credential
txInfoGuards} PubKeyHash
keyHash =
  case (Credential -> Bool) -> List Credential -> Maybe Credential
forall a. UnsafeFromData a => (a -> Bool) -> List a -> Maybe a
Data.List.find Credential -> Bool
isSigner List Credential
txInfoGuards of
    Haskell.Just Credential
_ -> Bool
Haskell.True
    Maybe Credential
Haskell.Nothing -> Bool
Haskell.False
  where
    isSigner :: Credential -> Bool
isSigner (V2.PubKeyCredential PubKeyHash
guardKeyHash) = PubKeyHash
guardKeyHash PubKeyHash -> PubKeyHash -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== PubKeyHash
keyHash
    isSigner Credential
_ = Bool
Haskell.False

{-# INLINEABLE pubKeyOutputsAt #-}
pubKeyOutputsAt :: V2.PubKeyHash -> TxInfo -> List V2.Value
pubKeyOutputsAt :: PubKeyHash -> TxInfo -> List Value
pubKeyOutputsAt PubKeyHash
pk TxInfo
p =
  let flt :: TxOut -> Maybe Value
flt V2.TxOut {txOutAddress :: TxOut -> Address
txOutAddress = V2.Address (V2.PubKeyCredential PubKeyHash
pk') Maybe StakingCredential
_, Value
txOutValue :: TxOut -> Value
txOutValue :: Value
txOutValue}
        | PubKeyHash
pk PubKeyHash -> PubKeyHash -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== PubKeyHash
pk' = Value -> Maybe Value
forall a. a -> Maybe a
Haskell.Just Value
txOutValue
      flt TxOut
_ = Maybe Value
forall a. Maybe a
Haskell.Nothing
   in (TxOut -> Maybe Value) -> List TxOut -> List Value
forall a b.
(UnsafeFromData a, ToData b) =>
(a -> Maybe b) -> List a -> List b
Data.List.mapMaybe TxOut -> Maybe Value
flt (TxInfo -> List TxOut
txInfoOutputs TxInfo
p)

{-# INLINEABLE valuePaidTo #-}
valuePaidTo :: TxInfo -> V2.PubKeyHash -> V2.Value
valuePaidTo :: TxInfo -> PubKeyHash -> Value
valuePaidTo TxInfo
ptx PubKeyHash
pkh = List Value -> Value
forall a. (Monoid a, UnsafeFromData a) => List a -> a
Data.List.mconcat (PubKeyHash -> TxInfo -> List Value
pubKeyOutputsAt PubKeyHash
pkh TxInfo
ptx)

{-# INLINEABLE valueSpent #-}
valueSpent :: TxInfo -> V2.Value
valueSpent :: TxInfo -> Value
valueSpent = (TxInInfo -> Value) -> List TxInInfo -> Value
forall a m. (UnsafeFromData a, Monoid m) => (a -> m) -> List a -> m
Data.List.foldMap (TxOut -> Value
V2.txOutValue (TxOut -> Value) -> (TxInInfo -> TxOut) -> TxInInfo -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
PlutusTx.. TxInInfo -> TxOut
txInInfoResolved) (List TxInInfo -> Value)
-> (TxInfo -> List TxInInfo) -> TxInfo -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
PlutusTx.. TxInfo -> List TxInInfo
txInfoInputs

{-# INLINEABLE valueProduced #-}
valueProduced :: TxInfo -> V2.Value
valueProduced :: TxInfo -> Value
valueProduced = (TxOut -> Value) -> List TxOut -> Value
forall a m. (UnsafeFromData a, Monoid m) => (a -> m) -> List a -> m
Data.List.foldMap TxOut -> Value
V2.txOutValue (List TxOut -> Value) -> (TxInfo -> List TxOut) -> TxInfo -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
PlutusTx.. TxInfo -> List TxOut
txInfoOutputs

{-# INLINEABLE ownCurrencySymbol #-}
ownCurrencySymbol :: ScriptContext -> V2.CurrencySymbol
ownCurrencySymbol :: ScriptContext -> CurrencySymbol
ownCurrencySymbol ScriptContext {scriptContextScriptInfo :: ScriptContext -> ScriptInfo
scriptContextScriptInfo = MintingScript CurrencySymbol
cs} = CurrencySymbol
cs
ownCurrencySymbol ScriptContext
_ = BuiltinString -> CurrencySymbol
forall a. BuiltinString -> a
PlutusTx.traceError BuiltinString
"Lh"

{-# INLINEABLE spendsOutput #-}
spendsOutput :: TxInfo -> V3.TxId -> Haskell.Integer -> Haskell.Bool
spendsOutput :: TxInfo -> TxId -> Integer -> Bool
spendsOutput TxInfo
txInfo TxId
txId Integer
i =
  let spendsOutRef :: TxInInfo -> Bool
spendsOutRef TxInInfo
inp =
        let outRef :: TxOutRef
outRef = TxInInfo -> TxOutRef
txInInfoOutRef TxInInfo
inp
         in TxId
txId
              TxId -> TxId -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== TxOutRef -> TxId
V3.txOutRefId TxOutRef
outRef
              Bool -> Bool -> Bool
PlutusTx.&& Integer
i
              Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== TxOutRef -> Integer
V3.txOutRefIdx TxOutRef
outRef
   in (TxInInfo -> Bool) -> List TxInInfo -> Bool
forall a. UnsafeFromData a => (a -> Bool) -> List a -> Bool
Data.List.any TxInInfo -> Bool
spendsOutRef (TxInfo -> List TxInInfo
txInfoInputs TxInfo
txInfo)

instance Pretty TxInfo where
  pretty :: forall ann. TxInfo -> Doc ann
pretty TxInfo {Maybe Integer
Maybe Lovelace
POSIXTimeRange
List Credential
List TxOut
List ProposalProcedure
List TxInInfo
List TxCert
Map Credential (Maybe Datum)
Map Voter (Map GovernanceActionId Vote)
Map ScriptPurpose Redeemer
Map DatumHash Datum
Map AccountId Lovelace
TxId
Lovelace
MintValue
AccountBalanceIntervals
txInfoId :: TxInfo -> TxId
txInfoSubTxIx :: TxInfo -> Maybe Integer
txInfoInputs :: TxInfo -> List TxInInfo
txInfoReferenceInputs :: TxInfo -> List TxInInfo
txInfoOutputs :: TxInfo -> List TxOut
txInfoFee :: TxInfo -> Lovelace
txInfoMint :: TxInfo -> MintValue
txInfoTxCerts :: TxInfo -> List TxCert
txInfoWithdrawals :: TxInfo -> Map AccountId Lovelace
txInfoDirectDeposits :: TxInfo -> Map AccountId Lovelace
txInfoAccountBalanceIntervals :: TxInfo -> AccountBalanceIntervals
txInfoValidRange :: TxInfo -> POSIXTimeRange
txInfoGuards :: TxInfo -> List Credential
txInfoRequiredTopLevelGuards :: TxInfo -> Map Credential (Maybe Datum)
txInfoRedeemers :: TxInfo -> Map ScriptPurpose Redeemer
txInfoData :: TxInfo -> Map DatumHash Datum
txInfoVotes :: TxInfo -> Map Voter (Map GovernanceActionId Vote)
txInfoProposalProcedures :: TxInfo -> List ProposalProcedure
txInfoCurrentTreasuryAmount :: TxInfo -> Maybe Lovelace
txInfoTreasuryDonation :: TxInfo -> Lovelace
txInfoId :: TxId
txInfoSubTxIx :: Maybe Integer
txInfoInputs :: List TxInInfo
txInfoReferenceInputs :: List TxInInfo
txInfoOutputs :: List TxOut
txInfoFee :: Lovelace
txInfoMint :: MintValue
txInfoTxCerts :: List TxCert
txInfoWithdrawals :: Map AccountId Lovelace
txInfoDirectDeposits :: Map AccountId Lovelace
txInfoAccountBalanceIntervals :: AccountBalanceIntervals
txInfoValidRange :: POSIXTimeRange
txInfoGuards :: List Credential
txInfoRequiredTopLevelGuards :: Map Credential (Maybe Datum)
txInfoRedeemers :: Map ScriptPurpose Redeemer
txInfoData :: Map DatumHash Datum
txInfoVotes :: Map Voter (Map GovernanceActionId Vote)
txInfoProposalProcedures :: List ProposalProcedure
txInfoCurrentTreasuryAmount :: Maybe Lovelace
txInfoTreasuryDonation :: Lovelace
..} =
    [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep
      [ Doc ann
"TxId:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> TxId -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. TxId -> Doc ann
pretty TxId
txInfoId
      , Doc ann
"Sub-transaction index:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Maybe Integer -> Doc ann
forall ann. Maybe Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Maybe Integer
txInfoSubTxIx
      , Doc ann
"Inputs:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> List TxInInfo -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. List TxInInfo -> Doc ann
pretty List TxInInfo
txInfoInputs
      , Doc ann
"Reference inputs:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> List TxInInfo -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. List TxInInfo -> Doc ann
pretty List TxInInfo
txInfoReferenceInputs
      , Doc ann
"Outputs:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> List TxOut -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. List TxOut -> Doc ann
pretty List TxOut
txInfoOutputs
      , Doc ann
"Fee:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Lovelace -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Lovelace -> Doc ann
pretty Lovelace
txInfoFee
      , Doc ann
"Value minted:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> MintValue -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. MintValue -> Doc ann
pretty MintValue
txInfoMint
      , Doc ann
"TxCerts:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> List TxCert -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. List TxCert -> Doc ann
pretty List TxCert
txInfoTxCerts
      , Doc ann
"Withdrawals:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Map AccountId Lovelace -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Map AccountId Lovelace -> Doc ann
pretty Map AccountId Lovelace
txInfoWithdrawals
      , Doc ann
"Direct deposits:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Map AccountId Lovelace -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Map AccountId Lovelace -> Doc ann
pretty Map AccountId Lovelace
txInfoDirectDeposits
      , Doc ann
"Account balance intervals:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> AccountBalanceIntervals -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. AccountBalanceIntervals -> Doc ann
pretty AccountBalanceIntervals
txInfoAccountBalanceIntervals
      , Doc ann
"Valid range:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> POSIXTimeRange -> Doc ann
forall ann. POSIXTimeRange -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty POSIXTimeRange
txInfoValidRange
      , Doc ann
"Guards:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> List Credential -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. List Credential -> Doc ann
pretty List Credential
txInfoGuards
      , Doc ann
"Required top-level guards:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Map Credential (Maybe Datum) -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Map Credential (Maybe Datum) -> Doc ann
pretty Map Credential (Maybe Datum)
txInfoRequiredTopLevelGuards
      , Doc ann
"Redeemers:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Map ScriptPurpose Redeemer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Map ScriptPurpose Redeemer -> Doc ann
pretty Map ScriptPurpose Redeemer
txInfoRedeemers
      , Doc ann
"Datums:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Map DatumHash Datum -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Map DatumHash Datum -> Doc ann
pretty Map DatumHash Datum
txInfoData
      , Doc ann
"Votes:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Map Voter (Map GovernanceActionId Vote) -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Map Voter (Map GovernanceActionId Vote) -> Doc ann
pretty Map Voter (Map GovernanceActionId Vote)
txInfoVotes
      , Doc ann
"Proposal procedures:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> List ProposalProcedure -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. List ProposalProcedure -> Doc ann
pretty List ProposalProcedure
txInfoProposalProcedures
      , Doc ann
"Current treasury amount:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Maybe Lovelace -> Doc ann
forall ann. Maybe Lovelace -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Maybe Lovelace
txInfoCurrentTreasuryAmount
      , Doc ann
"Treasury donation:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Lovelace -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Lovelace -> Doc ann
pretty Lovelace
txInfoTreasuryDonation
      ]

instance Pretty ScriptContext where
  pretty :: forall ann. ScriptContext -> Doc ann
pretty ScriptContext {TxInfo
ScriptInfo
ScriptHash
Redeemer
scriptContextTxInfo :: ScriptContext -> TxInfo
scriptContextRedeemer :: ScriptContext -> Redeemer
scriptContextScriptInfo :: ScriptContext -> ScriptInfo
scriptContextScriptHash :: ScriptContext -> ScriptHash
scriptContextTxInfo :: TxInfo
scriptContextRedeemer :: Redeemer
scriptContextScriptInfo :: ScriptInfo
scriptContextScriptHash :: ScriptHash
..} =
    [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep
      [ Doc ann
"ScriptInfo:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> ScriptInfo -> Doc ann
forall ann. ScriptInfo -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty ScriptInfo
scriptContextScriptInfo
      , Doc ann
"ScriptHash:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> ScriptHash -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. ScriptHash -> Doc ann
pretty ScriptHash
scriptContextScriptHash
      , Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
nest Int
2 ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [Doc ann
"TxInfo:", TxInfo -> Doc ann
forall ann. TxInfo -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty TxInfo
scriptContextTxInfo])
      , Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
nest Int
2 ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [Doc ann
"Redeemer:", Redeemer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Redeemer -> Doc ann
pretty Redeemer
scriptContextRedeemer])
      ]