Skip to content

Commit 505717d

Browse files
committed
Extract drep delegation in HardFork rule in a separate function
to make it easier to add branches
1 parent a5e8010 commit 505717d

File tree

1 file changed

+30
-28
lines changed
  • eras/conway/impl/src/Cardano/Ledger/Conway/Rules

1 file changed

+30
-28
lines changed

eras/conway/impl/src/Cardano/Ledger/Conway/Rules/HardFork.hs

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -67,31 +67,33 @@ hardforkTransition = do
6767
TRC (_, epochState, newPv) <-
6868
judgmentContext
6969
tellEvent $ ConwayHardForkEvent newPv
70-
if pvMajor newPv == natVersion @10
71-
then
72-
pure $
73-
epochState
74-
& esLStateL . lsCertStateL %~ \certState ->
75-
let accountsMap = certState ^. certDStateL . accountsL . accountsMapL
76-
dReps =
77-
-- Reset all delegations in order to remove any inconsistencies
78-
-- Delegations will be reset accordingly below.
79-
Map.map (\dRepState -> dRepState {drepDelegs = Set.empty}) $
80-
certState ^. certVStateL . vsDRepsL
81-
(dRepsWithDelegations, accountsWithoutUnknownDRepDelegations) =
82-
Map.mapAccumWithKey adjustDelegations dReps accountsMap
83-
adjustDelegations ds stakeCred accountState =
84-
case accountState ^. dRepDelegationAccountStateL of
85-
Just (DRepCredential dRep) ->
86-
let addDelegation _ dRepState =
87-
Just $ dRepState {drepDelegs = Set.insert stakeCred (drepDelegs dRepState)}
88-
in case Map.updateLookupWithKey addDelegation dRep ds of
89-
(Nothing, _) -> (ds, accountState & dRepDelegationAccountStateL .~ Nothing)
90-
(Just _, ds') -> (ds', accountState)
91-
_ -> (ds, accountState)
92-
in certState
93-
-- Remove dangling delegations to non-existent DReps:
94-
& certDStateL . accountsL . accountsMapL .~ accountsWithoutUnknownDRepDelegations
95-
-- Populate DRep delegations with delegatees
96-
& certVStateL . vsDRepsL .~ dRepsWithDelegations
97-
else pure epochState
70+
let update
71+
| pvMajor newPv == natVersion @10 =
72+
esLStateL . lsCertStateL %~ updateDRepDelegations
73+
| otherwise = id
74+
pure $ update epochState
75+
76+
updateDRepDelegations :: ConwayEraCertState era => CertState era -> CertState era
77+
updateDRepDelegations certState =
78+
let accountsMap = certState ^. certDStateL . accountsL . accountsMapL
79+
dReps =
80+
-- Reset all delegations in order to remove any inconsistencies
81+
-- Delegations will be reset accordingly below.
82+
Map.map (\dRepState -> dRepState {drepDelegs = Set.empty}) $
83+
certState ^. certVStateL . vsDRepsL
84+
(dRepsWithDelegations, accountsWithoutUnknownDRepDelegations) =
85+
Map.mapAccumWithKey adjustDelegations dReps accountsMap
86+
adjustDelegations ds stakeCred accountState =
87+
case accountState ^. dRepDelegationAccountStateL of
88+
Just (DRepCredential dRep) ->
89+
let addDelegation _ dRepState =
90+
Just $ dRepState {drepDelegs = Set.insert stakeCred (drepDelegs dRepState)}
91+
in case Map.updateLookupWithKey addDelegation dRep ds of
92+
(Nothing, _) -> (ds, accountState & dRepDelegationAccountStateL .~ Nothing)
93+
(Just _, ds') -> (ds', accountState)
94+
_ -> (ds, accountState)
95+
in certState
96+
-- Remove dangling delegations to non-existent DReps:
97+
& certDStateL . accountsL . accountsMapL .~ accountsWithoutUnknownDRepDelegations
98+
-- Populate DRep delegations with delegatees
99+
& certVStateL . vsDRepsL .~ dRepsWithDelegations

0 commit comments

Comments
 (0)