{-# 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.Shelley.HuddleSpec (
  module Cardano.Ledger.Huddle,
  module Cardano.Ledger.Core.HuddleSpec,
  ShelleyEra,
  shelleyCDDL,
  shelleyProtocolVersionGroup,
  headerRule,
  proposedProtocolParameterUpdatesRule,
  updateRule,
  protocolParamUpdateRule,
  headerBodyRule,
  transactionWitnessSetRule,
  vkeywitnessRule,
  bootstrapWitnessRule,
  shelleyOperationalCertGroup,
  genesisHashRule,
  scriptPubkeyGroup,
  scriptAllGroup,
  scriptAnyGroup,
  transactionIdRule,
  transactionInputRule,
  transactionOutputRule,
  shelleyWithdrawalsRule,
  dnsNameRule,
  urlRule,
  poolMetadataRule,
  singleHostAddrGroup,
  singleHostNameGroup,
  multiHostNameGroup,
  relayRule,
  poolParamsGroup,
  poolRegistrationCertGroup,
  poolRetirementCertGroup,
  genesisDelegateHashRule,
  genesisDelegationCertGroup,
  deltaCoinRule,
  moveInstantaneousRewardRule,
  moveInstantaneousRewardsCertGroup,
  accountRegistrationCertGroup,
  accountUnregistrationCertGroup,
  delegationToStakePoolCertGroup,
  certificateRule,
  untaggedSet,
) where

import Cardano.Ledger.Core.HuddleSpec (majorProtocolVersionRule)
import Cardano.Ledger.Huddle
import Cardano.Ledger.Shelley (ShelleyEra)
import Data.Proxy (Proxy (..))
import Data.Word (Word64)
import Text.Heredoc
import Prelude hiding ((/))

shelleyCDDL :: Huddle
shelleyCDDL :: Huddle
shelleyCDDL =
  [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 @ShelleyEra)
    , 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 @ShelleyEra)
    , 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 @ShelleyEra)
    ]

shelleyProtocolVersionGroup ::
  forall era.
  HuddleRule "major_protocol_version" era => Proxy "protocol_version" -> Proxy era -> GroupDef
shelleyProtocolVersionGroup :: forall era.
HuddleRule "major_protocol_version" era =>
Proxy "protocol_version" -> Proxy era -> GroupDef
shelleyProtocolVersionGroup Proxy "protocol_version"
pname Proxy era
p = Proxy "protocol_version"
pname Proxy "protocol_version" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
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]

headerRule ::
  forall era. HuddleRule "header_body" era => Proxy "header" -> Proxy era -> Rule
headerRule :: forall era.
HuddleRule "header_body" era =>
Proxy "header" -> Proxy era -> Rule
headerRule Proxy "header"
pname Proxy era
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 era
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 era
p]

proposedProtocolParameterUpdatesRule ::
  forall era.
  (HuddleRule "genesis_hash" era, HuddleRule "protocol_param_update" era) =>
  Proxy "proposed_protocol_parameter_updates" -> Proxy era -> Rule
proposedProtocolParameterUpdatesRule :: forall era.
(HuddleRule "genesis_hash" era,
 HuddleRule "protocol_param_update" era) =>
Proxy "proposed_protocol_parameter_updates" -> Proxy era -> Rule
proposedProtocolParameterUpdatesRule Proxy "proposed_protocol_parameter_updates"
pname Proxy era
p =
  Proxy "proposed_protocol_parameter_updates"
pname
    Proxy "proposed_protocol_parameter_updates" -> MapChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> 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 @"genesis_hash" Proxy era
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 @"protocol_param_update" Proxy era
p]

updateRule ::
  forall era.
  HuddleRule "proposed_protocol_parameter_updates" era =>
  Proxy "update" -> Proxy era -> Rule
updateRule :: forall era.
HuddleRule "proposed_protocol_parameter_updates" era =>
Proxy "update" -> Proxy era -> Rule
updateRule Proxy "update"
pname Proxy era
p =
  Proxy "update"
pname
    Proxy "update" -> 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 @"proposed_protocol_parameter_updates" Proxy era
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 @"epoch" Proxy era
p]

protocolParamUpdateRule ::
  forall era.
  HuddleGroup "protocol_version" era => Proxy "protocol_param_update" -> Proxy era -> Rule
