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

module Cardano.Ledger.Babbage.HuddleSpec (
  module Cardano.Ledger.Alonzo.HuddleSpec,
  BabbageEra,
  babbageCDDL,
  babbageOperationalCertRule,
  babbageProtocolVersionRule,
  babbageTransactionOutput,
  babbageScript,
  alonzoTransactionOutputRule,
  dataRule,
  datumOptionRule,
  scriptRefRule,
) where

import Cardano.Ledger.Alonzo.HuddleSpec hiding (
  shelleyOperationalCertGroup,
  shelleyProtocolVersionGroup,
 )
import Cardano.Ledger.Babbage (BabbageEra)
import Data.Proxy (Proxy (..))
import Data.Word (Word64)
import Text.Heredoc
import Prelude hiding ((/))

babbageCDDL :: Huddle
babbageCDDL :: Huddle
babbageCDDL =
  [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 @BabbageEra)
    , 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 @BabbageEra)
    , 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 @"kes_signature" (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @BabbageEra)
    , 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 @"language" (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @BabbageEra)
    , 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 @"signkey_kes" (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @BabbageEra)
    ]

-- | Babbage changed protocol_version from GroupDef to Rule to match actual block
-- serialization. See 'header_body' instance for full explanation.
-- Ref: PR #3762, Issue #3559
babbageProtocolVersionRule ::
  forall era.
  HuddleRule "major_protocol_version" era => Proxy "protocol_version" -> Proxy era -> Rule
babbageProtocolVersionRule :: forall era.
HuddleRule "major_protocol_version" era =>
Proxy "protocol_version" -> Proxy era -> Rule
babbageProtocolVersionRule Proxy "protocol_version"
pname Proxy era
p =
  Proxy "protocol_version"
pname Proxy "protocol_version" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> 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 @"major_protocol_version" Proxy era
p, Value Int -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a Value Int
VUInt]

-- | Babbage changed operational_cert from GroupDef to Rule to match actual block
-- serialization. See 'header_body' instance for full explanation.
-- Ref: PR #3762, Issue #3559
babbageOperationalCertRule ::
  forall era. Era era => Proxy "operational_cert" -> Proxy era -> Rule
babbageOperationalCertRule :: forall era.
Era era =>
Proxy "operational_cert" -> Proxy era -> Rule
babbageOperationalCertRule Proxy "operational_cert"
pname Proxy era
p =
  Proxy "operational_cert"
pname
    Proxy "operational_cert" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr
      [ Key
"hot_vkey" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"kes_vkey" Proxy era
p
      , Key
"sequence_number" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"sequence_number" Proxy era
p
      , Key
"kes_period" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"kes_period" Proxy era
p
      , Key
"sigma" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"signature" Proxy era
p
      ]

alonzoTransactionOutputRule ::
  forall era.
  (HuddleRule "address" era, HuddleRule "value" era, HuddleRule "hash32" era) =>
  Proxy "alonzo_transaction_output" ->
  Proxy era ->
  Rule
alonzoTransactionOutputRule :: forall era.
(HuddleRule "address" era, HuddleRule "value" era,
 HuddleRule "hash32" era) =>
Proxy "alonzo_transaction_output" -> Proxy era -> Rule
alonzoTransactionOutputRule Proxy "alonzo_transaction_output"
pname Proxy era
p =
  Proxy "alonzo_transaction_output"
pname
    Proxy "alonzo_transaction_output" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr
      [ Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"address" Proxy era
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 era
p
      , ArrayEntry -> ArrayEntry
forall a. CanQuantify a => a -> a
opt (Key
"datum_hash" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"hash32" Proxy era
p)
      ]

dataRule ::
  forall era. HuddleRule "plutus_data" era => Proxy "data" -> Proxy era -> Rule
dataRule :: forall era.
HuddleRule "plutus_data" era =>
Proxy "data" -> Proxy era -> Rule
dataRule Proxy "data"
pname Proxy era
p = Proxy "data"
pname Proxy "data" -> Tagged Constrained -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= Word64 -> Constrained -> Tagged Constrained
forall a. Word64 -> a -> Tagged a
tag Word64
24 (Value ByteString
VBytes Value ByteString -> Rule -> Constrained
forall b c.
(IsCborable b, IsConstrainable c b) =>
c -> Rule -> Constrained
`cbor` forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"plutus_data" Proxy era
p)

datumOptionRule ::
  forall era.
  (HuddleRule "hash32" era, HuddleRule "data" era) =>
  Proxy "datum_option" ->
  Proxy era ->
  Rule
datumOptionRule :: forall era.
(HuddleRule "hash32" era, HuddleRule "data" era) =>
Proxy "datum_option" -> Proxy era -> Rule
datumOptionRule Proxy "datum_option"
pname Proxy era
p =
  Proxy "datum_option"
pname
    Proxy "datum_option" -> Choice ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr [Item ArrayChoice
ArrayEntry
0, Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"hash32" Proxy era
p)]
    ArrayChoice -> ArrayChoice -> Choice ArrayChoice
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ ArrayChoice -> ArrayChoice
arr [Item ArrayChoice
ArrayEntry
1, Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"data" Proxy era
p)]

scriptRefRule ::
  forall era.
  HuddleRule "script" era =>
  Proxy "script_ref" ->
  Proxy era ->
  Rule
scriptRefRule :: forall era.
HuddleRule "script" era =>
Proxy "script_ref" -> Proxy era -> Rule
scriptRefRule Proxy "script_ref"
pname Proxy era
p = Proxy "script_ref"
pname Proxy "script_ref" -> Tagged Constrained -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= Word64 -> Constrained -> Tagged Constrained
forall a. Word64 -> a -> Tagged a
tag Word64
24 (Value ByteString
VBytes Value ByteString -> Rule -> Constrained
forall b c.
(IsCborable b, IsConstrainable c b) =>
c -> Rule -> Constrained
`cbor` forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"script" Proxy era
p)

