Skip to content

Commit 69ebfb9

Browse files
committed
WIP - UtxoSpec
1 parent 572ec83 commit 69ebfb9

File tree

2 files changed

+87
-7
lines changed

2 files changed

+87
-7
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import qualified Test.Cardano.Ledger.Conway.Imp.GovCertSpec as GovCert
5050
import qualified Test.Cardano.Ledger.Conway.Imp.GovSpec as Gov
5151
import qualified Test.Cardano.Ledger.Conway.Imp.LedgerSpec as Ledger
5252
import qualified Test.Cardano.Ledger.Conway.Imp.RatifySpec as Ratify
53-
-- import qualified Test.Cardano.Ledger.Conway.Imp.UtxoSpec as Utxo
53+
import qualified Test.Cardano.Ledger.Conway.Imp.UtxoSpec as Utxo
5454
-- import qualified Test.Cardano.Ledger.Conway.Imp.UtxosSpec as Utxos
5555
import Test.Cardano.Ledger.Conway.ImpTest (
5656
ConwayEraImp,
@@ -138,6 +138,6 @@ conwaySpec = do
138138
describe "GOVCERT" GovCert.spec
139139
describe "LEDGER" Ledger.spec
140140
describe "RATIFY" Ratify.spec
141+
describe "UTXO" Utxo.spec
141142

142-
-- describe "UTXO" Utxo.spec
143143
-- describe "UTXOS" Utxos.spec

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

Lines changed: 85 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
{-# LANGUAGE TypeApplications #-}
99
{-# LANGUAGE TypeFamilies #-}
1010

11-
module Test.Cardano.Ledger.Conway.Imp.UtxoSpec (spec) where
11+
module Test.Cardano.Ledger.Conway.Imp.UtxoSpec (
12+
spec,
13+
shelleyCertsSpec,
14+
) where
1215

1316
import Cardano.Ledger.Address
1417
import Cardano.Ledger.Alonzo.Plutus.Context (EraPlutusContext (..))
@@ -45,7 +48,6 @@ import Test.Cardano.Ledger.Plutus.Examples (alwaysSucceedsNoDatum, inputsOverlap
4548
spec ::
4649
forall era.
4750
( ConwayEraImp era
48-
, ShelleyEraTxCert era
4951
, InjectRuleFailure "LEDGER" BabbageUtxoPredFailure era
5052
, InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era
5153
, Inject (ConwayContextError era) (ContextError era)
@@ -73,14 +75,16 @@ spec = do
7375
mkBasicTx mkBasicTxBody
7476
& bodyTxL . certsTxBodyL
7577
.~ SSeq.fromList
78+
-- NOTE: we might not want to do all this again,
79+
-- as we already do it for all eras pre-dijkstra in `shelleyCertsSpec`
7680
[ RegPoolTxCert poolParams
7781
, RegDRepTxCert dRepCred dRepDeposit anchor
7882
, RegDepositDelegTxCert cred0 delegatee accountDeposit
79-
, RegTxCert cred1
83+
, RegDepositTxCert cred1 accountDeposit
8084
, RegDepositTxCert cred2 accountDeposit
8185
, RegDepositTxCert cred3 accountDeposit
82-
, UnRegTxCert cred2
8386
, UnRegDepositTxCert cred1 accountDeposit
87+
, UnRegDepositTxCert cred2 accountDeposit
8488
, RegDepositTxCert cred4 accountDeposit
8589
]
8690
utxoAfterRegister <- getUTxO
@@ -107,7 +111,7 @@ spec = do
107111
.~ SSeq.fromList
108112
[ RetirePoolTxCert poolId (succ curEpochNo)
109113
, UnRegDRepTxCert dRepCred dRepDeposit
110-
, UnRegTxCert cred3
114+
, UnRegDepositTxCert cred3 accountDeposit
111115
, UnRegDepositTxCert cred4 accountDeposit
112116
]
113117
utxoAfterUnRegister <- getUTxO
@@ -179,3 +183,79 @@ spec = do
179183
[ injectFailure $
180184
CollectErrors [BadTranslation . inject $ ReferenceInputsNotDisjointFromInputs @era [txIn]]
181185
]
186+
187+
shelleyCertsSpec ::
188+
forall era.
189+
( ConwayEraImp era
190+
, ShelleyEraTxCert era
191+
) =>
192+
SpecWith (ImpInit (LedgerSpec era))
193+
shelleyCertsSpec = do
194+
describe "Certificates" $ do
195+
it "Reg/UnReg collect and refund correct amounts" $ do
196+
utxoStart <- getUTxO
197+
accountDeposit <- getsPParams ppKeyDepositL
198+
stakePoolDeposit <- getsPParams ppPoolDepositL
199+
dRepDeposit <- getsPParams ppDRepDepositL
200+
cred0 <- KeyHashObj <$> freshKeyHash @'Staking
201+
cred1 <- KeyHashObj <$> freshKeyHash @'Staking
202+
cred2 <- KeyHashObj <$> freshKeyHash @'Staking
203+
cred3 <- KeyHashObj <$> freshKeyHash @'Staking
204+
cred4 <- KeyHashObj <$> freshKeyHash @'Staking
205+
poolId <- freshKeyHash
206+
poolParams <- freshPoolParams poolId (RewardAccount Testnet cred0)
207+
dRepCred <- KeyHashObj <$> freshKeyHash @'DRepRole
208+
let delegatee = DelegStakeVote poolId (DRepCredential dRepCred)
209+
anchor <- arbitrary
210+
txRegister <-
211+
submitTx $
212+
mkBasicTx mkBasicTxBody
213+
& bodyTxL . certsTxBodyL
214+
.~ SSeq.fromList
215+
[ RegPoolTxCert poolParams
216+
, RegDRepTxCert dRepCred dRepDeposit anchor
217+
, RegDepositDelegTxCert cred0 delegatee accountDeposit
218+
, RegTxCert cred1
219+
, RegDepositTxCert cred2 accountDeposit
220+
, RegDepositTxCert cred3 accountDeposit
221+
, UnRegTxCert cred2
222+
, UnRegDepositTxCert cred1 accountDeposit
223+
, RegDepositTxCert cred4 accountDeposit
224+
]
225+
utxoAfterRegister <- getUTxO
226+
-- Overwrite deposit protocol parameters in order to ensure they does not affect refunds
227+
modifyPParams
228+
( \pp ->
229+
pp
230+
& ppKeyDepositL .~ Coin 1
231+
& ppPoolDepositL .~ Coin 2
232+
& ppDRepDepositL .~ Coin 3
233+
)
234+
(sumUTxO utxoStart <-> sumUTxO utxoAfterRegister)
235+
`shouldBe` inject
236+
( (txRegister ^. bodyTxL . feeTxBodyL)
237+
<+> ((3 :: Int) <×> accountDeposit) -- Only three accounts retained that are still registered
238+
<+> stakePoolDeposit
239+
<+> dRepDeposit
240+
)
241+
curEpochNo <- getsNES nesELL
242+
txUnRegister <-
243+
submitTx $
244+
mkBasicTx mkBasicTxBody
245+
& bodyTxL . certsTxBodyL
246+
.~ SSeq.fromList
247+
[ RetirePoolTxCert poolId (succ curEpochNo)
248+
, UnRegDRepTxCert dRepCred dRepDeposit
249+
, UnRegTxCert cred3
250+
, UnRegDepositTxCert cred4 accountDeposit
251+
]
252+
utxoAfterUnRegister <- getUTxO
253+
let totalFees = (txRegister ^. bodyTxL . feeTxBodyL) <+> (txUnRegister ^. bodyTxL . feeTxBodyL)
254+
fees <- getsNES (nesEsL . esLStateL . lsUTxOStateL . utxosFeesL)
255+
totalFees `shouldBe` fees
256+
-- only deposits for stake pool and its account are not refunded at this point
257+
(sumUTxO utxoStart <-> sumUTxO utxoAfterUnRegister)
258+
`shouldBe` inject (totalFees <+> stakePoolDeposit <+> accountDeposit)
259+
passEpoch
260+
-- Check for successfull pool refund
261+
getReward cred0 `shouldReturn` stakePoolDeposit

0 commit comments

Comments
 (0)