protocolParamUpdateRule :: forall era.
HuddleGroup "protocol_version" era =>
Proxy "protocol_param_update" -> Proxy era -> Rule
protocolParamUpdateRule Proxy "protocol_param_update"
pname Proxy era
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 -> 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 block body size"
      , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
3 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 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 era
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 era
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 era
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 era
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 era
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 era
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
12 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 era
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"decentralization constant"
      , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
13 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"nonce" Proxy era
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"extra entropy"
      , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
14 Key -> ArrayChoice -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> ArrayChoice -> ArrayChoice
arr [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"protocol_version" Proxy era
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
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 @"coin" Proxy era
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"min utxo value"
      , 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 era
p) MapEntry -> Comment -> MapEntry
forall a. HasComment a => a -> Comment -> a
//- Comment
"min pool cost"
      ]

headerBodyRule ::
  forall era.
  ( HuddleGroup "operational_cert" era
  , HuddleGroup "protocol_version" era
  ) =>
  Proxy "header_body" ->
  Proxy era ->
  Rule
headerBodyRule :: forall era.
(HuddleGroup "operational_cert" era,
 HuddleGroup "protocol_version" era) =>
Proxy "header_body" -> Proxy era -> Rule
headerBodyRule Proxy "header_body"
pname Proxy era
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 era
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 era
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 era
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 era
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 era
p
      , Key
"nonce_vrf" 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 era
p
      , Key
"leader_vrf" 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 era
p
      , Key
"block_body_size" Key -> Constrained -> ArrayEntry
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)
      , 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 era
p
      , GroupDef -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"operational_cert" Proxy era
p)
      , GroupDef -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"protocol_version" Proxy era
p)
      ]

transactionWitnessSetRule ::
  forall era.
  ( HuddleRule "vkeywitness" era
  , HuddleRule "native_script" era
  , HuddleRule "bootstrap_witness" era
  ) =>
  Proxy "transaction_witness_set" ->
  Proxy era ->
  Rule
transactionWitnessSetRule :: forall era.
(HuddleRule "vkeywitness" era, HuddleRule "native_script" era,
 HuddleRule "bootstrap_witness" era) =>
Proxy "transaction_witness_set" -> Proxy era -> Rule
transactionWitnessSetRule Proxy "transaction_witness_set"
pname Proxy era
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 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
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 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 -> 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 era
p)]
      ]

vkeywitnessRule :: forall era. Era era => Proxy "vkeywitness" -> Proxy era -> Rule
vkeywitnessRule :: forall era. Era era => Proxy "vkeywitness" -> Proxy era -> Rule
vkeywitnessRule Proxy "vkeywitness"
pname Proxy era
p =
  Proxy "vkeywitness"
pname
    Proxy "vkeywitness" -> 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 @"vkey" Proxy era
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 @"signature" Proxy era
p]

bootstrapWitnessRule ::
  forall era. Era era => Proxy "bootstrap_witness" -> Proxy era -> Rule
bootstrapWitnessRule :: forall era.
Era era =>
Proxy "bootstrap_witness" -> Proxy era -> Rule
bootstrapWitnessRule Proxy "bootstrap_witness"
pname Proxy era
p =
  Proxy "bootstrap_witness"
pname
    Proxy "bootstrap_witness" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr
      [ Key
"public_key" 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 era
p
      , Key
"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 @"signature" Proxy era
p
      , Key
"chain_code" Key -> Constrained -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value ByteString
VBytes Value ByteString -> Word64 -> Constrained
forall c a s.
(IsSizeable a, IsSize s, IsConstrainable c a) =>
c -> s -> Constrained
`sized` (Word64
32 :: Word64)
      , Key
"attributes" Key -> Value ByteString -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value ByteString
VBytes
      ]

shelleyOperationalCertGroup ::
  forall era. Era era => Proxy "operational_cert" -> Proxy era -> GroupDef
shelleyOperationalCertGroup :: forall era.
Era era =>
Proxy "operational_cert" -> Proxy era -> GroupDef
shelleyOperationalCertGroup Proxy "operational_cert"
pname Proxy era
p =
  Proxy "operational_cert"
pname
    Proxy "operational_cert" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp
      [ 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
      ]

