Skip to content

Commit b0e0138

Browse files
committed
Support gov/pparams/v0 namespace
1 parent 3b1a626 commit b0e0138

File tree

7 files changed

+641
-1
lines changed

7 files changed

+641
-1
lines changed

libs/cardano-ledger-canonical-state/cardano-ledger-canonical-state.cabal

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ library
4141
Cardano.Ledger.CanonicalState.Namespace.Blocks.V0
4242
Cardano.Ledger.CanonicalState.Namespace.GovCommittee.V0
4343
Cardano.Ledger.CanonicalState.Namespace.GovConstitution.V0
44+
Cardano.Ledger.CanonicalState.Namespace.GovPParams.V0
4445
Cardano.Ledger.CanonicalState.Namespace.UTxO.V0
4546

4647
hs-source-dirs: src
@@ -51,6 +52,7 @@ library
5152
cardano-crypto-class,
5253
cardano-ledger-binary,
5354
cardano-ledger-core,
55+
cardano-slotting,
5456
cborg,
5557
containers,
5658
mempack-scls,
@@ -67,7 +69,9 @@ library conway
6769
hs-source-dirs: conway
6870
build-depends:
6971
base,
72+
cardano-ledger-alonzo,
7073
cardano-ledger-canonical-state,
74+
cardano-ledger-core,
7175
cardano-ledger-conway,
7276
scls-core,
7377

@@ -105,6 +109,7 @@ test-suite tests
105109

106110
build-depends:
107111
base,
112+
cardano-ledger-core,
108113
cardano-ledger-canonical-state:{cardano-ledger-canonical-state, conway, testlib},
109114
cardano-ledger-conway,
110115
cardano-ledger-core:testlib,

libs/cardano-ledger-canonical-state/conway/Cardano/Ledger/CanonicalState/Conway.hs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,22 @@ module Cardano.Ledger.CanonicalState.Conway (
99
mkCanonicalConstitution,
1010
) where
1111

12+
import Cardano.Ledger.Alonzo.PParams (OrdExUnits(..))
13+
import Cardano.Ledger.BaseTypes (ProtVer)
14+
import Cardano.Ledger.CanonicalState.BasicTypes (CanonicalCoin (..), fromCanonicalExUnits, mkCanonicalExUnits)
1215
import Cardano.Ledger.CanonicalState.Namespace
1316
import Cardano.Ledger.CanonicalState.Namespace.GovCommittee.V0 ()
1417
import Cardano.Ledger.CanonicalState.Namespace.GovConstitution.V0
18+
import Cardano.Ledger.CanonicalState.Namespace.GovCommittee.V0 ()
19+
import Cardano.Ledger.CanonicalState.Namespace.GovPParams.V0
1520
import Cardano.Ledger.CanonicalState.Namespace.UTxO.V0
21+
import Cardano.Ledger.Coin (CoinPerByte (..))
1622
import Cardano.Ledger.Conway (ConwayEra)
1723
import Cardano.Ledger.Conway.Governance (Constitution (..))
24+
import Cardano.Ledger.Conway.PParams (ConwayPParams (..), DRepVotingThresholds (..), PoolVotingThresholds (..), THKD (..))
25+
import Cardano.Ledger.Core (PParams (..))
1826
import Cardano.SCLS.NamespaceCodec
27+
import Data.Function ((&))
1928

2029
type instance NamespaceEra "blocks/v0" = ConwayEra
2130

@@ -25,9 +34,94 @@ type instance NamespaceEra "utxo/v0" = ConwayEra
2534

2635
type instance NamespaceEra "gov/constitution/v0" = ConwayEra
2736

37+
type instance NamespaceEra "gov/pparams/v0" = ConwayEra
38+
39+
type instance NamespaceEra "utxo/v0" = ConwayEra
40+
2841
instance KnownNamespace "utxo/v0" where
2942
type NamespaceKey "utxo/v0" = UtxoIn
3043
type NamespaceEntry "utxo/v0" = UtxoOut ConwayEra
3144