babbageTransactionOutput ::
  forall era.
  ( HuddleRule "address" era
  , HuddleRule "value" era
  , HuddleRule "datum_option" era
  , HuddleRule "script_ref" era
  ) =>
  Proxy "babbage_transaction_output" ->
  Proxy era ->
  Rule
babbageTransactionOutput :: forall era.
(HuddleRule "address" era, HuddleRule "value" era,
 HuddleRule "datum_option" era, HuddleRule "script_ref" era) =>
Proxy "babbage_transaction_output" -> Proxy era -> Rule
babbageTransactionOutput Proxy "babbage_transaction_output"
pname Proxy era
p =
  Proxy "babbage_transaction_output"
pname
    Proxy "babbage_transaction_output" -> MapChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= MapChoice -> MapChoice
mp
      [ Word64 -> Key
idx Word64
0 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"address" Proxy era
p
      , Word64 -> Key
idx Word64
1 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"value" Proxy era
p
      , Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ 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 @"datum_option" Proxy era
p MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"new"
      , Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ 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 @"script_ref" Proxy era
p MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"new"
      ]

babbageScript ::
  forall era.
  ( HuddleRule "native_script" era
  , HuddleRule "plutus_v1_script" era
  , HuddleRule "plutus_v2_script" era
  ) =>
  Proxy "script" ->
  Proxy era ->
  Rule
babbageScript :: forall era.
(HuddleRule "native_script" era, HuddleRule "plutus_v1_script" era,
 HuddleRule "plutus_v2_script" era) =>
Proxy "script" -> Proxy era -> Rule
babbageScript Proxy "script"
pname Proxy era
p =
  Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
    Comment
[str|Babbage supports three script types:
        |  0: Native scripts (timelock)
        |  1: Plutus V1 scripts
        |  2: Plutus V2 scripts
        |]
    (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "script"
pname
      Proxy "script" -> Choice ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr [Item ArrayChoice
ArrayEntry
0, Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"native_script" Proxy era
p)]
      ArrayChoice -> ArrayChoice -> Choice ArrayChoice
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ ArrayChoice -> ArrayChoice
arr [Item ArrayChoice
ArrayEntry
1, Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"plutus_v1_script" Proxy era
p)]
      Choice ArrayChoice -> ArrayChoice -> Choice ArrayChoice
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ ArrayChoice -> ArrayChoice
arr [Item ArrayChoice
ArrayEntry
2, Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"plutus_v2_script" Proxy era
p)]

instance HuddleGroup "account_registration_cert" BabbageEra where
  huddleGroupNamed :: Proxy "account_registration_cert" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "account_registration_cert" -> Proxy BabbageEra -> GroupDef
forall era.
Era era =>
Proxy "account_registration_cert" -> Proxy era -> GroupDef
accountRegistrationCertGroup

instance HuddleGroup "account_unregistration_cert" BabbageEra where
  huddleGroupNamed :: Proxy "account_unregistration_cert" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "account_unregistration_cert" -> Proxy BabbageEra -> GroupDef
forall era.
Era era =>
Proxy "account_unregistration_cert" -> Proxy era -> GroupDef
accountUnregistrationCertGroup

instance HuddleGroup "delegation_to_stake_pool_cert" BabbageEra where
  huddleGroupNamed :: Proxy "delegation_to_stake_pool_cert"
-> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "delegation_to_stake_pool_cert"
-> Proxy BabbageEra -> GroupDef
forall era.
Era era =>
Proxy "delegation_to_stake_pool_cert" -> Proxy era -> GroupDef
delegationToStakePoolCertGroup

instance HuddleGroup "pool_registration_cert" BabbageEra where
  huddleGroupNamed :: Proxy "pool_registration_cert" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "pool_registration_cert" -> Proxy BabbageEra -> GroupDef
forall era.
HuddleGroup "pool_params" era =>
Proxy "pool_registration_cert" -> Proxy era -> GroupDef
poolRegistrationCertGroup

instance HuddleGroup "pool_retirement_cert" BabbageEra where
  huddleGroupNamed :: Proxy "pool_retirement_cert" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "pool_retirement_cert" -> Proxy BabbageEra -> GroupDef
forall era.
Era era =>
Proxy "pool_retirement_cert" -> Proxy era -> GroupDef
poolRetirementCertGroup

instance HuddleGroup "genesis_delegation_cert" BabbageEra where
  huddleGroupNamed :: Proxy "genesis_delegation_cert" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "genesis_delegation_cert" -> Proxy BabbageEra -> GroupDef
forall era.
(HuddleRule "genesis_hash" era,
 HuddleRule "genesis_delegate_hash" era) =>
Proxy "genesis_delegation_cert" -> Proxy era -> GroupDef
genesisDelegationCertGroup

instance HuddleGroup "move_instantaneous_rewards_cert" BabbageEra where
  huddleGroupNamed :: Proxy "move_instantaneous_rewards_cert"
-> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "move_instantaneous_rewards_cert"
-> Proxy BabbageEra -> GroupDef
forall era.
HuddleRule "move_instantaneous_reward" era =>
Proxy "move_instantaneous_rewards_cert" -> Proxy era -> GroupDef
moveInstantaneousRewardsCertGroup

instance HuddleRule "certificate" BabbageEra where
  huddleRuleNamed :: Proxy "certificate" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "certificate" -> Proxy BabbageEra -> Rule
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 "certificate" -> Proxy era -> Rule
certificateRule