genesisHashRule :: forall era. Era era => Proxy "genesis_hash" -> Proxy era -> Rule
genesisHashRule :: forall era. Era era => Proxy "genesis_hash" -> Proxy era -> Rule
genesisHashRule Proxy "genesis_hash"
pname Proxy era
p = Proxy "genesis_hash"
pname Proxy "genesis_hash" -> 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 @"hash28" Proxy era
p

scriptPubkeyGroup ::
  forall era. Era era => Proxy "script_pubkey" -> Proxy era -> GroupDef
scriptPubkeyGroup :: forall era.
Era era =>
Proxy "script_pubkey" -> Proxy era -> GroupDef
scriptPubkeyGroup Proxy "script_pubkey"
pname Proxy era
p = Proxy "script_pubkey"
pname Proxy "script_pubkey" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
0, Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"addr_keyhash" Proxy era
p]

scriptAllGroup ::
  forall era.
  HuddleRule "native_script" era => Proxy "script_all" -> Proxy era -> GroupDef
scriptAllGroup :: forall era.
HuddleRule "native_script" era =>
Proxy "script_all" -> Proxy era -> GroupDef
scriptAllGroup Proxy "script_all"
pname Proxy era
p = Proxy "script_all"
pname Proxy "script_all" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
1, ArrayChoice -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (ArrayChoice -> Item Group) -> ArrayChoice -> Item Group
forall a b. (a -> b) -> a -> b
$ 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 era
p)]]

scriptAnyGroup ::
  forall era.
  HuddleRule "native_script" era => Proxy "script_any" -> Proxy era -> GroupDef
scriptAnyGroup :: forall era.
HuddleRule "native_script" era =>
Proxy "script_any" -> Proxy era -> GroupDef
scriptAnyGroup Proxy "script_any"
pname Proxy era
p = Proxy "script_any"
pname Proxy "script_any" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
2, ArrayChoice -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (ArrayChoice -> Item Group) -> ArrayChoice -> Item Group
forall a b. (a -> b) -> a -> b
$ 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 era
p)]]

transactionIdRule :: forall era. Era era => Proxy "transaction_id" -> Proxy era -> Rule
transactionIdRule :: forall era. Era era => Proxy "transaction_id" -> Proxy era -> Rule
transactionIdRule Proxy "transaction_id"
pname Proxy era
p = Proxy "transaction_id"
pname Proxy "transaction_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 @"hash32" Proxy era
p

transactionInputRule ::
  forall era.
  HuddleRule "transaction_id" era => Proxy "transaction_input" -> Proxy era -> Rule
transactionInputRule :: forall era.
HuddleRule "transaction_id" era =>
Proxy "transaction_input" -> Proxy era -> Rule
transactionInputRule Proxy "transaction_input"
pname Proxy era
p =
  Proxy "transaction_input"
pname
    Proxy "transaction_input" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr
      [ Key
"id" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction_id" Proxy era
p
      , Key
"index" Key -> Constrained -> ArrayEntry
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)
      ]

transactionOutputRule ::
  forall era. Era era => Proxy "transaction_output" -> Proxy era -> Rule
transactionOutputRule :: forall era.
Era era =>
Proxy "transaction_output" -> Proxy era -> Rule
transactionOutputRule Proxy "transaction_output"
pname Proxy era
p =
  Proxy "transaction_output"
pname
    Proxy "transaction_output" -> 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 @"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 @"coin" Proxy era
p]

shelleyWithdrawalsRule ::
  forall era. Era era => Proxy "withdrawals" -> Proxy era -> Rule
shelleyWithdrawalsRule :: forall era. Era era => Proxy "withdrawals" -> Proxy era -> Rule
shelleyWithdrawalsRule Proxy "withdrawals"
pname Proxy era
p =
  Proxy "withdrawals"
pname
    Proxy "withdrawals" -> MapChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> 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 @"reward_account" Proxy era
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 @"coin" Proxy era
p]

dnsNameRule :: Proxy "dns_name" -> Rule
dnsNameRule :: Proxy "dns_name" -> Rule
dnsNameRule Proxy "dns_name"
pname = Proxy "dns_name"
pname Proxy "dns_name" -> Constrained -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= Value Text
VText Value Text -> (Word64, Word64) -> Constrained
forall c a s.
(IsSizeable a, IsSize s, IsConstrainable c a) =>
c -> s -> Constrained
`sized` (Word64
0 :: Word64, Word64
64 :: Word64)

