{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Mary.HuddleSpec (
  module Cardano.Ledger.Allegra.HuddleSpec,
  maryCDDL,
  multiasset,
) where

import Cardano.Ledger.Allegra.HuddleSpec
import Cardano.Ledger.Mary (MaryEra)
import Codec.CBOR.Cuddle.Huddle
import Data.Proxy (Proxy (..))
import Data.Word (Word64)
import Prelude hiding ((/))

maryCDDL :: Huddle
maryCDDL :: Huddle
maryCDDL =
  [HuddleItem] -> Huddle
collectFrom
    [ Rule -> HuddleItem
HIRule (Rule -> HuddleItem) -> Rule -> HuddleItem
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"block" (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @MaryEra)
    , Rule -> HuddleItem
HIRule (Rule -> HuddleItem) -> Rule -> HuddleItem
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction" (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @MaryEra)
    , Rule -> HuddleItem
HIRule (Rule -> HuddleItem) -> Rule -> HuddleItem
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"policy_id" (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @MaryEra)
    , Rule -> HuddleItem
HIRule (Rule -> HuddleItem) -> Rule -> HuddleItem
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"asset_name" (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @MaryEra)
    ]

instance HuddleRule "block" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
(HuddleRule "header" era, HuddleRule "transaction_body" era,
 HuddleRule "transaction_witness_set" era,
 HuddleRule "auxiliary_data" era) =>
Proxy era -> Rule
blockRule @MaryEra

instance HuddleRule "transaction" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
(HuddleRule "transaction_body" era,
 HuddleRule "transaction_witness_set" era,
 HuddleRule "auxiliary_data" era) =>
Proxy era -> Rule
transactionRule @MaryEra

instance HuddleRule "header" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. HuddleRule "header_body" era => Proxy era -> Rule
headerRule @MaryEra

instance HuddleRule "header_body" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
(HuddleGroup "operational_cert" era,
 HuddleGroup "protocol_version" era) =>
Proxy era -> Rule
headerBodyRule @MaryEra

instance HuddleGroup "protocol_version" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era.
HuddleRule "major_protocol_version" era =>
Proxy era -> Named Group
shelleyProtocolVersionGroup @MaryEra

instance HuddleRule "major_protocol_version" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. Era era => Proxy era -> Rule
majorProtocolVersionRule @MaryEra

instance HuddleRule "int64" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
(HuddleRule "min_int64" era, HuddleRule "max_int64" era) =>
Proxy era -> Rule
int64Rule @MaryEra

instance HuddleRule "min_int64" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
_ = Rule
minInt64Rule

instance HuddleRule "max_int64" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
_ = Rule
maxInt64Rule

instance HuddleRule "transaction_id" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. Era era => Proxy era -> Rule
transactionIdRule @MaryEra

instance HuddleRule "transaction_input" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. HuddleRule "transaction_id" era => Proxy era -> Rule
transactionInputRule @MaryEra

instance HuddleGroup "operational_cert" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. Era era => Proxy era -> Named Group
shelleyOperationalCertGroup @MaryEra

instance HuddleRule "vkeywitness" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. Era era => Proxy era -> Rule
vkeywitnessRule @MaryEra

instance HuddleRule "bootstrap_witness" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. Era era => Proxy era -> Rule
bootstrapWitnessRule @MaryEra

instance HuddleRule "transaction_witness_set" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
(HuddleRule "vkeywitness" era, HuddleRule "native_script" era,
 HuddleRule "bootstrap_witness" era) =>
Proxy era -> Rule
transactionWitnessSetRule @MaryEra

instance HuddleRule "withdrawals" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. Era era => Proxy era -> Rule
withdrawalsRule @MaryEra

instance HuddleRule "certificate" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
(HuddleGroup "account_registration_cert" era,
 HuddleGroup "account_unregistration_cert" era,
 HuddleGroup "delegation_to_stake_pool_cert" era,
 HuddleGroup "pool_registration_cert" era,
 HuddleGroup "pool_retirement_cert" era,
 HuddleGroup "genesis_delegation_cert" era,
 HuddleGroup "move_instantaneous_rewards_cert" era) =>
Proxy era -> Rule
certificateRule @MaryEra

instance HuddleGroup "account_registration_cert" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. Era era => Proxy era -> Named Group
accountRegistrationCertGroup @MaryEra

instance HuddleGroup "account_unregistration_cert" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. Era era => Proxy era -> Named Group
accountUnregistrationCertGroup @MaryEra

instance HuddleGroup "delegation_to_stake_pool_cert" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. Era era => Proxy era -> Named Group
delegationToStakePoolCertGroup @MaryEra

instance HuddleGroup "pool_registration_cert" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era.
HuddleGroup "pool_params" era =>
Proxy era -> Named Group
poolRegistrationCertGroup @MaryEra

instance HuddleGroup "pool_retirement_cert" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. Era era => Proxy era -> Named Group
poolRetirementCertGroup @MaryEra

instance HuddleGroup "genesis_delegation_cert" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era.
(HuddleRule "genesis_hash" era,
 HuddleRule "genesis_delegate_hash" era) =>
Proxy era -> Named Group
genesisDelegationCertGroup @MaryEra

instance HuddleGroup "move_instantaneous_rewards_cert" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era.
HuddleRule "move_instantaneous_reward" era =>
Proxy era -> Named Group
moveInstantaneousRewardsCertGroup @MaryEra

instance HuddleRule "genesis_hash" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. Era era => Proxy era -> Rule
genesisHashRule @MaryEra

instance HuddleRule "genesis_delegate_hash" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. Era era => Proxy era -> Rule
genesisDelegateHashRule @MaryEra

instance HuddleRule "delta_coin" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
_ = Rule
deltaCoinRule

instance HuddleRule "move_instantaneous_reward" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. HuddleRule "delta_coin" era => Proxy era -> Rule
moveInstantaneousRewardRule @MaryEra

instance HuddleGroup "pool_params" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era.
(HuddleRule "relay" era, HuddleRule "pool_metadata" era) =>
Proxy era -> Named Group
poolParamsGroup @MaryEra

instance HuddleRule "pool_metadata" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. HuddleRule "url" era => Proxy era -> Rule
poolMetadataRule @MaryEra

instance HuddleRule "dns_name" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
_ = Rule
dnsNameRule

instance HuddleRule "url" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
_ = Rule
urlRule

instance HuddleGroup "single_host_addr" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. Era era => Proxy era -> Named Group
singleHostAddrGroup @MaryEra

instance HuddleGroup "single_host_name" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. HuddleRule "dns_name" era => Proxy era -> Named Group
singleHostNameGroup @MaryEra

instance HuddleGroup "multi_host_name" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. HuddleRule "dns_name" era => Proxy era -> Named Group
multiHostNameGroup @MaryEra

instance HuddleRule "relay" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
(HuddleGroup "single_host_addr" era,
 HuddleGroup "single_host_name" era,
 HuddleGroup "multi_host_name" era) =>
Proxy era -> Rule
relayRule @MaryEra

instance HuddleRule "protocol_param_update" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. HuddleGroup "protocol_version" era => Proxy era -> Rule
protocolParamUpdateRule @MaryEra

instance HuddleRule "proposed_protocol_parameter_updates" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
(HuddleRule "genesis_hash" era,
 HuddleRule "protocol_param_update" era) =>
Proxy era -> Rule
proposedProtocolParameterUpdatesRule @MaryEra

instance HuddleRule "update" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
HuddleRule "proposed_protocol_parameter_updates" era =>
Proxy era -> Rule
updateRule @MaryEra

instance HuddleGroup "script_pubkey" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. Era era => Proxy era -> Named Group
scriptPubkeyGroup @MaryEra

instance HuddleGroup "script_all" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era.
HuddleRule "native_script" era =>
Proxy era -> Named Group
scriptAllGroup @MaryEra

instance HuddleGroup "script_any" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era.
HuddleRule "native_script" era =>
Proxy era -> Named Group
scriptAnyGroup @MaryEra

instance HuddleGroup "script_n_of_k" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era.
(HuddleRule "int64" era, HuddleRule "native_script" era) =>
Proxy era -> Named Group
scriptNOfKGroup @MaryEra

instance HuddleGroup "script_invalid_before" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. Era era => Proxy era -> Named Group
scriptInvalidBeforeGroup @MaryEra

instance HuddleGroup "script_invalid_hereafter" MaryEra where
  huddleGroup :: Proxy MaryEra -> Named Group
huddleGroup = forall era. Era era => Proxy era -> Named Group
scriptInvalidHereafterGroup @MaryEra

instance HuddleRule "native_script" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
(HuddleGroup "script_pubkey" era, HuddleGroup "script_all" era,
 HuddleGroup "script_any" era, HuddleGroup "script_n_of_k" era,
 HuddleGroup "script_invalid_before" era,
 HuddleGroup "script_invalid_hereafter" era) =>
Proxy era -> Rule
nativeScriptRule @MaryEra

instance HuddleRule "transaction_body" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
p =
    Text
"transaction_body"
      Text -> MapChoice -> Rule
forall a. IsType0 a => Text -> a -> Rule
=:= MapChoice -> MapChoice
mp
        [ Word64 -> Key
idx Word64
0 Key -> GRuleCall -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Rule -> GRuleCall
forall a. IsType0 a => a -> GRuleCall
untaggedSet (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction_input" Proxy MaryEra
p)
        , Word64 -> Key
idx Word64
1 Key -> ArrayChoice -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> ArrayChoice -> ArrayChoice
arr [Word64
0 Word64 -> ArrayEntry -> ArrayEntry
forall a. CanQuantify a => Word64 -> a -> a
<+ Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction_output" Proxy MaryEra
p)]
        , Word64 -> Key
idx Word64
2 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"coin" Proxy MaryEra
p
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
3 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"slot" Proxy MaryEra
p)
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
4 Key -> ArrayChoice -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> ArrayChoice -> ArrayChoice
arr [Word64
0 Word64 -> ArrayEntry -> ArrayEntry
forall a. CanQuantify a => Word64 -> a -> a
<+ Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"certificate" Proxy MaryEra
p)])
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
5 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"withdrawals" Proxy MaryEra
p)
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
6 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"update" Proxy MaryEra
p)
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
7 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"auxiliary_data_hash" Proxy MaryEra
p)
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
8 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"slot" Proxy MaryEra
p)
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
9 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"mint" Proxy MaryEra
p)
        ]