instance HuddleRule "withdrawals" BabbageEra where
  huddleRuleNamed :: Proxy "withdrawals" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "withdrawals" -> Proxy BabbageEra -> Rule
forall era. Era era => Proxy "withdrawals" -> Proxy era -> Rule
shelleyWithdrawalsRule

instance HuddleRule "genesis_hash" BabbageEra where
  huddleRuleNamed :: Proxy "genesis_hash" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "genesis_hash" -> Proxy BabbageEra -> Rule
forall era. Era era => Proxy "genesis_hash" -> Proxy era -> Rule
genesisHashRule

instance HuddleRule "genesis_delegate_hash" BabbageEra where
  huddleRuleNamed :: Proxy "genesis_delegate_hash" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "genesis_delegate_hash" -> Proxy BabbageEra -> Rule
forall era.
Era era =>
Proxy "genesis_delegate_hash" -> Proxy era -> Rule
genesisDelegateHashRule

instance HuddleGroup "pool_params" BabbageEra where
  huddleGroupNamed :: Proxy "pool_params" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "pool_params" -> Proxy BabbageEra -> GroupDef
forall era.
(HuddleRule "relay" era, HuddleRule "pool_metadata" era,
 HuddleRule1 "set" era) =>
Proxy "pool_params" -> Proxy era -> GroupDef
poolParamsGroup

instance HuddleRule "pool_metadata" BabbageEra where
  huddleRuleNamed :: Proxy "pool_metadata" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "pool_metadata" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "url" era =>
Proxy "pool_metadata" -> Proxy era -> Rule
poolMetadataRule

instance HuddleRule "dns_name" BabbageEra where
  huddleRuleNamed :: Proxy "dns_name" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "dns_name"
pname Proxy BabbageEra
_ = Proxy "dns_name" -> Rule
dnsNameRule Proxy "dns_name"
pname

instance HuddleRule "url" BabbageEra where
  huddleRuleNamed :: Proxy "url" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "url"
pname Proxy BabbageEra
_ = Proxy "url" -> Rule
urlRule Proxy "url"
pname

instance HuddleGroup "single_host_addr" BabbageEra where
  huddleGroupNamed :: Proxy "single_host_addr" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "single_host_addr" -> Proxy BabbageEra -> GroupDef
forall era.
Era era =>
Proxy "single_host_addr" -> Proxy era -> GroupDef
singleHostAddrGroup

instance HuddleGroup "single_host_name" BabbageEra where
  huddleGroupNamed :: Proxy "single_host_name" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "single_host_name" -> Proxy BabbageEra -> GroupDef
forall era.
HuddleRule "dns_name" era =>
Proxy "single_host_name" -> Proxy era -> GroupDef
singleHostNameGroup

instance HuddleGroup "multi_host_name" BabbageEra where
  huddleGroupNamed :: Proxy "multi_host_name" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "multi_host_name" -> Proxy BabbageEra -> GroupDef
forall era.
HuddleRule "dns_name" era =>
Proxy "multi_host_name" -> Proxy era -> GroupDef
multiHostNameGroup

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

instance HuddleRule "move_instantaneous_reward" BabbageEra where
  huddleRuleNamed :: Proxy "move_instantaneous_reward" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "move_instantaneous_reward" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "delta_coin" era =>
Proxy "move_instantaneous_reward" -> Proxy era -> Rule
moveInstantaneousRewardRule

instance HuddleRule "delta_coin" BabbageEra where
  huddleRuleNamed :: Proxy "delta_coin" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "delta_coin"
pname Proxy BabbageEra
_ = Proxy "delta_coin" -> Rule
deltaCoinRule Proxy "delta_coin"
pname

instance HuddleRule "transaction_id" BabbageEra where
  huddleRuleNamed :: Proxy "transaction_id" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "transaction_id" -> Proxy BabbageEra -> Rule
forall era. Era era => Proxy "transaction_id" -> Proxy era -> Rule
transactionIdRule

instance HuddleRule "transaction_input" BabbageEra where
  huddleRuleNamed :: Proxy "transaction_input" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "transaction_input" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "transaction_id" era =>
Proxy "transaction_input" -> Proxy era -> Rule
transactionInputRule

instance HuddleRule "vkeywitness" BabbageEra where
  huddleRuleNamed :: Proxy "vkeywitness" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "vkeywitness" -> Proxy BabbageEra -> Rule
forall era. Era era => Proxy "vkeywitness" -> Proxy era -> Rule
vkeywitnessRule

instance HuddleRule "bootstrap_witness" BabbageEra where
  huddleRuleNamed :: Proxy "bootstrap_witness" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "bootstrap_witness" -> Proxy BabbageEra -> Rule
forall era.
Era era =>
Proxy "bootstrap_witness" -> Proxy era -> Rule
bootstrapWitnessRule

instance HuddleRule "policy_id" BabbageEra where
  huddleRuleNamed :: Proxy "policy_id" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "policy_id"
pname Proxy BabbageEra
p = Proxy "policy_id"
pname Proxy "policy_id" -> Rule -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"script_hash" Proxy BabbageEra
p

instance HuddleRule "asset_name" BabbageEra where
  huddleRuleNamed :: Proxy "asset_name" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "asset_name"
pname Proxy BabbageEra
_ = Proxy "asset_name"
pname Proxy "asset_name" -> Constrained -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> 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 "value" BabbageEra where
  huddleRuleNamed :: Proxy "value" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "value" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule1 "multiasset" era =>
Proxy "value" -> Proxy era -> Rule
maryValueRule

instance HuddleRule "mint" BabbageEra where
  huddleRuleNamed :: Proxy "mint" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "mint" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule1 "multiasset" era =>