urlRule :: Proxy "url" -> Rule
urlRule :: Proxy "url" -> Rule
urlRule Proxy "url"
pname = Proxy "url"
pname Proxy "url" -> Constrained -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= Value Text
VText Value Text -> (Word64, Word64) -> Constrained
forall c a s.
(IsSizeable a, IsSize s, IsConstrainable c a) =>
c -> s -> Constrained
`sized` (Word64
0 :: Word64, Word64
64 :: Word64)

poolMetadataRule ::
  forall era. HuddleRule "url" era => Proxy "pool_metadata" -> Proxy era -> Rule
poolMetadataRule :: forall era.
HuddleRule "url" era =>
Proxy "pool_metadata" -> Proxy era -> Rule
poolMetadataRule Proxy "pool_metadata"
pname Proxy era
p =
  Proxy "pool_metadata"
pname
    Proxy "pool_metadata" -> 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 @"url" Proxy era
p, Value ByteString -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a Value ByteString
VBytes]

singleHostAddrGroup ::
  forall era. Era era => Proxy "single_host_addr" -> Proxy era -> GroupDef
singleHostAddrGroup :: forall era.
Era era =>
Proxy "single_host_addr" -> Proxy era -> GroupDef
singleHostAddrGroup Proxy "single_host_addr"
pname Proxy era
p =
  Proxy "single_host_addr"
pname
    Proxy "single_host_addr" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp
      [ Item Group
ArrayEntry
0
      , Choice Type2 -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Choice Type2 -> Item Group) -> Choice Type2 -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"port" Proxy era
p Rule -> Value Void -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ Value Void
VNil
      , Choice Type2 -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Choice Type2 -> Item Group) -> Choice Type2 -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"ipv4" Proxy era
p Rule -> Value Void -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ Value Void
VNil
      , Choice Type2 -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Choice Type2 -> Item Group) -> Choice Type2 -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"ipv6" Proxy era
p Rule -> Value Void -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ Value Void
VNil
      ]

singleHostNameGroup ::
  forall era.
  HuddleRule "dns_name" era => Proxy "single_host_name" -> Proxy era -> GroupDef
singleHostNameGroup :: forall era.
HuddleRule "dns_name" era =>
Proxy "single_host_name" -> Proxy era -> GroupDef
singleHostNameGroup Proxy "single_host_name"
pname Proxy era
p =
  Comment -> GroupDef -> GroupDef
forall a. HasComment a => Comment -> a -> a
comment
    Comment
"dns_name: An A or AAAA DNS record"
    (GroupDef -> GroupDef) -> GroupDef -> GroupDef
forall a b. (a -> b) -> a -> b
$ Proxy "single_host_name"
pname
      Proxy "single_host_name" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp
        [ Item Group
ArrayEntry
1
        , Choice Type2 -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Choice Type2 -> Item Group) -> Choice Type2 -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"port" Proxy era
p Rule -> Value Void -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ Value Void
VNil
        , Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"dns_name" Proxy era
p
        ]

multiHostNameGroup ::
  forall era.
  HuddleRule "dns_name" era => Proxy "multi_host_name" -> Proxy era -> GroupDef
multiHostNameGroup :: forall era.
HuddleRule "dns_name" era =>
Proxy "multi_host_name" -> Proxy era -> GroupDef
multiHostNameGroup Proxy "multi_host_name"
pname Proxy era
p =
  Comment -> GroupDef -> GroupDef
forall a. HasComment a => Comment -> a -> a
comment
    Comment
"dns_name: An SRV DNS record"
    (GroupDef -> GroupDef) -> GroupDef -> GroupDef
forall a b. (a -> b) -> a -> b
$ Proxy "multi_host_name"
pname
      Proxy "multi_host_name" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
2, Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"dns_name" Proxy era
p]

relayRule ::
  forall era.
  ( HuddleGroup "single_host_addr" era
  , HuddleGroup "single_host_name" era
  , HuddleGroup "multi_host_name" era
  ) =>
  Proxy "relay" ->
  Proxy era ->
  Rule
relayRule :: forall era.
(HuddleGroup "single_host_addr" era,
 HuddleGroup "single_host_name" era,
 HuddleGroup "multi_host_name" era) =>
Proxy "relay" -> Proxy era -> Rule
relayRule Proxy "relay"
pname Proxy era
p =
  Proxy "relay"
pname
    Proxy "relay" -> Choice ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"single_host_addr" Proxy era
