-- editorconfig-checker-disable-file
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -Wno-simplifiable-class-constraints #-}
{-# OPTIONS_GHC -fno-omit-interface-pragmas #-}
{-# OPTIONS_GHC -fno-specialise #-}
{-# OPTIONS_GHC -fno-strictness #-}

module PlutusLedgerApi.V4.Contexts
  ( AccountId (..)
  , AccountBalanceInterval (..)
  , AccountBalanceIntervals (..)
  , ColdCommitteeCredential (..)
  , HotCommitteeCredential (..)
  , DRepCredential (..)
  , DRep (..)
  , Delegatee (..)
  , TxCert (..)
  , Voter (..)
  , Vote (..)
  , GovernanceActionId (..)
  , Committee (..)
  , Constitution (..)
  , ProtocolVersion (..)
  , ChangedParameters (..)
  , GovernanceAction (..)
  , ProposalProcedure (..)
  , ScriptPurpose (..)
  , ScriptInfo (..)
  , TxInInfo (..)
  , TxInfo (..)
  , TopTxInfoSimplified (..)
  , TopTxInfo (..)
  , ScriptContext (..)
  , findOwnInput
  , findDatum
  , findDatumHash
  , findTxInByTxOutRef
  , findContinuingOutputs
  , getContinuingOutputs
  , txSignedBy
  , pubKeyOutputsAt
  , valuePaidTo
  , valueSpent
  , valueProduced
  , ownCurrencySymbol
  , spendsOutput
  ) where

import Data.Function ((&))
import GHC.Generics (Generic)
import PlutusLedgerApi.V2 qualified as V2
import PlutusLedgerApi.V3.Contexts
  ( ChangedParameters (..)
  , ColdCommitteeCredential (..)
  , Committee (..)
  , Constitution (..)
  , DRep (..)
  , DRepCredential (..)
  , Delegatee (..)
  , GovernanceAction (..)
  , GovernanceActionId (..)
  , HotCommitteeCredential (..)
  , ProposalProcedure (..)
  , ProtocolVersion (..)
  , TxInInfo (..)
  , Vote (..)
  , Voter (..)
  )
import PlutusLedgerApi.V3.MintValue qualified as V3
import PlutusLedgerApi.V3.Tx qualified as V3
import PlutusTx (makeIsDataSchemaIndexed)
import PlutusTx qualified
import PlutusTx.AssocMap (Map, lookup, toList)
import PlutusTx.Blueprint
  ( HasBlueprintDefinition
  , HasBlueprintSchema
  , HasSchemaDefinition
  , SchemaInfo (..)
  )
import PlutusTx.Blueprint.Class (HasBlueprintSchema (..))
import PlutusTx.Blueprint.Definition.Derive (definitionRef)
import PlutusTx.Blueprint.Schema (withSchemaInfo)
import PlutusTx.Foldable qualified as F
import PlutusTx.Lift (makeLift)
import PlutusTx.List qualified as List
import PlutusTx.Prelude qualified as PlutusTx
import Prettyprinter (nest, vsep, (<+>))
import Prettyprinter.Extras (Pretty (pretty), PrettyShow (PrettyShow))
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 anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition AccountId
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)
  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
    , Eq AccountId
Eq AccountId =>
(AccountId -> AccountId -> Ordering)
-> (AccountId -> AccountId -> Bool)
-> (AccountId -> AccountId -> Bool)
-> (AccountId -> AccountId -> Bool)
-> (AccountId -> AccountId -> Bool)
-> (AccountId -> AccountId -> AccountId)
-> (AccountId -> AccountId -> AccountId)
-> Ord AccountId
AccountId -> AccountId -> Bool
AccountId -> AccountId -> Ordering
AccountId -> AccountId -> AccountId
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 :: AccountId -> AccountId -> Ordering
compare :: AccountId -> AccountId -> Ordering
$c< :: AccountId -> AccountId -> Bool
< :: AccountId -> AccountId -> Bool
$c<= :: AccountId -> AccountId -> Bool
<= :: AccountId -> AccountId -> Bool
$c> :: AccountId -> AccountId -> Bool
> :: AccountId -> AccountId -> Bool
$c>= :: AccountId -> AccountId -> Bool
>= :: AccountId -> AccountId -> Bool
$cmax :: AccountId -> AccountId -> AccountId
max :: AccountId -> AccountId -> AccountId
$cmin :: AccountId -> AccountId -> AccountId
min :: AccountId -> AccountId -> AccountId
Haskell.Ord
    , 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
    )

instance
  ( HasSchemaDefinition V2.PubKeyHash referencedTypes
  , HasSchemaDefinition V2.ScriptHash referencedTypes
  )
  => HasBlueprintSchema AccountId referencedTypes
  where
  schema :: Schema referencedTypes
schema =
    forall t (referencedTypes :: [*]).
HasBlueprintSchema t referencedTypes =>
Schema referencedTypes
schema @V2.Credential @referencedTypes
      Schema referencedTypes
-> (Schema referencedTypes -> Schema referencedTypes)
-> Schema referencedTypes
forall a b. a -> (a -> b) -> b
& (SchemaInfo -> SchemaInfo)
-> Schema referencedTypes -> Schema referencedTypes
forall (referencedTypes :: [*]).
(SchemaInfo -> SchemaInfo)
-> Schema referencedTypes -> Schema referencedTypes
withSchemaInfo \SchemaInfo
info -> SchemaInfo
info {title = Haskell.Just "AccountId"}

data AccountBalanceInterval
  = AccountBalanceLowerBound V2.Lovelace
  | AccountBalanceUpperBound V2.Lovelace
  | AccountBalanceBothBounds V2.Lovelace V2.Lovelace
  | AccountBalanceExact V2.Lovelace
  deriving stock ((forall x. AccountBalanceInterval -> Rep AccountBalanceInterval x)
-> (forall x.
    Rep AccountBalanceInterval x -> AccountBalanceInterval)
-> Generic AccountBalanceInterval
forall x. Rep AccountBalanceInterval x -> AccountBalanceInterval
forall x. AccountBalanceInterval -> Rep AccountBalanceInterval x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. AccountBalanceInterval -> Rep AccountBalanceInterval x
from :: forall x. AccountBalanceInterval -> Rep AccountBalanceInterval x
$cto :: forall x. Rep AccountBalanceInterval x -> AccountBalanceInterval
to :: forall x. Rep AccountBalanceInterval x -> AccountBalanceInterval
Generic, Int -> AccountBalanceInterval -> ShowS
[AccountBalanceInterval] -> ShowS
AccountBalanceInterval -> String
(Int -> AccountBalanceInterval -> ShowS)
-> (AccountBalanceInterval -> String)
-> ([AccountBalanceInterval] -> ShowS)
-> Show AccountBalanceInterval
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AccountBalanceInterval -> ShowS
showsPrec :: Int -> AccountBalanceInterval -> ShowS
$cshow :: AccountBalanceInterval -> String
show :: AccountBalanceInterval -> String
$cshowList :: [AccountBalanceInterval] -> ShowS
showList :: [AccountBalanceInterval] -> ShowS
Haskell.Show, AccountBalanceInterval -> AccountBalanceInterval -> Bool
(AccountBalanceInterval -> AccountBalanceInterval -> Bool)
-> (AccountBalanceInterval -> AccountBalanceInterval -> Bool)
-> Eq AccountBalanceInterval
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
== :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
$c/= :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
/= :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
Haskell.Eq, Eq AccountBalanceInterval
Eq AccountBalanceInterval =>
(AccountBalanceInterval -> AccountBalanceInterval -> Ordering)
-> (AccountBalanceInterval -> AccountBalanceInterval -> Bool)
-> (AccountBalanceInterval -> AccountBalanceInterval -> Bool)
-> (AccountBalanceInterval -> AccountBalanceInterval -> Bool)
-> (AccountBalanceInterval -> AccountBalanceInterval -> Bool)
-> (AccountBalanceInterval
    -> AccountBalanceInterval -> AccountBalanceInterval)
-> (AccountBalanceInterval
    -> AccountBalanceInterval -> AccountBalanceInterval)
-> Ord AccountBalanceInterval
AccountBalanceInterval -> AccountBalanceInterval -> Bool
AccountBalanceInterval -> AccountBalanceInterval -> Ordering
AccountBalanceInterval
-> AccountBalanceInterval -> AccountBalanceInterval
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 :: AccountBalanceInterval -> AccountBalanceInterval -> Ordering
compare :: AccountBalanceInterval -> AccountBalanceInterval -> Ordering
$c< :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
< :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
$c<= :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
<= :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
$c> :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
> :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
$c>= :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
>= :: AccountBalanceInterval -> AccountBalanceInterval -> Bool
$cmax :: AccountBalanceInterval
-> AccountBalanceInterval -> AccountBalanceInterval
max :: AccountBalanceInterval
-> AccountBalanceInterval -> AccountBalanceInterval
$cmin :: AccountBalanceInterval
-> AccountBalanceInterval -> AccountBalanceInterval
min :: AccountBalanceInterval
-> AccountBalanceInterval -> AccountBalanceInterval
Haskell.Ord)
  deriving anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition AccountBalanceInterval
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)
  deriving ((forall ann. AccountBalanceInterval -> Doc ann)
-> (forall ann. [AccountBalanceInterval] -> Doc ann)
-> Pretty AccountBalanceInterval
forall ann. [AccountBalanceInterval] -> Doc ann
forall ann. AccountBalanceInterval -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. AccountBalanceInterval -> Doc ann
pretty :: forall ann. AccountBalanceInterval -> Doc ann
$cprettyList :: forall ann. [AccountBalanceInterval] -> Doc ann
prettyList :: forall ann. [AccountBalanceInterval] -> Doc ann
Pretty) via (PrettyShow AccountBalanceInterval)