Proxy "mint" -> Proxy era -> Rule
maryMintRule

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

instance HuddleRule "update" BabbageEra where
  huddleRuleNamed :: Proxy "update" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "update" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "proposed_protocol_parameter_updates" era =>
Proxy "update" -> Proxy era -> Rule
updateRule

instance HuddleRule "required_signers" BabbageEra where
  huddleRuleNamed :: Proxy "required_signers" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "required_signers" -> Proxy BabbageEra -> Rule
forall era.
(HuddleRule "addr_keyhash" era, HuddleRule1 "set" era) =>
Proxy "required_signers" -> Proxy era -> Rule
requiredSignersRule

instance HuddleRule "network_id" BabbageEra where
  huddleRuleNamed :: Proxy "network_id" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "network_id"
pname Proxy BabbageEra
_ = Proxy "network_id" -> Rule
networkIdRule Proxy "network_id"
pname

instance HuddleRule "bounded_bytes" BabbageEra where
  huddleRuleNamed :: Proxy "bounded_bytes" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "bounded_bytes"
pname Proxy BabbageEra
_ = Proxy "bounded_bytes" -> Rule
boundedBytesRule Proxy "bounded_bytes"
pname

instance HuddleRule "big_uint" BabbageEra where
  huddleRuleNamed :: Proxy "big_uint" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "big_uint" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "bounded_bytes" era =>
Proxy "big_uint" -> Proxy era -> Rule
bigUintRule

instance HuddleRule "big_nint" BabbageEra where
  huddleRuleNamed :: Proxy "big_nint" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "big_nint" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "bounded_bytes" era =>
Proxy "big_nint" -> Proxy era -> Rule
bigNintRule

instance HuddleRule "big_int" BabbageEra where
  huddleRuleNamed :: Proxy "big_int" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "big_int" -> Proxy BabbageEra -> Rule
forall era.
(HuddleRule "big_uint" era, HuddleRule "big_nint" era) =>
Proxy "big_int" -> Proxy era -> Rule
bigIntRule

instance HuddleRule "distinct_bytes" BabbageEra where
  huddleRuleNamed :: Proxy "distinct_bytes" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "distinct_bytes"
pname Proxy BabbageEra
_ = Proxy "distinct_bytes" -> Rule
distinctBytesRule Proxy "distinct_bytes"
pname

instance HuddleRule "redeemers" BabbageEra where
  huddleRuleNamed :: Proxy "redeemers" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "redeemers"
pname Proxy BabbageEra
p = Proxy "redeemers"
pname Proxy "redeemers" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= 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 @"redeemer" Proxy BabbageEra
p)]

instance HuddleRule "redeemer" BabbageEra where
  huddleRuleNamed :: Proxy "redeemer" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "redeemer"
pname Proxy BabbageEra
p =
    Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
      Comment
[str|NEW
          |]
      (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "redeemer" -> Proxy BabbageEra -> Rule
forall era.
(HuddleRule "redeemer_tag" era, HuddleRule "plutus_data" era,
 HuddleRule "ex_units" era) =>
Proxy "redeemer" -> Proxy era -> Rule
alonzoRedeemer Proxy "redeemer"
pname Proxy BabbageEra
p

instance HuddleRule "redeemer_tag" BabbageEra where
  huddleRuleNamed :: Proxy "redeemer_tag" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "redeemer_tag"
pname Proxy BabbageEra
_ = Proxy "redeemer_tag" -> Rule
alonzoRedeemerTag Proxy "redeemer_tag"
pname

instance HuddleRule "ex_units" BabbageEra where
  huddleRuleNamed :: Proxy "ex_units" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "ex_units"
pname Proxy BabbageEra
_ = Proxy "ex_units" -> Rule
exUnitsRule Proxy "ex_units"
pname

instance HuddleRule "ex_unit_prices" BabbageEra where
  huddleRuleNamed :: Proxy "ex_unit_prices" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "ex_unit_prices" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "positive_interval" era =>
Proxy "ex_unit_prices" -> Proxy era -> Rule
exUnitPricesRule

instance HuddleRule "positive_interval" BabbageEra where
  huddleRuleNamed :: Proxy "positive_interval" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "positive_interval" -> Proxy BabbageEra -> Rule
forall era.
Era era =>
Proxy "positive_interval" -> Proxy era -> Rule
positiveIntervalRule

instance HuddleRule "operational_cert" BabbageEra where
  huddleRuleNamed :: Proxy "operational_cert" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "operational_cert" -> Proxy BabbageEra -> Rule
forall era.
Era era =>
Proxy "operational_cert" -> Proxy era -> Rule
babbageOperationalCertRule

instance HuddleRule "protocol_version" BabbageEra where
  huddleRuleNamed :: Proxy "protocol_version" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "protocol_version" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "major_protocol_version" era =>
Proxy "protocol_version" -> Proxy era -> Rule
babbageProtocolVersionRule

instance HuddleRule "major_protocol_version" BabbageEra where
  huddleRuleNamed :: Proxy "major_protocol_version" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "major_protocol_version" -> Proxy BabbageEra -> Rule
forall era.
Era era =>
Proxy "major_protocol_version" -> Proxy era -> Rule
majorProtocolVersionRule

instance HuddleRule "block" BabbageEra where
  huddleRuleNamed :: Proxy "block" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "block"
pname Proxy BabbageEra
p =
    Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
      Comment
[str|Valid blocks must also satisfy the following two constraints:
          |  1) the length of transaction_bodies and transaction_witness_sets must be
          |     the same
          |  2) every transaction_index must be strictly smaller than the length of
          |     transaction_bodies
          |]
      (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "block"
pname
        Proxy "block" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> 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 @"header" Proxy BabbageEra
p
          , Key
"transaction_bodies" Key -> ArrayChoice -> ArrayEntry
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_body" Proxy BabbageEra
p)]
          , Key
