{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# OPTIONS_GHC -Wno-orphans #-} module Cardano.Ledger.Mary.HuddleSpec ( module Cardano.Ledger.Allegra.HuddleSpec, maryCDDL, multiasset, ) where import Cardano.Ledger.Allegra.HuddleSpec import Cardano.Ledger.Mary (MaryEra) import Codec.CBOR.Cuddle.Huddle import Data.Proxy (Proxy (..)) import Data.Word (Word64) import Prelude hiding ((/)) maryCDDL :: Huddle maryCDDL :: Huddle maryCDDL = [HuddleItem] -> Huddle collectFrom [ Rule -> HuddleItem HIRule (Rule -> HuddleItem) -> Rule -> HuddleItem forall a b. (a -> b) -> a -> b $ forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"block" (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @MaryEra) , Rule -> HuddleItem HIRule (Rule -> HuddleItem) -> Rule -> HuddleItem forall a b. (a -> b) -> a -> b $ forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"transaction" (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @MaryEra) , Rule -> HuddleItem HIRule (Rule -> HuddleItem) -> Rule -> HuddleItem forall a b. (a -> b) -> a -> b $ forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"policy_id" (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @MaryEra) , Rule -> HuddleItem HIRule (Rule -> HuddleItem) -> Rule -> HuddleItem forall a b. (a -> b) -> a -> b $ forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"asset_name" (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @MaryEra) ] instance HuddleRule "block" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. (HuddleRule "header" era, HuddleRule "transaction_body" era, HuddleRule "transaction_witness_set" era, HuddleRule "auxiliary_data" era) => Proxy era -> Rule blockRule @MaryEra instance HuddleRule "transaction" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. (HuddleRule "transaction_body" era, HuddleRule "transaction_witness_set" era, HuddleRule "auxiliary_data" era) => Proxy era -> Rule transactionRule @MaryEra instance HuddleRule "header" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. HuddleRule "header_body" era => Proxy era -> Rule headerRule @MaryEra instance HuddleRule "header_body" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. (HuddleGroup "operational_cert" era, HuddleGroup "protocol_version" era) => Proxy era -> Rule headerBodyRule @MaryEra instance HuddleGroup "protocol_version" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. HuddleRule "major_protocol_version" era => Proxy era -> Named Group shelleyProtocolVersionGroup @MaryEra instance HuddleRule "major_protocol_version" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. Era era => Proxy era -> Rule majorProtocolVersionRule @MaryEra instance HuddleRule "int64" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. (HuddleRule "min_int64" era, HuddleRule "max_int64" era) => Proxy era -> Rule int64Rule @MaryEra instance HuddleRule "min_int64" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra _ = Rule minInt64Rule instance HuddleRule "max_int64" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra _ = Rule maxInt64Rule instance HuddleRule "transaction_id" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. Era era => Proxy era -> Rule transactionIdRule @MaryEra instance HuddleRule "transaction_input" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. HuddleRule "transaction_id" era => Proxy era -> Rule transactionInputRule @MaryEra instance HuddleGroup "operational_cert" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. Era era => Proxy era -> Named Group shelleyOperationalCertGroup @MaryEra instance HuddleRule "vkeywitness" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. Era era => Proxy era -> Rule vkeywitnessRule @MaryEra instance HuddleRule "bootstrap_witness" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. Era era => Proxy era -> Rule bootstrapWitnessRule @MaryEra instance HuddleRule "transaction_witness_set" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. (HuddleRule "vkeywitness" era, HuddleRule "native_script" era, HuddleRule "bootstrap_witness" era) => Proxy era -> Rule transactionWitnessSetRule @MaryEra instance HuddleRule "withdrawals" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. Era era => Proxy era -> Rule withdrawalsRule @MaryEra instance HuddleRule "certificate" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. (HuddleGroup "account_registration_cert" era, HuddleGroup "account_unregistration_cert" era, HuddleGroup "delegation_to_stake_pool_cert" era, HuddleGroup "pool_registration_cert" era, HuddleGroup "pool_retirement_cert" era, HuddleGroup "genesis_delegation_cert" era, HuddleGroup "move_instantaneous_rewards_cert" era) => Proxy era -> Rule certificateRule @MaryEra instance HuddleGroup "account_registration_cert" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. Era era => Proxy era -> Named Group accountRegistrationCertGroup @MaryEra instance HuddleGroup "account_unregistration_cert" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. Era era => Proxy era -> Named Group accountUnregistrationCertGroup @MaryEra instance HuddleGroup "delegation_to_stake_pool_cert" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. Era era => Proxy era -> Named Group delegationToStakePoolCertGroup @MaryEra instance HuddleGroup "pool_registration_cert" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. HuddleGroup "pool_params" era => Proxy era -> Named Group poolRegistrationCertGroup @MaryEra instance HuddleGroup "pool_retirement_cert" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. Era era => Proxy era -> Named Group poolRetirementCertGroup @MaryEra instance HuddleGroup "genesis_delegation_cert" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. (HuddleRule "genesis_hash" era, HuddleRule "genesis_delegate_hash" era) => Proxy era -> Named Group genesisDelegationCertGroup @MaryEra instance HuddleGroup "move_instantaneous_rewards_cert" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. HuddleRule "move_instantaneous_reward" era => Proxy era -> Named Group moveInstantaneousRewardsCertGroup @MaryEra instance HuddleRule "genesis_hash" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. Era era => Proxy era -> Rule genesisHashRule @MaryEra instance HuddleRule "genesis_delegate_hash" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. Era era => Proxy era -> Rule genesisDelegateHashRule @MaryEra instance HuddleRule "delta_coin" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra _ = Rule deltaCoinRule instance HuddleRule "move_instantaneous_reward" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. HuddleRule "delta_coin" era => Proxy era -> Rule moveInstantaneousRewardRule @MaryEra instance HuddleGroup "pool_params" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. (HuddleRule "relay" era, HuddleRule "pool_metadata" era) => Proxy era -> Named Group poolParamsGroup @MaryEra instance HuddleRule "pool_metadata" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. HuddleRule "url" era => Proxy era -> Rule poolMetadataRule @MaryEra instance HuddleRule "dns_name" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra _ = Rule dnsNameRule instance HuddleRule "url" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra _ = Rule urlRule instance HuddleGroup "single_host_addr" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. Era era => Proxy era -> Named Group singleHostAddrGroup @MaryEra instance HuddleGroup "single_host_name" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. HuddleRule "dns_name" era => Proxy era -> Named Group singleHostNameGroup @MaryEra instance HuddleGroup "multi_host_name" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. HuddleRule "dns_name" era => Proxy era -> Named Group multiHostNameGroup @MaryEra instance HuddleRule "relay" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. (HuddleGroup "single_host_addr" era, HuddleGroup "single_host_name" era, HuddleGroup "multi_host_name" era) => Proxy era -> Rule relayRule @MaryEra instance HuddleRule "protocol_param_update" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. HuddleGroup "protocol_version" era => Proxy era -> Rule protocolParamUpdateRule @MaryEra instance HuddleRule "proposed_protocol_parameter_updates" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. (HuddleRule "genesis_hash" era, HuddleRule "protocol_param_update" era) => Proxy era -> Rule proposedProtocolParameterUpdatesRule @MaryEra instance HuddleRule "update" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. HuddleRule "proposed_protocol_parameter_updates" era => Proxy era -> Rule updateRule @MaryEra instance HuddleGroup "script_pubkey" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. Era era => Proxy era -> Named Group scriptPubkeyGroup @MaryEra instance HuddleGroup "script_all" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. HuddleRule "native_script" era => Proxy era -> Named Group scriptAllGroup @MaryEra instance HuddleGroup "script_any" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. HuddleRule "native_script" era => Proxy era -> Named Group scriptAnyGroup @MaryEra instance HuddleGroup "script_n_of_k" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. (HuddleRule "int64" era, HuddleRule "native_script" era) => Proxy era -> Named Group scriptNOfKGroup @MaryEra instance HuddleGroup "script_invalid_before" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. Era era => Proxy era -> Named Group scriptInvalidBeforeGroup @MaryEra instance HuddleGroup "script_invalid_hereafter" MaryEra where huddleGroup :: Proxy MaryEra -> Named Group huddleGroup = forall era. Era era => Proxy era -> Named Group scriptInvalidHereafterGroup @MaryEra instance HuddleRule "native_script" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. (HuddleGroup "script_pubkey" era, HuddleGroup "script_all" era, HuddleGroup "script_any" era, HuddleGroup "script_n_of_k" era, HuddleGroup "script_invalid_before" era, HuddleGroup "script_invalid_hereafter" era) => Proxy era -> Rule nativeScriptRule @MaryEra instance HuddleRule "transaction_body" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra p = Text "transaction_body" Text -> MapChoice -> Rule forall a. IsType0 a => Text -> a -> Rule =:= MapChoice -> MapChoice mp [ Word64 -> Key idx Word64 0 Key -> GRuleCall -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> Rule -> GRuleCall forall a. IsType0 a => a -> GRuleCall untaggedSet (forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"transaction_input" Proxy MaryEra p) , Word64 -> Key idx Word64 1 Key -> ArrayChoice -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> ArrayChoice -> ArrayChoice arr [Word64 0 Word64 -> ArrayEntry -> ArrayEntry forall a. CanQuantify a => Word64 -> a -> a <+ Rule -> ArrayEntry forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e a (forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"transaction_output" Proxy MaryEra p)] , Word64 -> Key idx Word64 2 Key -> Rule -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"coin" Proxy MaryEra p , MapEntry -> MapEntry forall a. CanQuantify a => a -> a opt (Word64 -> Key idx Word64 3 Key -> Rule -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"slot" Proxy MaryEra p) , MapEntry -> MapEntry forall a. CanQuantify a => a -> a opt (Word64 -> Key idx Word64 4 Key -> ArrayChoice -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> ArrayChoice -> ArrayChoice arr [Word64 0 Word64 -> ArrayEntry -> ArrayEntry forall a. CanQuantify a => Word64 -> a -> a <+ Rule -> ArrayEntry forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e a (forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"certificate" Proxy MaryEra p)]) , MapEntry -> MapEntry forall a. CanQuantify a => a -> a opt (Word64 -> Key idx Word64 5 Key -> Rule -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"withdrawals" Proxy MaryEra p) , MapEntry -> MapEntry forall a. CanQuantify a => a -> a opt (Word64 -> Key idx Word64 6 Key -> Rule -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"update" Proxy MaryEra p) , MapEntry -> MapEntry forall a. CanQuantify a => a -> a opt (Word64 -> Key idx Word64 7 Key -> Rule -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"auxiliary_data_hash" Proxy MaryEra p) , MapEntry -> MapEntry forall a. CanQuantify a => a -> a opt (Word64 -> Key idx Word64 8 Key -> Rule -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"slot" Proxy MaryEra p) , MapEntry -> MapEntry forall a. CanQuantify a => a -> a opt (Word64 -> Key idx Word64 9 Key -> Rule -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"mint" Proxy MaryEra p) ] instance HuddleRule "transaction_output" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra p = Text "transaction_output" Text -> ArrayChoice -> Rule forall a. IsType0 a => Text -> a -> Rule =:= ArrayChoice -> ArrayChoice arr [ Rule -> Item ArrayChoice forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e a (Rule -> Item ArrayChoice) -> Rule -> Item ArrayChoice forall a b. (a -> b) -> a -> b $ forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"address" Proxy MaryEra p , Key "amount" Key -> Rule -> ArrayEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"value" Proxy MaryEra p ] multiasset :: forall era a. (HuddleRule "policy_id" era, HuddleRule "asset_name" era, IsType0 a) => Proxy era -> a -> GRuleCall multiasset :: forall era a. (HuddleRule "policy_id" era, HuddleRule "asset_name" era, IsType0 a) => Proxy era -> a -> GRuleCall multiasset Proxy era p = (GRef -> Rule) -> a -> GRuleCall forall t0. IsType0 t0 => (GRef -> Rule) -> t0 -> GRuleCall binding ((GRef -> Rule) -> a -> GRuleCall) -> (GRef -> Rule) -> a -> GRuleCall forall a b. (a -> b) -> a -> b $ \GRef x -> Text "multiasset" Text -> MapChoice -> Rule forall a. IsType0 a => Text -> a -> Rule =:= MapChoice -> MapChoice mp [ Word64 0 Word64 -> MapEntry -> MapEntry forall a. CanQuantify a => Word64 -> a -> a <+ Rule -> Key forall r. IsType0 r => r -> Key asKey (forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"policy_id" Proxy era p) Key -> MapChoice -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> MapChoice -> MapChoice mp [Word64 1 Word64 -> MapEntry -> MapEntry forall a. CanQuantify a => Word64 -> a -> a <+ Rule -> Key forall r. IsType0 r => r -> Key asKey (forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"asset_name" Proxy era p) Key -> GRef -> MapEntry forall a me. (IsType0 a, IsEntryLike me) => Key -> a -> me ==> GRef x] ] instance HuddleRule "value" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra p = Text "value" Text -> Choice Type2 -> Rule forall a. IsType0 a => Text -> a -> Rule =:= forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"coin" Proxy MaryEra p Rule -> Seal Array -> Choice Type2 forall a c b. (IsChoosable a c, IsChoosable b c) => a -> b -> Choice c / ArrayChoice -> Seal Array sarr [Rule -> Item ArrayChoice forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e a (Rule -> Item ArrayChoice) -> Rule -> Item ArrayChoice forall a b. (a -> b) -> a -> b $ forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"coin" Proxy MaryEra p, GRuleCall -> Item ArrayChoice forall a e. (IsType0 a, IsGroupOrArrayEntry e) => a -> e a (GRuleCall -> Item ArrayChoice) -> GRuleCall -> Item ArrayChoice forall a b. (a -> b) -> a -> b $ Proxy MaryEra -> Value Int -> GRuleCall forall era a. (HuddleRule "policy_id" era, HuddleRule "asset_name" era, IsType0 a) => Proxy era -> a -> GRuleCall multiasset Proxy MaryEra p Value Int VUInt] instance HuddleRule "policy_id" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra p = Text "policy_id" Text -> Rule -> Rule forall a. IsType0 a => Text -> a -> Rule =:= forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"script_hash" Proxy MaryEra p instance HuddleRule "asset_name" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra _ = Text "asset_name" Text -> Constrained -> Rule forall a. IsType0 a => Text -> a -> Rule =:= Value ByteString VBytes Value ByteString -> (Word64, Word64) -> Constrained forall c a s. (IsSizeable a, IsSize s, IsConstrainable c a) => c -> s -> Constrained `sized` (Word64 0 :: Word64, Word64 32 :: Word64) instance HuddleRule "mint" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule Proxy MaryEra p = Text "mint" Text -> GRuleCall -> Rule forall a. IsType0 a => Text -> a -> Rule =:= Proxy MaryEra -> Rule -> GRuleCall forall era a. (HuddleRule "policy_id" era, HuddleRule "asset_name" era, IsType0 a) => Proxy era -> a -> GRuleCall multiasset Proxy MaryEra p (forall (name :: Symbol) era. HuddleRule name era => Proxy era -> Rule huddleRule @"int64" Proxy MaryEra p) instance HuddleRule "auxiliary_data" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. HuddleRule "auxiliary_data_array" era => Proxy era -> Rule auxiliaryDataRule @MaryEra instance HuddleRule "auxiliary_data_array" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. HuddleRule "auxiliary_scripts" era => Proxy era -> Rule auxiliaryDataArrayRule @MaryEra instance HuddleRule "auxiliary_scripts" MaryEra where huddleRule :: Proxy MaryEra -> Rule huddleRule = forall era. HuddleRule "native_script" era => Proxy era -> Rule auxiliaryScriptsRule @MaryEra