{-# 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.Allegra.HuddleSpec (
  module Cardano.Ledger.Shelley.HuddleSpec,
  AllegraEra,
  allegraCDDL,
  blockRule,
  transactionRule,
  auxiliaryScriptsRule,
  auxiliaryDataArrayRule,
  auxiliaryDataRule,
  nativeScriptRule,
  scriptNOfKGroup,
  scriptInvalidBeforeGroup,
  scriptInvalidHereafterGroup,
) where

import Cardano.Ledger.Allegra (AllegraEra)
import Cardano.Ledger.Shelley.HuddleSpec
import Data.Proxy (Proxy (..))
import Text.Heredoc
import Prelude hiding ((/))

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

blockRule ::
  forall era.
  ( HuddleRule "header" era
  , HuddleRule "transaction_body" era
  , HuddleRule "transaction_witness_set" era
  , HuddleRule "auxiliary_data" era
  ) =>
  Proxy "block" ->
  Proxy era ->
  Rule
blockRule :: forall era.
(HuddleRule "header" era, HuddleRule "transaction_body" era,
 HuddleRule "transaction_witness_set" era,
 HuddleRule "auxiliary_data" era) =>
Proxy "block" -> Proxy era -> Rule
blockRule Proxy "block"
pname Proxy era
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 era
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 era
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 era
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 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 @"auxiliary_data" Proxy era
p
            ]
      ]

transactionRule ::
  forall era.
  ( HuddleRule "transaction_body" era
  , HuddleRule "transaction_witness_set" era
  , HuddleRule "auxiliary_data" era
  ) =>
  Proxy "transaction" ->
  Proxy era ->
  Rule
transactionRule :: forall era.
(HuddleRule "transaction_body" era,
 HuddleRule "transaction_witness_set" era,
 HuddleRule "auxiliary_data" era) =>
Proxy "transaction" -> Proxy era -> Rule
transactionRule Proxy "transaction"
pname Proxy era
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 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 @"transaction_witness_set" Proxy era
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 @"auxiliary_data" 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
      ]

auxiliaryScriptsRule ::
  forall era.
  HuddleRule "native_script" era => Proxy "auxiliary_scripts" -> Proxy era -> Rule
auxiliaryScriptsRule :: forall era.
HuddleRule "native_script" era =>
Proxy "auxiliary_scripts" -> Proxy era -> Rule
auxiliaryScriptsRule Proxy "auxiliary_scripts"
pname Proxy era
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 era
p)]

auxiliaryDataArrayRule ::
  forall era.
  HuddleRule "auxiliary_scripts" era => Proxy "auxiliary_data_array" -> Proxy era -> Rule
auxiliaryDataArrayRule :: forall era.
HuddleRule "auxiliary_scripts" era =>
Proxy "auxiliary_data_array" -> Proxy era -> Rule
auxiliaryDataArrayRule Proxy "auxiliary_data_array"
pname Proxy era
p =
  Proxy "auxiliary_data_array"
pname
    Proxy "auxiliary_data_array" -> ArrayChoice -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= ArrayChoice -> ArrayChoice
arr
      [ Key
"transaction_metadata" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"metadata" Proxy era
p
      , Key
"auxiliary_scripts" Key -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"auxiliary_scripts" Proxy era
p
      ]

auxiliaryDataRule ::
  forall era.
  HuddleRule "auxiliary_data_array" era => Proxy "auxiliary_data" -> Proxy era -> Rule
auxiliaryDataRule :: forall era.
HuddleRule "auxiliary_data_array" era =>
Proxy "auxiliary_data" -> Proxy era -> Rule
auxiliaryDataRule Proxy "auxiliary_data"
pname Proxy era
p =
  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 era
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 era
p

nativeScriptRule ::
  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 :: 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 Proxy "native_script"
pname Proxy era
p =
  Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
    Comment
