Skip to content

Commit e55c012

Browse files
committed
Add cardanoMaxSupply :: Word64 field to CardanoTestnetOptions
1 parent 9665b3d commit e55c012

File tree

6 files changed

+7298
-45
lines changed

6 files changed

+7298
-45
lines changed

Diff for: cardano-testnet/src/Parsers/Cardano.hs

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import Testnet
1717
import Testnet.Cardano
1818
import Testnet.Run (runTestnet)
1919
import Testnet.Util.Runtime (readNodeLoggingFormat)
20-
20+
import Testnet.Utils
2121

2222
data CardanoOptions = CardanoOptions
2323
{ maybeTestnetMagic :: Maybe Int
@@ -55,6 +55,7 @@ optsTestnet = CardanoTestnetOptions
5555
<> OA.showDefault
5656
<> OA.value (cardanoActiveSlotsCoeff defaultTestnetOptions)
5757
)
58+
<*> pMaxLovelaceSupply
5859
<*> OA.option auto
5960
( OA.long "enable-p2p"
6061
<> OA.help "Enable P2P"

Diff for: cardano-testnet/src/Parsers/Shelley.hs

+6-16
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,16 @@ module Parsers.Shelley
44
, runShelleyOptions
55
) where
66

7+
import Prelude
78

8-
import Data.Eq
9-
import Data.Function
10-
import Data.Int
11-
import Data.Maybe
12-
import Data.Semigroup
139
import Options.Applicative
14-
import System.IO (IO)
15-
import Testnet.Run (runTestnet)
10+
import qualified Options.Applicative as OA
11+
1612
import Testnet
13+
import Testnet.Run (runTestnet)
1714
import Testnet.Shelley
18-
import Text.Show
15+
import Testnet.Utils
1916

20-
import qualified Options.Applicative as OA
2117

