Skip to content

Commit aacecdf

Browse files
committed
Use Kupmios backend provider
1 parent 3db46fa commit aacecdf

File tree

16 files changed

+160
-142
lines changed

16 files changed

+160
-142
lines changed

packages.dhall

Lines changed: 86 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,89 @@
11
let upstream =
22
-- https://github.com/mlabs-haskell/purescript-cardano-package-set
3-
https://raw.githubusercontent.com/mlabs-haskell/purescript-cardano-package-set/v1.2.0/packages.dhall sha256:1879aeee12ef41d5f39ed8b530efa817c747366553b2fc90981ad4e8c21fc5d8
3+
https://raw.githubusercontent.com/mlabs-haskell/purescript-cardano-package-set/v1.2.0/packages.dhall
4+
sha256:1879aeee12ef41d5f39ed8b530efa817c747366553b2fc90981ad4e8c21fc5d8
45

5-
in upstream
6+
let additions =
7+
{ cardano-kupmios-provider =
8+
{ dependencies =
9+
[ "aeson"
10+
, "aff"
11+
, "aff-promise"
12+
, "affjax"
13+
, "arrays"
14+
, "bifunctors"
15+
, "bytearrays"
16+
, "cardano-key-wallet"
17+
, "cardano-provider"
18+
, "cardano-serialization-lib"
19+
, "cardano-types"
20+
, "console"
21+
, "control"
22+
, "datetime"
23+
, "effect"
24+
, "either"
25+
, "exceptions"
26+
, "foldable-traversable"
27+
, "foreign-object"
28+
, "formatters"
29+
, "http-methods"
30+
, "integers"
31+
, "js-bigints"
32+
, "js-date"
33+
, "lists"
34+
, "maybe"
35+
, "monad-logger"
36+
, "newtype"
37+
, "ordered-collections"
38+
, "parallel"
39+
, "partial"
40+
, "prelude"
41+
, "profunctor-lenses"
42+
, "record"
43+
, "strings"
44+
, "stringutils"
45+
, "tailrec"
46+
, "these"
47+
, "transformers"
48+
, "tuples"
49+
, "uint"
50+
, "untagged-union"
51+
]
52+
, repo =
53+
"https://github.com/mlabs-haskell/purescript-cardano-kupmios-provider"
54+
, version = "bcaadf9b37c4c9290b77579d212fd37b06730632"
55+
}
56+
, cardano-ogmios-mempool-provider =
57+
{ dependencies =
58+
[ "aeson"
59+
, "aff"
60+
, "argonaut-codecs"
61+
, "arrays"
62+
, "bifunctors"
63+
, "bytearrays"
64+
, "cardano-kupmios-provider"
65+
, "cardano-provider"
66+
, "cardano-types"
67+
, "control"
68+
, "effect"
69+
, "either"
70+
, "exceptions"
71+
, "foldable-traversable"
72+
, "foreign-object"
73+
, "lists"
74+
, "maybe"
75+
, "monad-logger"
76+
, "newtype"
77+
, "ordered-collections"
78+
, "prelude"
79+
, "record"
80+
, "refs"
81+
, "transformers"
82+
]
83+
, repo =
84+
"https://github.com/mlabs-haskell/purescript-cardano-ogmios-mempool-provider"
85+
, version = "788cb701e5aaad1e299a118eb07a4f4fc6d5c734"
86+
}
87+
}
88+
89+
in upstream // additions

spago-packages.nix

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Contract/Backend/Ogmios.purs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ module Contract.Backend.Ogmios
77
import Prelude
88

99
import Cardano.Kupmios.Ogmios (submitTxOgmios) as Ogmios
10-
import Cardano.Kupmios.Ogmios.Pools (getPoolParameters) as QueryM
10+
import Cardano.Kupmios.Ogmios.Pools (getPoolParameters) as KupmiosM
1111
import Cardano.Kupmios.Ogmios.Types (SubmitTxR)
1212
import Cardano.Types (PoolParams, PoolPubKeyHash)
1313
import Cardano.Types.CborBytes (CborBytes)
1414
import Cardano.Types.TransactionHash (TransactionHash)
1515
import Contract.Monad (Contract)
16-
import Ctl.Internal.Contract.Monad (wrapQueryM)
16+
import Ctl.Internal.Contract.Monad (wrapKupmiosM)
1717