p]
    ArrayChoice -> ArrayChoice -> Choice ArrayChoice
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ ArrayChoice -> ArrayChoice
arr [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"single_host_name" 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 [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"multi_host_name" Proxy era
p]

poolParamsGroup ::
  forall era.
  ( HuddleRule "relay" era
  , HuddleRule "pool_metadata" era
  , HuddleRule1 "set" era
  ) =>
  Proxy "pool_params" ->
  Proxy era ->
  GroupDef
poolParamsGroup :: forall era.
(HuddleRule "relay" era, HuddleRule "pool_metadata" era,
 HuddleRule1 "set" era) =>
Proxy "pool_params" -> Proxy era -> GroupDef
poolParamsGroup Proxy "pool_params"
pname Proxy era
p =
  Comment -> GroupDef -> GroupDef
forall a. HasComment a => Comment -> a -> a
comment
    Comment
"Pool parameters for stake pool registration"
    (GroupDef -> GroupDef) -> GroupDef -> GroupDef
forall a b. (a -> b) -> a -> b
$ Proxy "pool_params"
pname
      Proxy "pool_params" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp
        [ Key
"operator" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"pool_keyhash" Proxy era
p
        , Key
"vrf_keyhash" 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_keyhash" Proxy era
p
        , Key
"pledge" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"coin" Proxy era
p
        , Key
"cost" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"coin" Proxy era
p
        , Key
"margin" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"unit_interval" Proxy era
p
        , Key
"reward_account" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"reward_account" Proxy era
p
        , Key
"pool_owners" Key -> GRuleCall -> ArrayEntry
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 era
p (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"addr_keyhash" Proxy era
p)
        , Key
"relays" 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 @"relay" Proxy era
p)]
        , Key
"pool_metadata" 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 @"pool_metadata" Proxy era
p Rule -> Value Void -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ Value Void
VNil
        ]

poolRegistrationCertGroup ::
  forall era.
  HuddleGroup "pool_params" era => Proxy "pool_registration_cert" -> Proxy era -> GroupDef
poolRegistrationCertGroup :: forall era.
HuddleGroup "pool_params" era =>
Proxy "pool_registration_cert" -> Proxy era -> GroupDef
poolRegistrationCertGroup Proxy "pool_registration_cert"
pname Proxy era
p = Proxy "pool_registration_cert"
pname Proxy "pool_registration_cert" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
3, GroupDef -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item Group) -> GroupDef -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"pool_params" Proxy era
p]

poolRetirementCertGroup ::
  forall era. Era era => Proxy "pool_retirement_cert" -> Proxy era -> GroupDef
poolRetirementCertGroup :: forall era.
Era era =>
Proxy "pool_retirement_cert" -> Proxy era -> GroupDef
poolRetirementCertGroup Proxy "pool_retirement_cert"
pname Proxy era
p =
  Proxy "pool_retirement_cert"
pname
    Proxy "pool_retirement_cert" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
4, Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"pool_keyhash" Proxy era
p, Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"epoch" Proxy era
p]

genesisDelegateHashRule ::
  forall era. Era era => Proxy "genesis_delegate_hash" -> Proxy era -> Rule
genesisDelegateHashRule :: forall era.
Era era =>
Proxy "genesis_delegate_hash" -> Proxy era -> Rule
genesisDelegateHashRule Proxy "genesis_delegate_hash"
pname Proxy era
p = Proxy "genesis_delegate_hash"
pname Proxy "genesis_delegate_hash" -> 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 @"hash28" Proxy era
p

genesisDelegationCertGroup ::
  forall era.
  ( HuddleRule "genesis_hash" era
  , HuddleRule "genesis_delegate_hash" era
  ) =>
  Proxy "genesis_delegation_cert" ->
  Proxy era ->
  GroupDef
genesisDelegationCertGroup :: forall era.
(HuddleRule "genesis_hash" era,
 HuddleRule "genesis_delegate_hash" era) =>
Proxy "genesis_delegation_cert" -> Proxy era -> GroupDef
genesisDelegationCertGroup Proxy "genesis_delegation_cert"
pname Proxy era
p =
  Proxy "genesis_delegation_cert"
pname
    Proxy "genesis_delegation_cert" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp
      [ Item Group
ArrayEntry
5
      , Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"genesis_hash" Proxy era
p
      , Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"genesis_delegate_hash" Proxy era
p
      , Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"vrf_keyhash" Proxy era
p
      ]