"transaction_witness_sets" Key -> ArrayChoice -> ArrayEntry
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_witness_set" Proxy BabbageEra
p)]
          , Key
"auxiliary_data_set"
              Key -> MapChoice -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> 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 @"transaction_index" Proxy BabbageEra
p)
                    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" Proxy BabbageEra
p
                ]
          , Key
"invalid_transactions" Key -> ArrayChoice -> ArrayEntry
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_index" Proxy BabbageEra
p)]
          ]

instance HuddleRule "header" BabbageEra where
  huddleRuleNamed :: Proxy "header" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "header"
pname Proxy BabbageEra
p =
    Proxy "header"
pname
      Proxy "header" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> 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 @"header_body" Proxy BabbageEra
p
        , Key
"body_signature" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"kes_signature" Proxy BabbageEra
p
        ]

-- IMPORTANT: Babbage changed operational_cert and protocol_version from GroupDef
-- (grp) to Rule (arr) to match actual block serialization.
--
-- Semantic difference:
--   * GroupDef (grp): Fields are inlined directly into parent array.
--     -> header_body becomes a 14-element flat array
--   * Rule (arr): Fields are nested as separate sub-arrays.
--     -> header_body becomes a 10-element array with nested structures
--
-- Pre-Babbage eras (Shelley through Alonzo) used GroupDef, but actual Babbage+
-- blocks serialize with Rule (nested arrays). This change corrects the CDDL spec to
-- match the actual CBOR serialization.
--
-- See 'babbageProtocolVersionRule' and 'operational_cert' instance for details.
-- References: PR #3762, Issue #3559
instance HuddleRule "header_body" BabbageEra where
  huddleRuleNamed :: Proxy "header_body" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "header_body"
pname Proxy BabbageEra
p =
    Proxy "header_body"
pname
      Proxy "header_body" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr
        [ Key
"block_number" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"block_number" Proxy BabbageEra
p
        , Key
"slot" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"slot" Proxy BabbageEra
p
        , Key
"prev_hash" Key -> Choice Type2 -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"hash32" Proxy BabbageEra
p Rule -> Value Void -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ Value Void
VNil)
        , Key
"issuer_vkey" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"vkey" Proxy BabbageEra
p
        , Key
"vrf_vkey" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"vrf_vkey" Proxy BabbageEra
p
        , Key
"vrf_result" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"vrf_cert" Proxy BabbageEra
p ArrayEntry -> Comment -> ArrayEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"replaces nonce_vrf and leader_vrf"
        , Key
"block_body_size" Key -> Value Int -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt
        , Key
"block_body_hash" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"hash32" Proxy BabbageEra
p ArrayEntry -> Comment -> ArrayEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"merkle triple root"
        , 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 @"operational_cert" Proxy BabbageEra
p
        , 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 @"protocol_version" Proxy BabbageEra
p
        ]

instance HuddleRule "transaction" BabbageEra where
  huddleRuleNamed :: Proxy "transaction" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "transaction"
pname Proxy BabbageEra
p =
    Proxy "transaction"
pname
      Proxy "transaction" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> 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 @"transaction_body" Proxy BabbageEra
p
        , 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 @"transaction_witness_set" Proxy BabbageEra
p
        , Value Bool -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a Value Bool
VBool
        , Choice Type2 -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"auxiliary_data" Proxy BabbageEra
p Rule -> Value Void -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ Value Void
VNil)
        ]

instance HuddleRule "transaction_body" BabbageEra where
  huddleRuleNamed :: Proxy "transaction_body" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "transaction_body"
pname Proxy BabbageEra
p =
    Proxy "transaction_body"
pname
      Proxy "transaction_body" -> MapChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= MapChoice -> MapChoice
mp
        [ Word64 -> Key
idx Word64
0 Key -> GRuleCall -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era a.
(HuddleRule1 name era, IsType0 a) =>
Proxy era -> a -> GRuleCall
huddleRule1 @"set" Proxy BabbageEra
p (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction_input" Proxy BabbageEra
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 BabbageEra
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 BabbageEra
p MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"fee"
        , 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 BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"time to live"
        , 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 BabbageEra
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 BabbageEra
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 BabbageEra
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 BabbageEra
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 BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"validity interval start"
        , 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 BabbageEra
p)
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
11 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"script_data_hash" Proxy BabbageEra
p)
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
13 Key -> GRuleCall -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era a.
(HuddleRule1 name era, IsType0 a) =>
Proxy era -> a -> GRuleCall
huddleRule1 @"set" Proxy BabbageEra
p (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction_input" Proxy BabbageEra
p)) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"collateral"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
14 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"required_signers" Proxy BabbageEra
p)
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
15 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"network_id" Proxy BabbageEra
p)
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
16 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction_output" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"collateral return"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
17 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 BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"total collateral"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
18 Key -> GRuleCall -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era a.
(HuddleRule1 name era, IsType0 a) =>
Proxy era -> a -> GRuleCall
huddleRule1 @"set" Proxy BabbageEra
p (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction_input" Proxy BabbageEra
p)) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"reference inputs"
        ]

instance HuddleRule "script_data_hash" BabbageEra where
  huddleRuleNamed :: Proxy "script_data_hash" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "script_data_hash"
pname Proxy BabbageEra
p =
    Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
      Comment
