Skip to content

Commit e4234a1

Browse files
authored
Merge pull request #5104 from IntersectMBO/lehins/dijkstra-transition
Dijkstra Era Transition functionality
2 parents 0d55033 + a82d3fe commit e4234a1

File tree

17 files changed

+173
-41
lines changed

17 files changed

+173
-41
lines changed

eras/conway/impl/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## 1.20.0.0
44

5+
* Add default implementation for `tcConwayGenesisL`
6+
* Remove `tcDelegsL` and `tcInitialDRepsL`
7+
* Export `registerDRepsThenDelegs`
58
* Deprecated `toUpgradeConwayPParamsUpdatePairs` and `toConwayGenesisPairs`
69
* Add:
710
* `alonzoToConwayUtxosPredFailure`

eras/conway/impl/src/Cardano/Ledger/Conway/Transition.hs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE DefaultSignatures #-}
23
{-# LANGUAGE DeriveGeneric #-}
34
{-# LANGUAGE FlexibleContexts #-}
45
{-# LANGUAGE FlexibleInstances #-}
@@ -12,6 +13,7 @@ module Cardano.Ledger.Conway.Transition (
1213
ConwayEraTransition (..),
1314
TransitionConfig (..),
1415
toConwayTransitionConfigPairs,
16+
registerDRepsThenDelegs,
1517
) where
1618

1719
import Cardano.Ledger.Alonzo.Transition (toAlonzoTransitionConfigPairs)
@@ -21,15 +23,11 @@ import Cardano.Ledger.BaseTypes (toKeyValuePairs)
2123
import Cardano.Ledger.Conway.Era
2224
import Cardano.Ledger.Conway.Genesis (ConwayGenesis (..))
2325
import Cardano.Ledger.Conway.Rules.Deleg (processDelegation)
24-
import Cardano.Ledger.Conway.State (
25-
ConwayEraCertState (..),
26-
vsDRepsL,
27-
)
26+
import Cardano.Ledger.Conway.State (ConwayEraCertState (..), DRepState, vsDRepsL)
2827
import Cardano.Ledger.Conway.Translation ()
2928
import Cardano.Ledger.Conway.TxCert (Delegatee)
29+
import Cardano.Ledger.Core
3030
import Cardano.Ledger.Credential (Credential)
31-
import Cardano.Ledger.DRep (DRepState)
32-
import Cardano.Ledger.Keys (KeyRole (..))
3331
import Cardano.Ledger.Shelley.LedgerState (
3432
NewEpochState,
3533
esLStateL,
@@ -54,11 +52,11 @@ import Lens.Micro
5452
import NoThunks.Class (NoThunks (..))
5553

5654
class (EraTransition era, ConwayEraCertState era) => ConwayEraTransition era where
57-
tcDelegsL :: Lens' (TransitionConfig era) (ListMap (Credential 'Staking) Delegatee)
58-
59-
tcInitialDRepsL :: Lens' (TransitionConfig era) (ListMap (Credential 'DRepRole) DRepState)
60-
6155
tcConwayGenesisL :: Lens' (TransitionConfig era) ConwayGenesis
56+
default tcConwayGenesisL ::
57+
ConwayEraTransition (PreviousEra era) =>
58+
Lens' (TransitionConfig era) ConwayGenesis
59+
tcConwayGenesisL = tcPreviousEraConfigL . tcConwayGenesisL
6260

6361
registerDRepsThenDelegs ::
6462
ConwayEraTransition era =>
@@ -91,13 +89,17 @@ instance EraTransition ConwayEra where
9189
instance ConwayEraTransition ConwayEra where
9290
tcConwayGenesisL = lens ctcConwayGenesis (\g x -> g {ctcConwayGenesis = x})
9391