deltaCoinRule :: Proxy "delta_coin" -> Rule
deltaCoinRule :: Proxy "delta_coin" -> Rule
deltaCoinRule Proxy "delta_coin"
pname =
  Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
    Comment
"This too has been introduced in Shelley as a backport from Alonzo."
    (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "delta_coin"
pname Proxy "delta_coin" -> Value Int -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= Value Int
VInt

moveInstantaneousRewardRule ::
  forall era. HuddleRule "delta_coin" era => Proxy "move_instantaneous_reward" -> Proxy era -> Rule
moveInstantaneousRewardRule :: forall era.
HuddleRule "delta_coin" era =>
Proxy "move_instantaneous_reward" -> Proxy era -> Rule
moveInstantaneousRewardRule Proxy "move_instantaneous_reward"
pname Proxy era
p =
  Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
    Comment
[str|The first field determines where the funds are drawn from.
        |  0 denotes the reserves,
        |  1 denotes the treasury.
        |If the second field is a map, funds are moved to stake credentials.
        |Otherwise, the funds are given to the other accounting pot.
        |NOTE:
        |  This has been safely backported to Shelley from Alonzo.
        |]
    (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "move_instantaneous_reward"
pname
      Proxy "move_instantaneous_reward" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr
        [ Choice Type2 -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Integer -> Literal
int Integer
0 Literal -> Literal -> Choice Type2
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ Integer -> Literal
int Integer
1)
        , Choice Type2 -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a
            ( MapChoice -> Seal Map
smp
                [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 @"stake_credential" Proxy era
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 @"delta_coin" Proxy era
p]
                Seal Map -> 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 @"coin" Proxy era
p
            )
        ]

moveInstantaneousRewardsCertGroup ::
  forall era.
  HuddleRule "move_instantaneous_reward" era =>
  Proxy "move_instantaneous_rewards_cert" ->
  Proxy era ->
  GroupDef
moveInstantaneousRewardsCertGroup :: forall era.
HuddleRule "move_instantaneous_reward" era =>
Proxy "move_instantaneous_rewards_cert" -> Proxy era -> GroupDef
moveInstantaneousRewardsCertGroup Proxy "move_instantaneous_rewards_cert"
pname Proxy era
p =
  Proxy "move_instantaneous_rewards_cert"
pname
    Proxy "move_instantaneous_rewards_cert" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
6, Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"move_instantaneous_reward" Proxy era
p]

accountRegistrationCertGroup ::
  forall era. Era era => Proxy "account_registration_cert" -> Proxy era -> GroupDef
accountRegistrationCertGroup :: forall era.
Era era =>
Proxy "account_registration_cert" -> Proxy era -> GroupDef
accountRegistrationCertGroup Proxy "account_registration_cert"
pname Proxy era
p =
  Comment -> GroupDef -> GroupDef
forall a. HasComment a => Comment -> a -> a
comment
    Comment
"This certificate will be deprecated in a future era"
    (GroupDef -> GroupDef) -> GroupDef -> GroupDef
forall a b. (a -> b) -> a -> b
$ Proxy "account_registration_cert"
pname
      Proxy "account_registration_cert" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
0, Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"stake_credential" Proxy era
p]

accountUnregistrationCertGroup ::
  forall era. Era era => Proxy "account_unregistration_cert" -> Proxy era -> GroupDef
accountUnregistrationCertGroup :: forall era.
Era era =>
Proxy "account_unregistration_cert" -> Proxy era -> GroupDef
accountUnregistrationCertGroup Proxy "account_unregistration_cert"
pname Proxy era
p =
  Comment -> GroupDef -> GroupDef
forall a. HasComment a => Comment -> a -> a
comment
    Comment
"This certificate will be deprecated in a future era"
    (GroupDef -> GroupDef) -> GroupDef -> GroupDef
forall a b. (a -> b) -> a -> b
$ Proxy "account_unregistration_cert"
pname
      Proxy "account_unregistration_cert" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
1, Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"stake_credential" Proxy era
p]

delegationToStakePoolCertGroup ::
  forall era. Era era => Proxy "delegation_to_stake_pool_cert" -> Proxy era -> GroupDef
