@@ -15,7 +15,7 @@ module HydraSdk.Example.Minimal.App
1515
1616import Prelude
1717
18- import Cardano.Types (TransactionInput , TransactionOutput )
18+ import Cardano.Types (NetworkId (MainnetId, TestnetId), TransactionInput , TransactionOutput )
1919import Contract.Config
2020 ( ContractParams
2121 , PrivatePaymentKeySource (PrivatePaymentKeyFile)
@@ -39,7 +39,9 @@ import Ctl.Internal.ServerConfig (blockfrostPublicSanchonetServerConfig)
3939import Data.Log.Formatter.Pretty (prettyFormatter )
4040import Data.Log.Message (Message )
4141import Data.Maybe (Maybe (Just, Nothing), maybe )
42+ import Data.String (take , trim ) as String
4243import Data.Tuple (Tuple (Tuple))
44+ import Data.Tuple.Nested (type (/\), (/\))
4345import Effect (Effect )
4446import Effect.AVar (AVar )
4547import Effect.Aff (Aff , launchAff )
@@ -58,6 +60,8 @@ import HydraSdk.Types
5860 , emptySnapshot
5961 , networkToNetworkId
6062 )
63+ import Node.Encoding (Encoding (UTF8))
64+ import Node.FS.Sync (readTextFile )
6165
6266type AppM (a :: Type ) = LoggerT (ReaderT AppState Aff ) a
6367
@@ -109,9 +113,9 @@ setUtxoSnapshot snapshot =
109113 =<< asks _.utxoSnapshot
110114
111115initApp :: DelegateServerConfig -> Aff AppState
112- initApp config@{ hydraNodeStartupParams: { network, cardanoSigningKey }, commitOutRef } = do
113- backendParams <- liftEffect mkBackendParams
114- contractEnv <- mkContractEnv $ contractParams backendParams
116+ initApp config@{ hydraNodeStartupParams: { cardanoSigningKey }, commitOutRef } = do
117+ networkId /\ backendParams <- liftEffect mkBackendParams
118+ contractEnv <- mkContractEnv $ contractParams backendParams networkId
115119 commitUtxo <- runContractInEnv contractEnv do
116120 oref <- maybe getCollateral pure commitOutRef
117121 resolveCommitOutRef oref
@@ -134,29 +138,31 @@ initApp config@{ hydraNodeStartupParams: { network, cardanoSigningKey }, commitO
134138 =<< getUtxo oref
135139 )
136140
137- mkBackendParams :: Effect ProviderBackendParams
141+ mkBackendParams :: Effect ( NetworkId /\ ProviderBackendParams )
138142 mkBackendParams = do
139- blockfrostConfig <-
140- case network of
141- Mainnet -> pure blockfrostPublicMainnetServerConfig
142- Testnet { magic } ->
143- case magic of
144- 1 -> pure blockfrostPublicPreprodServerConfig
145- 2 -> pure blockfrostPublicPreviewServerConfig
146- 4 -> pure blockfrostPublicSanchonetServerConfig
147- _ ->
148- throw $ " mkBackendParams: unsupported testnet network with magic: "
149- <> show magic
150- pure $ mkBlockfrostBackendParams
143+ blockfrostApiKey <- String .trim <$> readTextFile UTF8 config.blockfrostApiKeyFile
144+ let networkPrefix = String .take 7 blockfrostApiKey
145+ networkId /\ blockfrostConfig <-
146+ case networkPrefix of
147+ " mainnet" ->
148+ pure $ MainnetId /\ blockfrostPublicMainnetServerConfig
149+ " preprod" ->
150+ pure $ TestnetId /\ blockfrostPublicPreprodServerConfig
151+ " preview" ->
152+ pure $ TestnetId /\ blockfrostPublicPreviewServerConfig
153+ _ ->
154+ throw $ " mkBackendParams: unsupported network. Blockfrost API key prefix: "
155+ <> networkPrefix
156+ pure $ networkId /\ mkBlockfrostBackendParams
151157 { blockfrostConfig
152- , blockfrostApiKey: config. blockfrostApiKey
158+ , blockfrostApiKey: Just blockfrostApiKey
153159 , confirmTxDelay: defaultConfirmTxDelay
154160 }
155161
156- contractParams :: ProviderBackendParams -> ContractParams
157- contractParams backendParams =
162+ contractParams :: ProviderBackendParams -> NetworkId -> ContractParams
163+ contractParams backendParams networkId =
158164 { backendParams
159- , networkId: networkToNetworkId network
165+ , networkId
160166 , logLevel: config.ctlLogLevel
161167 , walletSpec: Just $ UseKeys (PrivatePaymentKeyFile cardanoSigningKey) Nothing Nothing
162168 , customLogger: Nothing
0 commit comments