{-# LANGUAGE NoImplicitPrelude #-}

-- | This module exposes on-chain pretty-printing function for all the types
-- that occur on the 'ScriptContext' to 'BuiltinString'. This is useful for
-- debugging of validators. You probably do not want to use this in production
-- code, as many of the functions in this module are wildly inefficient due to
-- limitations of the 'BuiltinString' type.
--
-- If the script execution on your transactions go over budget by using this
-- module, consider using 'txOptEmulatorParamsModification' to temporarily
-- loosen the limits (at the cost of breaking compatibility with mainnet)
module Cooked.ShowBS (ShowBS (..)) where

import PlutusLedgerApi.V3 qualified as Api
import PlutusTx.AssocMap qualified as PlutusTx
import PlutusTx.Builtins qualified as PlutusTx
import PlutusTx.Prelude hiding (toList)
import PlutusTx.Ratio qualified as PlutusTx hiding (negate)

-- | analogue of Haskell's 'Show' class to be use in Plutus scripts.
class ShowBS a where
  -- | analogue of 'show'
  showBS :: a -> BuiltinString

-- | print with a surrounding parenthesis
{-# INLINEABLE showBSParen #-}
showBSParen :: BuiltinString -> BuiltinString
showBSParen :: BuiltinString -> BuiltinString
showBSParen BuiltinString
s = BuiltinString
"(" BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
s BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
")"

-- | print an application of a constructor to an argument
{-# INLINEABLE application1 #-}
application1 :: (ShowBS a) => BuiltinString -> a -> BuiltinString
application1 :: forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
bs a
x = BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
bs BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> a -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS a
x

-- | like 'application1' with two arguments
{-# INLINEABLE application2 #-}
application2 :: (ShowBS a, ShowBS b) => BuiltinString -> a -> b -> BuiltinString
application2 :: forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
bs a
x b
y = BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
bs BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> a -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS a
x BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> b -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS b
y

-- | like 'application1' with three arguments
{-# INLINEABLE application3 #-}
application3 :: (ShowBS a, ShowBS b, ShowBS c) => BuiltinString -> a -> b -> c -> BuiltinString
application3 :: forall a b c.
(ShowBS a, ShowBS b, ShowBS c) =>
BuiltinString -> a -> b -> c -> BuiltinString
application3 BuiltinString
bs a
x b
y c
z = BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
bs BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> a -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS a
x BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> b -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS b
y BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> c -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS c
z

-- | like 'application1' with four arguments
{-# INLINEABLE application4 #-}
application4 :: (ShowBS a, ShowBS b, ShowBS c, ShowBS d) => BuiltinString -> a -> b -> c -> d -> BuiltinString
application4 :: forall a b c d.
(ShowBS a, ShowBS b, ShowBS c, ShowBS d) =>
BuiltinString -> a -> b -> c -> d -> BuiltinString
application4 BuiltinString
bs a
x b
y c
z d
w = BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
bs BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> a -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS a
x BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> b -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS b
y BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> c -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS c
z BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> d -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS d
w

instance ShowBS Integer where
  {-# INLINEABLE showBS #-}
  showBS :: Integer -> BuiltinString
showBS Integer
i = [BuiltinString] -> BuiltinString
forall a. Monoid a => [a] -> a
mconcat (Integer -> [BuiltinString]
integerToDigits Integer
i)

{-# INLINEABLE integerToDigits #-}
integerToDigits :: Integer -> [BuiltinString]
integerToDigits :: Integer -> [BuiltinString]
integerToDigits Integer
n
  | Integer
n Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
< Integer
0 = BuiltinString
"-" BuiltinString -> [BuiltinString] -> [BuiltinString]
forall a. a -> [a] -> [a]
: Integer -> [BuiltinString] -> [BuiltinString]
go (Integer -> Integer
forall a. AdditiveGroup a => a -> a
negate Integer
n) []
  | Integer
n Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
0 = [BuiltinString
"0"]
  | Bool
otherwise = Integer -> [BuiltinString] -> [BuiltinString]
go Integer
n []
  where
    go :: Integer -> [BuiltinString] -> [BuiltinString]
go Integer
i [BuiltinString]
acc
      | Integer
i Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
0 = [BuiltinString]
acc
      | Bool
otherwise = let (Integer
q, Integer
r) = Integer -> Integer -> (Integer, Integer)
quotRem Integer
i Integer
10 in Integer -> [BuiltinString] -> [BuiltinString]
go Integer
q (Integer -> BuiltinString
digitToBS Integer
r BuiltinString -> [BuiltinString] -> [BuiltinString]
forall a. a -> [a] -> [a]
: [BuiltinString]
acc)

{-# INLINEABLE digitToBS #-}
digitToBS :: Integer -> BuiltinString
digitToBS :: Integer -> BuiltinString
digitToBS Integer
x
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
0 = BuiltinString
"0"
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
1 = BuiltinString
"1"
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
2 = BuiltinString
"2"
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
3 = BuiltinString
"3"
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
4 = BuiltinString
"4"
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
5 = BuiltinString
"5"
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
6 = BuiltinString
"6"
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
7 = BuiltinString
"7"
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
8 = BuiltinString
"8"
  | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
9 = BuiltinString
"9"
  | Bool
otherwise = BuiltinString
"?"

instance (ShowBS a) => ShowBS [a] where
  {-# INLINEABLE showBS #-}
  showBS :: [a] -> BuiltinString
showBS = BuiltinString
-> BuiltinString
-> BuiltinString
-> (a -> BuiltinString)
-> [a]
-> BuiltinString
forall a.
BuiltinString
-> BuiltinString
-> BuiltinString
-> (a -> BuiltinString)
-> [a]
-> BuiltinString
catList BuiltinString
"[" BuiltinString
"," BuiltinString
"]" a -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS

{-# INLINEABLE catList #-}
catList :: BuiltinString -> BuiltinString -> BuiltinString -> (a -> BuiltinString) -> [a] -> BuiltinString
catList :: forall a.
BuiltinString
-> BuiltinString
-> BuiltinString
-> (a -> BuiltinString)
-> [a]
-> BuiltinString
catList BuiltinString
open BuiltinString
_ BuiltinString
close a -> BuiltinString
_ [] = BuiltinString
open BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
close
catList BuiltinString
open BuiltinString
sep BuiltinString
close a -> BuiltinString
print (a
x : [a]
xs) = BuiltinString
open BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> a -> BuiltinString
print a
x BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> [a] -> BuiltinString
printSeparated [a]
xs BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
close
  where
    printSeparated :: [a] -> BuiltinString
printSeparated [] = BuiltinString
""
    printSeparated (a
y : [a]
ys) = BuiltinString
sep BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> a -> BuiltinString
print a
y BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> [a] -> BuiltinString
printSeparated [a]
ys

instance (ShowBS a, ShowBS b) => ShowBS (a, b) where
  {-# INLINEABLE showBS #-}
  showBS :: (a, b) -> BuiltinString
showBS (a
x, b
y) = BuiltinString
"(" BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> a -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS a
x BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"," BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> b -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS b
y BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
")"

instance ShowBS Bool where
  {-# INLINEABLE showBS #-}
  showBS :: Bool -> BuiltinString
showBS Bool
True = BuiltinString
"True"
  showBS Bool
False = BuiltinString
"False"

instance (ShowBS a) => ShowBS (Maybe a) where
  {-# INLINEABLE showBS #-}
  showBS :: Maybe a -> BuiltinString
showBS Maybe a
Nothing = BuiltinString
"Nothing"
  showBS (Just a
x) = BuiltinString -> a -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Just" a
x

instance (ShowBS k, ShowBS v) => ShowBS (PlutusTx.Map k v) where
  {-# INLINEABLE showBS #-}
  showBS :: Map k v -> BuiltinString
showBS Map k v
m = BuiltinString -> [(k, v)] -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"fromList" (Map k v -> [(k, v)]
forall k v. Map k v -> [(k, v)]
PlutusTx.toList Map k v
m)

instance ShowBS BuiltinByteString where
  -- base16 representation
  {-# INLINEABLE showBS #-}
  showBS :: BuiltinByteString -> BuiltinString
showBS BuiltinByteString
bs = BuiltinString
"\"" BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> [BuiltinString] -> BuiltinString
forall a. Monoid a => [a] -> a
mconcat (BuiltinByteString -> [BuiltinString]
builtinByteStringCharacters BuiltinByteString
bs) BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"\""

{-# INLINEABLE builtinByteStringCharacters #-}
builtinByteStringCharacters :: BuiltinByteString -> [BuiltinString]
builtinByteStringCharacters :: BuiltinByteString -> [BuiltinString]
builtinByteStringCharacters BuiltinByteString
s = Integer -> [BuiltinString] -> [BuiltinString]
go (Integer
len Integer -> Integer -> Integer
forall a. AdditiveGroup a => a -> a -> a
- Integer
1) []
  where
    len :: Integer
len = BuiltinByteString -> Integer
lengthOfByteString BuiltinByteString
s

    go :: Integer -> [BuiltinString] -> [BuiltinString]
    go :: Integer -> [BuiltinString] -> [BuiltinString]
go Integer
i [BuiltinString]
acc
      | Integer
i Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
>= Integer
0 =
          let (Integer
highNibble, Integer
lowNibble) = Integer -> Integer -> (Integer, Integer)
quotRem (BuiltinByteString -> Integer -> Integer
indexByteString BuiltinByteString
s Integer
i) Integer
16
           in Integer -> [BuiltinString] -> [BuiltinString]
go (Integer
i Integer -> Integer -> Integer
forall a. AdditiveGroup a => a -> a -> a
- Integer
1) (Integer -> BuiltinString
toHex Integer
highNibble BuiltinString -> [BuiltinString] -> [BuiltinString]
forall a. a -> [a] -> [a]
: Integer -> BuiltinString
toHex Integer
lowNibble BuiltinString -> [BuiltinString] -> [BuiltinString]
forall a. a -> [a] -> [a]
: [BuiltinString]
acc)
      | Bool
otherwise = [BuiltinString]
acc

    toHex :: Integer -> BuiltinString
    toHex :: Integer -> BuiltinString
toHex Integer
x
      | Integer
x Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
<= Integer
9 = Integer -> BuiltinString
digitToBS Integer
x
      | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
10 = BuiltinString
"a"
      | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
11 = BuiltinString
"b"
      | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
12 = BuiltinString
"c"
      | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
13 = BuiltinString
"d"
      | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
14 = BuiltinString
"e"
      | Integer
x Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
15 = BuiltinString
"f"
      | Bool
otherwise = BuiltinString
"?"

instance ShowBS Api.TokenName where
  {-# INLINEABLE showBS #-}
  showBS :: TokenName -> BuiltinString
showBS (Api.TokenName BuiltinByteString
x) = BuiltinString -> BuiltinByteString -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"TokenName" BuiltinByteString
x

instance ShowBS Api.CurrencySymbol where
  {-# INLINEABLE showBS #-}
  showBS :: CurrencySymbol -> BuiltinString
showBS (Api.CurrencySymbol BuiltinByteString
x) = BuiltinString -> BuiltinByteString -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"CurrencySymbol" BuiltinByteString
x

instance ShowBS Api.Value where
  {-# INLINEABLE showBS #-}
  showBS :: Value -> BuiltinString
showBS (Api.Value Map CurrencySymbol (Map TokenName Integer)
m) = BuiltinString
-> Map CurrencySymbol (Map TokenName Integer) -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Value" Map CurrencySymbol (Map TokenName Integer)
m

instance ShowBS Api.TxId where
  {-# INLINEABLE showBS #-}
  showBS :: TxId -> BuiltinString
showBS (Api.TxId BuiltinByteString
x) = BuiltinString -> BuiltinByteString -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"TxId" BuiltinByteString
x

instance ShowBS Api.TxOutRef where
  {-# INLINEABLE showBS #-}
  showBS :: TxOutRef -> BuiltinString
showBS (Api.TxOutRef TxId
txid Integer
i) = BuiltinString -> TxId -> Integer -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"TxOutRef" TxId
txid Integer
i

instance ShowBS Api.PubKeyHash where
  {-# INLINEABLE showBS #-}
  showBS :: PubKeyHash -> BuiltinString
showBS (Api.PubKeyHash BuiltinByteString
h) = BuiltinString -> BuiltinByteString -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"PubKeyHash" BuiltinByteString
h

instance ShowBS Api.Credential where
  {-# INLINEABLE showBS #-}
  showBS :: Credential -> BuiltinString
showBS (Api.ScriptCredential ScriptHash
hash) = BuiltinString -> ScriptHash -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"ScriptCredential" ScriptHash
hash
  showBS (Api.PubKeyCredential PubKeyHash
pkh) = BuiltinString -> PubKeyHash -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"PubKeyCredential" PubKeyHash
pkh

instance ShowBS Api.StakingCredential where
  {-# INLINEABLE showBS #-}
  showBS :: StakingCredential -> BuiltinString
showBS (Api.StakingHash Credential
cred) = BuiltinString -> Credential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"StakingCredential" Credential
cred
  showBS (Api.StakingPtr Integer
i Integer
j Integer
k) = BuiltinString -> Integer -> Integer -> Integer -> BuiltinString
forall a b c.
(ShowBS a, ShowBS b, ShowBS c) =>
BuiltinString -> a -> b -> c -> BuiltinString
application3 BuiltinString
"StakingPointer" Integer
i Integer
j Integer
k

instance ShowBS Api.Address where
  {-# INLINEABLE showBS #-}
  showBS :: Address -> BuiltinString
showBS (Api.Address Credential
cred Maybe StakingCredential
mStCred) = BuiltinString
-> Credential -> Maybe StakingCredential -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Address" Credential
cred Maybe StakingCredential
mStCred

instance ShowBS Api.DatumHash where
  {-# INLINEABLE showBS #-}
  showBS :: DatumHash -> BuiltinString
showBS (Api.DatumHash BuiltinByteString
h) = BuiltinString -> BuiltinByteString -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"DatumHash" BuiltinByteString
h

instance ShowBS BuiltinData where
  {-# INLINEABLE showBS #-}
  showBS :: BuiltinData -> BuiltinString
showBS BuiltinData
d = BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"BuiltinData " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinData -> BuiltinString
showData BuiltinData
d

{-# INLINEABLE showData #-}
showData :: BuiltinData -> BuiltinString
showData :: BuiltinData -> BuiltinString
showData BuiltinData
d =
  BuiltinData
-> (Integer -> [BuiltinData] -> BuiltinString)
-> ([(BuiltinData, BuiltinData)] -> BuiltinString)
-> ([BuiltinData] -> BuiltinString)
-> (Integer -> BuiltinString)
-> (BuiltinByteString -> BuiltinString)
-> BuiltinString
forall r.
BuiltinData
-> (Integer -> [BuiltinData] -> r)
-> ([(BuiltinData, BuiltinData)] -> r)
-> ([BuiltinData] -> r)
-> (Integer -> r)
-> (BuiltinByteString -> r)
-> r
PlutusTx.matchData
    BuiltinData
d
    (\Integer
i [BuiltinData]
ds -> BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"Constr " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Integer -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Integer
i BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
" " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
-> BuiltinString
-> BuiltinString
-> (BuiltinData -> BuiltinString)
-> [BuiltinData]
-> BuiltinString
forall a.
BuiltinString
-> BuiltinString
-> BuiltinString
-> (a -> BuiltinString)
-> [a]
-> BuiltinString
catList BuiltinString
"[" BuiltinString
"," BuiltinString
"]" BuiltinData -> BuiltinString
showData [BuiltinData]
ds)
    (\[(BuiltinData, BuiltinData)]
alist -> BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"Map " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
-> BuiltinString
-> BuiltinString
-> ((BuiltinData, BuiltinData) -> BuiltinString)
-> [(BuiltinData, BuiltinData)]
-> BuiltinString
forall a.
BuiltinString
-> BuiltinString
-> BuiltinString
-> (a -> BuiltinString)
-> [a]
-> BuiltinString
catList BuiltinString
"[" BuiltinString
"," BuiltinString
"]" (\(BuiltinData
a, BuiltinData
b) -> BuiltinString
"(" BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinData -> BuiltinString
showData BuiltinData
a BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"," BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinData -> BuiltinString
showData BuiltinData
b BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
")") [(BuiltinData, BuiltinData)]
alist)
    (\[BuiltinData]
list -> BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"List " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
-> BuiltinString
-> BuiltinString
-> (BuiltinData -> BuiltinString)
-> [BuiltinData]
-> BuiltinString
forall a.
BuiltinString
-> BuiltinString
-> BuiltinString
-> (a -> BuiltinString)
-> [a]
-> BuiltinString
catList BuiltinString
"[" BuiltinString
"," BuiltinString
"]" BuiltinData -> BuiltinString
showData [BuiltinData]
list)
    (\Integer
i -> BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"I " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Integer -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Integer
i)
    (\BuiltinByteString
bs -> BuiltinString -> BuiltinString
showBSParen (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"B " BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinByteString -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS BuiltinByteString
bs)

instance ShowBS Api.Datum where
  {-# INLINEABLE showBS #-}
  showBS :: Datum -> BuiltinString
showBS (Api.Datum BuiltinData
d) = BuiltinString -> BuiltinData -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Datum" BuiltinData
d

instance ShowBS Api.OutputDatum where
  {-# INLINEABLE showBS #-}
  showBS :: OutputDatum -> BuiltinString
showBS OutputDatum
Api.NoOutputDatum = BuiltinString
"NoOutputDatum"
  showBS (Api.OutputDatumHash DatumHash
h) = BuiltinString -> DatumHash -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"OutputDatumHash" DatumHash
h
  showBS (Api.OutputDatum Datum
d) = BuiltinString -> Datum -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"OutputDatum" Datum
d

instance ShowBS Api.ScriptHash where
  {-# INLINEABLE showBS #-}
  showBS :: ScriptHash -> BuiltinString
showBS (Api.ScriptHash BuiltinByteString
h) = BuiltinString -> BuiltinByteString -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"ScriptHash" BuiltinByteString
h

instance ShowBS Api.TxOut where
  {-# INLINEABLE showBS #-}
  showBS :: TxOut -> BuiltinString
showBS (Api.TxOut Address
address Value
value OutputDatum
datum Maybe ScriptHash
mRefScriptHash) = BuiltinString
-> Address
-> Value
-> OutputDatum
-> Maybe ScriptHash
-> BuiltinString
forall a b c d.
(ShowBS a, ShowBS b, ShowBS c, ShowBS d) =>
BuiltinString -> a -> b -> c -> d -> BuiltinString
application4 BuiltinString
"TxOut" Address
address Value
value OutputDatum
datum Maybe ScriptHash
mRefScriptHash

instance ShowBS Api.TxInInfo where
  {-# INLINEABLE showBS #-}
  showBS :: TxInInfo -> BuiltinString
showBS (Api.TxInInfo TxOutRef
oref TxOut
out) = BuiltinString -> TxOutRef -> TxOut -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"TxInInfo" TxOutRef
oref TxOut
out

instance ShowBS Api.POSIXTime where
  {-# INLINEABLE showBS #-}
  showBS :: POSIXTime -> BuiltinString
showBS (Api.POSIXTime Integer
t) = BuiltinString -> Integer -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"POSIXTime" Integer
t

instance (ShowBS a) => ShowBS (Api.Extended a) where
  {-# INLINEABLE showBS #-}
  showBS :: Extended a -> BuiltinString
showBS Extended a
Api.NegInf = BuiltinString
"NegInf"
  showBS Extended a
Api.PosInf = BuiltinString
"PosInf"
  showBS (Api.Finite a
x) = BuiltinString -> a -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Finite" a
x

instance (ShowBS a) => ShowBS (Api.LowerBound a) where
  {-# INLINEABLE showBS #-}
  showBS :: LowerBound a -> BuiltinString
showBS (Api.LowerBound Extended a
x Bool
closure) = BuiltinString -> Extended a -> Bool -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"LowerBound" Extended a
x Bool
closure

instance (ShowBS a) => ShowBS (Api.UpperBound a) where
  {-# INLINEABLE showBS #-}
  showBS :: UpperBound a -> BuiltinString
showBS (Api.UpperBound Extended a
x Bool
closure) = BuiltinString -> Extended a -> Bool -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"UpperBound" Extended a
x Bool
closure

instance (ShowBS a) => ShowBS (Api.Interval a) where
  {-# INLINEABLE showBS #-}
  showBS :: Interval a -> BuiltinString
showBS (Api.Interval LowerBound a
lb UpperBound a
ub) = BuiltinString -> LowerBound a -> UpperBound a -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Interval" LowerBound a
lb UpperBound a
ub

instance ShowBS Api.DRepCredential where
  {-# INLINEABLE showBS #-}
  showBS :: DRepCredential -> BuiltinString
showBS (Api.DRepCredential Credential
cred) = BuiltinString -> Credential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"DRep credential" Credential
cred

instance ShowBS Api.DRep where
  {-# INLINEABLE showBS #-}
  showBS :: DRep -> BuiltinString
showBS (Api.DRep DRepCredential
dRepCred) = BuiltinString -> DRepCredential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"DRep" DRepCredential
dRepCred
  showBS DRep
Api.DRepAlwaysAbstain = BuiltinString
"DRep always abstain"
  showBS DRep
Api.DRepAlwaysNoConfidence = BuiltinString
"DRep always no confidence"

instance ShowBS Api.Delegatee where
  {-# INLINEABLE showBS #-}
  showBS :: Delegatee -> BuiltinString
showBS (Api.DelegStake PubKeyHash
pkh) = BuiltinString -> PubKeyHash -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Delegate stake" PubKeyHash
pkh
  showBS (Api.DelegVote DRep
dRep) = BuiltinString -> DRep -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Delegate vote" DRep
dRep
  showBS (Api.DelegStakeVote PubKeyHash
pkh DRep
dRep) = BuiltinString -> PubKeyHash -> DRep -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Delegate stake vote" PubKeyHash
pkh DRep
dRep

instance ShowBS Api.TxCert where
  {-# INLINEABLE showBS #-}
  showBS :: TxCert -> BuiltinString
showBS (Api.TxCertRegStaking Credential
cred Maybe Lovelace
maybeDepositAmount) = BuiltinString -> Credential -> Maybe Lovelace -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Register staking" Credential
cred Maybe Lovelace
maybeDepositAmount
  showBS (Api.TxCertUnRegStaking Credential
cred Maybe Lovelace
maybeDepositAmount) = BuiltinString -> Credential -> Maybe Lovelace -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Unregister staking" Credential
cred Maybe Lovelace
maybeDepositAmount
  showBS (Api.TxCertDelegStaking Credential
cred Delegatee
delegatee) = BuiltinString -> Credential -> Delegatee -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Delegate staking" Credential
cred Delegatee
delegatee
  showBS (Api.TxCertRegDeleg Credential
cred Delegatee
delegatee Lovelace
depositAmount) = BuiltinString
-> Credential -> Delegatee -> Lovelace -> BuiltinString
forall a b c.
(ShowBS a, ShowBS b, ShowBS c) =>
BuiltinString -> a -> b -> c -> BuiltinString
application3 BuiltinString
"Register and delegate staking" Credential
cred Delegatee
delegatee Lovelace
depositAmount
  showBS (Api.TxCertRegDRep DRepCredential
dRepCred Lovelace
amount) = BuiltinString -> DRepCredential -> Lovelace -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Register DRep" DRepCredential
dRepCred Lovelace
amount
  showBS (Api.TxCertUpdateDRep DRepCredential
dRepCred) = BuiltinString -> DRepCredential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Update DRep" DRepCredential
dRepCred
  showBS (Api.TxCertUnRegDRep DRepCredential
dRepCred Lovelace
amount) = BuiltinString -> DRepCredential -> Lovelace -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Unregister DRep" DRepCredential
dRepCred Lovelace
amount
  showBS (Api.TxCertPoolRegister PubKeyHash
poolId PubKeyHash
poolVFR) = BuiltinString -> PubKeyHash -> PubKeyHash -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Register to pool" PubKeyHash
poolId PubKeyHash
poolVFR
  showBS (Api.TxCertPoolRetire PubKeyHash
pkh Integer
epoch) = BuiltinString -> PubKeyHash -> Integer -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Retire from pool" PubKeyHash
pkh Integer
epoch
  showBS (Api.TxCertAuthHotCommittee ColdCommitteeCredential
coldCommitteeCred HotCommitteeCredential
hotCommitteeCred) = BuiltinString
-> ColdCommitteeCredential
-> HotCommitteeCredential
-> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Authorize hot committee " ColdCommitteeCredential
coldCommitteeCred HotCommitteeCredential
hotCommitteeCred
  showBS (Api.TxCertResignColdCommittee ColdCommitteeCredential
coldCommitteeCred) = BuiltinString -> ColdCommitteeCredential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Resign cold committee" ColdCommitteeCredential
coldCommitteeCred

instance ShowBS Api.Voter where
  {-# INLINEABLE showBS #-}
  showBS :: Voter -> BuiltinString
showBS (Api.CommitteeVoter HotCommitteeCredential
hotCommitteeCred) = BuiltinString -> HotCommitteeCredential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Committee Voter" HotCommitteeCredential
hotCommitteeCred
  showBS (Api.DRepVoter DRepCredential
dRepCred) = BuiltinString -> DRepCredential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"DRep Voter" DRepCredential
dRepCred
  showBS (Api.StakePoolVoter PubKeyHash
pkh) = BuiltinString -> PubKeyHash -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Stake Pool Voter" PubKeyHash
pkh

instance ShowBS Api.GovernanceActionId where
  {-# INLINEABLE showBS #-}
  showBS :: GovernanceActionId -> BuiltinString
showBS Api.GovernanceActionId {Integer
TxId
gaidTxId :: TxId
gaidGovActionIx :: Integer
gaidTxId :: GovernanceActionId -> TxId
gaidGovActionIx :: GovernanceActionId -> Integer
..} =
    BuiltinString -> BuiltinString
showBSParen
      (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"Tx Id:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> TxId -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS TxId
gaidTxId
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"Action Id:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Integer -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Integer
gaidGovActionIx

instance ShowBS Api.ScriptPurpose where
  {-# INLINEABLE showBS #-}
  showBS :: ScriptPurpose -> BuiltinString
showBS (Api.Minting CurrencySymbol
cs) = BuiltinString -> CurrencySymbol -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Minting" CurrencySymbol
cs
  showBS (Api.Spending TxOutRef
oref) = BuiltinString -> TxOutRef -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Spending" TxOutRef
oref
  showBS (Api.Rewarding Credential
stCred) = BuiltinString -> Credential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Rewarding" Credential
stCred
  showBS (Api.Certifying Integer
nb TxCert
txCert) = BuiltinString -> Integer -> TxCert -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Certifying" Integer
nb TxCert
txCert
  showBS (Api.Voting Voter
voter) = BuiltinString -> Voter -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Voting" Voter
voter
  showBS (Api.Proposing Integer
nb ProposalProcedure
proposal) = BuiltinString -> Integer -> ProposalProcedure -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Proposing" Integer
nb ProposalProcedure
proposal

instance ShowBS Api.Redeemer where
  {-# INLINEABLE showBS #-}
  showBS :: Redeemer -> BuiltinString
showBS (Api.Redeemer BuiltinData
builtinData) = BuiltinString -> BuiltinData -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Redeemer" BuiltinData
builtinData

instance ShowBS Api.Vote where
  {-# INLINEABLE showBS #-}
  showBS :: Vote -> BuiltinString
showBS Vote
Api.VoteNo = BuiltinString
"No"
  showBS Vote
Api.VoteYes = BuiltinString
"Yes"
  showBS Vote
Api.Abstain = BuiltinString
"Abstain"

instance ShowBS Api.ChangedParameters where
  {-# INLINEABLE showBS #-}
  showBS :: ChangedParameters -> BuiltinString
showBS (Api.ChangedParameters BuiltinData
builtinData) = BuiltinString -> BuiltinData -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Changed parameters" BuiltinData
builtinData

instance ShowBS Api.ProtocolVersion where
  {-# INLINEABLE showBS #-}
  showBS :: ProtocolVersion -> BuiltinString
showBS (Api.ProtocolVersion Integer
major Integer
minor) = BuiltinString -> Integer -> Integer -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Protocol version" Integer
major Integer
minor

instance ShowBS Api.Constitution where
  {-# INLINEABLE showBS #-}
  showBS :: Constitution -> BuiltinString
showBS (Api.Constitution Maybe ScriptHash
constitutionScript) = BuiltinString -> Maybe ScriptHash -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Constitution" Maybe ScriptHash
constitutionScript

instance ShowBS Api.ColdCommitteeCredential where
  {-# INLINEABLE showBS #-}
  showBS :: ColdCommitteeCredential -> BuiltinString
showBS (Api.ColdCommitteeCredential Credential
cred) = BuiltinString -> Credential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Cold committee credential" Credential
cred

instance ShowBS Api.HotCommitteeCredential where
  {-# INLINEABLE showBS #-}
  showBS :: HotCommitteeCredential -> BuiltinString
showBS (Api.HotCommitteeCredential Credential
cred) = BuiltinString -> Credential -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Hot committee credential" Credential
cred

instance ShowBS Api.Committee where
  {-# INLINEABLE showBS #-}
  showBS :: Committee -> BuiltinString
showBS (Api.Committee Map ColdCommitteeCredential Integer
committeeMembers Rational
committeeQuorum) = BuiltinString
-> Map ColdCommitteeCredential Integer -> Rational -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Committee" Map ColdCommitteeCredential Integer
committeeMembers Rational
committeeQuorum

instance ShowBS Api.Lovelace where
  {-# INLINEABLE showBS #-}
  showBS :: Lovelace -> BuiltinString
showBS (Api.Lovelace Integer
amount) = BuiltinString -> Integer -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"Lovelace" Integer
amount

instance ShowBS PlutusTx.Rational where
  {-# INLINEABLE showBS #-}
  showBS :: Rational -> BuiltinString
showBS Rational
rat = BuiltinString -> Integer -> Integer -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"Rational" (Rational -> Integer
PlutusTx.numerator Rational
rat) (Rational -> Integer
PlutusTx.denominator Rational
rat)

instance ShowBS Api.GovernanceAction where
  {-# INLINEABLE showBS #-}
  showBS :: GovernanceAction -> BuiltinString
showBS (Api.ParameterChange Maybe GovernanceActionId
maybeActionId ChangedParameters
changeParams Maybe ScriptHash
mScriptHash) = BuiltinString
-> Maybe GovernanceActionId
-> ChangedParameters
-> Maybe ScriptHash
-> BuiltinString
forall a b c.
(ShowBS a, ShowBS b, ShowBS c) =>
BuiltinString -> a -> b -> c -> BuiltinString
application3 BuiltinString
"Parameter change" Maybe GovernanceActionId
maybeActionId ChangedParameters
changeParams Maybe ScriptHash
mScriptHash
  showBS (Api.HardForkInitiation Maybe GovernanceActionId
maybeActionId ProtocolVersion
protocolVersion) = BuiltinString
-> Maybe GovernanceActionId -> ProtocolVersion -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"HardForkInitiation" Maybe GovernanceActionId
maybeActionId ProtocolVersion
protocolVersion
  showBS (Api.TreasuryWithdrawals Map Credential Lovelace
mapCredLovelace Maybe ScriptHash
mScriptHash) = BuiltinString
-> Map Credential Lovelace -> Maybe ScriptHash -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"TreasuryWithdrawals" Map Credential Lovelace
mapCredLovelace Maybe ScriptHash
mScriptHash
  showBS (Api.NoConfidence Maybe GovernanceActionId
maybeActionId) = BuiltinString -> Maybe GovernanceActionId -> BuiltinString
forall a. ShowBS a => BuiltinString -> a -> BuiltinString
application1 BuiltinString
"NoConfidence" Maybe GovernanceActionId
maybeActionId
  showBS (Api.UpdateCommittee Maybe GovernanceActionId
maybeActionId [ColdCommitteeCredential]
toRemoveCreds Map ColdCommitteeCredential Integer
toAddCreds Rational
quorum) = BuiltinString
-> Maybe GovernanceActionId
-> [ColdCommitteeCredential]
-> Map ColdCommitteeCredential Integer
-> Rational
-> BuiltinString
forall a b c d.
(ShowBS a, ShowBS b, ShowBS c, ShowBS d) =>
BuiltinString -> a -> b -> c -> d -> BuiltinString
application4 BuiltinString
"Info action" Maybe GovernanceActionId
maybeActionId [ColdCommitteeCredential]
toRemoveCreds Map ColdCommitteeCredential Integer
toAddCreds Rational
quorum
  showBS (Api.NewConstitution Maybe GovernanceActionId
maybeActionId Constitution
constitution) = BuiltinString
-> Maybe GovernanceActionId -> Constitution -> BuiltinString
forall a b.
(ShowBS a, ShowBS b) =>
BuiltinString -> a -> b -> BuiltinString
application2 BuiltinString
"NewConstitution" Maybe GovernanceActionId
maybeActionId Constitution
constitution
  showBS GovernanceAction
Api.InfoAction = BuiltinString
"InfoAction"

instance ShowBS Api.ProposalProcedure where
  {-# INLINEABLE showBS #-}
  showBS :: ProposalProcedure -> BuiltinString
showBS Api.ProposalProcedure {Credential
Lovelace
GovernanceAction
ppDeposit :: Lovelace
ppReturnAddr :: Credential
ppGovernanceAction :: GovernanceAction
ppDeposit :: ProposalProcedure -> Lovelace
ppReturnAddr :: ProposalProcedure -> Credential
ppGovernanceAction :: ProposalProcedure -> GovernanceAction
..} =
    BuiltinString -> BuiltinString
showBSParen
      (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"deposit:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Lovelace -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Lovelace
ppDeposit
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"return address"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Credential -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Credential
ppReturnAddr
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"governance action"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> GovernanceAction -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS GovernanceAction
ppGovernanceAction

instance ShowBS Api.TxInfo where
  {-# INLINEABLE showBS #-}
  showBS :: TxInfo -> BuiltinString
showBS Api.TxInfo {[PubKeyHash]
[TxOut]
[TxInInfo]
[ProposalProcedure]
[TxCert]
Maybe Lovelace
POSIXTimeRange
Map DatumHash Datum
Map Credential Lovelace
Map ScriptPurpose Redeemer
Map Voter (Map GovernanceActionId Vote)
TxId
Lovelace
Value
txInfoInputs :: [TxInInfo]
txInfoReferenceInputs :: [TxInInfo]
txInfoOutputs :: [TxOut]
txInfoFee :: Lovelace
txInfoMint :: Value
txInfoTxCerts :: [TxCert]
txInfoWdrl :: Map Credential Lovelace
txInfoValidRange :: POSIXTimeRange
txInfoSignatories :: [PubKeyHash]
txInfoRedeemers :: Map ScriptPurpose Redeemer
txInfoData :: Map DatumHash Datum
txInfoId :: TxId
txInfoVotes :: Map Voter (Map GovernanceActionId Vote)
txInfoProposalProcedures :: [ProposalProcedure]
txInfoCurrentTreasuryAmount :: Maybe Lovelace
txInfoTreasuryDonation :: Maybe Lovelace
txInfoInputs :: TxInfo -> [TxInInfo]
txInfoReferenceInputs :: TxInfo -> [TxInInfo]
txInfoOutputs :: TxInfo -> [TxOut]
txInfoFee :: TxInfo -> Lovelace
txInfoMint :: TxInfo -> Value
txInfoTxCerts :: TxInfo -> [TxCert]
txInfoWdrl :: TxInfo -> Map Credential Lovelace
txInfoValidRange :: TxInfo -> POSIXTimeRange
txInfoSignatories :: TxInfo -> [PubKeyHash]
txInfoRedeemers :: TxInfo -> Map ScriptPurpose Redeemer
txInfoData :: TxInfo -> Map DatumHash Datum
txInfoId :: TxInfo -> TxId
txInfoVotes :: TxInfo -> Map Voter (Map GovernanceActionId Vote)
txInfoProposalProcedures :: TxInfo -> [ProposalProcedure]
txInfoCurrentTreasuryAmount :: TxInfo -> Maybe Lovelace
txInfoTreasuryDonation :: TxInfo -> Maybe Lovelace
..} =
    BuiltinString -> BuiltinString
showBSParen
      (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"inputs:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> [TxInInfo] -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS [TxInInfo]
txInfoInputs
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"reference inputs:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> [TxInInfo] -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS [TxInInfo]
txInfoReferenceInputs
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"outputs:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> [TxOut] -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS [TxOut]
txInfoOutputs
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"fees:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Lovelace -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Lovelace
txInfoFee
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"minted value:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Value -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Value
txInfoMint
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"certificates:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> [TxCert] -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS [TxCert]
txInfoTxCerts
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"wdrl:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Map Credential Lovelace -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Map Credential Lovelace
txInfoWdrl
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"valid range:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> POSIXTimeRange -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS POSIXTimeRange
txInfoValidRange
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"signatories:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> [PubKeyHash] -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS [PubKeyHash]
txInfoSignatories
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"redeemers:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Map ScriptPurpose Redeemer -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Map ScriptPurpose Redeemer
txInfoRedeemers
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"datums:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Map DatumHash Datum -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Map DatumHash Datum
txInfoData
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"transaction id:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> TxId -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS TxId
txInfoId
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"votes:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Map Voter (Map GovernanceActionId Vote) -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Map Voter (Map GovernanceActionId Vote)
txInfoVotes
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"proposals:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> [ProposalProcedure] -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS [ProposalProcedure]
txInfoProposalProcedures
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"treasury amount:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Maybe Lovelace -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Maybe Lovelace
txInfoCurrentTreasuryAmount
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"treasury donation:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> Maybe Lovelace -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS Maybe Lovelace
txInfoTreasuryDonation

instance ShowBS Api.ScriptContext where
  {-# INLINEABLE showBS #-}
  showBS :: ScriptContext -> BuiltinString
showBS Api.ScriptContext {TxInfo
ScriptPurpose
scriptContextTxInfo :: TxInfo
scriptContextPurpose :: ScriptPurpose
scriptContextTxInfo :: ScriptContext -> TxInfo
scriptContextPurpose :: ScriptContext -> ScriptPurpose
..} =
    BuiltinString -> BuiltinString
showBSParen
      (BuiltinString -> BuiltinString) -> BuiltinString -> BuiltinString
forall a b. (a -> b) -> a -> b
$ BuiltinString
"Script context:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"Script Tx info:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> TxInfo -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS TxInfo
scriptContextTxInfo
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> BuiltinString
"Script purpose:"
      BuiltinString -> BuiltinString -> BuiltinString
forall a. Semigroup a => a -> a -> a
<> ScriptPurpose -> BuiltinString
forall a. ShowBS a => a -> BuiltinString
showBS ScriptPurpose
scriptContextPurpose