94-
tcDelegsL =
95-
protectMainnetLens "ConwayDelegs" null $
96-
tcConwayGenesisL . lens cgDelegs (\g x -> g {cgDelegs = x})
97-
98-
tcInitialDRepsL =
99-
protectMainnetLens "InitialDReps" null $
100-
tcConwayGenesisL . lens cgInitialDReps (\g x -> g {cgInitialDReps = x})
92+
tcDelegsL ::
93+
ConwayEraTransition era => Lens' (TransitionConfig era) (ListMap (Credential 'Staking) Delegatee)
94+
tcDelegsL =
95+
protectMainnetLens "ConwayDelegs" null $
96+
tcConwayGenesisL . lens cgDelegs (\g x -> g {cgDelegs = x})
97+
98+
tcInitialDRepsL ::
99+
ConwayEraTransition era => Lens' (TransitionConfig era) (ListMap (Credential 'DRepRole) DRepState)
100+
tcInitialDRepsL =
101+
protectMainnetLens "InitialDReps" null $
102+
tcConwayGenesisL . lens cgInitialDReps (\g x -> g {cgInitialDReps = x})
101103

102104
instance NoThunks (TransitionConfig ConwayEra)
103105

eras/dijkstra/cardano-ledger-dijkstra.cabal

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ library
3535
Cardano.Ledger.Dijkstra.State
3636
Cardano.Ledger.Dijkstra.State.CertState
3737
Cardano.Ledger.Dijkstra.State.Stake
38+
Cardano.Ledger.Dijkstra.Transition
3839
Cardano.Ledger.Dijkstra.Translation
3940
Cardano.Ledger.Dijkstra.Tx
4041
Cardano.Ledger.Dijkstra.TxAuxData
@@ -71,6 +72,7 @@ library
7172
-Wunused-packages
7273

7374
build-depends:
75+
aeson,
7476
base >=4.14 && <5,
7577
cardano-data,
7678
cardano-ledger-allegra,