instance HuddleRule "transaction_output" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
p =
    Text
"transaction_output"
      Text -> ArrayChoice -> Rule
forall a. IsType0 a => Text -> a -> Rule
=:= ArrayChoice -> ArrayChoice
arr
        [ Rule -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item ArrayChoice) -> Rule -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"address" Proxy MaryEra
p
        , Key
"amount" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"value" Proxy MaryEra
p
        ]

multiasset ::
  forall era a.
  (HuddleRule "policy_id" era, HuddleRule "asset_name" era, IsType0 a) => Proxy era -> a -> GRuleCall
multiasset :: forall era a.
(HuddleRule "policy_id" era, HuddleRule "asset_name" era,
 IsType0 a) =>
Proxy era -> a -> GRuleCall
multiasset Proxy era
p =
  (GRef -> Rule) -> a -> GRuleCall
forall t0. IsType0 t0 => (GRef -> Rule) -> t0 -> GRuleCall
binding ((GRef -> Rule) -> a -> GRuleCall)
-> (GRef -> Rule) -> a -> GRuleCall
forall a b. (a -> b) -> a -> b
$ \GRef
x ->
    Text
"multiasset"
      Text -> MapChoice -> Rule
forall a. IsType0 a => Text -> a -> Rule
=:= MapChoice -> MapChoice
mp
        [ Word64
0
            Word64 -> MapEntry -> MapEntry
forall a. CanQuantify a => Word64 -> a -> a
<+ Rule -> Key
forall r. IsType0 r => r -> Key
asKey (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"policy_id" Proxy era
p)
            Key -> MapChoice -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> MapChoice -> MapChoice
mp [Word64
1 Word64 -> MapEntry -> MapEntry
forall a. CanQuantify a => Word64 -> a -> a
<+ Rule -> Key
forall r. IsType0 r => r -> Key
asKey (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"asset_name" Proxy era
p) Key -> GRef -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> GRef
x]
        ]