[str|Allegra introduces timelock support for native scripts.
        |
        |Timelock validity intervals are half-open intervals [a, b).
        |  script_invalid_before: specifies the left (included) endpoint a.
        |  script_invalid_hereafter: specifies the right (excluded) endpoint b.
        |
        |Note: Allegra switched to int64 for script_n_of_k thresholds.
        |]
    (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 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 @"script_all" 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 @"script_any" 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 @"script_n_of_k" 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 @"script_invalid_before" 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 @"script_invalid_hereafter" Proxy era
p]

scriptNOfKGroup ::
  forall era.
  HuddleRule "native_script" era =>
  Proxy "script_n_of_k" ->
  Proxy era ->
  GroupDef
scriptNOfKGroup :: forall era.
HuddleRule "native_script" era =>
Proxy "script_n_of_k" -> Proxy era -> GroupDef
scriptNOfKGroup Proxy "script_n_of_k"
pname Proxy era
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 -> Rule -> ArrayEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"int64" Proxy era
p
      , 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)]
      ]

scriptInvalidBeforeGroup ::
  forall era. Era era => Proxy "script_invalid_before" -> Proxy era -> GroupDef
scriptInvalidBeforeGroup :: forall era.
Era era =>
Proxy "script_invalid_before" -> Proxy era -> GroupDef
scriptInvalidBeforeGroup Proxy "script_invalid_before"
pname Proxy era
p =
  Comment -> GroupDef -> GroupDef
forall a. HasComment a => Comment -> a -> a
comment
    Comment
[str|Timelock validity intervals are half-open intervals [a, b).
        |This field specifies the left (included) endpoint a.
        |]
    (GroupDef -> GroupDef) -> GroupDef -> GroupDef
forall a b. (a -> b) -> a -> b
$ Proxy "script_invalid_before"
pname
      Proxy "script_invalid_before" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
4, Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"slot" Proxy era
p)]

scriptInvalidHereafterGroup ::
  forall era. Era era => Proxy "script_invalid_hereafter" -> Proxy era -> GroupDef
scriptInvalidHereafterGroup :: forall era.
Era era =>
Proxy "script_invalid_hereafter" -> Proxy era -> GroupDef
scriptInvalidHereafterGroup Proxy "script_invalid_hereafter"
pname Proxy era
p =
  Comment -> GroupDef -> GroupDef
forall a. HasComment a => Comment -> a -> a
comment
    Comment
[str|Timelock validity intervals are half-open intervals [a, b).
        |This field specifies the right (excluded) endpoint b.
        |]
    (GroupDef -> GroupDef) -> GroupDef -> GroupDef
forall a b. (a -> b) -> a -> b
$ Proxy "script_invalid_hereafter"
pname
      Proxy "script_invalid_hereafter" -> Group -> GroupDef
forall (name :: Symbol).
KnownSymbol name =>
Proxy name -> Group -> GroupDef
=.~ Group -> Group
grp [Item Group
ArrayEntry
5, Rule -> ArrayEntry
forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e
a (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"slot" Proxy era
p)]

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

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

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

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

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

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

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

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

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

instance Era era => HuddleRule "min_int64" era where
  huddleRuleNamed :: Proxy "min_int64" -> Proxy era -> Rule
huddleRuleNamed Proxy "min_int64"
pname Proxy era
_ = Proxy "min_int64"
pname Proxy "min_int64" -> Integer -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= (-Integer
9223372036854775808 :: Integer)

instance Era era => HuddleRule "max_int64" era where
  huddleRuleNamed :: Proxy "max_int64" -> Proxy era -> Rule
huddleRuleNamed Proxy "max_int64"
pname Proxy era
_ = Proxy "max_int64"
pname Proxy "max_int64" -> Integer -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= (Integer
9223372036854775807 :: Integer)

instance Era era => HuddleRule "int64" era where
  huddleRuleNamed :: Proxy "int64" -> Proxy era -> Rule