1818
-- | **This function can only run with Ogmios backend**
1919
-- |
@@ -22,8 +22,8 @@ import Ctl.Internal.Contract.Monad (wrapQueryM)
2222
getPoolParameters
2323
:: PoolPubKeyHash
2424
-> Contract PoolParams
25-
getPoolParameters = wrapQueryM <<< QueryM.getPoolParameters
25+
getPoolParameters = wrapKupmiosM <<< KupmiosM.getPoolParameters
2626

2727
-- | Error returning variant
2828
submitTxE :: TransactionHash -> CborBytes -> Contract SubmitTxR
29-
submitTxE txhash cbor = wrapQueryM $ Ogmios.submitTxOgmios txhash cbor
29+
submitTxE txhash cbor = wrapKupmiosM $ Ogmios.submitTxOgmios txhash cbor

src/Internal/Contract/Monad.purs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ module Ctl.Internal.Contract.Monad
99
, mkContractEnv
1010
, runContract
1111
, runContractInEnv
12-
, runQueryM
13-
, wrapQueryM
12+
, runKupmiosM
13+
, wrapKupmiosM
1414
, stopContractEnv
1515
, withContractEnv
1616
, buildBackend
@@ -27,12 +27,12 @@ import Cardano.Blockfrost.Service
2727
, runBlockfrostServiceM
2828
)
2929
import Cardano.Blockfrost.Service as Blockfrost
30+
import Cardano.Kupmios.KupmiosM (KupmiosEnv, KupmiosM)
3031
import Cardano.Kupmios.Ogmios (getProtocolParameters, getSystemStartTime)
3132
import Cardano.Kupmios.Ogmios.Types
3233
( OgmiosDecodeError
3334
, pprintOgmiosDecodeError
3435
)
35-
import Cardano.Kupmios.QueryM (QueryEnv, QueryM)
3636
import Cardano.Provider.Error (ClientError)
3737
import Cardano.Provider.Type (Provider)
3838
import Cardano.Types (NetworkId(TestnetId, MainnetId), TransactionHash, UtxoMap)
@@ -202,12 +202,12 @@ mkProvider
202202
mkProvider params providerBackend =
203203
case providerBackend of
204204
CtlBackend ctlBackend _ ->
205-
providerForCtlBackend runQueryM params ctlBackend
205+
providerForCtlBackend runKupmiosM params ctlBackend
206206
BlockfrostBackend blockfrostBackend Nothing -> do
207207
providerForBlockfrostBackend params blockfrostBackend
208208
BlockfrostBackend blockfrostBackend (Just ctlBackend) -> do
209209
providerForSelfHostedBlockfrostBackend params blockfrostBackend
210-
runQueryM
210+
runKupmiosM
211211
ctlBackend
212212