3245
mkCanonicalConstitution :: Constitution era -> CanonicalConstitution
3346
mkCanonicalConstitution Constitution {..} = CanonicalConstitution {..}
47+
48+
instance MkCanonicalPParams (PParams ConwayEra) where
49+
mkCanonicalPParams (PParams ConwayPParams {..}) =
50+
CanonicalPParams
51+
{ ccppA0 = unTHKD cppA0
52+
, ccppTxFeePerByte = CanonicalCoin $ unCoinPerByte $ unTHKD cppTxFeePerByte
53+
, ccppTxFeeFixed = CanonicalCoin $ unTHKD cppTxFeeFixed
54+
, ccppMaxBBSize = unTHKD cppMaxBBSize
55+
, ccppMaxTxSize = unTHKD cppMaxTxSize
56+
, ccppMaxBHSize = unTHKD cppMaxBHSize
57+
, ccppKeyDeposit = CanonicalCoin $ unTHKD cppKeyDeposit
58+
, ccppPoolDeposit = CanonicalCoin $ unTHKD cppPoolDeposit
59+
, ccppEMax = unTHKD cppEMax
60+
, ccppNOpt = unTHKD cppNOpt
61+
, ccppRho = unTHKD cppRho
62+
, ccppTau = unTHKD cppTau
63+
, ccppMinPoolCost = CanonicalCoin $ unTHKD cppMinPoolCost
64+
, ccppCoinsPerUTxOByte = CanonicalCoin $ unCoinPerByte $ unTHKD cppCoinsPerUTxOByte
65+
, ccppCostModels = mkCanonicalCostModels $ unTHKD cppCostModels
66+
, ccppPrices = mkCanonicalPrices $ unTHKD cppPrices
67+
, ccppMaxTxExUnits = unTHKD cppMaxTxExUnits & unOrdExUnits & mkCanonicalExUnits
68+
, ccppMaxBlockExUnits = unTHKD cppMaxBlockExUnits & unOrdExUnits & mkCanonicalExUnits
69+
, ccppMaxValSize = unTHKD cppMaxValSize
70+
, ccppCollateralPercentage = unTHKD cppCollateralPercentage
71+
, ccppMaxCollateralInputs = unTHKD cppMaxCollateralInputs
72+
, ccppPoolVotingThresholds = mkCanonicalPoolVotingThresholds $ unTHKD cppPoolVotingThresholds
73+
, ccppDRepVotingThresholds = mkCanonicalDRepVotingThresholds $ unTHKD cppDRepVotingThresholds
74+
, ccppCommitteeMinSize = unTHKD cppCommitteeMinSize
75+
, ccppCommitteeMaxTermLength = unTHKD cppCommitteeMaxTermLength
76+
, ccppGovActionLifetime = unTHKD cppGovActionLifetime
77+
, ccppGovActionDeposit = CanonicalCoin $ unTHKD cppGovActionDeposit
78+
, ccppDRepDeposit = CanonicalCoin $ unTHKD cppDRepDeposit
79+
, ccppDRepActivity = unTHKD cppDRepActivity
80+
, ccppMinFeeRefScriptCostPerByte = unTHKD cppMinFeeRefScriptCostPerByte
81+
}
82+
83+
instance FromCanonicalPParams (PParams ConwayEra) where
84+
type FromCanonicalPParamsExtra (PParams ConwayEra) = ProtVer
85+
fromCanonicalPParams protocolVersion CanonicalPParams {..} =
86+
PParams
87+
ConwayPParams
88+
{ cppA0 = THKD ccppA0
89+
, cppTxFeePerByte = THKD (CoinPerByte $ unCoin ccppTxFeePerByte)
90+
, cppTxFeeFixed = THKD (unCoin ccppTxFeeFixed)
91+
, cppMaxBBSize = THKD ccppMaxBBSize
92+
, cppMaxTxSize = THKD ccppMaxTxSize
93+
, cppMaxBHSize = THKD ccppMaxBHSize
94+
, cppKeyDeposit = THKD (unCoin ccppKeyDeposit)
95+
, cppPoolDeposit = THKD (unCoin ccppPoolDeposit)
96+
, cppEMax = THKD ccppEMax
97+
, cppNOpt = THKD ccppNOpt
98+
, cppRho = THKD ccppRho
99+
, cppTau = THKD ccppTau
100+
, cppProtocolVersion = protocolVersion
101+
, cppMinPoolCost = THKD (unCoin ccppMinPoolCost)
102+
, cppCoinsPerUTxOByte = THKD (CoinPerByte $ unCoin ccppCoinsPerUTxOByte)
103+
, cppCostModels = THKD (fromCanonicalCostModels ccppCostModels)
104+
, cppPrices = THKD (fromCanonicalPrices ccppPrices)
105+
, cppMaxTxExUnits = THKD (ccppMaxTxExUnits & fromCanonicalExUnits & OrdExUnits)
106+
, cppMaxBlockExUnits = THKD (ccppMaxBlockExUnits & fromCanonicalExUnits & OrdExUnits)
107+
, cppMaxValSize = THKD ccppMaxValSize
108+
, cppCollateralPercentage = THKD ccppCollateralPercentage
109+
, cppMaxCollateralInputs = THKD ccppMaxCollateralInputs
110+
, cppPoolVotingThresholds = THKD (fromCanonicalPoolVotingThresholds ccppPoolVotingThresholds)
111+
, cppDRepVotingThresholds = THKD (fromCanonicalDRepVotingThresholds ccppDRepVotingThresholds)
112+
, cppCommitteeMinSize = THKD ccppCommitteeMinSize
113+
, cppCommitteeMaxTermLength = THKD ccppCommitteeMaxTermLength
114+
, cppGovActionLifetime = THKD ccppGovActionLifetime
115+
, cppGovActionDeposit = THKD (unCoin ccppGovActionDeposit)
116+
, cppDRepDeposit = THKD (unCoin ccppDRepDeposit)
117+
, cppDRepActivity = THKD ccppDRepActivity
118+
, cppMinFeeRefScriptCostPerByte = THKD ccppMinFeeRefScriptCostPerByte
119+
}
120+
121+
instance IsCanonicalDRepVotingThresholds DRepVotingThresholds where
122+
mkCanonicalDRepVotingThresholds DRepVotingThresholds {..} = CanonicalDRepVotingThresholds {..}
123+
fromCanonicalDRepVotingThresholds CanonicalDRepVotingThresholds {..} = DRepVotingThresholds {..}
124+
125+
instance IsCanonicalPoolVotingThresholds PoolVotingThresholds where
126+
fromCanonicalPoolVotingThresholds CanonicalPoolVotingThresholds {..} = PoolVotingThresholds {..}
127+
mkCanonicalPoolVotingThresholds PoolVotingThresholds {..} = CanonicalPoolVotingThresholds {..}

