/
Core.hs
171 lines (137 loc) · 5.83 KB
/
Core.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ConstrainedClassMethods #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE UndecidableSuperClasses #-}
module Cardano.Ledger.Alonzo.Core (
AlonzoEraTxOut (..),
AlonzoEraTxBody (..),
ScriptIntegrityHash,
AlonzoEraPParams (..),
CoinPerWord (..),
ppCoinsPerUTxOWordL,
ppCostModelsL,
ppPricesL,
ppMaxTxExUnitsL,
ppMaxBlockExUnitsL,
ppMaxValSizeL,
ppCollateralPercentageL,
ppMaxCollateralInputsL,
ppuCoinsPerUTxOWordL,
ppuCostModelsL,
ppuPricesL,
ppuMaxTxExUnitsL,
ppuMaxBlockExUnitsL,
ppuMaxValSizeL,
ppuCollateralPercentageL,
ppuMaxCollateralInputsL,
module Cardano.Ledger.Mary.Core,
)
where
import Cardano.Ledger.Alonzo.Era (AlonzoEra)
import Cardano.Ledger.Alonzo.Scripts (CostModels, ExUnits, Prices)
import Cardano.Ledger.Alonzo.Scripts.Data (Datum)
import Cardano.Ledger.BaseTypes (Network)
import Cardano.Ledger.Binary (DecCBOR, EncCBOR)
import Cardano.Ledger.Coin (Coin (Coin))
import Cardano.Ledger.HKD (HKD, HKDFunctor)
import Cardano.Ledger.Hashes
import Cardano.Ledger.Keys (KeyHash (..), KeyRole (..))
import Cardano.Ledger.Mary.Core
import Cardano.Ledger.SafeHash (SafeHash)
import Cardano.Ledger.TxIn (TxIn (..))
import Control.DeepSeq (NFData)
import Data.Aeson (FromJSON, ToJSON)
import Data.Functor.Identity (Identity)
import Data.Maybe.Strict (StrictMaybe)
import Data.Set (Set)
import Data.TreeDiff.Class (ToExpr)
import Lens.Micro (Lens', SimpleGetter)
import NoThunks.Class (NoThunks)
import Numeric.Natural (Natural)
type ScriptIntegrityHash c = SafeHash c EraIndependentScriptIntegrity
class (AlonzoEraPParams era, EraTxOut era) => AlonzoEraTxOut era where
dataHashTxOutL :: Lens' (TxOut era) (StrictMaybe (DataHash (EraCrypto era)))
datumTxOutF :: SimpleGetter (TxOut era) (Datum era)
class (MaryEraTxBody era, AlonzoEraTxOut era) => AlonzoEraTxBody era where
collateralInputsTxBodyL :: Lens' (TxBody era) (Set (TxIn (EraCrypto era)))
reqSignerHashesTxBodyL :: Lens' (TxBody era) (Set (KeyHash 'Witness (EraCrypto era)))
scriptIntegrityHashTxBodyL ::
Lens' (TxBody era) (StrictMaybe (ScriptIntegrityHash (EraCrypto era)))
networkIdTxBodyL :: Lens' (TxBody era) (StrictMaybe Network)
newtype CoinPerWord = CoinPerWord {unCoinPerWord :: Coin}
deriving stock (Eq, Ord)
deriving newtype (EncCBOR, DecCBOR, ToJSON, FromJSON, NFData, NoThunks, ToExpr, Show)
class EraPParams era => AlonzoEraPParams era where
hkdCoinsPerUTxOWordL ::
(HKDFunctor f, ExactEra AlonzoEra era) =>
Lens' (PParamsHKD f era) (HKD f CoinPerWord)
hkdCostModelsL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f CostModels)
hkdPricesL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f Prices)
hkdMaxTxExUnitsL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f ExUnits)
hkdMaxBlockExUnitsL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f ExUnits)
hkdMaxValSizeL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f Natural)
hkdCollateralPercentageL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f Natural)
hkdMaxCollateralInputsL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f Natural)
ppCoinsPerUTxOWordL ::
forall era.
(AlonzoEraPParams era, ExactEra AlonzoEra era) =>
Lens' (PParams era) CoinPerWord
ppCoinsPerUTxOWordL = ppLens . hkdCoinsPerUTxOWordL @era @Identity
ppCostModelsL :: forall era. AlonzoEraPParams era => Lens' (PParams era) CostModels
ppCostModelsL = ppLens . hkdCostModelsL @era @Identity
ppPricesL :: forall era. AlonzoEraPParams era => Lens' (PParams era) Prices
ppPricesL = ppLens . hkdPricesL @era @Identity
ppMaxTxExUnitsL :: forall era. AlonzoEraPParams era => Lens' (PParams era) ExUnits
ppMaxTxExUnitsL = ppLens . hkdMaxTxExUnitsL @era @Identity
ppMaxBlockExUnitsL :: forall era. AlonzoEraPParams era => Lens' (PParams era) ExUnits
ppMaxBlockExUnitsL = ppLens . hkdMaxBlockExUnitsL @era @Identity
ppMaxValSizeL :: forall era. AlonzoEraPParams era => Lens' (PParams era) Natural
ppMaxValSizeL = ppLens . hkdMaxValSizeL @era @Identity
ppCollateralPercentageL :: forall era. AlonzoEraPParams era => Lens' (PParams era) Natural
ppCollateralPercentageL = ppLens . hkdCollateralPercentageL @era @Identity
ppMaxCollateralInputsL :: forall era. AlonzoEraPParams era => Lens' (PParams era) Natural
ppMaxCollateralInputsL = ppLens . hkdMaxCollateralInputsL @era @Identity
ppuCoinsPerUTxOWordL ::
forall era.
(AlonzoEraPParams era, ExactEra AlonzoEra era) =>
Lens' (PParamsUpdate era) (StrictMaybe CoinPerWord)
ppuCoinsPerUTxOWordL = ppuLens . hkdCoinsPerUTxOWordL @era @StrictMaybe
ppuCostModelsL ::
forall era.
AlonzoEraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe CostModels)
ppuCostModelsL = ppuLens . hkdCostModelsL @era @StrictMaybe
ppuPricesL ::
forall era.
AlonzoEraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe Prices)
ppuPricesL = ppuLens . hkdPricesL @era @StrictMaybe
ppuMaxTxExUnitsL ::
forall era.
AlonzoEraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe ExUnits)
ppuMaxTxExUnitsL = ppuLens . hkdMaxTxExUnitsL @era @StrictMaybe
ppuMaxBlockExUnitsL ::
forall era.
AlonzoEraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe ExUnits)
ppuMaxBlockExUnitsL = ppuLens . hkdMaxBlockExUnitsL @era @StrictMaybe
ppuMaxValSizeL ::
forall era.
AlonzoEraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe Natural)
ppuMaxValSizeL = ppuLens . hkdMaxValSizeL @era @StrictMaybe
ppuCollateralPercentageL ::
forall era.
AlonzoEraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe Natural)
ppuCollateralPercentageL = ppuLens . hkdCollateralPercentageL @era @StrictMaybe
ppuMaxCollateralInputsL ::
forall era.
AlonzoEraPParams era =>
Lens' (PParamsUpdate era) (StrictMaybe Natural)
ppuMaxCollateralInputsL = ppuLens . hkdMaxCollateralInputsL @era @StrictMaybe