Skip to content

Commit 979a7ee

Browse files
committed
Adding first standalone predicate failure AccountAlreadyRegistered
Thsi commit serves as an example of a pattern we will use for all ledger predicate failures for all era, except Byron.
1 parent 1fb5e3b commit 979a7ee

27 files changed

Lines changed: 188 additions & 63 deletions

File tree

eras/allegra/impl/src/Cardano/Ledger/Allegra/Rules/Deleg.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@ module Cardano.Ledger.Allegra.Rules.Deleg () where
88
import Cardano.Ledger.Allegra.Era (AllegraEra)
99
import Cardano.Ledger.Core
1010
import Cardano.Ledger.Shelley.Rules (
11-
ShelleyDelegPredFailure,
11+
AccountAlreadyRegistered,
12+
ShelleyDelegPredFailure (..),
1213
)
1314

1415
type instance EraRuleFailure "DELEG" AllegraEra = ShelleyDelegPredFailure AllegraEra
1516

1617
instance InjectRuleFailure "DELEG" ShelleyDelegPredFailure AllegraEra
18+
19+
instance InjectRuleFailure "DELEG" AccountAlreadyRegistered AllegraEra where
20+
injectFailure = DelegAccountAlreadyRegistered

eras/allegra/impl/src/Cardano/Ledger/Allegra/Rules/Ledger.hs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ import Cardano.Ledger.Allegra.Rules.Delegs ()
1010
import Cardano.Ledger.Allegra.Rules.Utxow ()
1111
import Cardano.Ledger.Core
1212
import Cardano.Ledger.Shelley.Rules (
13+
AccountAlreadyRegistered,
1314
ShelleyDelegPredFailure,
14-
ShelleyDelegsPredFailure,
15-
ShelleyDelplPredFailure,
15+
ShelleyDelegsPredFailure (..),
16+
ShelleyDelplPredFailure (..),
1617
ShelleyLedgerEvent,
1718
ShelleyLedgerPredFailure (..),
1819
ShelleyPoolPredFailure,
@@ -23,6 +24,9 @@ import Cardano.Ledger.Shelley.Rules (
2324

2425
type instance EraRuleFailure "LEDGER" AllegraEra = ShelleyLedgerPredFailure AllegraEra
2526

27+
instance InjectRuleFailure "LEDGER" AccountAlreadyRegistered AllegraEra where
28+
injectFailure = DelegsFailure . DelplFailure . DelegFailure . injectFailure
29+
2630
instance InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure AllegraEra
2731

2832
instance InjectRuleFailure "LEDGER" ShelleyUtxowPredFailure AllegraEra where

eras/alonzo/impl/src/Cardano/Ledger/Alonzo/Rules/Deleg.hs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@ module Cardano.Ledger.Alonzo.Rules.Deleg () where
77

88
import Cardano.Ledger.Alonzo.Era (AlonzoEra)
99
import Cardano.Ledger.Core
10-
import Cardano.Ledger.Shelley.Rules (ShelleyDelegPredFailure)
10+
import Cardano.Ledger.Shelley.Rules (
11+
AccountAlreadyRegistered,
12+
ShelleyDelegPredFailure (..),
13+
)
1114

1215
type instance EraRuleFailure "DELEG" AlonzoEra = ShelleyDelegPredFailure AlonzoEra
1316

1417
instance InjectRuleFailure "DELEG" ShelleyDelegPredFailure AlonzoEra
18+
19+
instance InjectRuleFailure "DELEG" AccountAlreadyRegistered AlonzoEra where
20+
injectFailure = DelegAccountAlreadyRegistered

eras/alonzo/impl/src/Cardano/Ledger/Alonzo/Rules/Ledger.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@ import Cardano.Ledger.Shelley.LedgerState (
3030
UTxOState (..),
3131
)
3232
import Cardano.Ledger.Shelley.Rules (
33+
AccountAlreadyRegistered,
3334
DelegsEnv (..),
3435
ShelleyDELEGS,
3536
ShelleyDelegPredFailure,
3637
ShelleyDelegsEvent,
37-
ShelleyDelegsPredFailure,
38+
ShelleyDelegsPredFailure (..),
3839
ShelleyDelplPredFailure (..),
3940
ShelleyLEDGERS,
4041
ShelleyPoolPredFailure,
@@ -71,6 +72,9 @@ import Lens.Micro
7172

7273
type instance EraRuleFailure "LEDGER" AlonzoEra = ShelleyLedgerPredFailure AlonzoEra
7374

75+
instance InjectRuleFailure "LEDGER" AccountAlreadyRegistered AlonzoEra where
76+
injectFailure = DelegsFailure . DelplFailure . DelegFailure . injectFailure
77+
7478
instance InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure AlonzoEra
7579

7680
instance InjectRuleFailure "LEDGER" AlonzoUtxowPredFailure AlonzoEra where

eras/babbage/impl/src/Cardano/Ledger/Babbage/Rules/Deleg.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@ module Cardano.Ledger.Babbage.Rules.Deleg () where
88
import Cardano.Ledger.Babbage.Era (BabbageEra)
99
import Cardano.Ledger.Core
1010
import Cardano.Ledger.Shelley.Rules (
11-
ShelleyDelegPredFailure,
11+
AccountAlreadyRegistered,
12+
ShelleyDelegPredFailure (..),
1213
)
1314

1415
type instance EraRuleFailure "DELEG" BabbageEra = ShelleyDelegPredFailure BabbageEra
1516

1617
instance InjectRuleFailure "DELEG" ShelleyDelegPredFailure BabbageEra
18+
19+
instance InjectRuleFailure "DELEG" AccountAlreadyRegistered BabbageEra where
20+
injectFailure = DelegAccountAlreadyRegistered

eras/babbage/impl/src/Cardano/Ledger/Babbage/Rules/Ledger.hs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,14 @@ import Cardano.Ledger.Shelley.LedgerState (
3232
UTxOState (..),
3333
)
3434
import Cardano.Ledger.Shelley.Rules (
35+
AccountAlreadyRegistered,
3536
DelegsEnv (..),
3637
LedgerEnv (..),
3738
ShelleyDELEGS,
3839
ShelleyDelegPredFailure,
3940
ShelleyDelegsEvent,
40-
ShelleyDelegsPredFailure,
41-
ShelleyDelplPredFailure,
41+
ShelleyDelegsPredFailure (..),
42+
ShelleyDelplPredFailure (..),
4243
ShelleyLEDGERS,
4344
ShelleyLedgerEvent (..),
4445
ShelleyLedgerPredFailure (..),
@@ -65,6 +66,9 @@ import Data.Sequence (Seq)
6566

6667
type instance EraRuleFailure "LEDGER" BabbageEra = ShelleyLedgerPredFailure BabbageEra
6768

69+
instance InjectRuleFailure "LEDGER" AccountAlreadyRegistered BabbageEra where
70+
injectFailure = DelegsFailure . DelplFailure . DelegFailure . injectFailure
71+
6872
instance InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure BabbageEra
6973

7074
instance InjectRuleFailure "LEDGER" BabbageUtxowPredFailure BabbageEra where

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import Cardano.Ledger.Conway.TxCert (
5656
)
5757
import Cardano.Ledger.Credential (Credential)
5858
import Cardano.Ledger.DRep
59+
import qualified Cardano.Ledger.Shelley.Rules as Shelley
5960
import Control.DeepSeq (NFData)
6061
import Control.Monad (forM_, guard, unless)
6162
import Control.State.Transition (
@@ -104,7 +105,7 @@ deriving instance Show (PParams era) => Show (ConwayDelegEnv era)
104105

105106
data ConwayDelegPredFailure era
106107
= IncorrectDepositDELEG Coin
107-
| StakeKeyRegisteredDELEG (Credential Staking)
108+
| DelegAccountAlreadyRegistered (Shelley.AccountAlreadyRegistered era)
108109
| StakeKeyNotRegisteredDELEG (Credential Staking)
109110
| StakeKeyHasNonZeroAccountBalanceDELEG Coin
110111
| DelegateeDRepNotRegisteredDELEG (Credential DRepRole)
@@ -117,6 +118,9 @@ type instance EraRuleFailure "DELEG" ConwayEra = ConwayDelegPredFailure ConwayEr
117118

118119
type instance EraRuleEvent "DELEG" ConwayEra = VoidEraRule "DELEG" ConwayEra
119120

121+
instance InjectRuleFailure "DELEG" Shelley.AccountAlreadyRegistered ConwayEra where
122+
injectFailure = DelegAccountAlreadyRegistered
123+
120124
instance InjectRuleFailure "DELEG" ConwayDelegPredFailure ConwayEra
121125

122126
instance NFData (ConwayDelegPredFailure era)
@@ -126,8 +130,8 @@ instance Era era => EncCBOR (ConwayDelegPredFailure era) where
126130
encode . \case
127131
IncorrectDepositDELEG mCoin ->
128132
Sum (IncorrectDepositDELEG @era) 1 !> To mCoin
129-
StakeKeyRegisteredDELEG stakeCred ->
130-
Sum (StakeKeyRegisteredDELEG @era) 2 !> To stakeCred
133+
DelegAccountAlreadyRegistered stakeCred ->
134+
Sum (DelegAccountAlreadyRegistered @era) 2 !> To stakeCred
131135
StakeKeyNotRegisteredDELEG stakeCred ->
132136
Sum (StakeKeyNotRegisteredDELEG @era) 3 !> To stakeCred
133137
StakeKeyHasNonZeroAccountBalanceDELEG mCoin ->
@@ -144,7 +148,7 @@ instance Era era => EncCBOR (ConwayDelegPredFailure era) where
144148
instance Era era => DecCBOR (ConwayDelegPredFailure era) where
145149
decCBOR = decode $ Summands "ConwayDelegPredFailure" $ \case
146150
1 -> SumD IncorrectDepositDELEG <! From
147-
2 -> SumD StakeKeyRegisteredDELEG <! From
151+
2 -> SumD DelegAccountAlreadyRegistered <! From
148152
3 -> SumD StakeKeyNotRegisteredDELEG <! From
149153
4 -> SumD StakeKeyHasNonZeroAccountBalanceDELEG <! From
150154
5 -> SumD DelegateeDRepNotRegisteredDELEG <! From
@@ -162,6 +166,7 @@ instance
162166
, Environment (EraRule "DELEG" era) ~ ConwayDelegEnv era
163167
, EraRule "DELEG" era ~ ConwayDELEG era
164168
, InjectRuleFailure "DELEG" ConwayDelegPredFailure era
169+
, InjectRuleFailure "DELEG" Shelley.AccountAlreadyRegistered era
165170
) =>
166171
STS (ConwayDELEG era)
167172
where
@@ -182,6 +187,7 @@ conwayDelegTransition ::
182187
, Environment (EraRule rule era) ~ ConwayDelegEnv era
183188
, State (EraRule rule era) ~ CertState era
184189
, InjectRuleFailure rule ConwayDelegPredFailure era
190+
, InjectRuleFailure rule Shelley.AccountAlreadyRegistered era
185191
) =>
186192
TransitionRule (EraRule rule era)
187193
conwayDelegTransition = do
@@ -209,9 +215,6 @@ conwayDelegTransition = do
209215
}
210216
)
211217
else injectFailure $ IncorrectDepositDELEG deposit
212-
checkStakeKeyNotRegistered stakeCred =
213-
not (isAccountRegistered stakeCred accounts)
214-
?! injectFailure (StakeKeyRegisteredDELEG stakeCred)
215218
checkStakeDelegateeRegistered =
216219
let checkPoolRegistered targetPool =
217220
targetPool
@@ -232,7 +235,7 @@ conwayDelegTransition = do
232235
case cert of
233236
ConwayRegCert stakeCred sMayDeposit -> do
234237
forM_ sMayDeposit checkDepositAgainstPParams
235-
checkStakeKeyNotRegistered stakeCred
238+
Shelley.checkAccountAlreadyRegistered @rule accounts stakeCred
236239
pure $
237240
certState
238241
& certDStateL . accountsL
@@ -292,7 +295,7 @@ conwayDelegTransition = do
292295
certState
293296
ConwayRegDelegCert stakeCred delegatee deposit -> do
294297
checkDepositAgainstPParams deposit
295-
checkStakeKeyNotRegistered stakeCred
298+
Shelley.checkAccountAlreadyRegistered accounts stakeCred
296299
checkStakeDelegateeRegistered delegatee
297300
pure $
298301
processDelegationInternal (pvMajor pv < natVersion @10) stakeCred Nothing delegatee $

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ import Cardano.Ledger.Shelley.Rules (
118118
shelleyLedgerAssertions,
119119
testIncompleteAndMissingWithdrawals,
120120
)
121+
import qualified Cardano.Ledger.Shelley.Rules as Shelley
121122
import Cardano.Ledger.Slot (epochFromSlot)
122123
import Control.DeepSeq (NFData)
123124
import Control.Monad (unless)
@@ -151,6 +152,9 @@ type instance EraRuleFailure "LEDGER" ConwayEra = ConwayLedgerPredFailure Conway
151152

152153
type instance EraRuleEvent "LEDGER" ConwayEra = ConwayLedgerEvent ConwayEra
153154

155+
instance InjectRuleFailure "LEDGER" Shelley.AccountAlreadyRegistered ConwayEra where
156+
injectFailure = ConwayCertsFailure . CertFailure . DelegFailure . injectFailure
157+
154158
instance InjectRuleFailure "LEDGER" ConwayLedgerPredFailure ConwayEra
155159

156160
instance InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure ConwayEra where

eras/conway/impl/testlib/Test/Cardano/Ledger/Conway/ImpTest.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1919,7 +1919,7 @@ instance InjectRuleFailure "CERT" ShelleyDelegPredFailure ConwayEra where
19191919
injectFailure = DelegFailure . injectFailure
19201920

19211921
instance InjectRuleFailure "DELEG" ShelleyDelegPredFailure ConwayEra where
1922-
injectFailure (Shelley.StakeKeyAlreadyRegisteredDELEG c) = StakeKeyRegisteredDELEG c
1922+
injectFailure (Shelley.DelegAccountAlreadyRegistered c) = DelegAccountAlreadyRegistered c
19231923
injectFailure (Shelley.StakeKeyNotRegisteredDELEG c) = StakeKeyNotRegisteredDELEG c
19241924
injectFailure (Shelley.StakeKeyNonZeroAccountBalanceDELEG c) = StakeKeyHasNonZeroAccountBalanceDELEG c
19251925
injectFailure _ = error "Cannot inject ShelleyDelegPredFailure into ConwayEra"

eras/dijkstra/impl/src/Cardano/Ledger/Dijkstra/Rules/Deleg.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,16 @@
66
module Cardano.Ledger.Dijkstra.Rules.Deleg () where
77

88
import Cardano.Ledger.Conway.Rules (ConwayDelegPredFailure)
9+
import qualified Cardano.Ledger.Conway.Rules as Conway
910
import Cardano.Ledger.Dijkstra.Core
1011
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
12+
import qualified Cardano.Ledger.Shelley.Rules as Shelley
1113

1214
type instance EraRuleFailure "DELEG" DijkstraEra = ConwayDelegPredFailure DijkstraEra
1315

1416
type instance EraRuleEvent "DELEG" DijkstraEra = VoidEraRule "DELEG" DijkstraEra
1517

1618
instance InjectRuleFailure "DELEG" ConwayDelegPredFailure DijkstraEra
19+
20+
instance InjectRuleFailure "DELEG" Shelley.AccountAlreadyRegistered DijkstraEra where
21+
injectFailure = Conway.DelegAccountAlreadyRegistered

0 commit comments

Comments
 (0)