Skip to content

Commit

Permalink
Consolidate all node queries in Convex.NodeQueries
Browse files Browse the repository at this point in the history
* Era-independent queries for the two supported eras
* Remove NodeQueries module from convex-devnet
* Consistent parameters and exception handling
  • Loading branch information
j-mueller committed Oct 17, 2024
1 parent 10cc195 commit a58c894
Show file tree
Hide file tree
Showing 8 changed files with 247 additions and 284 deletions.
263 changes: 227 additions & 36 deletions src/base/lib/Convex/NodeQueries.hs

Large diffs are not rendered by default.

5 changes: 0 additions & 5 deletions src/devnet/convex-devnet.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ library
Convex.Devnet.CardanoNode
Convex.Devnet.CardanoNode.Types
Convex.Devnet.Logging
Convex.Devnet.NodeQueries
Convex.Devnet.Utils
Convex.Devnet.Wallet
Convex.Devnet.WalletServer
Expand All @@ -64,8 +63,6 @@ library
, temporary
, async
, unix
, exceptions
, containers
, convex-wallet
, convex-base
, convex-optics
Expand All @@ -86,9 +83,7 @@ library
, cardano-slotting
, cardano-ledger-conway
, io-classes
, ouroboros-consensus
, ouroboros-consensus-cardano
, ouroboros-network-protocols

-- logging
, contra-tracer
Expand Down
17 changes: 9 additions & 8 deletions src/devnet/lib/Convex/Devnet/CardanoNode.hs
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,11 @@ import Convex.Devnet.CardanoNode.Types (GenesisConfigChanges (..),
RunningStakePoolNode (..),
StakePoolNodeParams (..),
defaultPortsConfig)
import qualified Convex.Devnet.NodeQueries as Q
import Convex.Devnet.Utils (checkProcessHasNotDied,
defaultNetworkId, failure,
readConfigFile, withLogFile)
import qualified Convex.Devnet.Wallet as W
import qualified Convex.NodeQueries as Q
import Convex.Wallet (Wallet, paymentCredential)
import Data.Aeson (FromJSON, ToJSON (toJSON),
(.=))
Expand Down Expand Up @@ -240,13 +240,14 @@ waitForFullySynchronized ::
RunningNode ->
IO ()
waitForFullySynchronized tracer RunningNode{rnNodeSocket, rnNetworkId} = do
systemStart <- Q.querySystemStart rnNetworkId rnNodeSocket
let info = Q.localNodeConnectInfo rnNetworkId rnNodeSocket
systemStart <- Q.querySystemStart info
check systemStart
where
check systemStart = do
targetTime <- toRelativeTime systemStart <$> getCurrentTime
eraHistory <- Q.queryEraHistory rnNetworkId rnNodeSocket
(tipSlotNo, _slotLength) <- Q.queryTipSlotNo rnNetworkId rnNodeSocket
eraHistory <- Q.queryEraHistory (Q.localNodeConnectInfo rnNetworkId rnNodeSocket)
(tipSlotNo, _slotLength) <- Q.queryTipSlotNo (Q.localNodeConnectInfo rnNetworkId rnNodeSocket)
(tipTime, _slotLength) <- either throwIO pure $ C.getProgress tipSlotNo eraHistory
let timeDifference = diffRelativeTime targetTime tipTime
let percentDone = realToFrac (100.0 * getRelativeTime tipTime / getRelativeTime targetTime)
Expand All @@ -259,7 +260,7 @@ waitForFullySynchronized tracer RunningNode{rnNodeSocket, rnNetworkId} = do
-}
waitForBlock :: RunningNode -> IO C.BlockNo
waitForBlock n@RunningNode{rnNodeSocket, rnNetworkId} = do
withOriginToMaybe <$> Q.queryTipBlock rnNetworkId rnNodeSocket >>= \case
withOriginToMaybe <$> Q.queryTipBlock (Q.localNodeConnectInfo rnNetworkId rnNodeSocket) >>= \case
Just blockNo | blockNo >= 1 -> pure blockNo
_ -> do
threadDelay 1_000_000 >> waitForBlock n
Expand All @@ -278,12 +279,12 @@ waitForNextBlock' node blockNo = do

waitForNextEpoch :: RunningNode -> IO C.EpochNo
waitForNextEpoch n@RunningNode{rnNodeSocket, rnNetworkId} = do
currentEpochNo <- Q.queryEpoch rnNetworkId rnNodeSocket
currentEpochNo <- Q.queryEpoch (Q.localNodeConnectInfo rnNetworkId rnNodeSocket)
waitForNextEpoch' n currentEpochNo

