-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
71 additions
and
61 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
{-| Node queries for use in testnet environments | ||
-} | ||
module Convex.NodeQueries.Debug( | ||
-- The queries in this module are either inefficient (such as 'queryUTxOByAddress') | ||
-- or brittle (such as 'waitForTxIn') | ||
queryUTxOByAddress, | ||
queryUTxOWhole, | ||
waitForTxIn, | ||
waitForTx, | ||
waitForTxInSpend | ||
) where | ||
|
||
import Cardano.Api (LocalNodeConnectInfo, Tx, TxIn) | ||
import qualified Cardano.Api as CAPI | ||
import Control.Concurrent (threadDelay) | ||
import Control.Monad (unless, when) | ||
import Convex.NodeQueries (queryUTxOFilter) | ||
import Convex.Utils (txnUtxos) | ||
import Convex.Utxos (UtxoSet) | ||
import qualified Data.Set as Set | ||
|
||
{-| Get the set of UTxOs for a list of addresses | ||
-} | ||
queryUTxOByAddress :: LocalNodeConnectInfo -> [CAPI.AddressAny] -> IO (UtxoSet CAPI.CtxUTxO ()) | ||
queryUTxOByAddress connectInfo addresses = | ||
queryUTxOFilter connectInfo $ CAPI.QueryUTxOByAddress $ Set.fromList addresses | ||
|
||
{-| Get the entire UTxO set | ||
-} | ||
queryUTxOWhole :: LocalNodeConnectInfo -> IO (UtxoSet CAPI.CtxUTxO ()) | ||
queryUTxOWhole connectInfo = queryUTxOFilter connectInfo CAPI.QueryUTxOWhole | ||
|
||
{-| Wait until the output appears on the chain | ||
-} | ||
waitForTxIn :: LocalNodeConnectInfo -> TxIn -> IO () | ||
waitForTxIn connectInfo txIn = go where | ||
go = do | ||
utxo <- queryUTxOFilter connectInfo (CAPI.QueryUTxOByTxIn (Set.singleton txIn)) | ||
when (utxo == mempty) $ do | ||
threadDelay 2_000_000 | ||
go | ||
|
||
{-| Wait until the first output of the transaction appears on the chain | ||
-} | ||
waitForTx :: forall era. LocalNodeConnectInfo -> Tx era -> IO () | ||
waitForTx connectInfo tx = waitForTxIn connectInfo (fst $ head $ txnUtxos tx) | ||
|
||
{-| Wait until the output disappears from the chain | ||
-} | ||
waitForTxInSpend :: LocalNodeConnectInfo -> TxIn -> IO () | ||
waitForTxInSpend connectInfo txIn = go where | ||
go = do | ||
utxo <- queryUTxOFilter connectInfo (CAPI.QueryUTxOByTxIn (Set.singleton txIn)) | ||
unless (utxo == mempty) $ do | ||
threadDelay 2_000_000 | ||
go |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters