diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 4052ac74..b25be2c9 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -165,7 +165,7 @@ jobs: uses: actions/checkout@v6 with: repository: tweag/CIPs - ref: 5a4f49835b01695583830e01e2dfd11e9e582efc + ref: c92a3b5db78268e7f0db5f24c80ed6f49cf4b149 path: cips - name: set env for reference CDDL run: | diff --git a/flake.lock b/flake.lock index bd5fde29..06ea2a99 100644 --- a/flake.lock +++ b/flake.lock @@ -69,17 +69,17 @@ "cips": { "flake": false, "locked": { - "lastModified": 1774517331, - "narHash": "sha256-Iu6jgcoa/WZcruKaym/3Y5/1awx53eKgvI0l6/+fMIQ=", + "lastModified": 1776254122, + "narHash": "sha256-MmXsGDMGnZayYZEt40Y5a54Pis31plBQt2/hbdUTaos=", "owner": "tweag", "repo": "CIPs", - "rev": "5a4f49835b01695583830e01e2dfd11e9e582efc", + "rev": "c92a3b5db78268e7f0db5f24c80ed6f49cf4b149", "type": "github" }, "original": { "owner": "tweag", "repo": "CIPs", - "rev": "5a4f49835b01695583830e01e2dfd11e9e582efc", + "rev": "c92a3b5db78268e7f0db5f24c80ed6f49cf4b149", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 59874068..ab2381f8 100644 --- a/flake.nix +++ b/flake.nix @@ -18,7 +18,7 @@ inputs.nixpkgs.follows = "nixpkgs"; }; inputs.cips = { - url = "github:tweag/CIPs?rev=5a4f49835b01695583830e01e2dfd11e9e582efc"; + url = "github:tweag/CIPs?rev=c92a3b5db78268e7f0db5f24c80ed6f49cf4b149"; flake = false; }; outputs = { self, nixpkgs, flake-utils, haskellNix, git-hooks, treefmt-nix diff --git a/scls-cardano/cddl-src/Cardano/SCLS/CDDL.hs b/scls-cardano/cddl-src/Cardano/SCLS/CDDL.hs index d8ccbcc3..cec996b3 100644 --- a/scls-cardano/cddl-src/Cardano/SCLS/CDDL.hs +++ b/scls-cardano/cddl-src/Cardano/SCLS/CDDL.hs @@ -14,6 +14,7 @@ import Cardano.SCLS.Namespace.GovCommittee qualified as GovCommittee import Cardano.SCLS.Namespace.GovConstitution qualified as GovConstitution import Cardano.SCLS.Namespace.GovPParams qualified as GovPParams import Cardano.SCLS.Namespace.GovProposals qualified as GovProposals +import Cardano.SCLS.Namespace.GovProposalsRoots qualified as GovProposalsRoots import Cardano.SCLS.Namespace.Nonces qualified as Nonces import Cardano.SCLS.Namespace.Snapshots qualified as Snapshots import Cardano.SCLS.Namespace.UTxO qualified as UTxO @@ -67,6 +68,9 @@ instance KnownSpec "gov/pparams/v0" where instance KnownSpec "gov/proposals/v0" where namespaceSpec _ = mkDefinition GovProposals.record_entry +instance KnownSpec "gov/proposals/roots/v0" where + namespaceSpec _ = mkDefinition GovProposalsRoots.record_entry + mkDefinition :: Rule -> Huddle mkDefinition r = collectFromInit [HIRule r] @@ -87,6 +91,7 @@ knownNamespaces = , mkNamespaceSymbol @"gov/constitution/v0" , mkNamespaceSymbol @"gov/pparams/v0" , mkNamespaceSymbol @"gov/proposals/v0" + , mkNamespaceSymbol @"gov/proposals/roots/v0" ] type instance Spec.NamespaceKeySize "utxo/v0" = 34 @@ -100,3 +105,4 @@ type instance Spec.NamespaceKeySize "gov/committee/v0" = 8 type instance Spec.NamespaceKeySize "gov/constitution/v0" = 8 type instance Spec.NamespaceKeySize "gov/pparams/v0" = 4 type instance Spec.NamespaceKeySize "gov/proposals/v0" = 34 -- 32 bytes txid+tx index + 2 bytes for proposal index +type instance Spec.NamespaceKeySize "gov/proposals/roots/v0" = 1 -- 1 byte for proposal purpose diff --git a/scls-cardano/cddl-src/Cardano/SCLS/Common.hs b/scls-cardano/cddl-src/Cardano/SCLS/Common.hs index bc896a29..8af80cfd 100644 --- a/scls-cardano/cddl-src/Cardano/SCLS/Common.hs +++ b/scls-cardano/cddl-src/Cardano/SCLS/Common.hs @@ -243,3 +243,8 @@ protocol_version = "protocol_version" =:= arr [a major_protocol_version, a VUInt major_protocol_version :: Rule major_protocol_version = "major_protocol_version" =:= VUInt + +gov_action_id :: Rule +gov_action_id = + "gov_action_id" + =:= arr ["transaction_id" ==> hash32, "gov_action_index" ==> VUInt `sized` (2 :: Word64)] diff --git a/scls-cardano/cddl-src/Cardano/SCLS/Namespace/GovProposals.hs b/scls-cardano/cddl-src/Cardano/SCLS/Namespace/GovProposals.hs index 5a51c6a0..7e5e1afb 100644 --- a/scls-cardano/cddl-src/Cardano/SCLS/Namespace/GovProposals.hs +++ b/scls-cardano/cddl-src/Cardano/SCLS/Namespace/GovProposals.hs @@ -109,11 +109,6 @@ gov_action = / (arr [5, "purpose" ==> (gov_action_id / VNil), "constitution" ==> constitution] //- "New constitution") / (arr [6] //- "Info action") -gov_action_id :: Rule -gov_action_id = - "gov_action_id" - =:= arr ["transaction_id" ==> hash32, "gov_action_index" ==> VUInt `sized` (2 :: Word64)] - gov_params_update :: Rule gov_params_update = comment diff --git a/scls-cardano/cddl-src/Cardano/SCLS/Namespace/GovProposalsRoots.hs b/scls-cardano/cddl-src/Cardano/SCLS/Namespace/GovProposalsRoots.hs new file mode 100644 index 00000000..d526b589 --- /dev/null +++ b/scls-cardano/cddl-src/Cardano/SCLS/Namespace/GovProposalsRoots.hs @@ -0,0 +1,40 @@ +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedLists #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} + +{-# HLINT ignore "Use camelCase" #-} +module Cardano.SCLS.Namespace.GovProposalsRoots where + +import Cardano.SCLS.Common +import Codec.CBOR.Cuddle.Huddle +import Data.Function (($)) +import Text.Heredoc (str) + +record_entry :: Rule +record_entry = + comment + [str| Size of the key + | + | ``` + | meta: + | endian: be + | + | seq: + | - id: key + | type: u1 + | enum: gov_proposals_purpose + | + | enums: + | gov_proposals_purpose: + | 0: pparams_update + | 1: hard_fork + | 2: committee + | 3: constitution + | ``` + | + |] + $ "record_entry" =:= gov_action_id diff --git a/scls-cardano/scls-cardano.cabal b/scls-cardano/scls-cardano.cabal index a997368a..74dd7613 100644 --- a/scls-cardano/scls-cardano.cabal +++ b/scls-cardano/scls-cardano.cabal @@ -36,6 +36,7 @@ library Cardano.SCLS.Namespace.GovConstitution Cardano.SCLS.Namespace.GovPParams Cardano.SCLS.Namespace.GovProposals + Cardano.SCLS.Namespace.GovProposalsRoots Cardano.SCLS.Namespace.Nonces Cardano.SCLS.Namespace.Snapshots Cardano.SCLS.Namespace.UTxO diff --git a/scls-cardano/test/Reference.hs b/scls-cardano/test/Reference.hs index 8822c48c..65bcaed1 100644 --- a/scls-cardano/test/Reference.hs +++ b/scls-cardano/test/Reference.hs @@ -74,6 +74,7 @@ allReferenceCDDLs = , ("gov/constitution/v0", "gov_constitution_v0.cddl") , ("gov/pparams/v0", "gov_pparams_v0.cddl") , ("gov/proposals/v0", "gov_proposals_v0.cddl") + , ("gov/proposals/roots/v0", "gov_proposals_roots_v0.cddl") ] loadAllReferenceCDDLs :: IO (Maybe ([(Text, Either LoadError (CTreeRoot MonoReferenced))])) diff --git a/scls-cardano/testlib/Cardano/SCLS/Testlib.hs b/scls-cardano/testlib/Cardano/SCLS/Testlib.hs index 42217e0a..d22ca020 100644 --- a/scls-cardano/testlib/Cardano/SCLS/Testlib.hs +++ b/scls-cardano/testlib/Cardano/SCLS/Testlib.hs @@ -60,6 +60,7 @@ testAllNS :: , ConstrNS "gov/constitution/v0" , ConstrNS "gov/pparams/v0" , ConstrNS "gov/proposals/v0" + , ConstrNS "gov/proposals/roots/v0" ) => Spec testAllNS = describe "scls/conformance" $ do @@ -73,6 +74,7 @@ testAllNS = describe "scls/conformance" $ do testNS @"gov/constitution/v0" testNS @"gov/pparams/v0" testNS @"gov/proposals/v0" + testNS @"gov/proposals/roots/v0" -- | Validate concrete type against its definition in CDDL validateType :: forall ns a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => T.Text -> Spec