@@ -91,23 +91,28 @@ import Cardano.Ledger.BaseTypes (
91
91
maybeToStrictMaybe ,
92
92
)
93
93
import Cardano.Ledger.Binary
94
+ import Cardano.Ledger.Binary.Coders
94
95
import Cardano.Ledger.Coin (Coin (.. ))
95
- import Cardano.Ledger.Core.Era (Era (.. ), PreviousEra , ProtVerAtMost , toEraCBOR )
96
+ import Cardano.Ledger.Core.Era (Era (.. ), PreviousEra , ProtVerAtMost , fromEraCBOR , toEraCBOR )
96
97
import Cardano.Ledger.HKD (HKD , HKDApplicative , HKDFunctor (.. ), NoUpdate (.. ))
97
98
import Cardano.Ledger.Plutus.ToPlutusData (ToPlutusData (.. ))
98
99
import Control.DeepSeq (NFData )
99
100
import Control.Monad.Identity (Identity )
100
101
import Data.Aeson (FromJSON , ToJSON )
101
- import Data.Data (Typeable )
102
102
import Data.Default (Default (.. ))
103
- import qualified Data.Foldable as F (foldMap' , foldl' )
103
+ import qualified Data.Foldable as F (foldMap' , foldl' , foldlM )
104
+ import Data.IntMap (IntMap )
105
+ import qualified Data.IntMap as IntMap
104
106
import Data.Kind (Type )
105
107
import Data.Map.Strict (Map )
106
108
import qualified Data.Map.Strict as Map
109
+ import Data.Proxy (Proxy (.. ))
107
110
import Data.Text (Text )
111
+ import qualified Data.Text as T
112
+ import Data.Typeable (typeRep )
108
113
import Data.Word (Word16 , Word32 )
109
114
import GHC.Generics (Generic (.. ), K1 (.. ), M1 (.. ), U1 , V1 , type (:*: ) (.. ))
110
- import Lens.Micro (Lens' , SimpleGetter , lens , (^.) )
115
+ import Lens.Micro (Lens' , SimpleGetter , lens , set , (^.) )
111
116
import NoThunks.Class (NoThunks )
112
117
113
118
-- | Protocol parameters
@@ -144,14 +149,21 @@ instance EraPParams era => EncCBOR (PParams era) where
144
149
where
145
150
toEnc PParam' {ppLens} = encCBOR $ pp ^. ppLens
146
151
147
- deriving newtype instance
148
- (Typeable era , DecCBOR (PParamsHKD Identity era )) => DecCBOR (PParams era )
152
+ instance EraPParams era => DecCBOR (PParams era ) where
153
+ decCBOR =
154
+ decodeRecordNamed
155
+ (T. pack . show . typeRep $ Proxy @ (PParams era ))
156
+ (const (fromIntegral (length (eraPParams @ era ))))
157
+ $ F. foldlM accum (emptyPParams @ era ) (eraPParams @ era )
158
+ where
159
+ accum acc PParam' {ppLens} =
160
+ set ppLens <$> decCBOR <*> pure acc
149
161
150
162
instance EraPParams era => ToCBOR (PParams era ) where
151
163
toCBOR = toEraCBOR @ era
152
164
153
- deriving newtype instance
154
- ( Typeable era , FromCBOR ( PParamsHKD Identity era )) => FromCBOR ( PParams era )
165
+ instance EraPParams era => FromCBOR ( PParams era ) where
166
+ fromCBOR = fromEraCBOR @ era
155
167
156
168
deriving instance Generic (PParams era )
157
169
@@ -189,14 +201,32 @@ instance EraPParams era => EncCBOR (PParamsUpdate era) where
189
201
SJust y -> (n + 1 , acc <> y)
190
202
SNothing -> (n, acc)
191
203
192
- deriving newtype instance
193
- (Typeable era , DecCBOR (PParamsHKD StrictMaybe era )) => DecCBOR (PParamsUpdate era )
204
+ instance EraPParams era => DecCBOR (PParamsUpdate era ) where
205
+ decCBOR =
206
+ decode $
207
+ SparseKeyed
208
+ (show . typeRep $ Proxy @ (PParamsUpdate era ))
209
+ emptyPParamsUpdate
210
+ updateField
211
+ []
212
+ where
213
+ updateField k =
214
+ IntMap. findWithDefault
215
+ (invalidField k)
216
+ (fromIntegral k)
217
+ updateFieldMap
218
+ updateFieldMap :: IntMap (Field (PParamsUpdate era ))
219
+ updateFieldMap =
220
+ IntMap. fromList
221
+ [ (fromIntegral ppuTag, field (set ppuLens . SJust ) From )
222
+ | PParam' {ppUpdate = Just PParamUpdate {ppuTag, ppuLens}} <- eraPParams @ era
223
+ ]
194
224
195
225
instance EraPParams era => ToCBOR (PParamsUpdate era ) where
196
226
toCBOR = toEraCBOR @ era
197
227
198
- deriving newtype instance
199
- ( Typeable era , FromCBOR ( PParamsHKD StrictMaybe era )) => FromCBOR ( PParamsUpdate era )
228
+ instance EraPParams era => FromCBOR ( PParamsUpdate era ) where
229
+ fromCBOR = fromEraCBOR @ era
200
230
201
231
deriving newtype instance
202
232
ToJSON (PParamsHKD StrictMaybe era ) => ToJSON (PParamsUpdate era )
@@ -252,17 +282,13 @@ class
252
282
, Ord (PParamsHKD Identity era )
253
283
, Show (PParamsHKD Identity era )
254
284
, NFData (PParamsHKD Identity era )
255
- , DecCBOR (PParamsHKD Identity era )
256
- , FromCBOR (PParamsHKD Identity era )
257
285
, NoThunks (PParamsHKD Identity era )
258
286
, ToJSON (PParamsHKD Identity era )
259
287
, FromJSON (PParamsHKD Identity era )
260
288
, Eq (PParamsHKD StrictMaybe era )
261
289
, Ord (PParamsHKD StrictMaybe era )
262
290
, Show (PParamsHKD StrictMaybe era )
263
291
, NFData (PParamsHKD StrictMaybe era )
264
- , DecCBOR (PParamsHKD StrictMaybe era )
265
- , FromCBOR (PParamsHKD StrictMaybe era )
266
292
, NoThunks (PParamsHKD StrictMaybe era )
267
293
, ToJSON (PParamsHKD StrictMaybe era )
268
294
) =>
0 commit comments