Skip to content

Commit 8b921d1

Browse files
committed
Connect network file parsing with argument parsing
Signed-off-by: Sasha Bogicevic <[email protected]>
1 parent 80fff93 commit 8b921d1

File tree

2 files changed

+35
-27
lines changed

2 files changed

+35
-27
lines changed

hydra-node/src/Hydra/NetworkVersions.hs

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,46 +12,37 @@ import Data.Aeson.KeyMap qualified as KeyMap
1212
import Data.Aeson.Lens (members, _Object)
1313
import Data.FileEmbed (embedFile)
1414
import Data.List qualified as List
15-
import Data.Text (splitOn)
15+
import Data.Text (pack, splitOn, toLower, unpack)
1616
import Data.Text.Encoding (encodeUtf8)
17-
import Hydra.Cardano.Api (NetworkId (..), NetworkMagic (..), TxId, deserialiseFromRawBytesHex)
17+
import Hydra.Cardano.Api (TxId, deserialiseFromRawBytesHex)
1818

1919
networkVersionsFile :: ByteString
2020
networkVersionsFile = $(embedFile "./../networks.json")
2121

22-
data ParseError
23-
= ExpectedStringForTxId
22+
data NetworkParseError
23+
= ExpectedJSONStringForTxId
2424
| FailedToParseTextToTxId Text
2525
| UnknownNetwork Text
2626
deriving stock (Eq, Show)
2727

28-
instance Exception ParseError
29-
30-
parseNetworkVersions :: ByteString -> IO [(NetworkId, [TxId])]
31-
parseNetworkVersions bs = do
32-
let info = bs ^@.. members . _Object
33-
fmap catMaybes <$> forM info $ \(n, t) -> do
34-
let textKey = Key.toText n
35-
case textKey of
36-
"mainnet" -> do
37-
txids <- getLastTxId t
38-
pure $ Just (Mainnet, txids)
39-
"preview" -> do
40-
txids <- getLastTxId t
41-
pure $ Just (Testnet $ NetworkMagic 2, txids)
42-
"preprod" -> do
43-
txids <- getLastTxId t
44-
pure $ Just (Testnet $ NetworkMagic 1, txids)
45-
_ -> pure Nothing
28+
instance Exception NetworkParseError
29+
30+
parseNetworkTxIds :: String -> Either String [TxId]
31+
parseNetworkTxIds networkString = do
32+
let networkTxt = toLower $ pack networkString
33+
let info = networkVersionsFile ^@.. members . _Object
34+
case find (\(n, _) -> Key.toText n == networkTxt) info of
35+
Nothing -> Left $ "Unknown network:" <> unpack networkTxt
36+
Just (_, t) -> getLastTxId t
4637
where
4738
getLastTxId t = do
4839
lastTxIds <-
4940
case List.last $ KeyMap.elems t of
50-
String s -> pure s
51-
_ -> throwIO ExpectedStringForTxId
41+
String s -> Right s
42+
_ -> Left "Failed to find the last tx-id string in networks.json"
5243
mapM parseToTxId (splitOn "," lastTxIds)
5344

5445
parseToTxId textTxId = do
5546
case deserialiseFromRawBytesHex $ encodeUtf8 textTxId of
56-
Left _ -> throwIO $ FailedToParseTextToTxId textTxId
57-
Right txid -> pure txid
47+
Left _ -> Left $ "Failed to parse string to TxId: " <> unpack textTxId
48+
Right txid -> Right txid

hydra-node/src/Hydra/Options.hs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import Hydra.Contract qualified as Contract
3838
import Hydra.Ledger.Cardano ()
3939
import Hydra.Logging (Verbosity (..))
4040
import Hydra.Network (Host (..), NodeId (NodeId), PortNumber, WhichEtcd (..), readHost, readPort, showHost)
41+
import Hydra.NetworkVersions (parseNetworkTxIds)
4142
import Hydra.Node.DepositPeriod (DepositPeriod (..))
4243
import Hydra.Tx.ContestationPeriod (ContestationPeriod, fromNominalDiffTime)
4344
import Hydra.Tx.HeadId (HeadSeed)
@@ -521,7 +522,7 @@ ledgerGenesisFileParser =
521522
cardanoChainConfigParser :: Parser CardanoChainConfig
522523
cardanoChainConfigParser =
523524
CardanoChainConfig
524-
<$> (hydraScriptsTxIdsParser <|> many hydraScriptsTxIdParser)
525+
<$> ((hydraScriptsTxIdsParser <|> many hydraScriptsTxIdParser) <|> hydraScriptsDefaultParser)
525526
<*> cardanoSigningKeyFileParser
526527
<*> many cardanoVerificationKeyFileParser
527528
<*> optional startChainFromParser
@@ -802,6 +803,22 @@ hydraScriptsTxIdParser =
802803
\can use the 'publish-scripts' sub-command to publish them yourself."
803804
)
804805

806+
hydraScriptsDefaultParser :: Parser [TxId]
807+
hydraScriptsDefaultParser =
808+
option
809+
(eitherReader validateNetwork)
810+
( long "network"
811+
<> metavar "NETWORK"
812+
<> help "Uses the last pre-published hydra scripts for the given network."
813+
)
814+
where
815+
validateNetwork arg =
816+
case arg of
817+
"preview" -> parseNetworkTxIds arg
818+
"preprod" -> parseNetworkTxIds arg
819+
"mainnet" -> parseNetworkTxIds arg
820+
_ -> Left $ "Unknown network: " <> arg
821+
805822
persistenceDirParser :: Parser FilePath
806823
persistenceDirParser =
807824
option

0 commit comments

Comments
 (0)