[str|This is a hash of data which may affect evaluation of a script.
          |This data consists of:
          |  - The redeemers from the transaction_witness_set (the value of field 5).
          |  - The datums from the transaction_witness_set (the value of field 4).
          |  - The value in the costmdls map corresponding to the script's language
          |    (in field 18 of protocol_param_update.)
          |(In the future it may contain additional protocol parameters.)
          |
          |Since this data does not exist in contiguous form inside a transaction, it needs
          |to be independently constructed by each recipient.
          |
          |The bytestring which is hashed is the concatenation of three things:
          |  redeemers || datums || language views
          |The redeemers are exactly the data present in the transaction witness set.
          |Similarly for the datums, if present. If no datums are provided, the middle
          |field is omitted (i.e. it is the empty/null bytestring).
          |
          |language views CDDL:
          |{ * language => script_integrity_data }
          |
          |This must be encoded canonically, using the same scheme as in
          |RFC7049 section 3.9:
          | - Maps, strings, and bytestrings must use a definite-length encoding
          | - Integers must be as small as possible.
          | - The expressions for map length, string length, and bytestring length
          |   must be as short as possible.
          | - The keys in the map must be sorted as follows:
          |    -  If two keys have different lengths, the shorter one sorts earlier.
          |    -  If two keys have the same length, the one with the lower value
          |       in (byte-wise) lexical order sorts earlier.
          |
          |For PlutusV1 (language id 0), the language view is the following:
          |  - the value of costmdls map at key 0 (in other words, the script_integrity_data)
          |    is encoded as an indefinite length list and the result is encoded as a bytestring.
          |    (our apologies)
          |    For example, the script_integrity_data corresponding to the all zero costmodel for V1
          |    would be encoded as (in hex):
          |    58a89f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff
          |  - the language ID tag is also encoded twice. first as a uint then as
          |    a bytestring. (our apologies)
          |    Concretely, this means that the language version for V1 is encoded as
          |    4100 in hex.
          |For PlutusV2 (language id 1), the language view is the following:
          |  - the value of costmdls map at key 1 is encoded as an definite length list.
          |    For example, the script_integrity_data corresponding to the all zero costmodel for V2
          |    would be encoded as (in hex):
          |    98af0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
          |  - the language ID tag is encoded as expected.
          |    Concretely, this means that the language version for V2 is encoded as
          |    01 in hex.
          |
          |Note that each Plutus language represented inside a transaction must have
          |a cost model in the costmdls protocol parameter in order to execute,
          |regardless of what the script integrity data is.
          |
          |Finally, note that in the case that a transaction includes datums but does not
          |include the redeemers field, the script data format becomes (in hex):
          |[ 80 | datums | A0 ]
          |corresponding to a CBOR empty list and an empty map.
          |Note that a transaction might include the redeemers field and set it to the
          |empty map, in which case the user supplied encoding of the empty map is used.
          |]
      (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "script_data_hash" -> Proxy BabbageEra -> Rule
forall era.
Era era =>
Proxy "script_data_hash" -> Proxy era -> Rule
scriptDataHashRule Proxy "script_data_hash"
pname Proxy BabbageEra
p

instance HuddleRule "transaction_output" BabbageEra where
  huddleRuleNamed :: Proxy "transaction_output" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "transaction_output"
pname Proxy BabbageEra
p =
    Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
      Comment
[str|Both of the Alonzo and Babbage style TxOut formats are equally valid
          |and can be used interchangeably.
          |]
      (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "transaction_output"
pname
        Proxy "transaction_output" -> Choice Type2 -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"alonzo_transaction_output" Proxy BabbageEra
p
        Rule -> Rule -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"babbage_transaction_output" Proxy BabbageEra
p

instance HuddleRule "alonzo_transaction_output" BabbageEra where
  huddleRuleNamed :: Proxy "alonzo_transaction_output" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "alonzo_transaction_output" -> Proxy BabbageEra -> Rule
forall era.
(HuddleRule "address" era, HuddleRule "value" era,
 HuddleRule "hash32" era) =>
Proxy "alonzo_transaction_output" -> Proxy era -> Rule
alonzoTransactionOutputRule

instance HuddleRule "babbage_transaction_output" BabbageEra where
  huddleRuleNamed :: Proxy "babbage_transaction_output" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "babbage_transaction_output" -> Proxy BabbageEra -> Rule
forall era.
(HuddleRule "address" era, HuddleRule "value" era,
 HuddleRule "datum_option" era, HuddleRule "script_ref" era) =>
Proxy "babbage_transaction_output" -> Proxy era -> Rule
babbageTransactionOutput

instance HuddleRule "datum_option" BabbageEra where
  huddleRuleNamed :: Proxy "datum_option" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "datum_option" -> Proxy BabbageEra -> Rule
forall era.
(HuddleRule "hash32" era, HuddleRule "data" era) =>
Proxy "datum_option" -> Proxy era -> Rule
datumOptionRule

instance HuddleRule "data" BabbageEra where
  huddleRuleNamed :: Proxy "data" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "data" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "plutus_data" era =>
Proxy "data" -> Proxy era -> Rule
dataRule

instance HuddleRule "script_ref" BabbageEra where
  huddleRuleNamed :: Proxy "script_ref" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "script_ref" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "script" era =>
Proxy "script_ref" -> Proxy era -> Rule
scriptRefRule

instance HuddleRule "transaction_witness_set" BabbageEra where
  huddleRuleNamed :: Proxy "transaction_witness_set" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "transaction_witness_set"
pname Proxy BabbageEra
p =
    Proxy "transaction_witness_set"
pname
      Proxy "transaction_witness_set" -> MapChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= MapChoice -> MapChoice
mp
        [ Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ Word64 -> Key
idx Word64
0 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 @"vkeywitness" Proxy BabbageEra
p)]
        , Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ 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 @"native_script" Proxy BabbageEra
p)]
        , Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ Word64 -> Key