2218
data ShelleyOptions = ShelleyOptions
2319
{ maybeTestnetMagic :: Maybe Int
@@ -68,13 +64,7 @@ optsTestnet = ShelleyTestnetOptions
6864
<> OA.showDefault
6965
<> OA.value (shelleySlotLength defaultTestnetOptions)
7066
)
71-
<*> OA.option auto
72-
( OA.long "max-lovelace-supply"
73-
<> OA.help "Max lovelace supply"
74-
<> OA.metavar "INTEGER"
75-
<> OA.showDefault
76-
<> OA.value (shelleyMaxLovelaceSupply defaultTestnetOptions)
77-
)
67+
<*> pMaxLovelaceSupply
7868
<*> OA.option auto
7969
( OA.long "enable-p2p"
8070
<> OA.help "Enable P2P"

Diff for: cardano-testnet/src/Testnet/Cardano.hs

+25-20
Original file line numberDiff line numberDiff line change
@@ -23,51 +23,54 @@ module Testnet.Cardano
2323

2424
import Prelude
2525

26-
import qualified Cardano.Crypto.Hash.Blake2b
27-
import qualified Cardano.Crypto.Hash.Class
2826
import Control.Monad
2927
import Control.Monad.IO.Class (MonadIO, liftIO)
3028
import Control.Monad.Trans.Except
3129
import Data.Aeson ((.=))
30+
import qualified Data.Aeson as J
3231
import qualified Data.ByteString as BS
3332
import Data.ByteString.Lazy (ByteString)
33+
import qualified Data.HashMap.Lazy as HM
3434
import Data.List ((\\))
35+
import qualified Data.List as L
36+
import qualified Data.Map.Strict as M
3537
import Data.Maybe
3638
import Data.String
37-
import qualified Hedgehog as H
38-
import Hedgehog.Extras.Stock.IO.Network.Sprocket (Sprocket (..))
39-
import Hedgehog.Extras.Stock.Time (formatIso8601, showUTCTimeSeconds)
40-
import Ouroboros.Network.PeerSelection.LedgerPeers (UseLedgerAfter (..))
41-
import Ouroboros.Network.PeerSelection.RelayAccessPoint (RelayAccessPoint (..))
39+
import qualified Data.Time.Clock as DTC
40+
import Data.Word
41+
import qualified System.Directory as IO
4242
import System.FilePath.Posix ((</>))
43+
import qualified System.Info as OS
4344

4445
import Cardano.Chain.Genesis (GenesisHash (unGenesisHash), readGenesisData)
46+
import qualified Cardano.Crypto.Hash.Blake2b
47+
import qualified Cardano.Crypto.Hash.Class
48+
import Ouroboros.Network.PeerSelection.LedgerPeers (UseLedgerAfter (..))
49+
import Ouroboros.Network.PeerSelection.RelayAccessPoint (RelayAccessPoint (..))
50+
4551
import qualified Cardano.Node.Configuration.Topology as NonP2P
4652
import qualified Cardano.Node.Configuration.TopologyP2P as P2P
47-
import qualified Data.Aeson as J
48-
import qualified Data.HashMap.Lazy as HM
49-
import qualified Data.List as L
50-
import qualified Data.Map.Strict as M
51-
import qualified Data.Time.Clock as DTC
53+
54+
import qualified Hedgehog as H
5255
import qualified Hedgehog.Extras.Stock.Aeson as J
5356
import qualified Hedgehog.Extras.Stock.IO.Network.Socket as IO
57+
import Hedgehog.Extras.Stock.IO.Network.Sprocket (Sprocket (..))
5458
import qualified Hedgehog.Extras.Stock.IO.Network.Sprocket as IO
5559
import qualified Hedgehog.Extras.Stock.OS as OS
5660
import qualified Hedgehog.Extras.Stock.String as S
61+
import Hedgehog.Extras.Stock.Time (formatIso8601, showUTCTimeSeconds)
5762
import qualified Hedgehog.Extras.Test.Base as H
5863
import qualified Hedgehog.Extras.Test.Concurrent as H
5964
import qualified Hedgehog.Extras.Test.File as H
6065
import qualified Hedgehog.Extras.Test.Network as H
61-
import qualified System.Directory as IO
62-
import qualified System.Info as OS
66+
67+
import qualified Testnet.Conf as H
6368
import qualified Testnet.Util.Assert as H
6469
import qualified Testnet.Util.Process as H
6570
import Testnet.Util.Process (execCli_)
6671
import Testnet.Util.Runtime as TR (NodeLoggingFormat (..), PaymentKeyPair (..),
6772
PoolNode (PoolNode), PoolNodeKeys (..), TestnetRuntime (..), startNode)
6873

69-
import qualified Testnet.Conf as H
70-
7174
{- HLINT ignore "Redundant flip" -}
7275
{- HLINT ignore "Redundant id" -}
7376
{- HLINT ignore "Use let" -}
@@ -87,6 +90,7 @@ data CardanoTestnetOptions = CardanoTestnetOptions
8790
, cardanoEpochLength :: Int
8891
, cardanoSlotLength :: Double
8992
, cardanoActiveSlotsCoeff :: Double
93+
, cardanoMaxSupply :: Word64 -- ^ The amount of ADA you are starting your testnet with
9094
, cardanoEnableP2P :: Bool
9195
, cardanoNodeLoggingFormat :: NodeLoggingFormat
9296
} deriving (Eq, Show)
@@ -98,6 +102,7 @@ defaultTestnetOptions = CardanoTestnetOptions
98102
, cardanoEpochLength = 1500
99103
, cardanoSlotLength = 0.2
100104
, cardanoActiveSlotsCoeff = 0.2
105+
, cardanoMaxSupply = 10020000000
101106
, cardanoEnableP2P = False
102107
, cardanoNodeLoggingFormat = NodeLoggingFormatAsText
103108
}
@@ -190,8 +195,8 @@ cardanoTestnet testnetOptions H.Conf {..} = do
190195
bftNodeNames = ("node-bft" <>) . show @Int <$> bftNodesN
191196
poolNodeNames = ("node-pool" <>) . show @Int <$> poolNodesN
192197
allNodeNames = bftNodeNames <> poolNodeNames
193-
maxByronSupply = 10020000000
194-
fundsPerGenesisAddress = maxByronSupply `div` numBftNodes
198+
maxByronSupply = cardanoMaxSupply testnetOptions
199+
fundsPerGenesisAddress = maxByronSupply `div` fromIntegral numBftNodes
195200
fundsPerByronAddress = fundsPerGenesisAddress - 100000000
196201
userPoolN = poolNodesN
197202
maxShelleySupply = 1000000000000
@@ -309,7 +314,7 @@ cardanoTestnet testnetOptions H.Conf {..} = do
309314
, "--k", show @Int securityParam
310315
, "--n-poor-addresses", "0"
311316
, "--n-delegate-addresses", show @Int numBftNodes
312-
, "--total-balance", show @Int maxByronSupply
317+
, "--total-balance", show @Word64 maxByronSupply
313318
, "--delegate-share", "1"
314319
, "--avvm-entry-count", "0"
315320
, "--avvm-entry-balance", "0"
@@ -359,7 +364,7 @@ cardanoTestnet testnetOptions H.Conf {..} = do
359364
, "--tx", tempAbsPath </> "tx0.tx"
360365
, "--wallet-key", tempAbsPath </> "byron/delegate-keys.000.key"
361366
, "--rich-addr-from", richAddrFrom
362-
, "--txout", show @(String, Int) (txAddr, fundsPerByronAddress)
367+
, "--txout", show @(String, Word64) (txAddr, fundsPerByronAddress)
363368
]
364369

365370
-- Update Proposal and votes

Diff for: cardano-testnet/src/Testnet/Shelley.hs

+7-4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ module Testnet.Shelley
1212
, hprop_testnet_pause
1313
) where
1414