PlutusTx.deriveEq ''AccountBalanceInterval

$(makeLift ''AccountBalanceInterval)
$( makeIsDataSchemaIndexed
     ''AccountBalanceInterval
     [ ('AccountBalanceLowerBound, 0)
     , ('AccountBalanceUpperBound, 1)
     , ('AccountBalanceBothBounds, 2)
     , ('AccountBalanceExact, 3)
     ]
 )

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 anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition AccountBalanceIntervals
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)
  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
    ( AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
(AccountBalanceIntervals -> AccountBalanceIntervals -> Bool)
-> (AccountBalanceIntervals -> AccountBalanceIntervals -> Bool)
-> Eq AccountBalanceIntervals
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
== :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
$c/= :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
/= :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
Haskell.Eq
    , Eq AccountBalanceIntervals
Eq AccountBalanceIntervals =>
(AccountBalanceIntervals -> AccountBalanceIntervals -> Ordering)
-> (AccountBalanceIntervals -> AccountBalanceIntervals -> Bool)
-> (AccountBalanceIntervals -> AccountBalanceIntervals -> Bool)
-> (AccountBalanceIntervals -> AccountBalanceIntervals -> Bool)
-> (AccountBalanceIntervals -> AccountBalanceIntervals -> Bool)
-> (AccountBalanceIntervals
    -> AccountBalanceIntervals -> AccountBalanceIntervals)
-> (AccountBalanceIntervals
    -> AccountBalanceIntervals -> AccountBalanceIntervals)
-> Ord AccountBalanceIntervals
AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
AccountBalanceIntervals -> AccountBalanceIntervals -> Ordering
AccountBalanceIntervals
-> AccountBalanceIntervals -> AccountBalanceIntervals
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 :: AccountBalanceIntervals -> AccountBalanceIntervals -> Ordering
compare :: AccountBalanceIntervals -> AccountBalanceIntervals -> Ordering
$c< :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
< :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
$c<= :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
<= :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
$c> :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
> :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
$c>= :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
>= :: AccountBalanceIntervals -> AccountBalanceIntervals -> Bool
$cmax :: AccountBalanceIntervals
-> AccountBalanceIntervals -> AccountBalanceIntervals
max :: AccountBalanceIntervals
-> AccountBalanceIntervals -> AccountBalanceIntervals
$cmin :: AccountBalanceIntervals
-> AccountBalanceIntervals -> AccountBalanceIntervals
min :: AccountBalanceIntervals
-> AccountBalanceIntervals -> AccountBalanceIntervals
Haskell.Ord
    , 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
    )

instance
  ( HasBlueprintSchema AccountId referencedTypes
  , HasBlueprintSchema AccountBalanceInterval referencedTypes
  )
  => HasBlueprintSchema AccountBalanceIntervals referencedTypes
  where
  schema :: Schema referencedTypes
schema =
    forall t (referencedTypes :: [*]).
HasBlueprintSchema t referencedTypes =>
Schema referencedTypes
schema @(Map AccountId AccountBalanceInterval) @referencedTypes
      Schema referencedTypes
-> (Schema referencedTypes -> Schema referencedTypes)
-> Schema referencedTypes
forall a b. a -> (a -> b) -> b
& (SchemaInfo -> SchemaInfo)
-> Schema referencedTypes -> Schema referencedTypes
forall (referencedTypes :: [*]).
(SchemaInfo -> SchemaInfo)
-> Schema referencedTypes -> Schema referencedTypes
withSchemaInfo \SchemaInfo
info -> SchemaInfo
info {title = Haskell.Just "AccountBalanceIntervals"}

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 ((forall x. TxCert -> Rep TxCert x)
-> (forall x. Rep TxCert x -> TxCert) -> Generic TxCert
forall x. Rep TxCert x -> TxCert
forall x. TxCert -> Rep TxCert x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TxCert -> Rep TxCert x
from :: forall x. TxCert -> Rep TxCert x
$cto :: forall x. Rep TxCert x -> TxCert
to :: forall x. Rep TxCert x -> TxCert
Generic, Int -> TxCert -> ShowS
[TxCert] -> ShowS
TxCert -> String
(Int -> TxCert -> ShowS)
-> (TxCert -> String) -> ([TxCert] -> ShowS) -> Show TxCert
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TxCert -> ShowS
showsPrec :: Int -> TxCert -> ShowS
$cshow :: TxCert -> String
show :: TxCert -> String
$cshowList :: [TxCert] -> ShowS
showList :: [TxCert] -> ShowS
Haskell.Show, TxCert -> TxCert -> Bool
(TxCert -> TxCert -> Bool)
-> (TxCert -> TxCert -> Bool) -> Eq TxCert
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TxCert -> TxCert -> Bool
== :: TxCert -> TxCert -> Bool
$c/= :: TxCert -> TxCert -> Bool
/= :: TxCert -> TxCert -> Bool
Haskell.Eq, Eq TxCert
Eq TxCert =>
(TxCert -> TxCert -> Ordering)
-> (TxCert -> TxCert -> Bool)
-> (TxCert -> TxCert -> Bool)
-> (TxCert -> TxCert -> Bool)
-> (TxCert -> TxCert -> Bool)
-> (TxCert -> TxCert -> TxCert)
-> (TxCert -> TxCert -> TxCert)
-> Ord TxCert
TxCert -> TxCert -> Bool
TxCert -> TxCert -> Ordering
TxCert -> TxCert -> TxCert
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 :: TxCert -> TxCert -> Ordering
compare :: TxCert -> TxCert -> Ordering
$c< :: TxCert -> TxCert -> Bool
< :: TxCert -> TxCert -> Bool
$c<= :: TxCert -> TxCert -> Bool
<= :: TxCert -> TxCert -> Bool
$c> :: TxCert -> TxCert -> Bool
> :: TxCert -> TxCert -> Bool
$c>= :: TxCert -> TxCert -> Bool
>= :: TxCert -> TxCert -> Bool
$cmax :: TxCert -> TxCert -> TxCert
max :: TxCert -> TxCert -> TxCert
$cmin :: TxCert -> TxCert -> TxCert
min :: TxCert -> TxCert -> TxCert
Haskell.Ord)
  deriving anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition TxCert
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)
  deriving ((forall ann. TxCert -> Doc ann)
-> (forall ann. [TxCert] -> Doc ann) -> Pretty TxCert
forall ann. [TxCert] -> Doc ann
forall ann. TxCert -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. TxCert -> Doc ann
pretty :: forall ann. TxCert -> Doc ann
$cprettyList :: forall ann. [TxCert] -> Doc ann
prettyList :: forall ann. [TxCert] -> Doc ann
Pretty) via (PrettyShow TxCert)

PlutusTx.deriveEq ''TxCert

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 ((forall x. ScriptPurpose -> Rep ScriptPurpose x)
-> (forall x. Rep ScriptPurpose x -> ScriptPurpose)
-> Generic ScriptPurpose
forall x. Rep ScriptPurpose x -> ScriptPurpose
forall x. ScriptPurpose -> Rep ScriptPurpose x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ScriptPurpose -> Rep ScriptPurpose x
from :: forall x. ScriptPurpose -> Rep ScriptPurpose x
$cto :: forall x. Rep ScriptPurpose x -> ScriptPurpose
to :: forall x. Rep ScriptPurpose x -> ScriptPurpose
Generic, Int -> ScriptPurpose -> ShowS
[ScriptPurpose] -> ShowS
ScriptPurpose -> String
(Int -> ScriptPurpose -> ShowS)
-> (ScriptPurpose -> String)
-> ([ScriptPurpose] -> ShowS)
-> Show ScriptPurpose
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ScriptPurpose -> ShowS
showsPrec :: Int -> ScriptPurpose -> ShowS
$cshow :: ScriptPurpose -> String
show :: ScriptPurpose -> String
$cshowList :: [ScriptPurpose] -> ShowS
showList :: [ScriptPurpose] -> ShowS
Haskell.Show, ScriptPurpose -> ScriptPurpose -> Bool
(ScriptPurpose -> ScriptPurpose -> Bool)
-> (ScriptPurpose -> ScriptPurpose -> Bool) -> Eq ScriptPurpose
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ScriptPurpose -> ScriptPurpose -> Bool
== :: ScriptPurpose -> ScriptPurpose -> Bool
$c/= :: ScriptPurpose -> ScriptPurpose -> Bool
/= :: ScriptPurpose -> ScriptPurpose -> Bool
Haskell.Eq, Eq ScriptPurpose
Eq ScriptPurpose =>
(ScriptPurpose -> ScriptPurpose -> Ordering)
-> (ScriptPurpose -> ScriptPurpose -> Bool)
-> (ScriptPurpose -> ScriptPurpose -> Bool)
-> (ScriptPurpose -> ScriptPurpose -> Bool)
-> (ScriptPurpose -> ScriptPurpose -> Bool)
-> (ScriptPurpose -> ScriptPurpose -> ScriptPurpose)
-> (ScriptPurpose -> ScriptPurpose -> ScriptPurpose)
-> Ord ScriptPurpose
ScriptPurpose -> ScriptPurpose -> Bool
ScriptPurpose -> ScriptPurpose -> Ordering
ScriptPurpose -> ScriptPurpose -> ScriptPurpose
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 :: ScriptPurpose -> ScriptPurpose -> Ordering
compare :: ScriptPurpose -> ScriptPurpose -> Ordering
$c< :: ScriptPurpose -> ScriptPurpose -> Bool
< :: ScriptPurpose -> ScriptPurpose -> Bool
$c<= :: ScriptPurpose -> ScriptPurpose -> Bool
<= :: ScriptPurpose -> ScriptPurpose -> Bool
$c> :: ScriptPurpose -> ScriptPurpose -> Bool
> :: ScriptPurpose -> ScriptPurpose -> Bool
$c>= :: ScriptPurpose -> ScriptPurpose -> Bool
>= :: ScriptPurpose -> ScriptPurpose -> Bool
$cmax :: ScriptPurpose -> ScriptPurpose -> ScriptPurpose
max :: ScriptPurpose -> ScriptPurpose -> ScriptPurpose
$cmin :: ScriptPurpose -> ScriptPurpose -> ScriptPurpose
min :: ScriptPurpose -> ScriptPurpose -> ScriptPurpose
Haskell.Ord)
  deriving anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition ScriptPurpose
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)
  deriving ((forall ann. ScriptPurpose -> Doc ann)
-> (forall ann. [ScriptPurpose] -> Doc ann) -> Pretty ScriptPurpose
forall ann. [ScriptPurpose] -> Doc ann
forall ann. ScriptPurpose -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. ScriptPurpose -> Doc ann
pretty :: forall ann. ScriptPurpose -> Doc ann
$cprettyList :: forall ann. [ScriptPurpose] -> Doc ann
prettyList :: forall ann. [ScriptPurpose] -> Doc ann
Pretty) via (PrettyShow ScriptPurpose)

data TxInfo = TxInfo
  { TxInfo -> TxId
txInfoId :: V3.TxId
  , TxInfo -> Maybe Integer
txInfoSubTxIx :: Haskell.Maybe Haskell.Integer
  , TxInfo -> [TxInInfo]
txInfoInputs :: [TxInInfo]
  , TxInfo -> [TxInInfo]
txInfoReferenceInputs :: [TxInInfo]
  , TxInfo -> [TxOut]
txInfoOutputs :: [V2.TxOut]
  , TxInfo -> Lovelace
txInfoFee :: V2.Lovelace
  , TxInfo -> MintValue
txInfoMint :: V3.MintValue
  , TxInfo -> [TxCert]
txInfoTxCerts :: [TxCert]
  , TxInfo -> Map AccountId Lovelace
txInfoWithdrawals :: Map AccountId V2.Lovelace
  , TxInfo -> Map AccountId Lovelace
txInfoDirectDeposits :: Map AccountId V2.Lovelace
  , TxInfo -> AccountBalanceIntervals
txInfoAccountBalanceIntervals :: AccountBalanceIntervals
  , TxInfo -> POSIXTimeRange
txInfoValidRange :: V2.POSIXTimeRange
  , TxInfo -> [Credential]
txInfoGuards :: [V2.Credential]
  , TxInfo -> Map Credential (Maybe Datum)
txInfoRequiredTopLevelGuards :: Map V2.Credential (Haskell.Maybe V2.Datum)
  , TxInfo -> Map ScriptPurpose Redeemer
txInfoRedeemers :: Map ScriptPurpose V2.Redeemer
  , TxInfo -> Map DatumHash Datum
txInfoData :: Map V2.DatumHash V2.Datum
  , TxInfo -> Map Voter (Map GovernanceActionId Vote)
txInfoVotes :: Map Voter (Map GovernanceActionId Vote)
  , TxInfo -> [ProposalProcedure]
txInfoProposalProcedures :: [ProposalProcedure]
  , TxInfo -> Maybe Lovelace
txInfoCurrentTreasuryAmount :: Haskell.Maybe V2.Lovelace
  , TxInfo -> Lovelace
txInfoTreasuryDonation :: V2.Lovelace
  }
  deriving stock ((forall x. TxInfo -> Rep TxInfo x)
-> (forall x. Rep TxInfo x -> TxInfo) -> Generic TxInfo
forall x. Rep TxInfo x -> TxInfo
forall x. TxInfo -> Rep TxInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TxInfo -> Rep TxInfo x
from :: forall x. TxInfo -> Rep TxInfo x
$cto :: forall x. Rep TxInfo x -> TxInfo
to :: forall x. Rep TxInfo x -> TxInfo
Generic, Int -> TxInfo -> ShowS
[TxInfo] -> ShowS
TxInfo -> String
(Int -> TxInfo -> ShowS)
-> (TxInfo -> String) -> ([TxInfo] -> ShowS) -> Show TxInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TxInfo -> ShowS
showsPrec :: Int -> TxInfo -> ShowS
$cshow :: TxInfo -> String
show :: TxInfo -> String
$cshowList :: [TxInfo] -> ShowS
showList :: [TxInfo] -> ShowS
Haskell.Show, TxInfo -> TxInfo -> Bool
(TxInfo -> TxInfo -> Bool)
-> (TxInfo -> TxInfo -> Bool) -> Eq TxInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TxInfo -> TxInfo -> Bool
== :: TxInfo -> TxInfo -> Bool
$c/= :: TxInfo -> TxInfo -> Bool
/= :: TxInfo -> TxInfo -> Bool
Haskell.Eq)
  deriving anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition TxInfo
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)

