@@ -9,20 +9,18 @@ module OuraFilters.Mock where
99import Cardano.Api qualified as C
1010
1111-- import Cardano.Api.Address qualified as C
12- import Cardano.Api (TxBody , TxIn , UTxO )
12+ import Cardano.Api (TxIn , UTxO )
1313import Cardano.Api.Address qualified as C (Address (.. ))
1414import Cardano.Api.ScriptData qualified as C
1515import Cardano.Api.SerialiseRaw qualified as SerialiseRaw
1616import Cardano.CEM (CEMScript , CEMScriptDatum , State , Transition , transitionStage )
1717import Cardano.CEM.Address qualified as Address
18- import Cardano.CEM.Monads (ResolvedTx (.. ))
1918import Cardano.CEM.OnChain (CEMScriptCompiled , CEMScriptIsData )
20- import Cardano.Extras (Era , TxInWitness )
19+ import Cardano.Extras (Era )
2120import Cardano.Ledger.BaseTypes qualified as Ledger
22- import Control.Lens (preview , view , (^.) )
21+ import Control.Lens (view , (^.) )
2322import Control.Lens.TH (makeLenses , makeLensesFor )
2423import Control.Monad ((<=<) )
25- import Control.Monad.Extra (join )
2624import Data.Aeson (KeyValue ((.=) ))
2725import Data.Aeson qualified as Aeson
2826import Data.Base16.Types qualified as Base16
@@ -33,29 +31,24 @@ import Data.Bifunctor (first)
3331import Data.ByteString qualified as BS
3432import Data.ByteString.Base16 qualified as Base16
3533import Data.ByteString.Base64 qualified as Base64
36- import Data.ByteString.Base64.URL qualified as B64
3734import Data.ByteString.Lazy qualified as LBS
3835import Data.Data (Proxy (Proxy ))
39- import Data.Either (fromRight )
4036import Data.Either.Extra (eitherToMaybe )
4137import Data.Function ((&) )
4238import Data.Functor ((<&>) )
4339import Data.List (find )
4440import Data.Map.Strict qualified as Map
45- import Data.Maybe (fromJust , fromMaybe , mapMaybe )
41+ import Data.Maybe (fromJust , mapMaybe )
4642import Data.Spine (Spine , getSpine )
4743import Data.Text qualified as T
4844import Data.Text.Encoding (encodeUtf8 )
4945import Data.Tuple (swap )
5046import Data.Vector qualified as Vec
51- import Debug.Trace (trace , traceShowId )
5247import GHC.Generics (Generic (Rep ))
5348import GHC.Stack.Types (HasCallStack )
54- import PlutusLedgerApi.V1 (Credential , FromData , ToData )
49+ import PlutusLedgerApi.V1 (FromData )
5550import PlutusLedgerApi.V1 qualified
5651import Safe qualified
57- import System.Process.Internals (ProcRetHandles (hStdOutput ))
58- import Test.QuickCheck (Result (output ))
5952import Utils (digits )
6053import Prelude
6154
@@ -324,7 +317,12 @@ data IndexerEvent script
324317 -- | FIXME: Open an issue in Oura's repository
325318 Following (Spine (Transition script )) -- (Transition script)
326319
327- deriving stock instance (Show (Spine (Transition script ))) => (Show (IndexerEvent script ))
320+ deriving stock instance
321+ (Show (Spine (Transition script ))) =>
322+ (Show (IndexerEvent script ))
323+ deriving stock instance
324+ (Eq (Spine (Transition script ))) =>
325+ (Eq (IndexerEvent script ))
328326
329327-- For testing: build a tx in the Oura format from a Cardano tx.
330328-- We populate only fields we use, use with cautious.
@@ -367,7 +365,7 @@ toOuraTxOutput (C.TxOut addr _ dat _) =
367365toOuraDatum :: C. TxOutDatum ctx Era -> Maybe Datum
368366toOuraDatum = \ case
369367 (C. TxOutDatumInline _ hsd) ->
370- let bs = traceShowId $ C. serialiseToCBOR hsd
368+ let bs = C. serialiseToCBOR hsd
371369 in Just $
372370 MkDatum
373371 { _payload = MkPlutusData Aeson. Null
@@ -391,35 +389,33 @@ toOuraAddrress (C.AddressInEra _ addr) =
391389 . Base16. encodeBase16
392390 . SerialiseRaw. serialiseToRawBytes
393391
394- -- The core function, that extracts an Event out of a Oura transaction.
392+ {- | The core function, that extracts an Event out of a Oura transaction.
393+ It might be a pure function, IO here was used mostly to simplify debugging
394+ during its development.
395+ -}
395396extractEvent ::
396397 forall script .
397398 ( CEMScript script
398399 , CEMScriptIsData script
399400 , CEMScriptCompiled script
400401 ) =>
401- Tx ->
402402 Ledger. Network ->
403+ Tx ->
403404 IO (Maybe (IndexerEvent script ))
404- extractEvent tx network = do
405+ extractEvent network tx = do
405406 -- Script payemnt credential based predicate
406407 let (Right scriptAddr) = Address. scriptCardanoAddress (Proxy @ script ) network
407408 let cPred = hasAddr scriptAddr
408- print scriptAddr
409409
410410 -- Source state
411411 let mOwnInput :: Maybe TxInput = find (cPred . view as_output) (tx ^. inputs)
412412 let mSourceState :: Maybe (State script ) = (extractState . view as_output) =<< mOwnInput
413413 let mSourceSpine :: Maybe (Spine (State script )) = getSpine <$> mSourceState
414- putStr " Source state: "
415- print mSourceSpine
416414
417415 -- Target state
418416 let mOwnOutput :: Maybe TxOutput = find cPred $ tx ^. outputs
419417 let mTargetState :: Maybe (State script ) = extractState =<< mOwnOutput
420418 let mTargetSpine :: Maybe (Spine (State script )) = getSpine <$> mTargetState
421- putStr " Target state: "
422- print mTargetSpine
423419
424420 -- Look up the transition
425421 let transitions =
@@ -449,7 +445,7 @@ extractState MkTxOutput {_datum = mDtm} =
449445 Just dtm -> do
450446 let MkDatum _ _ cbor = dtm
451447 let datumAsData :: PlutusLedgerApi.V1. Data =
452- traceShowId cbor
448+ cbor
453449 & C. toPlutusData
454450 . C. getScriptData
455451 . fromJust
@@ -463,17 +459,14 @@ extractState MkTxOutput {_datum = mDtm} =
463459hasAddr :: C. Address C. ShelleyAddr -> TxOutput -> Bool
464460hasAddr addr' output =
465461 let addr = output ^. address
466- in traceShowId ( fromOuraAddress addr) == addr'
462+ in fromOuraAddress addr == addr'
467463
468464fromOuraAddress :: Address -> C. Address C. ShelleyAddr
469465fromOuraAddress (MkAddressAsBase64 addr) =
470466 addr
471467 & fromJust
472468 . eitherToMaybe
473469 . SerialiseRaw. deserialiseFromRawBytes (C. AsAddress C. AsShelleyAddr )
474- -- . fromJust
475- -- . eitherToMaybe
476- -- . B64.decodeBase64PaddedUntyped
477470 . Base16. decodeBase16Lenient
478471 . encodeUtf8
479472
0 commit comments