|
8 | 8 | {-# LANGUAGE InstanceSigs #-} |
9 | 9 | {-# LANGUAGE LambdaCase #-} |
10 | 10 | {-# LANGUAGE MultiParamTypeClasses #-} |
| 11 | +{-# LANGUAGE NamedFieldPuns #-} |
11 | 12 | {-# LANGUAGE OverloadedStrings #-} |
12 | 13 | {-# LANGUAGE RankNTypes #-} |
13 | 14 | {-# LANGUAGE RecordWildCards #-} |
@@ -99,6 +100,7 @@ import Cardano.Ledger.BaseTypes ( |
99 | 100 | ProtVer (ProtVer), |
100 | 101 | UnitInterval, |
101 | 102 | integralToBounded, |
| 103 | + strictMaybeToMaybe, |
102 | 104 | ) |
103 | 105 | import Cardano.Ledger.Binary ( |
104 | 106 | DecCBOR (..), |
@@ -131,8 +133,11 @@ import Control.DeepSeq (NFData (..), rwhnf) |
131 | 133 | import Data.Aeson hiding (Encoding, Value, decode, encode) |
132 | 134 | import qualified Data.Aeson as Aeson |
133 | 135 | import Data.Default (Default (def)) |
| 136 | +import Data.Foldable (foldlM) |
134 | 137 | import Data.Functor.Identity (Identity) |
| 138 | +import qualified Data.IntMap as IntMap |
135 | 139 | import qualified Data.Map.Strict as Map |
| 140 | +import Data.Maybe (mapMaybe) |
136 | 141 | import Data.Maybe.Strict (StrictMaybe (..)) |
137 | 142 | import Data.Proxy |
138 | 143 | import Data.Set (Set) |
@@ -161,6 +166,30 @@ class BabbageEraPParams era => ConwayEraPParams era where |
161 | 166 | hkdMinFeeRefScriptCostPerByteL :: |
162 | 167 | HKDFunctor f => Lens' (PParamsHKD f era) (HKD f NonNegativeInterval) |
163 | 168 |
|
| 169 | +instance ConwayEraPParams era => ToPlutusData (PParamsUpdate era) where |
| 170 | + toPlutusData ppu = P.Map $ mapMaybe ppToData (eraPParams @era) |
| 171 | + where |
| 172 | + ppToData PParam' {ppUpdate} = do |
| 173 | + PParamUpdate {ppuTag, ppuLens} <- ppUpdate |
| 174 | + t <- strictMaybeToMaybe $ ppu ^. ppuLens |
| 175 | + pure (P.I (toInteger @Word ppuTag), toPlutusData t) |
| 176 | + |
| 177 | + fromPlutusData (P.Map dataPairs) = foldlM accum emptyPParamsUpdate dataPairs |
| 178 | + where |
| 179 | + accum acc (dataKey, dataVal) = do |
| 180 | + tag <- fromPlutusData @Word dataKey |
| 181 | + PParam' {ppUpdate} <- |
| 182 | + IntMap.lookup (fromIntegral tag) ppMap |
| 183 | + PParamUpdate {ppuLens} <- ppUpdate |
| 184 | + plutusData <- fromPlutusData dataVal |
| 185 | + pure $ set ppuLens (SJust plutusData) acc |
| 186 | + ppMap = |
| 187 | + IntMap.fromList |
| 188 | + [ (fromIntegral ppuTag, pp) |
| 189 | + | pp@PParam' {ppUpdate = Just PParamUpdate {ppuTag}} <- eraPParams @era |
| 190 | + ] |
| 191 | + fromPlutusData _ = Nothing |
| 192 | + |
164 | 193 | ppPoolVotingThresholdsL :: |
165 | 194 | forall era. ConwayEraPParams era => Lens' (PParams era) PoolVotingThresholds |
166 | 195 | ppPoolVotingThresholdsL = ppLensHKD . hkdPoolVotingThresholdsL @era @Identity |
|
0 commit comments