@@ -25,9 +25,9 @@ module Convex.Class(
25
25
26
26
import qualified Cardano.Api as C
27
27
import Cardano.Api.Shelley (BabbageEra ,
28
- CardanoMode ,
29
28
EraHistory (.. ),
30
29
Hash ,
30
+ LedgerProtocolParameters (.. ),
31
31
LocalNodeConnectInfo ,
32
32
NetworkId ,
33
33
PoolId ,
@@ -60,7 +60,6 @@ import Convex.Utils (posixTimeToS
60
60
import Data.Aeson (FromJSON ,
61
61
ToJSON )
62
62
import Data.Set (Set )
63
- import qualified Data.Text as Text
64
63
import Data.Time.Clock (UTCTime )
65
64
import GHC.Generics (Generic )
66
65
import Ouroboros.Consensus.HardFork.History (interpretQuery ,
@@ -73,10 +72,10 @@ import qualified PlutusLedgerApi.V1 as PV1
73
72
class Monad m => MonadBlockchain m where
74
73
sendTx :: Tx BabbageEra -> m TxId -- ^ Submit a transaction to the network
75
74
utxoByTxIn :: Set C. TxIn -> m (C. UTxO C. BabbageEra ) -- ^ Resolve tx inputs
76
- queryProtocolParameters :: m (C. BundledProtocolParameters C. BabbageEra ) -- ^ Get the protocol parameters
75
+ queryProtocolParameters :: m (LedgerProtocolParameters C. BabbageEra ) -- ^ Get the protocol parameters
77
76
queryStakePools :: m (Set PoolId ) -- ^ Get the stake pools
78
77
querySystemStart :: m SystemStart
79
- queryEraHistory :: m ( EraHistory CardanoMode )
78
+ queryEraHistory :: m EraHistory
80
79
querySlotNo :: m (SlotNo , SlotLength , UTCTime )
81
80
-- ^ returns the current slot number, slot length and begin utc time for slot.
82
81
-- Slot 0 is returned when at genesis.
@@ -198,7 +197,7 @@ This MAY move the clock backwards!
198
197
setTimeToValidRange :: MonadMockchain m => (C. TxValidityLowerBound C. BabbageEra , C. TxValidityUpperBound C. BabbageEra ) -> m ()
199
198
setTimeToValidRange = \ case
200
199
(C. TxValidityLowerBound _ lowerSlot, _) -> setSlot lowerSlot
201
- (_, C. TxValidityUpperBound _ upperSlot) -> setSlot (pred upperSlot)
200
+ (_, C. TxValidityUpperBound _ ( Just upperSlot) ) -> setSlot (pred upperSlot)
202
201
_ -> pure ()
203
202
204
203
{-| Increase the slot number by 1.
@@ -208,32 +207,27 @@ nextSlot = modifySlot (\s -> (succ s, ()))
208
207
209
208
data MonadBlockchainError e =
210
209
MonadBlockchainError e
211
- | ProtocolConversionError Text. Text
212
210
| FailWith String
213
211
deriving stock (Eq , Functor , Generic )
214
212
deriving anyclass (ToJSON , FromJSON )
215
213
216
- protocolConversionError :: C. ProtocolParametersConversionError -> MonadBlockchainError e
217
- protocolConversionError = ProtocolConversionError . C. textShow
218
-
219
214
instance Show e => Show (MonadBlockchainError e ) where
220
- show (MonadBlockchainError e) = show e
221
- show (FailWith str) = str
222
- show (ProtocolConversionError e) = show e
215
+ show (MonadBlockchainError e) = show e
216
+ show (FailWith str) = str
223
217
224
218
{-| 'MonadBlockchain' implementation that connects to a cardano node
225
219
-}
226
- newtype MonadBlockchainCardanoNodeT e m a = MonadBlockchainCardanoNodeT { unMonadBlockchainCardanoNodeT :: ReaderT ( LocalNodeConnectInfo CardanoMode ) (ExceptT (MonadBlockchainError e ) m ) a }
220
+ newtype MonadBlockchainCardanoNodeT e m a = MonadBlockchainCardanoNodeT { unMonadBlockchainCardanoNodeT :: ReaderT LocalNodeConnectInfo (ExceptT (MonadBlockchainError e ) m ) a }
227
221
deriving newtype (Functor , Applicative , Monad , MonadIO )
228
222
229
223
instance Monad m => MonadError e (MonadBlockchainCardanoNodeT e m ) where
230
224
throwError = MonadBlockchainCardanoNodeT . throwError . MonadBlockchainError
231
225
catchError (MonadBlockchainCardanoNodeT action) handler = MonadBlockchainCardanoNodeT $ catchError action (\ case { MonadBlockchainError e -> unMonadBlockchainCardanoNodeT (handler e); e' -> throwError e' })
232
226
233
- runMonadBlockchainCardanoNodeT :: LocalNodeConnectInfo CardanoMode -> MonadBlockchainCardanoNodeT e m a -> m (Either (MonadBlockchainError e ) a )
227
+ runMonadBlockchainCardanoNodeT :: LocalNodeConnectInfo -> MonadBlockchainCardanoNodeT e m a -> m (Either (MonadBlockchainError e ) a )
234
228
runMonadBlockchainCardanoNodeT info (MonadBlockchainCardanoNodeT action) = runExceptT (runReaderT action info)
235
229
236
- runQuery :: (MonadIO m , MonadLog m ) => C. QueryInMode CardanoMode a -> MonadBlockchainCardanoNodeT e m a
230
+ runQuery :: (MonadIO m , MonadLog m ) => C. QueryInMode a -> MonadBlockchainCardanoNodeT e m a
237
231
runQuery qry = MonadBlockchainCardanoNodeT $ do
238
232
info <- ask
239
233
result <- liftIO (C. queryNodeLocalState info Nothing qry)
@@ -245,7 +239,7 @@ runQuery qry = MonadBlockchainCardanoNodeT $ do
245
239
Right result' -> do
246
240
pure result'
247
241
248
- runQuery' :: (MonadIO m , MonadLog m , Show e1 ) => C. QueryInMode CardanoMode (Either e1 a ) -> MonadBlockchainCardanoNodeT e2 m a
242
+ runQuery' :: (MonadIO m , MonadLog m , Show e1 ) => C. QueryInMode (Either e1 a ) -> MonadBlockchainCardanoNodeT e2 m a
249
243
runQuery' qry = runQuery qry >>= \ case
250
244
Left err -> MonadBlockchainCardanoNodeT $ do
251
245
let msg = " runQuery': Era mismatch: " <> show err
@@ -257,7 +251,7 @@ instance (MonadLog m, MonadIO m) => MonadBlockchain (MonadBlockchainCardanoNodeT
257
251
sendTx tx = MonadBlockchainCardanoNodeT $ do
258
252
let txId = C. getTxId (C. getTxBody tx)
259
253
info <- ask
260
- result <- liftIO (C. submitTxToNodeLocal info (C. TxInMode tx C. BabbageEraInCardanoMode ))
254
+ result <- liftIO (C. submitTxToNodeLocal info (C. TxInMode C. ShelleyBasedEraBabbage tx ))
261
255
-- TODO: Error should be reflected in return type of 'sendTx'
262
256
case result of
263
257
SubmitSuccess -> do
@@ -269,24 +263,21 @@ instance (MonadLog m, MonadIO m) => MonadBlockchain (MonadBlockchainCardanoNodeT
269
263
throwError $ FailWith msg
270
264
271
265
utxoByTxIn txIns =
272
- runQuery' (C. QueryInEra C. BabbageEraInCardanoMode (C. QueryInShelleyBasedEra C. ShelleyBasedEraBabbage (C. QueryUTxO (C. QueryUTxOByTxIn txIns))))
266
+ runQuery' (C. QueryInEra (C. QueryInShelleyBasedEra C. ShelleyBasedEraBabbage (C. QueryUTxO (C. QueryUTxOByTxIn txIns))))
273
267
274
268
queryProtocolParameters = do
275
- p <- runQuery' (C. QueryInEra C. BabbageEraInCardanoMode (C. QueryInShelleyBasedEra C. ShelleyBasedEraBabbage C. QueryProtocolParameters ))
276
- case C. bundleProtocolParams C. BabbageEra p of
277
- Right x -> pure x
278
- Left err -> MonadBlockchainCardanoNodeT $ throwError (protocolConversionError err)
269
+ LedgerProtocolParameters <$> runQuery' (C. QueryInEra (C. QueryInShelleyBasedEra C. ShelleyBasedEraBabbage C. QueryProtocolParameters ))
279
270
280
271
queryStakePools =
281
- runQuery' (C. QueryInEra C. BabbageEraInCardanoMode (C. QueryInShelleyBasedEra C. ShelleyBasedEraBabbage C. QueryStakePools ))
272
+ runQuery' (C. QueryInEra (C. QueryInShelleyBasedEra C. ShelleyBasedEraBabbage C. QueryStakePools ))
282
273
283
274
querySystemStart = runQuery C. QuerySystemStart
284
275
285
- queryEraHistory = runQuery ( C. QueryEraHistory C. CardanoModeIsMultiEra )
276
+ queryEraHistory = runQuery C. QueryEraHistory
286
277
287
278
querySlotNo = do
288
- (eraHistory@ (EraHistory _ interpreter), systemStart) <- (,) <$> queryEraHistory <*> querySystemStart
289
- slotNo <- runQuery ( C. QueryChainPoint C. CardanoMode ) >>= \ case
279
+ (eraHistory@ (EraHistory interpreter), systemStart) <- (,) <$> queryEraHistory <*> querySystemStart
280
+ slotNo <- runQuery C. QueryChainPoint >>= \ case
290
281
C. ChainPointAtGenesis -> pure $ fromIntegral (0 :: Integer )
291
282
C. ChainPoint slot _hsh -> pure slot
292
283
MonadBlockchainCardanoNodeT $ do
0 commit comments