instance HuddleRule "value" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
p =
    Text
"value"
      Text -> Choice Type2 -> Rule
forall a. IsType0 a => Text -> a -> Rule
=:= forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"coin" Proxy MaryEra
p
      Rule -> Seal Array -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ ArrayChoice -> Seal Array
sarr [Rule -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item ArrayChoice) -> Rule -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"coin" Proxy MaryEra
p, GRuleCall -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GRuleCall -> Item ArrayChoice) -> GRuleCall -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ Proxy MaryEra -> Value Int -> GRuleCall
forall era a.
(HuddleRule "policy_id" era, HuddleRule "asset_name" era,
 IsType0 a) =>
Proxy era -> a -> GRuleCall
multiasset Proxy MaryEra
p Value Int
VUInt]

instance HuddleRule "policy_id" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
p = Text
"policy_id" Text -> Rule -> Rule
forall a. IsType0 a => Text -> a -> Rule
=:= forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"script_hash" Proxy MaryEra
p

instance HuddleRule "asset_name" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
_ = Text
"asset_name" Text -> Constrained -> Rule
forall a. IsType0 a => Text -> a -> Rule
=:= Value ByteString
VBytes Value ByteString -> (Word64, Word64) -> Constrained
forall c a s.
(IsSizeable a, IsSize s, IsConstrainable c a) =>
c -> s -> Constrained
`sized` (Word64
0 :: Word64, Word64
32 :: Word64)

instance HuddleRule "mint" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule Proxy MaryEra
p = Text
"mint" Text -> GRuleCall -> Rule
forall a. IsType0 a => Text -> a -> Rule
=:= Proxy MaryEra -> Rule -> GRuleCall
forall era a.
(HuddleRule "policy_id" era, HuddleRule "asset_name" era,
 IsType0 a) =>
Proxy era -> a -> GRuleCall
multiasset Proxy MaryEra
p (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"int64" Proxy MaryEra
p)

instance HuddleRule "auxiliary_data" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era.
HuddleRule "auxiliary_data_array" era =>
Proxy era -> Rule
auxiliaryDataRule @MaryEra

instance HuddleRule "auxiliary_data_array" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. HuddleRule "auxiliary_scripts" era => Proxy era -> Rule
auxiliaryDataArrayRule @MaryEra

instance HuddleRule "auxiliary_scripts" MaryEra where
  huddleRule :: Proxy MaryEra -> Rule
huddleRule = forall era. HuddleRule "native_script" era => Proxy era -> Rule
auxiliaryScriptsRule @MaryEra