1111-- This type is the persistent node representation used by the update state. It
1212-- is distinct from the @concordium-base@ public/wire @ChainParameters'@ view.
1313-- The aggregate public/wire type is only used at conversion boundaries; the
14- -- persistent storage model has its own record fields and a P11-and-onwards
14+ -- persistent storage model has its own record fields and a
1515-- Rust-managed external chain-parameters pointer.
1616module Concordium.GlobalState.Persistent.BlockState.Parameters (
1717 PersistentChainParameters ,
@@ -24,7 +24,6 @@ module Concordium.GlobalState.Persistent.BlockState.Parameters (
2424) where
2525
2626import Control.Monad.IO.Class
27- import Data.Bool.Singletons
2827import qualified Data.ByteString as BS
2928import qualified Data.Serialize as S
3029import Data.Singletons
@@ -38,7 +37,7 @@ import Concordium.Types.HashableTo
3837import Concordium.Types.Parameters
3938
4039-- | Persistent node-owned chain parameters.
41- data PersistentChainParameters' cpv auv = PersistentChainParameters
40+ data PersistentChainParameters' ( pv :: ProtocolVersion ) cpv auv = PersistentChainParameters
4241 { -- | Consensus parameters.
4342 pcpConsensusParameters :: ! (ConsensusParameters cpv ),
4443 -- | Exchange rates.
@@ -59,19 +58,19 @@ data PersistentChainParameters' cpv auv = PersistentChainParameters
5958 pcpFinalizationCommitteeParameters :: ! (OParam 'PTFinalizationCommitteeParameters cpv FinalizationCommitteeParameters ),
6059 -- | Validator score parameters.
6160 pcpValidatorScoreParameters :: ! (OParam 'PTValidatorScoreParameters cpv ValidatorScoreParameters ),
62- -- | Rust-managed external chain parameters, present for P11-and-onwards authorization versions .
63- pcpExternalChainParameters :: ! (Conditionally (SupportsTokenParameters auv ) ECP. ForeignExternalChainParametersPtr )
61+ -- | Rust-managed external chain parameters, present when token parameters are supported .
62+ pcpExternalChainParameters :: ! (Conditionally (SupportsTokenParameters auv ) ( ECP. ForeignExternalChainParametersPtr pv ) )
6463 }
6564
6665-- | Protocol-indexed persistent node-owned chain parameters.
67- type PersistentChainParameters pv = PersistentChainParameters' (ChainParametersVersionFor pv ) (AuthorizationsVersionFor pv )
66+ type PersistentChainParameters pv = PersistentChainParameters' pv (ChainParametersVersionFor pv ) (AuthorizationsVersionFor pv )
6867
6968-- | Convert a public/wire chain-parameter view and external pointer into the
7069-- persistent node representation.
7170fromChainParameters ::
7271 ChainParameters' cpv ->
73- Conditionally (SupportsTokenParameters auv ) ECP. ForeignExternalChainParametersPtr ->
74- PersistentChainParameters' cpv auv
72+ Conditionally (SupportsTokenParameters auv ) ( ECP. ForeignExternalChainParametersPtr pv ) ->
73+ PersistentChainParameters' pv cpv auv
7574fromChainParameters ChainParameters {.. } pcpExternalChainParameters =
7675 PersistentChainParameters
7776 { pcpConsensusParameters = _cpConsensusParameters,
@@ -89,28 +88,35 @@ fromChainParameters ChainParameters{..} pcpExternalChainParameters =
8988
9089-- | Construct persistent chain parameters from the public/wire view.
9190makePersistentChainParameters ::
92- forall m cpv auv .
93- (MonadBlobStore m , IsAuthorizationsVersion auv ) =>
94- ChainParameters' cpv ->
95- m (PersistentChainParameters' cpv auv )
91+ forall m pv .
92+ (MonadBlobStore m , IsProtocolVersion pv ) =>
93+ ChainParameters pv ->
94+ m (PersistentChainParameters pv )
9695makePersistentChainParameters chainParameters = do
97- externalChainParameters <- makeInitialExternalChainParameters @ m @ cpv @ auv chainParameters
96+ externalChainParameters <- makeInitialExternalChainParameters @ m @ pv chainParameters
9897 return $ fromChainParameters chainParameters externalChainParameters
9998
10099-- | Construct initial external chain parameters from the public chain-parameter view.
101100makeInitialExternalChainParameters ::
102- forall m cpv auv .
103- (MonadBlobStore m , IsAuthorizationsVersion auv ) =>
104- ChainParameters' cpv ->
105- m (Conditionally (SupportsTokenParameters auv ) ECP. ForeignExternalChainParametersPtr )
106- makeInitialExternalChainParameters ChainParameters {.. } =
107- case sSupportsTokenParameters (authorizationsVersion @ auv ) of
108- SFalse -> return CFalse
109- STrue ->
110- CTrue <$> case _cpMaxLockDuration of
111- SomeParam (Just duration) -> ECP. p11NewExternalChainParameters duration
112- SomeParam Nothing -> error " P11 external chain parameters require max lock duration"
113- NoParam -> error " P11 external chain parameters require max lock duration"
101+ forall m pv .
102+ (MonadBlobStore m , IsProtocolVersion pv ) =>
103+ ChainParameters pv ->
104+ m (Conditionally (SupportsTokenParameters (AuthorizationsVersionFor pv )) (ECP. ForeignExternalChainParametersPtr pv ))
105+ makeInitialExternalChainParameters chainParameters = case protocolVersion @ pv of
106+ SP1 -> return CFalse
107+ SP2 -> return CFalse
108+ SP3 -> return CFalse
109+ SP4 -> return CFalse
110+ SP5 -> return CFalse
111+ SP6 -> return CFalse
112+ SP7 -> return CFalse
113+ SP8 -> return CFalse
114+ SP9 -> return CFalse
115+ SP10 -> return CFalse
116+ SP11 ->
117+ CTrue <$> case _cpMaxLockDuration chainParameters of
118+ SomeParam (Just duration) -> ECP. p11NewExternalChainParameters duration
119+ SomeParam Nothing -> error " P11 external chain parameters require max lock duration"
114120
115121-- | Placeholder public-view value for the max-lock-duration field.
116122--
@@ -125,19 +131,19 @@ maxLockDurationPlaceholder = \case
125131-- | Convert persistent chain parameters to the public/wire view, using the
126132-- placeholder external fields.
127133persistentChainParametersToChainParameters ::
128- forall cpv auv .
134+ forall pv cpv auv .
129135 (IsChainParametersVersion cpv ) =>
130- PersistentChainParameters' cpv auv ->
136+ PersistentChainParameters' pv cpv auv ->
131137 ChainParameters' cpv
132138persistentChainParametersToChainParameters params =
133139 makeChainParametersView params (maxLockDurationPlaceholder (chainParametersVersion @ cpv ))
134140
135141-- | Convert persistent chain parameters to the public/wire view, sourcing
136142-- externally-managed fields from the external chain-parameters component when present.
137143persistentChainParametersToChainParametersM ::
138- forall m cpv auv .
144+ forall m pv cpv auv .
139145 (MonadIO m , IsChainParametersVersion cpv ) =>
140- PersistentChainParameters' cpv auv ->
146+ PersistentChainParameters' pv cpv auv ->
141147 m (ChainParameters' cpv )
142148persistentChainParametersToChainParametersM params@ PersistentChainParameters {.. } = do
143149 maxLockDuration <- case pcpExternalChainParameters of
@@ -152,7 +158,7 @@ persistentChainParametersToChainParametersM params@PersistentChainParameters{..}
152158-- | Construct the public/wire view from persistent fields and a supplied
153159-- max-lock-duration value.
154160makeChainParametersView ::
155- PersistentChainParameters' cpv auv ->
161+ PersistentChainParameters' pv cpv auv ->
156162 OParam 'PTMaxLockDuration cpv (Maybe Duration ) ->
157163 ChainParameters' cpv
158164makeChainParametersView PersistentChainParameters {.. } maxLockDuration =
@@ -174,25 +180,25 @@ makeChainParametersView PersistentChainParameters{..} maxLockDuration =
174180-- Rust-managed external chain-parameters pointer.
175181updateChainParameters ::
176182 ChainParameters' cpv ->
177- PersistentChainParameters' cpv auv ->
178- PersistentChainParameters' cpv auv
183+ PersistentChainParameters' pv cpv auv ->
184+ PersistentChainParameters' pv cpv auv
179185updateChainParameters newChainParameters PersistentChainParameters {.. } =
180186 fromChainParameters newChainParameters pcpExternalChainParameters
181187
182188-- | Apply a max-lock-duration update to the Rust-managed external chain-parameters component.
183189updateMaxLockDuration ::
184190 (MonadIO m ) =>
185191 Duration ->
186- PersistentChainParameters' cpv auv ->
187- m (PersistentChainParameters' cpv auv )
192+ PersistentChainParameters' pv cpv auv ->
193+ m (PersistentChainParameters' pv cpv auv )
188194updateMaxLockDuration duration params@ PersistentChainParameters {pcpExternalChainParameters = CTrue external} = do
189195 liftIO $ ECP. applyMaxLockDurationUpdate external duration
190196 return params
191197updateMaxLockDuration _ PersistentChainParameters {pcpExternalChainParameters = CFalse } =
192198 error " Max lock duration update requires external chain parameters"
193199
194200-- | Serialize persistent chain parameters.
195- putPersistentChainParameters :: forall cpv auv . (IsChainParametersVersion cpv ) => S. Putter (PersistentChainParameters' cpv auv )
201+ putPersistentChainParameters :: forall pv cpv auv . (IsChainParametersVersion cpv ) => S. Putter (PersistentChainParameters' pv cpv auv )
196202putPersistentChainParameters PersistentChainParameters {.. } = do
197203 withIsConsensusParametersVersionFor (chainParametersVersion @ cpv ) $ S. put pcpConsensusParameters
198204 S. put pcpExchangeRates
@@ -224,8 +230,8 @@ getPersistentChainParametersFields = do
224230 return ChainParameters {.. }
225231
226232instance
227- (MonadBlobStore m , IsChainParametersVersion cpv , IsAuthorizationsVersion auv ) =>
228- BlobStorable m (PersistentChainParameters' cpv auv )
233+ (MonadBlobStore m , IsProtocolVersion pv , IsChainParametersVersion cpv , IsAuthorizationsVersion auv ) =>
234+ BlobStorable m (PersistentChainParameters' pv cpv auv )
229235 where
230236 storeUpdate params@ PersistentChainParameters {.. } = do
231237 (pExternal :: S. Put , external' ) <- case pcpExternalChainParameters of
@@ -249,15 +255,15 @@ instance
249255
250256instance
251257 (MonadBlobStore m ) =>
252- Cacheable m (PersistentChainParameters' cpv auv )
258+ Cacheable m (PersistentChainParameters' pv cpv auv )
253259 where
254260 cache params@ PersistentChainParameters {.. } = do
255261 external' <- traverse cache pcpExternalChainParameters
256262 return params{pcpExternalChainParameters = external'}
257263
258264instance
259265 (MonadBlobStore m , IsChainParametersVersion cpv ) =>
260- MHashableTo m H. Hash (PersistentChainParameters' cpv auv )
266+ MHashableTo m H. Hash (PersistentChainParameters' pv cpv auv )
261267 where
262268 getHashM params@ PersistentChainParameters {.. } = do
263269 hExternal <- traverse (getHashM @ _ @ ECP. ExternalChainParametersHash ) pcpExternalChainParameters
0 commit comments