libs/cardano-ledger-canonical-state/src/Cardano/Ledger/CanonicalState/BasicTypes.hs

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,20 @@
1313
{-# LANGUAGE TypeApplications #-}
1414
{-# LANGUAGE TypeOperators #-}
1515
{-# LANGUAGE UndecidableInstances #-}
16+
{-# LANGUAGE ViewPatterns #-}
1617
{-# OPTIONS_GHC -Wno-orphans #-}
1718

1819
module Cardano.Ledger.CanonicalState.BasicTypes (
1920
OnChain (..),
2021
DecodeOnChain (..),
2122
CanonicalCoin (..),
23+
CanonicalExUnits (..),
24+
mkCanonicalExUnits,
25+
fromCanonicalExUnits,
2226
) where
2327

2428
import qualified Cardano.Crypto.Hash as Hash
25-
import Cardano.Ledger.BaseTypes (Anchor (..), SlotNo (..), StrictMaybe (..))
29+
import Cardano.Ledger.BaseTypes (Anchor (..), SlotNo (..), StrictMaybe (..), UnitInterval, NonNegativeInterval, EpochInterval)
2630
import Cardano.Ledger.CanonicalState.LedgerCBOR
2731
import Cardano.Ledger.CanonicalState.Namespace (Era, NamespaceEra)
2832
import Cardano.Ledger.Coin (Coin (..), CompactForm (CompactCoin))
@@ -36,6 +40,7 @@ import Cardano.SCLS.CBOR.Canonical.Decoder (
3640
peekTokenType,
3741
)
3842
import Cardano.SCLS.CBOR.Canonical.Encoder (ToCanonicalCBOR (..))
43+
import Cardano.Ledger.Plutus.ExUnits (ExUnits (..), ExUnits' (..))
3944
import Cardano.SCLS.Versioned
4045
import qualified Codec.CBOR.Decoding as D
4146
import qualified Data.ByteString as BS (ByteString)
@@ -162,3 +167,53 @@ instance (Era era, NamespaceEra v ~ era, Typeable kr) => FromCanonicalCBOR v (Cr
162167
0 -> fmap ScriptHashObj <$> fromCanonicalCBOR @v
163168
1 -> fmap KeyHashObj <$> fromCanonicalCBOR @v
164169
_ -> fail "Invalid Credential tag"
170+
171+
deriving via
172+
LedgerCBOR v UnitInterval
173+
instance
174+
(Era era, NamespaceEra v ~ era) => ToCanonicalCBOR v UnitInterval
175+
176+
deriving via
177+
LedgerCBOR v UnitInterval
178+
instance
179+
(Era era, NamespaceEra v ~ era) => FromCanonicalCBOR v UnitInterval
180+
181+
deriving via
182+
LedgerCBOR v NonNegativeInterval
183+
instance
184+
(Era era, NamespaceEra v ~ era) => ToCanonicalCBOR v NonNegativeInterval
185+
186+
deriving via
187+
LedgerCBOR v NonNegativeInterval
188+
instance
189+
(Era era, NamespaceEra v ~ era) => FromCanonicalCBOR v NonNegativeInterval
190+
191+
deriving via
192+
LedgerCBOR v EpochInterval
193+
instance
194+
(Era era, NamespaceEra v ~ era) => ToCanonicalCBOR v EpochInterval
195+
196+
deriving via
197+
LedgerCBOR v EpochInterval
198+
instance
199+
(Era era, NamespaceEra v ~ era) => FromCanonicalCBOR v EpochInterval
200+
201+
data CanonicalExUnits = CanonicalExUnits
202+
{ exUnitsMem' :: !Natural
203+
, exUnitsSteps' :: !Natural
204+
}
205+
deriving (Eq, Show, Generic)
206+
207+
instance ToCanonicalCBOR v CanonicalExUnits where
208+
toCanonicalCBOR v CanonicalExUnits {..} = toCanonicalCBOR v (exUnitsMem', exUnitsSteps')
209+
210+
instance FromCanonicalCBOR v CanonicalExUnits where
211+
fromCanonicalCBOR = do
212+
Versioned (exUnitsMem', exUnitsSteps') <- fromCanonicalCBOR @v
213+
return $ Versioned CanonicalExUnits {..}
214+
215+
mkCanonicalExUnits :: ExUnits -> CanonicalExUnits
216+
mkCanonicalExUnits (unWrapExUnits -> ExUnits' {..}) = CanonicalExUnits {..}
217+
218+
fromCanonicalExUnits :: CanonicalExUnits -> ExUnits
219+
fromCanonicalExUnits CanonicalExUnits {..} = WrapExUnits ExUnits' {..}

0 commit comments

Comments
 (0)