idx Word64
2 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 @"bootstrap_witness" Proxy BabbageEra
p)]
        , Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ Word64 -> Key
idx Word64
3 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 @"plutus_v1_script" Proxy BabbageEra
p)]
        , Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ 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 @"plutus_data" Proxy BabbageEra
p)]
        , Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ 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 @"redeemers" Proxy BabbageEra
p
        , Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ Word64 -> Key
idx Word64
6 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 @"plutus_v2_script" Proxy BabbageEra
p)]
        ]

instance HuddleRule "native_script" BabbageEra where
  huddleRuleNamed :: Proxy "native_script" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "native_script" -> Proxy BabbageEra -> Rule
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 "native_script" -> Proxy era -> Rule
nativeScriptRule

instance HuddleGroup "script_pubkey" BabbageEra where
  huddleGroupNamed :: Proxy "script_pubkey" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "script_pubkey" -> Proxy BabbageEra -> GroupDef
forall era.
Era era =>
Proxy "script_pubkey" -> Proxy era -> GroupDef
scriptPubkeyGroup

instance HuddleGroup "script_all" BabbageEra where
  huddleGroupNamed :: Proxy "script_all" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "script_all" -> Proxy BabbageEra -> GroupDef
forall era.
HuddleRule "native_script" era =>
Proxy "script_all" -> Proxy era -> GroupDef
scriptAllGroup

instance HuddleGroup "script_any" BabbageEra where
  huddleGroupNamed :: Proxy "script_any" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "script_any" -> Proxy BabbageEra -> GroupDef
forall era.
HuddleRule "native_script" era =>
Proxy "script_any" -> Proxy era -> GroupDef
scriptAnyGroup

instance HuddleGroup "script_n_of_k" BabbageEra where
  huddleGroupNamed :: Proxy "script_n_of_k" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "script_n_of_k" -> Proxy BabbageEra -> GroupDef
forall era.
HuddleRule "native_script" era =>
Proxy "script_n_of_k" -> Proxy era -> GroupDef
scriptNOfKGroup

instance HuddleGroup "script_invalid_before" BabbageEra where
  huddleGroupNamed :: Proxy "script_invalid_before" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "script_invalid_before" -> Proxy BabbageEra -> GroupDef
forall era.
Era era =>
Proxy "script_invalid_before" -> Proxy era -> GroupDef
scriptInvalidBeforeGroup

instance HuddleGroup "script_invalid_hereafter" BabbageEra where
  huddleGroupNamed :: Proxy "script_invalid_hereafter" -> Proxy BabbageEra -> GroupDef
huddleGroupNamed = Proxy "script_invalid_hereafter" -> Proxy BabbageEra -> GroupDef
forall era.
Era era =>
Proxy "script_invalid_hereafter" -> Proxy era -> GroupDef
scriptInvalidHereafterGroup

instance (Era era, HuddleRule "distinct_bytes" era) => HuddleRule "plutus_v2_script" era where
  huddleRuleNamed :: Proxy "plutus_v2_script" -> Proxy era -> Rule
huddleRuleNamed Proxy "plutus_v2_script"
pname Proxy era
p =
    Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
      Comment
[str|Babbage introduces Plutus V2 with improved cost model
          |and additional builtins.
          |]
      (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "plutus_v2_script"
pname Proxy "plutus_v2_script" -> Rule -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"distinct_bytes" Proxy era
p

instance HuddleRule "script" BabbageEra where
  huddleRuleNamed :: Proxy "script" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "script" -> Proxy BabbageEra -> Rule
forall era.
(HuddleRule "native_script" era, HuddleRule "plutus_v1_script" era,
 HuddleRule "plutus_v2_script" era) =>
Proxy "script" -> Proxy era -> Rule
babbageScript

instance HuddleRule "language" BabbageEra where
  huddleRuleNamed :: Proxy "language" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "language"
pname Proxy BabbageEra
_ =
    Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
      Comment
[str|0: Plutus v1
          |1: Plutus v2
          |]
      (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "language"
pname Proxy "language" -> Ranged -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= (Integer
0 :: Integer) Integer -> Integer -> Ranged
forall a b. (IsRangeBound a, IsRangeBound b) => a -> b -> Ranged
... (Integer
1 :: Integer)

instance HuddleRule "cost_models" BabbageEra where
  huddleRuleNamed :: Proxy "cost_models" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "cost_models"
pname Proxy BabbageEra
p =
    Proxy "cost_models"
pname
      Proxy "cost_models" -> MapChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= MapChoice -> MapChoice
mp
        [ Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ Word64 -> Key
idx Word64
0 Key -> ArrayChoice -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> ArrayChoice -> ArrayChoice
arr [Word64
166 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 @"int64" Proxy BabbageEra
p) ArrayEntry -> Word64 -> ArrayEntry
forall a. CanQuantify a => a -> Word64 -> a
+> Word64
166]
        , Item MapChoice -> Item MapChoice
forall a. CanQuantify a => a -> a
opt (Item MapChoice -> Item MapChoice)
-> Item MapChoice -> Item MapChoice
forall a b. (a -> b) -> a -> b
$ Word64 -> Key
idx Word64
1 Key -> ArrayChoice -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> ArrayChoice -> ArrayChoice
arr [Word64
175 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 @"int64" Proxy BabbageEra
p) ArrayEntry -> Word64 -> ArrayEntry
forall a. CanQuantify a => a -> Word64 -> a
+> Word64
175]
        ]

instance HuddleRule "protocol_param_update" BabbageEra where
  huddleRuleNamed :: Proxy "protocol_param_update" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "protocol_param_update"
pname Proxy BabbageEra
p =
    Proxy "protocol_param_update"