213213
-- | Initializes a `Contract` environment. Does not ensure finalization.
@@ -287,11 +287,11 @@ getLedgerConstants params = case _ of
287287
, suppressLogs: true
288288
}
289289
pparams <- unwrap <$>
290-
( runQueryM logParams ctlBackend getProtocolParameters >>=
290+
( runKupmiosM logParams ctlBackend getProtocolParameters >>=
291291
throwOnLeft
292292
)
293293
systemStart <- unwrap <$>
294-
( runQueryM logParams ctlBackend getSystemStartTime >>=
294+
( runKupmiosM logParams ctlBackend getSystemStartTime >>=
295295
throwOnLeft
296296
)
297297
pure { pparams, systemStart }
@@ -433,30 +433,30 @@ type ContractParams =
433433
}
434434

435435
--------------------------------------------------------------------------------
436-
-- QueryM
436+
-- KupmiosM
437437
--------------------------------------------------------------------------------
438438

439-
wrapQueryM :: forall (a :: Type). QueryM a -> Contract a
440-
wrapQueryM qm = do
439+
wrapKupmiosM :: forall (a :: Type). KupmiosM a -> Contract a
440+
wrapKupmiosM qm = do
441441
backend <- asks _.backend
442442
ctlBackend <-
443443
getCtlBackend backend
444444
# liftM (error "Operation only supported on CTL backend")
445445
contractEnv <- ask
446-
liftAff $ runQueryM contractEnv ctlBackend qm
446+
liftAff $ runKupmiosM contractEnv ctlBackend qm
447447

448-
runQueryM
448+
runKupmiosM
449449
:: forall (a :: Type) (rest :: Row Type)
450450
. LogParams rest
451451
-> CtlBackend
452-
-> QueryM a
452+
-> KupmiosM a
453453
-> Aff a
454-
runQueryM params ctlBackend =
455-
flip runReaderT (mkQueryEnv params ctlBackend) <<< unwrap
454+
runKupmiosM params ctlBackend =
455+
flip runReaderT (mkKupmiosEnv params ctlBackend) <<< unwrap
456456

457-
mkQueryEnv
458-
:: forall (rest :: Row Type). LogParams rest -> CtlBackend -> QueryEnv
459-
mkQueryEnv params ctlBackend =
457+
mkKupmiosEnv
458+
:: forall (rest :: Row Type). LogParams rest -> CtlBackend -> KupmiosEnv
459+
mkKupmiosEnv params ctlBackend =
460460
{ config:
461461
{ ogmiosConfig: ctlBackend.ogmiosConfig
462462
, kupoConfig: ctlBackend.kupoConfig

src/Internal/Contract/Provider.purs

Lines changed: 12 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -4,96 +4,29 @@ module Ctl.Internal.Contract.Provider
44
, providerForSelfHostedBlockfrostBackend
55
) where
66

7-
import Prelude
8-
9-
import Cardano.AsCbor (encodeCbor)
107
import Cardano.Blockfrost.BlockfrostBackend (BlockfrostBackend)
118
import Cardano.Blockfrost.Provider (providerForBlockfrostBackend) as Blockfrost
12-
import Cardano.Blockfrost.Service
13-
( BlockfrostServiceM
14-
, runBlockfrostServiceM
15-
)
16-
import Cardano.Kupmios.Kupo
17-
( getDatumByHash
18-
, getOutputAddressesByTxHash
19-
, getScriptByHash
20-
, getTxAuxiliaryData
21-
, getUtxoByOref
22-
, isTxConfirmed
23-
, utxosAt
24-
) as Kupo
25-
import Cardano.Kupmios.Ogmios
26-
( evaluateTxOgmios
27-
, getChainTip
28-
, submitTxOgmios
29-
) as Ogmios
30-
import Cardano.Kupmios.Ogmios.CurrentEpoch (getCurrentEpoch) as Ogmios
31-
import Cardano.Kupmios.Ogmios.EraSummaries (getEraSummaries) as Ogmios
32-
import Cardano.Kupmios.Ogmios.Pools
33-
( getPoolIds
34-
, getPubKeyHashDelegationsAndRewards
35-
, getValidatorHashDelegationsAndRewards
36-
) as Ogmios
37-
import Cardano.Kupmios.Ogmios.Types (SubmitTxR(SubmitFail, SubmitTxSuccess))
38-
import Cardano.Kupmios.QueryM (QueryM)
39-
import Cardano.Provider.Error (ClientError(ClientOtherError))
9+
import Cardano.Blockfrost.Service (BlockfrostServiceM, runBlockfrostServiceM)
10+
import Cardano.Kupmios.KupmiosM (KupmiosM)
11+
import Cardano.Kupmios.Provider as Kupmios
4012
import Cardano.Provider.Type (Provider)
41-
import Cardano.Types.Transaction (hash) as Transaction
42-
import Contract.Log (logDebug')
4313
import Ctl.Internal.Contract.LogParams (LogParams)
4414
import Ctl.Internal.Contract.ProviderBackend (CtlBackend)
4515
import Ctl.Internal.Helpers (logWithLevel)
46-
import Data.Either (Either(Left, Right))
47-
import Data.Maybe (fromMaybe, isJust)
48-
import Data.Newtype (unwrap, wrap)
16+
import Data.Maybe (fromMaybe)
4917
import Effect.Aff (Aff)
5018

5119
providerForCtlBackend
5220
:: forall rest
53-
. (forall (a :: Type). LogParams rest -> CtlBackend -> QueryM a -> Aff a)
21+
. (forall (a :: Type). LogParams rest -> CtlBackend -> KupmiosM a -> Aff a)
5422
-> LogParams rest
5523
-> CtlBackend
5624
-> Provider
57-
providerForCtlBackend runQueryM params backend =
58-
{ getDatumByHash: runQueryM' <<< Kupo.getDatumByHash
59-
, getScriptByHash: runQueryM' <<< Kupo.getScriptByHash
60-
, getUtxoByOref: runQueryM' <<< Kupo.getUtxoByOref
61-
, getOutputAddressesByTxHash: runQueryM' <<< Kupo.getOutputAddressesByTxHash
62-
, doesTxExist: runQueryM' <<< map (map isJust) <<< Kupo.isTxConfirmed
63-
, getTxAuxiliaryData: runQueryM' <<< Kupo.getTxAuxiliaryData
64-
, utxosAt: runQueryM' <<< Kupo.utxosAt
65-
, getChainTip: Right <$> runQueryM' Ogmios.getChainTip
66-
, getCurrentEpoch: unwrap <$> runQueryM' Ogmios.getCurrentEpoch
67-
, submitTx: \tx -> runQueryM' do
68-
let txHash = Transaction.hash tx
69-
logDebug' $ "Pre-calculated tx hash: " <> show txHash
70-
let txCborBytes = encodeCbor tx
71-
result <- Ogmios.submitTxOgmios txHash txCborBytes
72-
pure $ case result of
73-
SubmitTxSuccess th -> do
74-
if th == txHash then Right th
75-
else Left
76-
( ClientOtherError
77-
"Computed TransactionHash is not equal to the one returned by Ogmios, please report as bug!"
78-
)
79-
SubmitFail err -> Left $ ClientOtherError $ show err
80-
, evaluateTx: \tx additionalUtxos ->
81-
runQueryM' do
82-
let txBytes = encodeCbor tx
83-
Ogmios.evaluateTxOgmios txBytes (wrap additionalUtxos)
84-
, getEraSummaries: Right <$> runQueryM' Ogmios.getEraSummaries
85-
, getPoolIds: Right <$> runQueryM' Ogmios.getPoolIds
86-
, getPubKeyHashDelegationsAndRewards: \_ pubKeyHash ->
87-
Right <$> runQueryM'
88-
(Ogmios.getPubKeyHashDelegationsAndRewards pubKeyHash)
89-
, getValidatorHashDelegationsAndRewards: \_ validatorHash ->
90-
Right <$> runQueryM'
91-
(Ogmios.getValidatorHashDelegationsAndRewards $ wrap validatorHash)
92-
}
93-
25+
providerForCtlBackend runKupmiosM params backend =
26+
Kupmios.providerForKupmiosBackend runKupmiosM'
9427
where
95-
runQueryM' :: forall (a :: Type). QueryM a -> Aff a
96-
runQueryM' = runQueryM params backend
28+
runKupmiosM' :: forall (a :: Type). KupmiosM a -> Aff a
29+
runKupmiosM' = runKupmiosM params backend
9730

9831
providerForBlockfrostBackend
9932
:: forall rest. LogParams rest -> BlockfrostBackend -> Provider
@@ -109,18 +42,18 @@ providerForSelfHostedBlockfrostBackend
10942
:: forall rest
11043
. LogParams rest
11144
-> BlockfrostBackend
112-
-> (forall (a :: Type). LogParams rest -> CtlBackend -> QueryM a -> Aff a)
45+
-> (forall (a :: Type). LogParams rest -> CtlBackend -> KupmiosM a -> Aff a)
11346
-> CtlBackend
11447
-> Provider
11548
providerForSelfHostedBlockfrostBackend
11649
params
11750
blockfrostBackend
118-
runQueryM
51+
runKupmiosM
11952
ctlBackend =
12053
let
12154
blockfrostProvider = providerForBlockfrostBackend params
12255
blockfrostBackend
123-
ctlProvider = providerForCtlBackend runQueryM params ctlBackend
56+
ctlProvider = providerForCtlBackend runKupmiosM params ctlBackend
12457
in
12558
blockfrostProvider
12659
{ evaluateTx = ctlProvider.evaluateTx

0 commit comments

Comments
 (0)