Skip to content

Commit e41159d

Browse files
committed
refactor(cardano-chain-gen): Make it easier to register DReps
1 parent 70c429c commit e41159d

File tree

4 files changed

+59
-46
lines changed

4 files changed

+59
-46
lines changed

cardano-chain-gen/src/Cardano/Mock/Forging/Tx/Conway/Scenarios.hs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1+
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE NumericUnderscores #-}
13
{-# LANGUAGE TypeFamilies #-}
24

35
module Cardano.Mock.Forging.Tx.Conway.Scenarios (
46
delegateAndSendBlocks,
7+
registerDRepsAndDelegateVotes,
58
) where
69

710
import Cardano.Ledger.Address (Addr (..), Withdrawals (..))
11+
import Cardano.Ledger.Alonzo.Tx (AlonzoTx (..))
812
import Cardano.Ledger.BaseTypes (Network (..))
913
import Cardano.Ledger.Coin
1014
import Cardano.Ledger.Conway.TxCert (Delegatee (..))
1115
import Cardano.Ledger.Core (Tx ())
12-
import Cardano.Ledger.Credential (StakeCredential (), StakeReference (..))
16+
import Cardano.Ledger.Credential (Credential (..), StakeCredential (), StakeReference (..))
1317
import Cardano.Ledger.Crypto (StandardCrypto ())
18+
import Cardano.Ledger.DRep (DRep (..))
19+
import Cardano.Ledger.Keys (KeyRole (..))
1420
import Cardano.Ledger.Mary.Value (MaryValue (..))
1521
import Cardano.Mock.Forging.Interpreter
1622
import qualified Cardano.Mock.Forging.Tx.Conway as Conway
@@ -22,7 +28,7 @@ import Data.Maybe.Strict (StrictMaybe (..))
2228
import Ouroboros.Consensus.Cardano.Block (LedgerState (..))
2329
import Ouroboros.Consensus.Shelley.Eras (StandardConway ())
2430
import Ouroboros.Consensus.Shelley.Ledger (ShelleyBlock ())
25-
import Prelude ()
31+
import qualified Prelude
2632

2733
newtype ShelleyLedgerState era = ShelleyLedgerState
2834
{unState :: LedgerState (ShelleyBlock PraosStandard era)}
@@ -81,3 +87,31 @@ forgeBlocksChunked interpreter vs f = forM (chunksOf 500 vs) $ \blockCreds -> do
8187
forM (chunksOf 10 blockCreds) $ \txCreds ->
8288
f txCreds (ShelleyLedgerState state')
8389
forgeNextFindLeader interpreter (TxConway <$> blockTxs)
90+
91+
registerDRepsAndDelegateVotes :: Interpreter -> IO CardanoBlock
92+
registerDRepsAndDelegateVotes interpreter = do
93+
blockTxs <-
94+
withConwayLedgerState interpreter $
95+
registerDRepAndDelegateVotes'
96+
(Prelude.head unregisteredDRepIds)
97+
(StakeIndex 4)
98+
99+
forgeNextFindLeader interpreter (map TxConway blockTxs)
100+
101+
registerDRepAndDelegateVotes' ::
102+
Credential 'DRepRole StandardCrypto ->
103+
StakeIndex ->
104+
Conway.ConwayLedgerState ->
105+
Either ForgingError [AlonzoTx StandardConway]
106+
registerDRepAndDelegateVotes' drepId stakeIx ledger = do
107+
stakeCreds <- resolveStakeCreds stakeIx ledger
108+
109+
let utxoStake = UTxOAddressNewWithStake 0 stakeIx
110+
regDelegCert =
111+
Conway.mkDelegTxCert (DelegVote $ DRepCredential drepId) stakeCreds
112+
113+
paymentTx <- Conway.mkPaymentTx (UTxOIndex 0) utxoStake 10_000 500 ledger
114+
regTx <- Conway.mkRegisterDRepTx drepId
115+
delegTx <- Conway.mkDCertTx [regDelegCert] (Withdrawals mempty) Nothing
116+
117+
pure [paymentTx, regTx, delegTx]

cardano-chain-gen/src/Cardano/Mock/Forging/Tx/Generic.hs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ module Cardano.Mock.Forging.Tx.Generic (
2424
unregisteredPools,
2525
registeredByronGenesisKeys,
2626
registeredShelleyGenesisKeys,
27-
bootstrapDRepIds,
27+
bootstrapCommitteeCreds,
28+
unregisteredDRepIds,
2829
consPoolParams,
2930
getPoolStakeCreds,
3031
) where
@@ -263,14 +264,18 @@ registeredShelleyGenesisKeys =
263264
, KeyHash "471cc34983f6a2fd7b4018e3147532185d69a448d6570d46019e58e6"
264265
]
265266

266-
bootstrapDRepIds :: [Credential 'DRepRole StandardCrypto]
267-
bootstrapDRepIds =
267+
bootstrapCommitteeCreds :: [Credential 'ColdCommitteeRole StandardCrypto]
268+
bootstrapCommitteeCreds =
268269
[ KeyHashObj $ KeyHash "2c698e41831684b16477fb50082b0c0e396d436504e39037d5366582"
269270
, KeyHashObj $ KeyHash "8fc13431159fdda66347a38c55105d50d77d67abc1c368b876d52ad1"
270271
, KeyHashObj $ KeyHash "921e1ccb4812c4280510c9ccab81c561f3d413e7d744d48d61215d1f"
271272
, KeyHashObj $ KeyHash "d5d09d9380cf9dcde1f3c6cd88b08ca9e00a3d550022ca7ee4026342"
272273
]
273274

275+
unregisteredDRepIds :: [Credential 'DRepRole StandardCrypto]
276+
unregisteredDRepIds =
277+
[KeyHashObj $ KeyHash "0d94e174732ef9aae73f395ab44507bfa983d65023c11a951f0c32e4"]
278+
274279
createStakeCredentials :: Int -> [StakeCredential StandardCrypto]
275280
createStakeCredentials n =
276281
fmap (KeyHashObj . KeyHash . mkDummyHash (Proxy @(ADDRHASH StandardCrypto))) [1 .. n]

cardano-chain-gen/test/Test/Cardano/Db/Mock/UnifiedApi.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ module Test.Cardano.Db.Mock.UnifiedApi (
2121
fillEpochPercentage,
2222
rollbackTo,
2323
registerAllStakeCreds,
24+
registerDRepsAndDelegateVotes,
2425
) where
2526

2627
import Cardano.Ledger.Alonzo (AlonzoEra)
2728
import qualified Cardano.Ledger.Core as Core
2829
import Cardano.Mock.ChainSync.Server
2930
import Cardano.Mock.Forging.Interpreter
31+
import qualified Cardano.Mock.Forging.Tx.Conway.Scenarios as Conway
3032
import Cardano.Mock.Forging.Types
3133
import Cardano.Slotting.Slot (SlotNo (..))
3234
import Control.Concurrent.Class.MonadSTM.Strict (atomically)
@@ -207,6 +209,12 @@ registerAllStakeCreds interpreter mockServer = do
207209
atomically $ addBlock mockServer blk
208210
pure blk
209211

212+
registerDRepsAndDelegateVotes :: Interpreter -> ServerHandle IO CardanoBlock -> IO CardanoBlock
213+
registerDRepsAndDelegateVotes interpreter mockServer = do
214+
blk <- Conway.registerDRepsAndDelegateVotes interpreter
215+
atomically (addBlock mockServer blk)
216+
pure blk
217+
210218
-- Expected number. This should be taken from the parameters, instead of hardcoded.
211219
blocksPerEpoch :: Int
212220
blocksPerEpoch = 100

cardano-chain-gen/test/Test/Cardano/Db/Mock/Unit/Conway/Governance.hs

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,21 @@ module Test.Cardano.Db.Mock.Unit.Conway.Governance (
88
) where
99

1010
import Cardano.DbSync.Era.Shelley.Generic.Util (unCredentialHash)
11-
import Cardano.Ledger.Address (Withdrawals (..))
12-
import Cardano.Ledger.Alonzo.Tx (AlonzoTx)
1311
import Cardano.Ledger.Conway.Governance (GovActionId (..), GovActionIx (..), Voter (..))
14-
import Cardano.Ledger.Conway.TxCert (Delegatee (..))
1512
import Cardano.Ledger.Core (txIdTx)
1613
import Cardano.Ledger.Credential (Credential (..))
17-
import Cardano.Ledger.DRep (DRep (..))
18-
import Cardano.Ledger.Keys (KeyHash (..), KeyRole (..))
14+
import Cardano.Ledger.Keys (KeyHash (..))
1915
import Cardano.Mock.ChainSync.Server (IOManager)
2016
import qualified Cardano.Mock.Forging.Tx.Conway as Conway
2117
import qualified Cardano.Mock.Forging.Tx.Generic as Forging
2218
import Cardano.Mock.Forging.Types
2319
import qualified Cardano.Mock.Query as Query
2420
import Cardano.Prelude
25-
import Ouroboros.Consensus.Shelley.Eras (StandardConway, StandardCrypto)
2621
import Test.Cardano.Db.Mock.Config
2722
import qualified Test.Cardano.Db.Mock.UnifiedApi as Api
2823
import Test.Cardano.Db.Mock.Validate
2924
import Test.Tasty.HUnit (Assertion)
30-
import Prelude ()
25+
import qualified Prelude
3126

3227
drepDistr :: IOManager -> [(Text, Text)] -> Assertion
3328
drepDistr =
@@ -37,14 +32,8 @@ drepDistr =
3732
-- Add stake
3833
void (Api.registerAllStakeCreds interpreter server)
3934

40-
-- Register a DRep
41-
let drepHash = "0d94e174732ef9aae73f395ab44507bfa983d65023c11a951f0c32e4"
42-
drepId = KeyHashObj (KeyHash drepHash)
43-
4435
-- Register DRep and delegate votes to it
45-
void $
46-
Api.withConwayFindLeaderAndSubmit interpreter server $ \ledger ->
47-
registerDRepAndDelegateVotes drepId (StakeIndex 4) ledger
36+
void (Api.registerDRepsAndDelegateVotes interpreter server)
4837

4938
-- DRep distribution is calculated at end of the current epoch
5039
epoch1 <- Api.fillUntilNextEpoch interpreter server
@@ -53,6 +42,7 @@ drepDistr =
5342
assertBlockNoBackoff dbSync (length epoch1 + 2)
5443

5544
-- Should now have a DRep distribution
45+
let drepId = Prelude.head Forging.unregisteredDRepIds
5646
assertEqQuery
5747
dbSync
5848
(Query.queryDRepDistrAmount (unCredentialHash drepId) 1)
@@ -69,14 +59,8 @@ newCommittee =
6959
-- Add stake
7060
void (Api.registerAllStakeCreds interpreter server)
7161

72-
-- Register a DRep
73-
let drepHash = "0d94e174732ef9aae73f395ab44507bfa983d65023c11a951f0c32e4"
74-
drepId = KeyHashObj (KeyHash drepHash)
75-
76-
-- Register DRep and delegate votes to it
77-
void $
78-
Api.withConwayFindLeaderAndSubmit interpreter server $ \ledger ->
79-
registerDRepAndDelegateVotes drepId (StakeIndex 4) ledger
62+
-- Register a DRep and delegate votes to it
63+
void (Api.registerDRepsAndDelegateVotes interpreter server)
8064

8165
-- Create and vote for gov action
8266
let committeeHash = "e0a714319812c3f773ba04ec5d6b3ffcd5aad85006805b047b082541"
@@ -92,7 +76,7 @@ newCommittee =
9276
addVoteTx =
9377
Conway.mkGovVoteTx
9478
govActionId
95-
[ DRepVoter drepId
79+
[ DRepVoter (Prelude.head Forging.unregisteredDRepIds)
9680
, StakePoolVoter (Forging.resolvePool (PoolIndex 0) ledger)
9781
, StakePoolVoter (Forging.resolvePool (PoolIndex 1) ledger)
9882
, StakePoolVoter (Forging.resolvePool (PoolIndex 2) ledger)
@@ -120,21 +104,3 @@ newCommittee =
120104
"Unexpected committee hashes"
121105
where
122106
testLabel = "conwayNewCommittee"
123-
124-
registerDRepAndDelegateVotes ::
125-
Credential 'DRepRole StandardCrypto ->
126-
StakeIndex ->
127-
Conway.ConwayLedgerState ->
128-
Either ForgingError [AlonzoTx StandardConway]
129-
registerDRepAndDelegateVotes drepId stakeIx ledger = do
130-
stakeCreds <- Forging.resolveStakeCreds stakeIx ledger
131-
132-
let utxoStake = UTxOAddressNewWithStake 0 stakeIx
133-
regDelegCert =
134-
Conway.mkDelegTxCert (DelegVote $ DRepCredential drepId) stakeCreds
135-
136-
paymentTx <- Conway.mkPaymentTx (UTxOIndex 0) utxoStake 10_000 500 ledger
137-
regTx <- Conway.mkRegisterDRepTx drepId
138-
delegTx <- Conway.mkDCertTx [regDelegCert] (Withdrawals mempty) Nothing
139-
140-
pure [paymentTx, regTx, delegTx]

0 commit comments

Comments
 (0)