eras/dijkstra/src/Cardano/Ledger/Dijkstra.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Cardano.Ledger.Dijkstra.Rules ()
1212
import Cardano.Ledger.Dijkstra.Scripts ()
1313
import Cardano.Ledger.Dijkstra.State.CertState ()
1414
import Cardano.Ledger.Dijkstra.State.Stake ()
15+
import Cardano.Ledger.Dijkstra.Transition ()
1516
import Cardano.Ledger.Dijkstra.Translation ()
1617
import Cardano.Ledger.Dijkstra.Tx ()
1718
import Cardano.Ledger.Dijkstra.TxBody ()
Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
1+
{-# LANGUAGE DeriveGeneric #-}
12
{-# LANGUAGE TypeFamilies #-}
23
{-# OPTIONS_GHC -Wno-orphans #-}
34

4-
module Cardano.Ledger.Dijkstra.Genesis () where
5+
module Cardano.Ledger.Dijkstra.Genesis (
6+
DijkstraGenesis (..),
7+
toDijkstraGenesisPairs,
8+
) where
59

610
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
7-
import Cardano.Ledger.Genesis (EraGenesis (..), NoGenesis)
11+
import Cardano.Ledger.Genesis (EraGenesis (..))
12+
import Data.Aeson (FromJSON, ToJSON)
13+
import GHC.Generics
14+
import NoThunks.Class (NoThunks)
15+
16+
-- TODO: Currently it is just a placeholder for all the new protocol parameters that will be added
17+
-- in the Dijkstra era
18+
data DijkstraGenesis = DijkstraGenesis
19+
deriving (Eq, Show, Generic)
20+
21+
instance ToJSON DijkstraGenesis
22+
23+
instance FromJSON DijkstraGenesis
24+
25+
instance NoThunks DijkstraGenesis
826

927
instance EraGenesis DijkstraEra where
10-
type Genesis DijkstraEra = NoGenesis DijkstraEra
28+
type Genesis DijkstraEra = DijkstraGenesis
29+
30+
-- TODO: Implement this and use for ToJSON instance
31+
toDijkstraGenesisPairs :: DijkstraGenesis -> [a]
32+
toDijkstraGenesisPairs _ = []
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE DeriveGeneric #-}
3+
{-# LANGUAGE FlexibleContexts #-}
4+
{-# LANGUAGE FlexibleInstances #-}
5+
{-# LANGUAGE OverloadedStrings #-}
6+
{-# LANGUAGE ScopedTypeVariables #-}
7+
{-# LANGUAGE TypeFamilies #-}
8+
{-# LANGUAGE UndecidableSuperClasses #-}
9+
{-# OPTIONS_GHC -Wno-orphans #-}
10+
11+
module Cardano.Ledger.Dijkstra.Transition (
12+
TransitionConfig (..),
13+
toDijkstraTransitionConfigPairs,
14+
) where
15+
16+
import Cardano.Ledger.Conway
17+
import Cardano.Ledger.Conway.Transition (
18+
ConwayEraTransition,
19+
registerDRepsThenDelegs,
20+
toConwayTransitionConfigPairs,
21+
)
22+
import Cardano.Ledger.Dijkstra.Era
23+
import Cardano.Ledger.Dijkstra.Genesis
24+
import Cardano.Ledger.Dijkstra.Translation ()
25+
import Cardano.Ledger.Shelley.Transition
26+
import Data.Aeson (
27+
FromJSON (..),
28+
KeyValue (..),
29+
ToJSON (..),
30+
Value (..),
31+
object,
32+
pairs,
33+
withObject,
34+
(.:),
35+
)
36+
import GHC.Generics
37+
import Lens.Micro
38+
import NoThunks.Class (NoThunks (..))
39+
40+
instance EraTransition DijkstraEra where
41+
data TransitionConfig DijkstraEra = DijkstraTransitionConfig
42+
{ dtcDijkstraGenesis :: !DijkstraGenesis
43+
, dtcConwayTransitionConfig :: !(TransitionConfig ConwayEra)
44+
}
45+
deriving (Show, Eq, Generic)
46+
47+
mkTransitionConfig = DijkstraTransitionConfig
48+
49+
injectIntoTestState cfg =
50+
registerDRepsThenDelegs cfg
51+
. registerInitialFundsThenStaking cfg
52+
53+
tcPreviousEraConfigL =
54+
lens dtcConwayTransitionConfig (\dtc pc -> dtc {dtcConwayTransitionConfig = pc})
55+
56+
tcTranslationContextL =
57+
lens dtcDijkstraGenesis (\dtc ag -> dtc {dtcDijkstraGenesis = ag})
58+
59+
instance ConwayEraTransition DijkstraEra
60+
61+
instance NoThunks (TransitionConfig DijkstraEra)
62+
63+
instance ToJSON (TransitionConfig DijkstraEra) where
64+
toJSON = object . toDijkstraTransitionConfigPairs
65+
toEncoding = pairs . mconcat . toDijkstraTransitionConfigPairs
66+
67+
toDijkstraTransitionConfigPairs :: KeyValue e a => TransitionConfig DijkstraEra -> [a]
68+
toDijkstraTransitionConfigPairs dijkstraConfig =
69+
toConwayTransitionConfigPairs conwayConfig
70+
++ ["dijkstra" .= object (toDijkstraGenesisPairs (dijkstraConfig ^. tcTranslationContextL))]
71+
where
72+
conwayConfig = dijkstraConfig ^. tcPreviousEraConfigL
73+
74+
instance FromJSON (TransitionConfig DijkstraEra) where
75+
parseJSON = withObject "DijkstraTransitionConfig" $ \o -> do
76+
pc <- parseJSON (Object o)
77+
ag <- o .: "dijkstra"
78+
pure $ mkTransitionConfig pc ag

eras/dijkstra/src/Cardano/Ledger/Dijkstra/Translation.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ import Cardano.Ledger.Core (
4646
)
4747
import qualified Cardano.Ledger.Core as Core
4848
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
49+
import Cardano.Ledger.Dijkstra.Genesis (DijkstraGenesis)
4950
import Cardano.Ledger.Dijkstra.Governance ()
5051
import Cardano.Ledger.Dijkstra.State.CertState ()
5152
import Cardano.Ledger.Dijkstra.Tx ()
5253
import Cardano.Ledger.Dijkstra.TxAuxData ()
5354
import Cardano.Ledger.Dijkstra.TxBody (upgradeGovAction, upgradeProposals)
5455
import Cardano.Ledger.Dijkstra.TxWits ()
55-
import Cardano.Ledger.Genesis (NoGenesis)
5656
import qualified Cardano.Ledger.Shelley.API as API
5757
import Cardano.Ledger.Shelley.LedgerState (
5858
DState (..),
@@ -70,7 +70,7 @@ import Data.Default (Default (..))
7070
import qualified Data.Map.Strict as Map
7171
import Lens.Micro ((&), (.~), (^.))
7272

73-
type instance TranslationContext DijkstraEra = NoGenesis DijkstraEra
73+
type instance TranslationContext DijkstraEra = DijkstraGenesis
7474

7575
newtype Tx era = Tx (Core.Tx era)
7676

eras/dijkstra/testlib/Test/Cardano/Ledger/Dijkstra/ImpTest.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Cardano.Ledger.Conway.Rules (
1616
)
1717
import Cardano.Ledger.Dijkstra (DijkstraEra)
1818
import Cardano.Ledger.Dijkstra.Core
19-
import Cardano.Ledger.Genesis (NoGenesis (..))
19+
import Cardano.Ledger.Dijkstra.Genesis (DijkstraGenesis (..))
2020
import Cardano.Ledger.Plutus (SLanguage (..))
2121
import Cardano.Ledger.Shelley.LedgerState (epochStateGovStateL, nesEsL)
2222
import Cardano.Ledger.Shelley.Rules (ShelleyDelegPredFailure)
@@ -26,7 +26,7 @@ import Test.Cardano.Ledger.Conway.ImpTest
2626
import Test.Cardano.Ledger.Dijkstra.Era ()
2727

2828
instance ShelleyEraImp DijkstraEra where
29-
initGenesis = pure NoGenesis
29+
initGenesis = pure DijkstraGenesis
3030

3131
initNewEpochState = defaultInitNewEpochState $ \nes ->
3232
nes

libs/cardano-ledger-api/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,18 @@
22

33
## 1.12.0.0
44

5+
* Export `VotingProcedure`, `ProposalProcedure`, `currentTreasuryValueTxBodyL` and
6+
`treasuryDonationTxBodyL` from `Cardano.Ledger.Api.Tx.Body`
7+
* Export `DijkstraEra` from `Cardano.Ledger.Api.Era`
8+
* Set `LatestKnownEra` to `DijkstraEra`
9+
* Stop exporting deprecated `Shelley`, `Mary`, `Allegra`, `Alonzo`, `Babbage` and `Conway` type synonyms
510
* Moved `Annotator` instances to `testlib` for all respective packages
611
* Rename `queryAccountState` to `queryChainAccountState`
712

13+
### `testlib`
14+
15+
* Re-export all Ledger `Arbitrary` instances from `Test.Cardano.Ledger.Api.Arbitrary`
16+
817
## 1.11.0.0
918

1019
* Remove `witVKeyBytes`

libs/cardano-ledger-api/cardano-ledger-api.cabal

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ library
6565
cardano-ledger-binary >=1.4,
6666
cardano-ledger-conway >=1.19,
6767
cardano-ledger-core >=1.17,
68+
cardano-ledger-dijkstra >=0.1,
6869
cardano-ledger-mary ^>=1.9,
6970
cardano-ledger-shelley ^>=1.17,
7071
cardano-strict-containers,
@@ -96,6 +97,7 @@ library testlib
9697
cardano-ledger-api,
9798
cardano-ledger-binary,
9899
cardano-ledger-core:{cardano-ledger-core, testlib},
100+
cardano-ledger-dijkstra:testlib,
99101
containers,
100102

101103
test-suite cardano-ledger-api-test
@@ -125,7 +127,6 @@ test-suite cardano-ledger-api-test
125127
base,
126128
bytestring,
127129
cardano-ledger-api,
128-
cardano-ledger-babbage:testlib,
129130
cardano-ledger-binary,
130131
cardano-ledger-byron,
131132
cardano-ledger-conway:{cardano-ledger-conway, testlib},

libs/cardano-ledger-api/src/Cardano/Ledger/Api/Era.hs

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,26 @@ module Cardano.Ledger.Api.Era (
1111
ByronEra,
1212

1313
-- ** Shelley
14-
Shelley,
1514
ShelleyEra,
1615

1716
-- ** Allegra
18-
Allegra,
1917
AllegraEra,
2018

2119
-- ** Mary
22-
Mary,
2320
MaryEra,
2421

2522
-- ** Alonzo
26-
Alonzo,
2723
AlonzoEra,
2824

2925
-- ** Babbage
30-
Babbage,
3126
BabbageEra,
3227

3328
-- ** Conway
34-
Conway,
3529
ConwayEra,
3630

31+
-- ** Dijkstra
32+
DijkstraEra,
33+
3734
-- ** Latest Known
3835
LatestKnownEra,
3936

@@ -54,10 +51,10 @@ module Cardano.Ledger.Api.Era (
5451
atMostEra,
5552
) where
5653

57-
import Cardano.Ledger.Allegra (Allegra, AllegraEra)
58-
import Cardano.Ledger.Alonzo (Alonzo, AlonzoEra)
59-
import Cardano.Ledger.Babbage (Babbage, BabbageEra)
60-
import Cardano.Ledger.Conway (Conway, ConwayEra)
54+
import Cardano.Ledger.Allegra (AllegraEra)
55+
import Cardano.Ledger.Alonzo (AlonzoEra)
56+
import Cardano.Ledger.Babbage (BabbageEra)
57+
import Cardano.Ledger.Conway (ConwayEra)
6158
import Cardano.Ledger.Core (
6259
AtLeastEra,
6360
AtMostEra,
@@ -72,9 +69,10 @@ import Cardano.Ledger.Core (
7269
eraProtVerHigh,
7370
eraProtVerLow,
7471
)
75-
import Cardano.Ledger.Mary (Mary, MaryEra)
76-
import Cardano.Ledger.Shelley (Shelley, ShelleyEra)
72+
import Cardano.Ledger.Dijkstra (DijkstraEra)
73+
import Cardano.Ledger.Mary (MaryEra)
74+
import Cardano.Ledger.Shelley (ShelleyEra)
7775

7876
-- | Sometimes it is useful to specify that a type corresponds to a latest era that is
7977
-- currently implemented
80-
type LatestKnownEra = ConwayEra
78+
type LatestKnownEra = DijkstraEra

libs/cardano-ledger-api/src/Cardano/Ledger/Api/Transition.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ module Cardano.Ledger.Api.Transition (
1313

1414
-- * Genesis
1515
EraGenesis (..),
16+
NoGenesis (..),
1617
ShelleyGenesis (..),
1718
AlonzoGenesis (..),
1819
ConwayGenesis (..),
19-
NoGenesis (..),
20+
DijkstraGenesis (..),
2021

2122
-- * Functions for Testing
2223
tcInitialPParamsG,
@@ -29,6 +30,7 @@ module Cardano.Ledger.Api.Transition (
2930
import Cardano.Ledger.Alonzo.Genesis (AlonzoGenesis (..))
3031
import Cardano.Ledger.Api.Era (LatestKnownEra)
3132
import Cardano.Ledger.Conway.Genesis (ConwayGenesis (..))
33+
import Cardano.Ledger.Dijkstra.Genesis (DijkstraGenesis (..))
3234
import Cardano.Ledger.Genesis (EraGenesis (..), NoGenesis (..))
3335
import Cardano.Ledger.Shelley.Genesis (ShelleyGenesis (..))
3436
import Cardano.Ledger.Shelley.Transition (
@@ -53,3 +55,4 @@ mkLatestTransitionConfig shelleyGenesis alonzoGenesis conwayGenesis =
5355
& mkTransitionConfig alonzoGenesis
5456
& mkTransitionConfig NoGenesis
5557
& mkTransitionConfig conwayGenesis
58+
& mkTransitionConfig DijkstraGenesis

0 commit comments

Comments
 (0)