instance Pretty TxInfo where
  pretty :: forall ann. TxInfo -> Doc ann
pretty TxInfo {[Credential]
[TxOut]
[TxInInfo]
[ProposalProcedure]
[TxCert]
Maybe Integer
Maybe Lovelace
Map DatumHash Datum
Map Credential (Maybe Datum)
Map Voter (Map GovernanceActionId Vote)
Map AccountId Lovelace
Map ScriptPurpose Redeemer
POSIXTimeRange
TxId
Lovelace
MintValue
AccountBalanceIntervals
txInfoId :: TxInfo -> TxId
txInfoSubTxIx :: TxInfo -> Maybe Integer
txInfoInputs :: TxInfo -> [TxInInfo]
txInfoReferenceInputs :: TxInfo -> [TxInInfo]
txInfoOutputs :: TxInfo -> [TxOut]
txInfoFee :: TxInfo -> Lovelace
txInfoMint :: TxInfo -> MintValue
txInfoTxCerts :: TxInfo -> [TxCert]
txInfoWithdrawals :: TxInfo -> Map AccountId Lovelace
txInfoDirectDeposits :: TxInfo -> Map AccountId Lovelace
txInfoAccountBalanceIntervals :: TxInfo -> AccountBalanceIntervals
txInfoValidRange :: TxInfo -> POSIXTimeRange
txInfoGuards :: TxInfo -> [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 -> [ProposalProcedure]
txInfoCurrentTreasuryAmount :: TxInfo -> Maybe Lovelace
txInfoTreasuryDonation :: TxInfo -> Lovelace
txInfoId :: TxId
txInfoSubTxIx :: Maybe Integer
txInfoInputs :: [TxInInfo]
txInfoReferenceInputs :: [TxInInfo]
txInfoOutputs :: [TxOut]
txInfoFee :: Lovelace
txInfoMint :: MintValue
txInfoTxCerts :: [TxCert]
txInfoWithdrawals :: Map AccountId Lovelace
txInfoDirectDeposits :: Map AccountId Lovelace
txInfoAccountBalanceIntervals :: AccountBalanceIntervals
txInfoValidRange :: POSIXTimeRange
txInfoGuards :: [Credential]
txInfoRequiredTopLevelGuards :: Map Credential (Maybe Datum)
txInfoRedeemers :: Map ScriptPurpose Redeemer
txInfoData :: Map DatumHash Datum
txInfoVotes :: Map Voter (Map GovernanceActionId Vote)
txInfoProposalProcedures :: [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
<+> [TxInInfo] -> Doc ann
forall ann. [TxInInfo] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty [TxInInfo]
txInfoInputs
      , Doc ann
"Reference inputs:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> [TxInInfo] -> Doc ann
forall ann. [TxInInfo] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty [TxInInfo]
txInfoReferenceInputs
      , Doc ann
"Outputs:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> [TxOut] -> Doc ann
forall ann. [TxOut] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty [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
<+> [TxCert] -> Doc ann
forall ann. [TxCert] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty [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 a ann. Pretty a => a -> Doc ann
forall ann. POSIXTimeRange -> Doc ann
pretty POSIXTimeRange
txInfoValidRange
      , Doc ann
"Guards:" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> [Credential] -> Doc ann
forall ann. [Credential] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty [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
<+> [ProposalProcedure] -> Doc ann
forall ann. [ProposalProcedure] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty [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
      ]

data TopTxInfoSimplified = TopTxInfoSimplified
  { TopTxInfoSimplified -> [TxId]
ttisIds :: [V3.TxId]
  , TopTxInfoSimplified -> [TxInInfo]
ttisInputs :: [TxInInfo]
  , TopTxInfoSimplified -> [TxInInfo]
ttisReferenceInputs :: [TxInInfo]
  , TopTxInfoSimplified -> [TxOut]
ttisOutputs :: [V2.TxOut]
  , TopTxInfoSimplified -> MintValue
ttisMints :: V3.MintValue
  , TopTxInfoSimplified -> MintValue
ttisBurns :: V3.MintValue
  , TopTxInfoSimplified -> [TxCert]
ttisTxCerts :: [TxCert]
  , TopTxInfoSimplified -> Map AccountId Lovelace
ttisWithdrawals :: Map AccountId V2.Lovelace
  , TopTxInfoSimplified -> Map AccountId Lovelace
ttisDirectDeposits :: Map AccountId V2.Lovelace
  , TopTxInfoSimplified -> POSIXTimeRange
ttisValidRange :: V2.POSIXTimeRange
  , TopTxInfoSimplified -> Map Credential ()
ttisGuards :: Map V2.Credential ()
  , TopTxInfoSimplified -> Map ScriptPurpose ()
ttisScriptPurposes :: Map ScriptPurpose ()
  , TopTxInfoSimplified -> Map DatumHash Datum
ttisData :: Map V2.DatumHash V2.Datum
  , TopTxInfoSimplified -> Map Voter (Map GovernanceActionId Vote)
ttisVotes :: Map Voter (Map GovernanceActionId Vote)
  , TopTxInfoSimplified -> [ProposalProcedure]
ttisProposalProcedures :: [ProposalProcedure]
  , TopTxInfoSimplified -> Maybe Lovelace
ttisCurrentTreasuryAmount :: Haskell.Maybe V2.Lovelace
  , TopTxInfoSimplified -> Lovelace
ttisTreasuryDonations :: V2.Lovelace
  }
  deriving stock ((forall x. TopTxInfoSimplified -> Rep TopTxInfoSimplified x)
-> (forall x. Rep TopTxInfoSimplified x -> TopTxInfoSimplified)
-> Generic TopTxInfoSimplified
forall x. Rep TopTxInfoSimplified x -> TopTxInfoSimplified
forall x. TopTxInfoSimplified -> Rep TopTxInfoSimplified x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TopTxInfoSimplified -> Rep TopTxInfoSimplified x
from :: forall x. TopTxInfoSimplified -> Rep TopTxInfoSimplified x
$cto :: forall x. Rep TopTxInfoSimplified x -> TopTxInfoSimplified
to :: forall x. Rep TopTxInfoSimplified x -> TopTxInfoSimplified
Generic, Int -> TopTxInfoSimplified -> ShowS
[TopTxInfoSimplified] -> ShowS
TopTxInfoSimplified -> String
(Int -> TopTxInfoSimplified -> ShowS)
-> (TopTxInfoSimplified -> String)
-> ([TopTxInfoSimplified] -> ShowS)
-> Show TopTxInfoSimplified
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TopTxInfoSimplified -> ShowS
showsPrec :: Int -> TopTxInfoSimplified -> ShowS
$cshow :: TopTxInfoSimplified -> String
show :: TopTxInfoSimplified -> String
$cshowList :: [TopTxInfoSimplified] -> ShowS
showList :: [TopTxInfoSimplified] -> ShowS
Haskell.Show, TopTxInfoSimplified -> TopTxInfoSimplified -> Bool
(TopTxInfoSimplified -> TopTxInfoSimplified -> Bool)
-> (TopTxInfoSimplified -> TopTxInfoSimplified -> Bool)
-> Eq TopTxInfoSimplified
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TopTxInfoSimplified -> TopTxInfoSimplified -> Bool
== :: TopTxInfoSimplified -> TopTxInfoSimplified -> Bool
$c/= :: TopTxInfoSimplified -> TopTxInfoSimplified -> Bool
/= :: TopTxInfoSimplified -> TopTxInfoSimplified -> Bool
Haskell.Eq)
  deriving anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition TopTxInfoSimplified
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)
  deriving ((forall ann. TopTxInfoSimplified -> Doc ann)
-> (forall ann. [TopTxInfoSimplified] -> Doc ann)
-> Pretty TopTxInfoSimplified
forall ann. [TopTxInfoSimplified] -> Doc ann
forall ann. TopTxInfoSimplified -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. TopTxInfoSimplified -> Doc ann
pretty :: forall ann. TopTxInfoSimplified -> Doc ann
$cprettyList :: forall ann. [TopTxInfoSimplified] -> Doc ann
prettyList :: forall ann. [TopTxInfoSimplified] -> Doc ann
Pretty) via (PrettyShow TopTxInfoSimplified)

data TopTxInfo = TopTxInfo
  { TopTxInfo -> [TxInfo]
topTxInfoSubTransactions :: [TxInfo]
  , TopTxInfo -> Map Integer Datum
topTxInfoDatums :: Map Haskell.Integer V2.Datum
  , TopTxInfo -> AccountBalanceIntervals
topTxInfoStartingBalanceIntervals :: AccountBalanceIntervals
  , TopTxInfo -> TopTxInfoSimplified
topTxInfoSimplified :: TopTxInfoSimplified
  }
  deriving stock ((forall x. TopTxInfo -> Rep TopTxInfo x)
-> (forall x. Rep TopTxInfo x -> TopTxInfo) -> Generic TopTxInfo
forall x. Rep TopTxInfo x -> TopTxInfo
forall x. TopTxInfo -> Rep TopTxInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TopTxInfo -> Rep TopTxInfo x
from :: forall x. TopTxInfo -> Rep TopTxInfo x
$cto :: forall x. Rep TopTxInfo x -> TopTxInfo
to :: forall x. Rep TopTxInfo x -> TopTxInfo
Generic, Int -> TopTxInfo -> ShowS
[TopTxInfo] -> ShowS
TopTxInfo -> String
(Int -> TopTxInfo -> ShowS)
-> (TopTxInfo -> String)
-> ([TopTxInfo] -> ShowS)
-> Show TopTxInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TopTxInfo -> ShowS
showsPrec :: Int -> TopTxInfo -> ShowS
$cshow :: TopTxInfo -> String
show :: TopTxInfo -> String
$cshowList :: [TopTxInfo] -> ShowS
showList :: [TopTxInfo] -> ShowS
Haskell.Show, TopTxInfo -> TopTxInfo -> Bool
(TopTxInfo -> TopTxInfo -> Bool)
-> (TopTxInfo -> TopTxInfo -> Bool) -> Eq TopTxInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TopTxInfo -> TopTxInfo -> Bool
== :: TopTxInfo -> TopTxInfo -> Bool
$c/= :: TopTxInfo -> TopTxInfo -> Bool
/= :: TopTxInfo -> TopTxInfo -> Bool
Haskell.Eq)
  deriving anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition TopTxInfo
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)
  deriving ((forall ann. TopTxInfo -> Doc ann)
-> (forall ann. [TopTxInfo] -> Doc ann) -> Pretty TopTxInfo
forall ann. [TopTxInfo] -> Doc ann
forall ann. TopTxInfo -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. TopTxInfo -> Doc ann
pretty :: forall ann. TopTxInfo -> Doc ann
$cprettyList :: forall ann. [TopTxInfo] -> Doc ann
prettyList :: forall ann. [TopTxInfo] -> Doc ann
Pretty) via (PrettyShow TopTxInfo)

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 ((forall x. ScriptInfo -> Rep ScriptInfo x)
-> (forall x. Rep ScriptInfo x -> ScriptInfo) -> Generic ScriptInfo
forall x. Rep ScriptInfo x -> ScriptInfo
forall x. ScriptInfo -> Rep ScriptInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ScriptInfo -> Rep ScriptInfo x
from :: forall x. ScriptInfo -> Rep ScriptInfo x
$cto :: forall x. Rep ScriptInfo x -> ScriptInfo
to :: forall x. Rep ScriptInfo x -> ScriptInfo
Generic, Int -> ScriptInfo -> ShowS
[ScriptInfo] -> ShowS
ScriptInfo -> String
(Int -> ScriptInfo -> ShowS)
-> (ScriptInfo -> String)
-> ([ScriptInfo] -> ShowS)
-> Show ScriptInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ScriptInfo -> ShowS
showsPrec :: Int -> ScriptInfo -> ShowS
$cshow :: ScriptInfo -> String
show :: ScriptInfo -> String
$cshowList :: [ScriptInfo] -> ShowS
showList :: [ScriptInfo] -> ShowS
Haskell.Show, ScriptInfo -> ScriptInfo -> Bool
(ScriptInfo -> ScriptInfo -> Bool)
-> (ScriptInfo -> ScriptInfo -> Bool) -> Eq ScriptInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ScriptInfo -> ScriptInfo -> Bool
== :: ScriptInfo -> ScriptInfo -> Bool
$c/= :: ScriptInfo -> ScriptInfo -> Bool
/= :: ScriptInfo -> ScriptInfo -> Bool
Haskell.Eq)
  deriving anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition ScriptInfo
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)
  deriving ((forall ann. ScriptInfo -> Doc ann)
-> (forall ann. [ScriptInfo] -> Doc ann) -> Pretty ScriptInfo
forall ann. [ScriptInfo] -> Doc ann
forall ann. ScriptInfo -> Doc ann
forall a.
(forall ann. a -> Doc ann)
-> (forall ann. [a] -> Doc ann) -> Pretty a
$cpretty :: forall ann. ScriptInfo -> Doc ann
pretty :: forall ann. ScriptInfo -> Doc ann
$cprettyList :: forall ann. [ScriptInfo] -> Doc ann
prettyList :: forall ann. [ScriptInfo] -> Doc ann
Pretty) via (PrettyShow ScriptInfo)

data ScriptContext = ScriptContext
  { ScriptContext -> TxInfo
scriptContextTxInfo :: TxInfo
  , ScriptContext -> Redeemer
scriptContextRedeemer :: V2.Redeemer
  , ScriptContext -> ScriptInfo
scriptContextScriptInfo :: ScriptInfo
  , ScriptContext -> ScriptHash
scriptContextScriptHash :: V2.ScriptHash
  }
  deriving stock ((forall x. ScriptContext -> Rep ScriptContext x)
-> (forall x. Rep ScriptContext x -> ScriptContext)
-> Generic ScriptContext
forall x. Rep ScriptContext x -> ScriptContext
forall x. ScriptContext -> Rep ScriptContext x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ScriptContext -> Rep ScriptContext x
from :: forall x. ScriptContext -> Rep ScriptContext x
$cto :: forall x. Rep ScriptContext x -> ScriptContext
to :: forall x. Rep ScriptContext x -> ScriptContext
Generic, ScriptContext -> ScriptContext -> Bool
(ScriptContext -> ScriptContext -> Bool)
-> (ScriptContext -> ScriptContext -> Bool) -> Eq ScriptContext
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ScriptContext -> ScriptContext -> Bool
== :: ScriptContext -> ScriptContext -> Bool
$c/= :: ScriptContext -> ScriptContext -> Bool
/= :: ScriptContext -> ScriptContext -> Bool
Haskell.Eq, Int -> ScriptContext -> ShowS
[ScriptContext] -> ShowS
ScriptContext -> String
(Int -> ScriptContext -> ShowS)
-> (ScriptContext -> String)
-> ([ScriptContext] -> ShowS)
-> Show ScriptContext
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ScriptContext -> ShowS
showsPrec :: Int -> ScriptContext -> ShowS
$cshow :: ScriptContext -> String
show :: ScriptContext -> String
$cshowList :: [ScriptContext] -> ShowS
showList :: [ScriptContext] -> ShowS
Haskell.Show)
  deriving anyclass (DefinitionId
DefinitionId -> HasBlueprintDefinition ScriptContext
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)

instance Pretty ScriptContext where
  pretty :: forall ann. ScriptContext -> Doc ann
pretty ScriptContext {ScriptHash
Redeemer
ScriptInfo
TxInfo
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 a ann. Pretty a => a -> Doc ann
forall ann. ScriptInfo -> 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 a ann. Pretty a => a -> Doc ann
forall ann. TxInfo -> 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])
      ]

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

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 v. Eq k => k -> Map k v -> Maybe v
lookup DatumHash
dsh Map DatumHash Datum
txInfoData
{-# INLINEABLE findDatum #-}

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} =
  (DatumHash, Datum) -> DatumHash
forall a b. (a, b) -> a
PlutusTx.fst ((DatumHash, Datum) -> DatumHash)
-> Maybe (DatumHash, Datum) -> Maybe DatumHash
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
PlutusTx.<$> ((DatumHash, Datum) -> Bool)
-> [(DatumHash, Datum)] -> Maybe (DatumHash, Datum)
forall a. (a -> Bool) -> [a] -> Maybe a
List.find (\(DatumHash
_, Datum
ds') -> Datum
ds' Datum -> Datum -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== Datum
ds) (Map DatumHash Datum -> [(DatumHash, Datum)]
forall k v. Map k v -> [(k, v)]
toList Map DatumHash Datum
txInfoData)
{-# INLINEABLE findDatumHash #-}

findTxInByTxOutRef :: V3.TxOutRef -> TxInfo -> Haskell.Maybe TxInInfo
findTxInByTxOutRef :: TxOutRef -> TxInfo -> Maybe TxInInfo
findTxInByTxOutRef TxOutRef
outRef TxInfo {[TxInInfo]
txInfoInputs :: TxInfo -> [TxInInfo]
txInfoInputs :: [TxInInfo]
txInfoInputs} =
  (TxInInfo -> Bool) -> [TxInInfo] -> Maybe TxInInfo
forall a. (a -> Bool) -> [a] -> Maybe a
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)
    [TxInInfo]
txInfoInputs
{-# INLINEABLE findTxInByTxOutRef #-}

{-| 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 -> [Haskell.Integer]
findContinuingOutputs :: ScriptContext -> [Integer]
findContinuingOutputs ScriptContext
ctx
  | Haskell.Just TxInInfo {txInInfoResolved :: TxInInfo -> TxOut
txInInfoResolved = V2.TxOut {Address
txOutAddress :: Address
txOutAddress :: TxOut -> Address
txOutAddress}} <- ScriptContext -> Maybe TxInInfo
findOwnInput ScriptContext
ctx =
      (TxOut -> Bool) -> [TxOut] -> [Integer]
forall a. (a -> Bool) -> [a] -> [Integer]
List.findIndices
        (\V2.TxOut {txOutAddress :: TxOut -> Address
txOutAddress = Address
otherAddress} -> Address
txOutAddress Address -> Address -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== Address
otherAddress)
        (TxInfo -> [TxOut]
txInfoOutputs (ScriptContext -> TxInfo
scriptContextTxInfo ScriptContext
ctx))
findContinuingOutputs ScriptContext
_ = BuiltinString -> [Integer]
forall a. BuiltinString -> a
PlutusTx.traceError BuiltinString
"Le"
{-# INLINEABLE findContinuingOutputs #-}

{-| 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 -> [V2.TxOut]
getContinuingOutputs :: ScriptContext -> [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) -> [TxOut] -> [TxOut]
forall a. (a -> Bool) -> [a] -> [a]
List.filter
        (\V2.TxOut {txOutAddress :: TxOut -> Address
txOutAddress = Address
otherAddress} -> Address
txOutAddress Address -> Address -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== Address
otherAddress)
        (TxInfo -> [TxOut]
txInfoOutputs (ScriptContext -> TxInfo
scriptContextTxInfo ScriptContext
ctx))
getContinuingOutputs ScriptContext
_ = BuiltinString -> [TxOut]
forall a. BuiltinString -> a
PlutusTx.traceError BuiltinString
"Lf"
{-# INLINEABLE getContinuingOutputs #-}

txSignedBy :: TxInfo -> V2.PubKeyHash -> Haskell.Bool
txSignedBy :: TxInfo -> PubKeyHash -> Bool
txSignedBy TxInfo {[Credential]
txInfoGuards :: TxInfo -> [Credential]
txInfoGuards :: [Credential]
txInfoGuards} PubKeyHash
keyHash =
  (Credential -> Bool) -> [Credential] -> Bool
forall a. (a -> Bool) -> [a] -> Bool
List.any (Credential -> Credential -> Bool
forall a. Eq a => a -> a -> Bool
(PlutusTx.==) (PubKeyHash -> Credential
V2.PubKeyCredential PubKeyHash
keyHash)) [Credential]
txInfoGuards
{-# INLINEABLE txSignedBy #-}

pubKeyOutputsAt :: V2.PubKeyHash -> TxInfo -> [V2.Value]
pubKeyOutputsAt :: PubKeyHash -> TxInfo -> [Value]
pubKeyOutputsAt PubKeyHash
pk TxInfo
txInfo =
  let atPubKey :: TxOut -> Maybe Value
atPubKey V2.TxOut {txOutAddress :: TxOut -> Address
txOutAddress = V2.Address (V2.PubKeyCredential PubKeyHash
pk') Maybe StakingCredential
_, Value
txOutValue :: Value
txOutValue :: TxOut -> 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
      atPubKey TxOut
_ = Maybe Value
forall a. Maybe a
Haskell.Nothing
   in (TxOut -> Maybe Value) -> [TxOut] -> [Value]
forall a b. (a -> Maybe b) -> [a] -> [b]
PlutusTx.mapMaybe TxOut -> Maybe Value
atPubKey (TxInfo -> [TxOut]
txInfoOutputs TxInfo
txInfo)
{-# INLINEABLE pubKeyOutputsAt #-}

valuePaidTo :: TxInfo -> V2.PubKeyHash -> V2.Value
valuePaidTo :: TxInfo -> PubKeyHash -> Value
valuePaidTo TxInfo
txInfo PubKeyHash
keyHash = [Value] -> Value
forall a. Monoid a => [a] -> a
PlutusTx.mconcat (PubKeyHash -> TxInfo -> [Value]
pubKeyOutputsAt PubKeyHash
keyHash TxInfo
txInfo)
{-# INLINEABLE valuePaidTo #-}

valueSpent :: TxInfo -> V2.Value
valueSpent :: TxInfo -> Value
valueSpent = (TxInInfo -> Value) -> [TxInInfo] -> Value
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
F.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) ([TxInInfo] -> Value) -> (TxInfo -> [TxInInfo]) -> TxInfo -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
PlutusTx.. TxInfo -> [TxInInfo]
txInfoInputs
{-# INLINEABLE valueSpent #-}

valueProduced :: TxInfo -> V2.Value
valueProduced :: TxInfo -> Value
valueProduced = (TxOut -> Value) -> [TxOut] -> Value
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
F.foldMap TxOut -> Value
V2.txOutValue ([TxOut] -> Value) -> (TxInfo -> [TxOut]) -> TxInfo -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
PlutusTx.. TxInfo -> [TxOut]
txInfoOutputs
{-# INLINEABLE valueProduced #-}

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

spendsOutput :: TxInfo -> V3.TxId -> Haskell.Integer -> Haskell.Bool
spendsOutput :: TxInfo -> TxId -> Integer -> Bool
spendsOutput TxInfo
txInfo TxId
txId Integer
outputIndex =
  (TxInInfo -> Bool) -> [TxInInfo] -> Bool
forall a. (a -> Bool) -> [a] -> Bool
List.any
    ( \TxInInfo {txInInfoOutRef :: TxInInfo -> TxOutRef
txInInfoOutRef = V3.TxOutRef TxId
refId Integer
refIndex} ->
        TxId
txId TxId -> TxId -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== TxId
refId Bool -> Bool -> Bool
PlutusTx.&& Integer
outputIndex Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
PlutusTx.== Integer
refIndex
    )
    (TxInfo -> [TxInInfo]
txInfoInputs TxInfo
txInfo)
{-# INLINEABLE spendsOutput #-}

$(makeLift ''AccountId)

$(makeLift ''AccountBalanceIntervals)

$(makeLift ''TxCert)
$( makeIsDataSchemaIndexed
     ''TxCert
     [ ('TxCertRegAccount, 0)
     , ('TxCertUnRegAccount, 1)
     , ('TxCertDelegAccount, 2)
     , ('TxCertRegAccountDeleg, 3)
     , ('TxCertRegDRep, 4)
     , ('TxCertUpdateDRep, 5)
     , ('TxCertUnRegDRep, 6)
     , ('TxCertPoolRegister, 7)
     , ('TxCertPoolRetire, 8)
     , ('TxCertAuthHotCommittee, 9)
     , ('TxCertResignColdCommittee, 10)
     ]
 )

$(makeLift ''ScriptPurpose)
$( makeIsDataSchemaIndexed
     ''ScriptPurpose
     [ ('Minting, 0)
     , ('Spending, 1)
     , ('Withdrawing, 2)
     , ('Certifying, 3)
     , ('Voting, 4)
     , ('Proposing, 5)
     , ('Guarding, 6)
     ]
 )

$(makeLift ''TxInfo)
$(makeIsDataSchemaIndexed ''TxInfo [('TxInfo, 0)])

$(makeLift ''TopTxInfoSimplified)
$(makeIsDataSchemaIndexed ''TopTxInfoSimplified [('TopTxInfoSimplified, 0)])

$(makeLift ''TopTxInfo)
$(makeIsDataSchemaIndexed ''TopTxInfo [('TopTxInfo, 0)])

$(makeLift ''ScriptInfo)
$( makeIsDataSchemaIndexed
     ''ScriptInfo
     [ ('MintingScript, 0)
     , ('SpendingScript, 1)
     , ('WithdrawingScript, 2)
     , ('CertifyingScript, 3)
     , ('VotingScript, 4)
     , ('ProposingScript, 5)
     , ('GuardingScript, 6)
     ]
 )

$(makeLift ''ScriptContext)
$(makeIsDataSchemaIndexed ''ScriptContext [('ScriptContext, 0)])