delegationToStakePoolCertGroup :: forall era.
Era era =>
Proxy "delegation_to_stake_pool_cert" -> Proxy era -> GroupDef
delegationToStakePoolCertGroup Proxy "delegation_to_stake_pool_cert"
pname Proxy era
p =
  Proxy "delegation_to_stake_pool_cert"
pname
    Proxy "delegation_to_stake_pool_cert" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
2, Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"stake_credential" Proxy era
p, Rule -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Rule -> Item Group) -> Rule -> Item Group
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"pool_keyhash" Proxy era
p]

certificateRule ::
  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 :: 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 Proxy "certificate"
pname Proxy era
p =
  Proxy "certificate"
pname
    Proxy "certificate" -> Choice ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"account_registration_cert" Proxy era
p]
    ArrayChoice -> ArrayChoice -> Choice ArrayChoice
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ ArrayChoice -> ArrayChoice
arr [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"account_unregistration_cert" 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 [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"delegation_to_stake_pool_cert" 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 [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"pool_registration_cert" 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 [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"pool_retirement_cert" 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 [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"genesis_delegation_cert" 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 [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"move_instantaneous_rewards_cert" Proxy era
p]

untaggedSet :: IsType0 a => Proxy "set" -> a -> GRuleCall
untaggedSet :: forall a. IsType0 a => Proxy "set" -> a -> GRuleCall
untaggedSet Proxy "set"
pname = (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 -> Proxy "set"
pname Proxy "set" -> 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
<+ GRef -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a GRef
x]

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

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

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

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

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

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

instance HuddleRule "relay" ShelleyEra where
  huddleRuleNamed :: Proxy "relay" -> Proxy ShelleyEra -> Rule
huddleRuleNamed = Proxy "relay" -> Proxy ShelleyEra -> 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 HuddleGroup "pool_params" ShelleyEra where
  huddleGroupNamed :: Proxy "pool_params" -> Proxy ShelleyEra -> GroupDef
huddleGroupNamed = Proxy "pool_params" -> Proxy ShelleyEra -> GroupDef
forall era.
(HuddleRule "relay" era, HuddleRule "pool_metadata" era,
 HuddleRule1 "set" era) =>
Proxy "pool_params" -> Proxy era -> GroupDef
poolParamsGroup

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

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

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

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

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

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

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

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

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

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

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

instance HuddleRule "certificate" ShelleyEra where
  huddleRuleNamed :: Proxy "certificate" -> Proxy ShelleyEra -> Rule
huddleRuleNamed = Proxy "certificate" -> Proxy ShelleyEra -> 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" ShelleyEra where
  huddleRuleNamed :: Proxy "withdrawals" -> Proxy ShelleyEra -> Rule
huddleRuleNamed = Proxy "withdrawals" -> Proxy ShelleyEra -> Rule
forall era. Era era => Proxy "withdrawals" -> Proxy era -> Rule
shelleyWithdrawalsRule

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

instance HuddleGroup "protocol_version" ShelleyEra where
  huddleGroupNamed :: Proxy "protocol_version" -> Proxy ShelleyEra -> GroupDef
huddleGroupNamed = Proxy "protocol_version" -> Proxy ShelleyEra -> GroupDef
forall era.
HuddleRule "major_protocol_version" era =>
Proxy "protocol_version" -> Proxy era -> GroupDef
shelleyProtocolVersionGroup

instance HuddleRule "protocol_param_update" ShelleyEra where
  huddleRuleNamed :: Proxy "protocol_param_update" -> Proxy ShelleyEra -> Rule
huddleRuleNamed = Proxy "protocol_param_update" -> Proxy ShelleyEra -> Rule
forall era.
HuddleGroup "protocol_version" era =>
Proxy "protocol_param_update" -> Proxy era -> Rule
protocolParamUpdateRule

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

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

instance HuddleGroup "operational_cert" ShelleyEra where
  huddleGroupNamed :: Proxy "operational_cert" -> Proxy ShelleyEra -> GroupDef
huddleGroupNamed = Proxy "operational_cert" -> Proxy ShelleyEra -> GroupDef
forall era.
Era era =>
Proxy "operational_cert" -> Proxy era -> GroupDef
shelleyOperationalCertGroup

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

instance HuddleRule "header" ShelleyEra where
  huddleRuleNamed :: Proxy "header" -> Proxy ShelleyEra -> Rule
huddleRuleNamed = Proxy "header" -> Proxy ShelleyEra -> Rule
forall era.
HuddleRule "header_body" era =>
Proxy "header" -> Proxy era -> Rule
headerRule

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

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

instance HuddleRule "transaction_output" ShelleyEra where
  huddleRuleNamed :: Proxy "transaction_output" -> Proxy ShelleyEra -> Rule
huddleRuleNamed = Proxy "transaction_output" -> Proxy ShelleyEra -> Rule
forall era.
Era era =>
Proxy "transaction_output" -> Proxy era -> Rule
transactionOutputRule

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

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

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

instance HuddleGroup "script_n_of_k" ShelleyEra where
  huddleGroupNamed :: Proxy "script_n_of_k" -> Proxy ShelleyEra -> GroupDef
huddleGroupNamed Proxy "script_n_of_k"
pname Proxy ShelleyEra
p =
    Proxy "script_n_of_k"
pname
      Proxy "script_n_of_k" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
3, Key
"n" Key -> Value Int -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> Value Int
VUInt, ArrayChoice -> Item Group
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (ArrayChoice -> Item Group) -> ArrayChoice -> Item Group
forall a b. (a -> b) -> a -> b
$ 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 ShelleyEra
p)]]

instance HuddleRule "native_script" ShelleyEra where
  huddleRuleNamed :: Proxy "native_script" -> Proxy ShelleyEra -> Rule
huddleRuleNamed Proxy "native_script"
pname Proxy ShelleyEra
p =
    Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
      Comment
[str|Native scripts support 4 operations:
          |  - Signature verification (script_pubkey)
          |  - Conjunctions (script_all)
          |  - Disjunctions (script_any)
          |  - M-of-N thresholds (script_n_of_k)
          |
          |Note: Shelley uses VUInt for the threshold in script_n_of_k.
          |]
      (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ Proxy "native_script"
pname
        Proxy "native_script" -> Choice ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"script_pubkey" Proxy ShelleyEra
p]
        ArrayChoice -> ArrayChoice -> Choice ArrayChoice
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ ArrayChoice -> ArrayChoice
arr [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"script_all" Proxy ShelleyEra
p]
        Choice ArrayChoice -> ArrayChoice -> Choice ArrayChoice
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ ArrayChoice -> ArrayChoice
arr [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"script_any" Proxy ShelleyEra
p]
        Choice ArrayChoice -> ArrayChoice -> Choice ArrayChoice
forall a c b.
(IsChoosable a c, IsChoosable b c) =>
a -> b -> Choice c
/ ArrayChoice -> ArrayChoice
arr [GroupDef -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (GroupDef -> Item ArrayChoice) -> GroupDef -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleGroup name era =>
Proxy era -> GroupDef
huddleGroup @"script_n_of_k" Proxy ShelleyEra
p]

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

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

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

instance HuddleRule "transaction_body" ShelleyEra where
  huddleRuleNamed :: Proxy "transaction_body" -> Proxy ShelleyEra -> Rule
huddleRuleNamed Proxy "transaction_body"
pname Proxy ShelleyEra
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 ShelleyEra
p (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction_input" Proxy ShelleyEra
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 ShelleyEra
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 ShelleyEra
p
        , 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 ShelleyEra
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 ShelleyEra
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 ShelleyEra
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 ShelleyEra
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 ShelleyEra
p)
        ]

instance HuddleRule "transaction" ShelleyEra where
  huddleRuleNamed :: Proxy "transaction" -> Proxy ShelleyEra -> Rule
huddleRuleNamed Proxy "transaction"
pname Proxy ShelleyEra
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 ShelleyEra
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 ShelleyEra
p
        , Choice Type2 -> Item ArrayChoice
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (Choice Type2 -> Item ArrayChoice)
-> Choice Type2 -> Item ArrayChoice
forall a b. (a -> b) -> a -> b
$ forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"metadata" Proxy ShelleyEra
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 "block" ShelleyEra where
  huddleRuleNamed :: Proxy "block" -> Proxy ShelleyEra -> Rule
huddleRuleNamed Proxy "block"
pname Proxy ShelleyEra
p =
    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 ShelleyEra
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 ShelleyEra
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 ShelleyEra
p)]
        , Key
"transaction_metadata_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 ShelleyEra
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 @"metadata" Proxy ShelleyEra
p
              ]
        ]

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