Skip to content

Commit 1413d50

Browse files
authored
Merge pull request #5493 from IntersectMBO/f-f/5453-map
Change all error Maps to NonEmptyMaps in predicate failures
2 parents d913163 + b1943cb commit 1413d50

File tree

20 files changed

+125
-21
lines changed

20 files changed

+125
-21
lines changed

eras/conway/impl/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
- `cppMinFeeB` -> `cppTxFeeFixed`
1515
* Changed type of `cppMinFeeA` to `CoinPerByte`
1616
* Change sets containing errors into `NonEmptySet` for `ConwayGovPredFailure`, `ConwayUtxoPredFailure`, `ConwayUtxowPredFailure`
17+
* Change all maps into `NonEmptyMap` for `ConwayGovPredFailure` and `ConwayLedgerPredFailure`
1718
* Change all lists into `NonEmpty` for `ConwayUtxoPredFailure`, `ConwayUtxosPredFailure`, `ConwayUtxowPredFailure`
1819
* Add `cddl` sub-library, and `generate-cddl` executable.
1920
* Re-export `UtxoEnv` from `Cardano.Ledger.Conway.Rules.Utxo`

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ import Control.State.Transition.Extended (
122122
failBecause,
123123
failOnJust,
124124
failOnNonEmpty,
125+
failOnNonEmptyMap,
125126
failOnNonEmptySet,
126127
failureOnNonEmpty,
127128
judgmentContext,
@@ -133,6 +134,7 @@ import Data.Bifunctor (bimap)
133134
import Data.Either (partitionEithers)
134135
import qualified Data.Foldable as F
135136
import Data.List.NonEmpty (NonEmpty (..))
137+
import Data.Map.NonEmpty (NonEmptyMap)
136138
import qualified Data.Map.Strict as Map
137139
import qualified Data.OSet.Strict as OSet
138140
import Data.Pulse (foldlM')
@@ -189,7 +191,7 @@ data ConwayGovPredFailure era
189191
(NonEmptySet (Credential ColdCommitteeRole))
190192
| ExpirationEpochTooSmall
191193
-- | Members for which the expiration epoch has already been reached
192-
(Map.Map (Credential ColdCommitteeRole) EpochNo)
194+
(NonEmptyMap (Credential ColdCommitteeRole) EpochNo)
193195
| InvalidPrevGovActionId (ProposalProcedure era)
194196
| VotingOnExpiredGovAction (NonEmpty (Voter, GovActionId))
195197
| ProposalCantFollow
@@ -559,7 +561,7 @@ conwayGovTransition = do
559561
in failOnNonEmptySet conflicting (injectFailure . ConflictingCommitteeUpdate)
560562

561563
let invalidMembers = Map.filter (<= currentEpoch) membersToAdd
562-
in Map.null invalidMembers ?! (injectFailure . ExpirationEpochTooSmall) invalidMembers
564+
in failOnNonEmptyMap invalidMembers (injectFailure . ExpirationEpochTooSmall)
563565
ParameterChange _ _ proposalPolicy ->
564566
runTest $ checkGuardrailsScriptHash @era constitutionPolicy proposalPolicy
565567
_ -> pure ()

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ import Control.State.Transition.Extended (
126126
)
127127
import Data.Kind (Type)
128128
import Data.List.NonEmpty (NonEmpty)
129+
import Data.Map.NonEmpty (NonEmptyMap)
129130
import qualified Data.Map.Strict as Map
130131
import Data.Maybe (isNothing)
131132
import Data.Sequence (Seq)
@@ -145,7 +146,7 @@ data ConwayLedgerPredFailure era
145146
| ConwayTxRefScriptsSizeTooBig (Mismatch RelLTEQ Int)
146147
| ConwayMempoolFailure Text
147148
| ConwayWithdrawalsMissingAccounts Withdrawals
148-
| ConwayIncompleteWithdrawals (Map.Map RewardAccount (Mismatch RelEQ Coin))
149+
| ConwayIncompleteWithdrawals (NonEmptyMap RewardAccount (Mismatch RelEQ Coin))
149150
deriving (Generic)
150151

151152
type instance EraRuleFailure "LEDGER" ConwayEra = ConwayLedgerPredFailure ConwayEra

eras/conway/impl/testlib/Test/Cardano/Ledger/Conway/Imp/CertsSpec.hs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import Cardano.Ledger.Conway.Rules (ConwayCertsPredFailure (..), ConwayLedgerPre
1818
import Cardano.Ledger.Credential (Credential (..))
1919
import Cardano.Ledger.DRep (DRep (..))
2020
import Cardano.Ledger.Val (Val (..))
21+
import qualified Data.Map.NonEmpty as NEM
2122
import Lens.Micro ((&), (.~))
2223
import Test.Cardano.Ledger.Conway.Arbitrary ()
2324
import Test.Cardano.Ledger.Conway.ImpTest
@@ -108,7 +109,9 @@ spec = do
108109
[ if hardforkConwayMoveWithdrawalsAndDRepChecksToLedgerRule pv
109110
then
110111
injectFailure $
111-
ConwayIncompleteWithdrawals @era [(rwdAccount1, Mismatch (reward1 <+> Coin 1) reward1)]
112+
ConwayIncompleteWithdrawals @era $
113+
NEM.singleton rwdAccount1 $
114+
Mismatch (reward1 <+> Coin 1) reward1
112115
else
113116
injectFailure . WithdrawalsNotInRewardsCERTS @era $ Withdrawals [(rwdAccount1, reward1 <+> Coin 1)]
114117
]
@@ -122,7 +125,7 @@ spec = do
122125
)
123126
[ if hardforkConwayMoveWithdrawalsAndDRepChecksToLedgerRule pv
124127
then
125-
injectFailure . ConwayIncompleteWithdrawals @era $ [(rwdAccount1, Mismatch zero reward1)]
128+
injectFailure . ConwayIncompleteWithdrawals @era $ NEM.singleton rwdAccount1 $ Mismatch zero reward1
126129
else injectFailure . WithdrawalsNotInRewardsCERTS @era $ Withdrawals [(rwdAccount1, zero)]
127130
]
128131
where

eras/conway/impl/testlib/Test/Cardano/Ledger/Conway/Imp/GovSpec.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import Cardano.Ledger.Shelley.Scripts (
3030
import Cardano.Ledger.Val (zero, (<->))
3131
import Data.Default (Default (..))
3232
import Data.List.NonEmpty (NonEmpty (..))
33+
import qualified Data.Map.NonEmpty as NEM
3334
import qualified Data.Map.Strict as Map
3435
import qualified Data.OMap.Strict as OMap
3536
import qualified Data.Sequence.Strict as SSeq
@@ -106,7 +107,7 @@ predicateFailuresSpec =
106107
(0 %! 1)
107108
passEpoch
108109
let expectedFailure =
109-
injectFailure $ ExpirationEpochTooSmall $ Map.singleton committeeC expiration
110+
injectFailure $ ExpirationEpochTooSmall $ NEM.singleton committeeC expiration
110111
proposal <- mkProposal action
111112
submitBootstrapAwareFailingProposal_ proposal $
112113
FailBootstrapAndPostBootstrap

eras/dijkstra/impl/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
- `dppMinFeeB` -> `dppTxFeeFixed`
3939
* Changed type of `dppMinFeeA` to `CoinPerByte`
4040
* Change sets containing errors into `NonEmptySet` for `DijkstraGovPredFailure`, `DijkstraUtxoPredFailure`, `DijkstraUtxowPredFailure`
41+
* Change all maps into `NonEmptyMap` for `DijkstraGovPredFailure` and `DijkstraLedgerPredFailure`
4142
* Change Dijkstra BBODY rule to validate Peras certificates when present
4243
* Add new block body predicate falures for Dijkstra:
4344
- `PrevEpochNonceNotPresent` for missing optional nonce needed for validation

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ import Control.State.Transition.Extended (
7676
STS (..),
7777
)
7878
import Data.List.NonEmpty (NonEmpty (..))
79-
import qualified Data.Map.Strict as Map
79+
import Data.Map.NonEmpty (NonEmptyMap)
8080
import Data.Set.NonEmpty (NonEmptySet)
8181
import GHC.Generics (Generic)
8282
import NoThunks.Class (NoThunks (..))
@@ -96,7 +96,7 @@ data DijkstraGovPredFailure era
9696
(NonEmptySet (Credential ColdCommitteeRole))
9797
| ExpirationEpochTooSmall
9898
-- | Members for which the expiration epoch has already been reached
99-
(Map.Map (Credential ColdCommitteeRole) EpochNo)
99+
(NonEmptyMap (Credential ColdCommitteeRole) EpochNo)
100100
| InvalidPrevGovActionId (ProposalProcedure era)
101101
| VotingOnExpiredGovAction (NonEmpty (Voter, GovActionId))
102102
| ProposalCantFollow

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ import Cardano.Ledger.Shelley.Rules (
117117
import Control.DeepSeq (NFData)
118118
import Control.State.Transition.Extended
119119
import Data.List.NonEmpty (NonEmpty)
120-
import qualified Data.Map.Strict as Map
120+
import Data.Map.NonEmpty (NonEmptyMap)
121121
import Data.Sequence (Seq)
122122
import Data.Void (absurd)
123123
import GHC.Generics (Generic (..))
@@ -132,7 +132,7 @@ data DijkstraLedgerPredFailure era
132132
| DijkstraTreasuryValueMismatch (Mismatch RelEQ Coin)
133133
| DijkstraTxRefScriptsSizeTooBig (Mismatch RelLTEQ Int)
134134
| DijkstraWithdrawalsMissingAccounts Withdrawals
135-
| DijkstraIncompleteWithdrawals (Map.Map RewardAccount (Mismatch RelEQ Coin))
135+
| DijkstraIncompleteWithdrawals (NonEmptyMap RewardAccount (Mismatch RelEQ Coin))
136136
| DijkstraSubLedgersFailure (PredicateFailure (EraRule "SUBLEDGERS" era))
137137
deriving (Generic)
138138

eras/shelley/impl/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
- `ppMinFeeB` -> `ppTxFeeFixed`
1111
* Changed type of `sppMinFeeA` to `CoinPerByte`:
1212
* Change sets containing errors into `NonEmptySet` for `ShelleyUtxoPredFailure`, `ShelleyUtxowPredFailure`
13+
* Change all maps into `NonEmptyMap` for `ShelleyLedgerPredFailure`
1314
* Change all lists into `NonEmpty` for `ShelleyUtxoPredFailure`, `ShelleyUtxowPredFailure`
1415
* Changed the type of the following fields to `CompactForm Coin` in `ShelleyPParams`:
1516
- `sppMinFeeB`

eras/shelley/impl/src/Cardano/Ledger/Shelley/Rules/Ledger.hs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,13 @@ import Control.State.Transition (
8080
STS (..),
8181
TRC (..),
8282
TransitionRule,
83-
failOnJust,
83+
failOnNonEmptyMap,
8484
judgmentContext,
8585
liftSTS,
8686
trans,
8787
)
88+
import Data.Map.NonEmpty (NonEmptyMap)
89+
import qualified Data.Map.NonEmpty as NEM
8890
import Data.Map.Strict (Map)
8991
import qualified Data.Map.Strict as Map
9092
import Data.Sequence (Seq)
@@ -127,7 +129,7 @@ data ShelleyLedgerPredFailure era
127129
= UtxowFailure (PredicateFailure (EraRule "UTXOW" era)) -- Subtransition Failures
128130
| DelegsFailure (PredicateFailure (EraRule "DELEGS" era)) -- Subtransition Failures
129131
| ShelleyWithdrawalsMissingAccounts Withdrawals
130-
| ShelleyIncompleteWithdrawals (Map RewardAccount (Mismatch RelEQ Coin))
132+
| ShelleyIncompleteWithdrawals (NonEmptyMap RewardAccount (Mismatch RelEQ Coin))
131133
deriving (Generic)
132134

133135
ledgerSlotNoL :: Lens' (LedgerEnv era) SlotNo
@@ -361,13 +363,11 @@ testIncompleteAndMissingWithdrawals accounts withdrawals = do
361363
network <- liftSTS $ asks networkId
362364
let (missingWithdrawals, incompleteWithdrawals) =
363365
case withdrawalsThatDoNotDrainAccounts withdrawals network accounts of
364-
Nothing -> (Nothing, Nothing)
365-
Just (missing, incomplete) ->
366-
( if null (unWithdrawals missing) then Nothing else Just missing
367-
, if null incomplete then Nothing else Just incomplete
368-
)
369-
failOnJust missingWithdrawals $ injectFailure . ShelleyWithdrawalsMissingAccounts
370-
failOnJust incompleteWithdrawals $ injectFailure . ShelleyIncompleteWithdrawals
366+
Nothing -> (Map.empty, Map.empty)
367+
Just (missing, incomplete) -> (unWithdrawals missing, incomplete)
368+
failOnNonEmptyMap missingWithdrawals $
369+
injectFailure . ShelleyWithdrawalsMissingAccounts . Withdrawals . NEM.toMap
370+
failOnNonEmptyMap incompleteWithdrawals $ injectFailure . ShelleyIncompleteWithdrawals
371371

372372
instance
373373
( Era era

0 commit comments

Comments
 (0)