@@ -4,6 +4,7 @@ module Cardano.CEM.Monads.CLB where
44
55import Prelude
66
7+ import Control.Concurrent.MVar (MVar , modifyMVar_ , newMVar , readMVar )
78import Control.Monad.State (StateT (.. ), gets )
89import Data.Map qualified as Map
910import Data.Set qualified as Set
@@ -34,12 +35,23 @@ import Clb.TimeSlot (posixTimeToUTCTime)
3435import Cardano.CEM.Monads
3536import Cardano.CEM.Monads.L1Commons
3637import Cardano.CEM.OffChain (fromPlutusAddressInMonad )
38+ import Control.Monad.Reader (MonadReader (.. ), ReaderT (.. ))
3739
38- instance (MonadFail m ) => MonadBlockchainParams (ClbT m ) where
39- askNetworkId :: ClbT m NetworkId
40+ instance (MonadReader r m ) => MonadReader r (ClbT m ) where
41+ ask = lift ask
42+ local f action = ClbT $ local f $ unwrapClbT action
43+
44+ type ClbRunner = ClbT (ReaderT (MVar [BlockchainMonadEvent ]) IO )
45+
46+ instance
47+ ( MonadFail m
48+ , MonadIO m
49+ , MonadReader (MVar [BlockchainMonadEvent ]) m
50+ ) =>
51+ MonadBlockchainParams (ClbT m )
52+ where
4053 askNetworkId = gets (mockConfigNetworkId . mockConfig)
4154
42- queryCurrentSlot :: ClbT m SlotNo
4355 queryCurrentSlot = getCurrentSlot
4456
4557 queryBlockchainParams = do
@@ -56,8 +68,14 @@ instance (MonadFail m) => MonadBlockchainParams (ClbT m) where
5668 , -- Staking is not supported
5769 stakePools = Set. empty
5870 }
71+ logEvent e = do
72+ logVar <- ask
73+ liftIO $ modifyMVar_ logVar (return . (:) e)
74+ eventList = do
75+ events <- ask
76+ liftIO $ readMVar events
5977
60- instance (MonadFail m ) => MonadQueryUtxo (ClbT m ) where
78+ instance (Monad m , MonadBlockchainParams ( ClbT m ) ) => MonadQueryUtxo (ClbT m ) where
6179 queryUtxo query = do
6280 utxos <- fromLedgerUTxO shelleyBasedEra <$> gets getUtxosAtState
6381 predicate <- mkPredicate
@@ -69,7 +87,7 @@ instance (MonadFail m) => MonadQueryUtxo (ClbT m) where
6987 return $ \ _ (TxOut a _ _ _) -> a `elem` cardanoAddresses
7088 ByTxIns txIns -> return $ \ txIn _ -> txIn `elem` txIns
7189
72- instance (MonadFail m ) => MonadSubmitTx (ClbT m ) where
90+ instance (Monad m , MonadBlockchainParams ( ClbT m ) ) => MonadSubmitTx (ClbT m ) where
7391 submitResolvedTx :: ResolvedTx -> ClbT m (Either TxSubmittingError TxId )
7492 submitResolvedTx tx = do
7593 cardanoTxBodyFromResolvedTx tx >>= \ case
@@ -82,16 +100,20 @@ instance (MonadFail m) => MonadSubmitTx (ClbT m) where
82100 Right (_, _) -> fail " Unsupported tx format"
83101 Left e -> return $ Left $ UnhandledAutobalanceError e
84102
85- instance (MonadFail m ) => MonadTest (ClbT m ) where
103+ instance (Monad m , MonadBlockchainParams ( ClbT m ) ) => MonadTest (ClbT m ) where
86104 getTestWalletSks = return $ map intToCardanoSk [1 .. 10 ]
87105
88106genesisClbState :: Value -> ClbState
89107genesisClbState genesisValue =
90108 initClb defaultBabbage genesisValue genesisValue
91109
92- execOnIsolatedClb :: Value -> ClbT IO a -> IO a
93- execOnIsolatedClb genesisValue action =
110+ execOnIsolatedClb :: Value -> ClbRunner a -> IO a
111+ execOnIsolatedClb genesisValue action = do
112+ emptyLog <- newMVar []
94113 fst
95- <$> runStateT
96- (unwrapClbT action)
97- (genesisClbState genesisValue)
114+ <$> runReaderT
115+ ( runStateT
116+ (unwrapClbT action)
117+ (genesisClbState genesisValue)
118+ )
119+ emptyLog
0 commit comments