pname
      Proxy "protocol_param_update" -> MapChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= MapChoice -> MapChoice
mp
        [ MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
0 Key -> Value Int -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"minfee A"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
1 Key -> Value Int -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"minfee B"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
2 Key -> Constrained -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt Value Int -> Word64 -> Constrained
forall c a s.
(IsSizeable a, IsSize s, IsConstrainable c a) =>
c -> s -> Constrained
`sized` (Word64
4 :: Word64)) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"max block body size"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
3 Key -> Constrained -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt Value Int -> Word64 -> Constrained
forall c a s.
(IsSizeable a, IsSize s, IsConstrainable c a) =>
c -> s -> Constrained
`sized` (Word64
4 :: Word64)) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"max transaction size"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
4 Key -> Constrained -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt Value Int -> Word64 -> Constrained
forall c a s.
(IsSizeable a, IsSize s, IsConstrainable c a) =>
c -> s -> Constrained
`sized` (Word64
2 :: Word64)) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"max block header size"
        , 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 @"coin" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"key deposit"
        , 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 @"coin" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"pool deposit"
        , 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 @"epoch_interval" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"maximum epoch"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
8 Key -> Constrained -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt Value Int -> Word64 -> Constrained
forall c a s.
(IsSizeable a, IsSize s, IsConstrainable c a) =>
c -> s -> Constrained
`sized` (Word64
2 :: Word64)) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"n_opt: desired number of stake pools"
        , 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 @"nonnegative_interval" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"pool pledge influence"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
10 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"unit_interval" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"expansion rate"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
11 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"unit_interval" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"treasury growth rate"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
14 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"protocol_version" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"protocol version"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
16 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 BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"min pool cost"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
17 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 BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"ada per utxo byte"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
18 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"cost_models" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"cost models for script languages"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
19 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"ex_unit_prices" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"execution costs"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
20 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"ex_units" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"max tx ex units"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
21 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"ex_units" Proxy BabbageEra
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"max block ex units"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
22 Key -> Value Int -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"max value size"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
23 Key -> Value Int -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"collateral percentage"
        , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
24 Key -> Value Int -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"max collateral inputs"
        ]

instance HuddleRule "auxiliary_data" BabbageEra where
  huddleRuleNamed :: Proxy "auxiliary_data" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "auxiliary_data"
pname Proxy BabbageEra
p =
    Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
      Comment
[str|auxiliary_data supports three serialization formats:
          |  1. metadata (raw) - Supported since Shelley
          |  2. auxiliary_data_array - Array format, introduced in Allegra
          |  3. auxiliary_data_map - Tagged map format, introduced in Alonzo
          |     Babbage adds plutus_v2_script support at index 3
          |]
      (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "auxiliary_data"
pname
        Proxy "auxiliary_data" -> Choice Type2 -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"metadata" Proxy BabbageEra
p
        Rule -> Rule -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"auxiliary_data_array" Proxy BabbageEra
p
        Choice Type2 -> Rule -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"auxiliary_data_map" Proxy BabbageEra
p

instance HuddleRule "auxiliary_data_array" BabbageEra where
  huddleRuleNamed :: Proxy "auxiliary_data_array" -> Proxy BabbageEra -> Rule
huddleRuleNamed = Proxy "auxiliary_data_array" -> Proxy BabbageEra -> Rule
forall era.
HuddleRule "auxiliary_scripts" era =>
Proxy "auxiliary_data_array" -> Proxy era -> Rule
auxiliaryDataArrayRule

instance HuddleRule "auxiliary_scripts" BabbageEra where
  huddleRuleNamed :: Proxy "auxiliary_scripts" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "auxiliary_scripts"
pname Proxy BabbageEra
p =
    Proxy "auxiliary_scripts"
pname Proxy "auxiliary_scripts" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= 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 @"native_script" Proxy BabbageEra
p)]

instance HuddleRule "auxiliary_data_map" BabbageEra where
  huddleRuleNamed :: Proxy "auxiliary_data_map" -> Proxy BabbageEra -> Rule
huddleRuleNamed Proxy "auxiliary_data_map"
pname Proxy BabbageEra
p =
    Proxy "auxiliary_data_map"
pname
      Proxy "auxiliary_data_map" -> Tagged MapChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= Word64 -> MapChoice -> Tagged MapChoice
forall a. Word64 -> a -> Tagged a
tag
        Word64
259
        ( MapChoice -> MapChoice
mp
            [ MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
0 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"metadata" Proxy BabbageEra
p)
            , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (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 @"native_script" Proxy BabbageEra
p)])
            , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
2 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 @"plutus_v1_script" Proxy BabbageEra
p)])
            , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
3 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 @"plutus_v2_script" Proxy BabbageEra
p)])
            ]
        )

instance HuddleRule1 "set" BabbageEra where
  huddleRule1Named :: forall a.
IsType0 a =>
Proxy "set" -> Proxy BabbageEra -> a -> GRuleCall
huddleRule1Named Proxy "set"
pname Proxy BabbageEra
_ = Proxy "set" -> a -> GRuleCall
forall a. IsType0 a => Proxy "set" -> a -> GRuleCall
untaggedSet Proxy "set"
pname

instance HuddleRule1 "multiasset" BabbageEra where
  huddleRule1Named :: forall a.
IsType0 a =>
Proxy "multiasset" -> Proxy BabbageEra -> a -> GRuleCall
huddleRule1Named = Proxy "multiasset" -> Proxy BabbageEra -> a -> GRuleCall
forall era a.
(HuddleRule "policy_id" era, HuddleRule "asset_name" era,
 IsType0 a) =>
Proxy "multiasset" -> Proxy era -> a -> GRuleCall
maryMultiasset