huddleRuleNamed Proxy "int64"
pname Proxy era
p = Proxy "int64"
pname Proxy "int64" -> Ranged -> Rule
forall (name :: Symbol) t.
(KnownSymbol name, IsType0 t) =>
Proxy name -> t -> Rule
=.= forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"min_int64" Proxy era
p Rule -> Rule -> Ranged
forall a b. (IsRangeBound a, IsRangeBound b) => a -> b -> Ranged
... forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"max_int64" Proxy era
p

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

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

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

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

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

instance HuddleRule "native_script" AllegraEra where
  huddleRuleNamed :: Proxy "native_script" -> Proxy AllegraEra -> Rule
huddleRuleNamed = Proxy "native_script" -> Proxy AllegraEra -> 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 HuddleRule "vkeywitness" AllegraEra where
  huddleRuleNamed :: Proxy "vkeywitness" -> Proxy AllegraEra -> Rule
huddleRuleNamed = Proxy "vkeywitness" -> Proxy AllegraEra -> Rule
forall era. Era era => Proxy "vkeywitness" -> Proxy era -> Rule
vkeywitnessRule

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

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

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

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

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

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

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

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

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

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

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

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

instance HuddleRule "relay" AllegraEra where
  huddleRuleNamed :: Proxy "relay" -> Proxy AllegraEra -> Rule
huddleRuleNamed = Proxy "relay" -> Proxy AllegraEra -> 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" AllegraEra where
  huddleGroupNamed :: Proxy "pool_params" -> Proxy AllegraEra -> GroupDef
huddleGroupNamed = Proxy "pool_params" -> Proxy AllegraEra -> 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" AllegraEra where
  huddleGroupNamed :: Proxy "pool_registration_cert" -> Proxy AllegraEra -> GroupDef
huddleGroupNamed = Proxy "pool_registration_cert" -> Proxy AllegraEra -> GroupDef
forall era.
HuddleGroup "pool_params" era =>
Proxy "pool_registration_cert" -> Proxy era -> GroupDef
poolRegistrationCertGroup

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

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

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

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

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

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

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

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

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

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

instance HuddleRule "auxiliary_scripts" AllegraEra where
  huddleRuleNamed :: Proxy "auxiliary_scripts" -> Proxy AllegraEra -> Rule
huddleRuleNamed = Proxy "auxiliary_scripts" -> Proxy AllegraEra -> Rule
forall era.
HuddleRule "native_script" era =>
Proxy "auxiliary_scripts" -> Proxy era -> Rule
auxiliaryScriptsRule

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

instance HuddleRule "auxiliary_data" AllegraEra where
  huddleRuleNamed :: Proxy "auxiliary_data" -> Proxy AllegraEra -> Rule
huddleRuleNamed = Proxy "auxiliary_data" -> Proxy AllegraEra -> Rule
forall era.
HuddleRule "auxiliary_data_array" era =>
Proxy "auxiliary_data" -> Proxy era -> Rule
auxiliaryDataRule

instance HuddleRule "transaction_body" AllegraEra where
  huddleRuleNamed :: Proxy "transaction_body" -> Proxy AllegraEra -> Rule
huddleRuleNamed Proxy "transaction_body"
pname Proxy AllegraEra
p =
    Comment -> Rule -> Rule
forall a. HasComment a => Comment -> a -> a
comment
      Comment
[str|Allegra transaction body adds the validity interval start at index 8
          |]
      (Rule -> Rule) -> Rule -> Rule
forall a b. (a -> b) -> a -> b
$ 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 AllegraEra
p (forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"transaction_input" Proxy AllegraEra
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 AllegraEra
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 AllegraEra
p
          , MapEntry -> MapEntry
forall a. CanQuantify a => a -> a
opt (Word64 -> Key
idx Word64
3 Key -> Rule -> MapEntry
forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me
==> forall (name :: Symbol) era.
HuddleRule name era =>
Proxy era -> Rule
huddleRule @"slot" Proxy AllegraEra
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 AllegraEra
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 AllegraEra
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 AllegraEra
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 AllegraEra
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 AllegraEra
p)
          ]

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

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

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