15+
import Prelude
16+
17+
1518
import Control.Monad
1619
import Control.Monad.IO.Class (MonadIO (liftIO))
1720
import Control.Monad.Trans.Resource (MonadResource (liftResourceT), resourceForkIO)
@@ -22,11 +25,11 @@ import Data.List ((\\))
2225
import Data.Maybe
2326
import Data.String
2427
import Data.Time.Clock (UTCTime)
28+
import Data.Word
2529
import Hedgehog.Extras.Stock.Aeson (rewriteObject)
2630
import Hedgehog.Extras.Stock.IO.Network.Sprocket (Sprocket (..))
2731
import Ouroboros.Network.PeerSelection.LedgerPeers (UseLedgerAfter (..))
2832
import Ouroboros.Network.PeerSelection.RelayAccessPoint (RelayAccessPoint (..))
29-
import Prelude
3033
import System.FilePath.Posix ((</>))
3134

3235
import qualified Cardano.Node.Configuration.Topology as NonP2P
@@ -67,7 +70,7 @@ data ShelleyTestnetOptions = ShelleyTestnetOptions
6770
, shelleySecurityParam :: Int
6871
, shelleyEpochLength :: Int
6972
, shelleySlotLength :: Double
70-
, shelleyMaxLovelaceSupply :: Integer
73+
, shelleyMaxLovelaceSupply :: Word64
7174
, shelleyEnableP2P :: Bool
7275
} deriving (Eq, Show)
7376

@@ -101,7 +104,7 @@ rewriteGenesisSpec testnetOptions startTime =
101104
. HM.insert "securityParam" (J.toJSON @Int (shelleySecurityParam testnetOptions))
102105
. HM.insert "epochLength" (J.toJSON @Int (shelleyEpochLength testnetOptions))
103106
. HM.insert "slotLength" (J.toJSON @Double (shelleySlotLength testnetOptions))
104-
. HM.insert "maxLovelaceSupply" (J.toJSON @Integer (shelleyMaxLovelaceSupply testnetOptions))
107+
. HM.insert "maxLovelaceSupply" (J.toJSON @Word64 (shelleyMaxLovelaceSupply testnetOptions))
105108
. HM.insert "systemStart" (J.toJSON @String (DTC.formatIso8601 startTime))
106109
. flip HM.adjust "protocolParams"
107110
( rewriteObject (HM.insert "decentralisationParam" (toJSON @Double 0.7))
@@ -362,7 +365,7 @@ shelleyTestnet testnetOptions H.Conf {..} = do
362365
, "--invalid-hereafter", "1000"
363366
, "--fee", "0"
364367
, "--tx-in", genesisTxinResult
365-
, "--tx-out", userNAddr <> "+" <> show @Integer (shelleyMaxLovelaceSupply testnetOptions)
368+
, "--tx-out", userNAddr <> "+" <> show @Word64 (shelleyMaxLovelaceSupply testnetOptions)
366369
, "--certificate-file", tempAbsPath </> "addresses/pool-owner" <> n <> "-stake.reg.cert"
367370
, "--certificate-file", tempAbsPath </> "node-pool" <> n <> "/registration.cert"
368371
, "--certificate-file", tempAbsPath </> "addresses/user" <> n <> "-stake.reg.cert"

Diff for: cardano-testnet/src/Testnet/Utils.hs

+23-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ module Testnet.Utils
55
( QueryTipOutput(..)
66
, queryTip
77
, waitUntilEpoch
8+
9+
-- ** Parsers
10+
, pMaxLovelaceSupply
811
) where
912

1013
import Cardano.Api
@@ -15,16 +18,19 @@ import Control.Concurrent (threadDelay)
1518
import Control.Exception.Safe (MonadCatch)
1619
import Control.Monad
1720
import Control.Monad.IO.Class
18-
import Data.Aeson (fromJSON)
21+
import Data.Aeson
22+
import Data.Word
1923
import GHC.Stack
20-
import Hedgehog.Extras.Test.Process (ExecConfig)
21-
import Hedgehog.Internal.Property (MonadTest)
24+
import Options.Applicative
2225
import System.Directory (doesFileExist, removeFile)
2326

2427
import qualified Hedgehog.Extras.Test.Base as H
2528
import qualified Hedgehog.Extras.Test.File as H
26-
import qualified Testnet.Util.Process as H
29+
import Hedgehog.Extras.Test.Process (ExecConfig)
30+
import Hedgehog.Internal.Property (MonadTest)
2731

32+
import Testnet.Cardano (CardanoTestnetOptions (..), defaultTestnetOptions)
33+
import qualified Testnet.Util.Process as H
2834

2935
-- | Submit the desired epoch to wait to.
3036
waitUntilEpoch
@@ -81,3 +87,16 @@ queryTip (QueryTipOutput fp) testnetMag execConfig = do
8187
H.noteShowM $ H.jsonErrorFail $ fromJSON @QueryTipLocalStateOutput tipJSON
8288

8389
newtype QueryTipOutput = QueryTipOutput { unQueryTipOutput :: FilePath}
90+
91+
92+
-- Parsers
93+
94+
pMaxLovelaceSupply :: Parser Word64
95+
pMaxLovelaceSupply =
96+
option auto
97+
( long "max-lovelace-supply"
98+
<> help "Max lovelace supply that your testnet starts with."
99+
<> metavar "WORD64"
100+
<> showDefault
101+
<> value (cardanoMaxSupply defaultTestnetOptions)
102+
)

0 commit comments

Comments
 (0)