waitForNextEpoch' :: RunningNode -> C.EpochNo -> IO C.EpochNo
waitForNextEpoch' n@RunningNode{rnNodeSocket, rnNetworkId} epochNo = do
currentEpochNo <- Q.queryEpoch rnNetworkId rnNodeSocket
currentEpochNo <- Q.queryEpoch (Q.localNodeConnectInfo rnNetworkId rnNodeSocket)
if currentEpochNo > epochNo then
pure currentEpochNo else
threadDelay 1_000_000 >> waitForNextEpoch' n epochNo
Expand Down Expand Up @@ -500,7 +501,7 @@ withCardanoStakePoolNodeDevnetConfig tracer stateDirectory wallet params nodeCon
kesKey <- C.generateSigningKey C.AsKesKey
stakePoolKey <- C.generateSigningKey C.AsStakePoolKey

C.SlotNo slotNo <- fst <$> Q.queryTipSlotNo rnNetworkId rnNodeSocket
C.SlotNo slotNo <- fst <$> Q.queryTipSlotNo (Q.localNodeConnectInfo rnNetworkId rnNodeSocket)

let
minDeposit = 500_000_000
Expand Down
223 changes: 0 additions & 223 deletions src/devnet/lib/Convex/Devnet/NodeQueries.hs

This file was deleted.

7 changes: 3 additions & 4 deletions src/devnet/lib/Convex/Devnet/Wallet.hs
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,11 @@ import Convex.Class (MonadBlockchain (queryNetworkI
import Convex.CoinSelection (ChangeOutputPosition (TrailingChange))
import qualified Convex.CoinSelection as CoinSelection
import Convex.Devnet.CardanoNode.Types (RunningNode (..))
import qualified Convex.Devnet.NodeQueries as NodeQueries
import Convex.Devnet.Utils (keysFor)
import Convex.MonadLog (MonadLog (..))
import qualified Convex.NodeQueries as NodeQueries
import Convex.Utils (failOnError)
import Convex.Utxos (UtxoSet)
import qualified Convex.Utxos as Utxos
import Convex.Wallet (Wallet (..), address)
import qualified Convex.Wallet as Wallet
import Data.Aeson (FromJSON, ToJSON)
Expand All @@ -61,7 +60,7 @@ faucet = Wallet . snd <$> keysFor "faucet"
-}
walletUtxos :: RunningNode -> Wallet -> IO (UtxoSet C.CtxUTxO ())
walletUtxos RunningNode{rnNodeSocket, rnNetworkId} wllt =
Utxos.fromApiUtxo <$> NodeQueries.queryUTxO @C.ConwayEra rnNetworkId rnNodeSocket [address rnNetworkId wllt]
NodeQueries.queryUTxOByAddress (NodeQueries.localNodeConnectInfo rnNetworkId rnNodeSocket) [C.toAddressAny $ address rnNetworkId wllt]

{-| Send @n@ times the given amount of lovelace to the address
-}
Expand All @@ -77,7 +76,7 @@ createSeededWallet :: Tracer IO WalletLog -> RunningNode -> Int -> Quantity -> I
createSeededWallet tracer node@RunningNode{rnNetworkId, rnNodeSocket} n amount = do
wallet <- Wallet.generateWallet
traceWith tracer (GeneratedWallet wallet)
sendFaucetFundsTo tracer node (Wallet.addressInEra rnNetworkId wallet) n amount >>= NodeQueries.waitForTxn rnNetworkId rnNodeSocket
sendFaucetFundsTo tracer node (Wallet.addressInEra rnNetworkId wallet) n amount >>= NodeQueries.waitForTx (NodeQueries.localNodeConnectInfo rnNetworkId rnNodeSocket)
pure wallet

{-| Run a 'MonadBlockchain' action, using the @Tracer@ for log messages and the
Expand Down
4 changes: 2 additions & 2 deletions src/devnet/lib/Convex/Devnet/WalletServer.hs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import qualified Cardano.Api as C
import Control.Concurrent (threadDelay)
import Control.Tracer (Tracer, contramap, traceWith)
import Convex.Devnet.CardanoNode.Types (RunningNode (..))
import qualified Convex.Devnet.NodeQueries as NodeQueries
import Convex.Devnet.Utils (failure, withLogFile)
import qualified Convex.Devnet.Wallet as Wallet
import qualified Convex.NodeQueries as NodeQueries
import Convex.Utxos (UtxoSet)
import qualified Convex.Wallet.API as API
import Convex.Wallet.Cli.Command (CliCommand (..))
Expand Down Expand Up @@ -103,7 +103,7 @@ withWallet tracer stateDirectory rn@RunningNode{rnNodeSocket, rnNodeConfigFile,
, rwsManager
, rwsClient
}
_ <- sendFundsToOperator tracer rn op (C.Quantity 100_000_000) >>= NodeQueries.waitForTxn rnNetworkId rnNodeSocket
_ <- sendFundsToOperator tracer rn op (C.Quantity 100_000_000) >>= NodeQueries.waitForTx (NodeQueries.localNodeConnectInfo rnNetworkId rnNodeSocket)
waitUntilAvailable tracer rws
action rws

Expand Down
Loading

0 comments on commit a58c894

Please sign in to comment.