From 09e560e52a2dbe4214956382037c937a2d153012 Mon Sep 17 00:00:00 2001 From: Sasha Bogicevic Date: Fri, 22 Sep 2023 16:48:04 +0200 Subject: [PATCH] Implement more decoders for Hydra messages - Stub for TxValid decoder by using empty values (apart from txId) - Add confirmedTransactionIds parsing for Snapshot --- src/Kupo/Data/Hydra.hs | 32 +++++++++++++++++++++++++++++--- src/Kupo/Data/Ogmios.hs | 2 ++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/Kupo/Data/Hydra.hs b/src/Kupo/Data/Hydra.hs index 4a49dcaa..b4f5a7cc 100644 --- a/src/Kupo/Data/Hydra.hs +++ b/src/Kupo/Data/Hydra.hs @@ -22,11 +22,15 @@ import Kupo.Data.Cardano ) import Kupo.Data.PartialBlock ( PartialBlock (..) - , PartialTransaction + , PartialTransaction (PartialTransaction, datums, id, inputs, metadata, outputs, scripts) ) import qualified Data.Aeson.Types as Json import qualified Data.ByteString.Builder as BS +import qualified Data.Map.Strict as Map +import Kupo.Data.Ogmios + ( decodeTransactionId + ) -- Types @@ -71,12 +75,34 @@ decodeHydraMessage = tag <- o .: "tag" case tag of ("HeadIsOpen" :: Text) -> pure HeadIsOpen - ("TxValid" :: Text) -> TxValid <$> undefined + ("TxValid" :: Text) -> TxValid <$> decodeTxValid o ("SnapshotConfirmed" :: Text) -> SnapshotConfirmed <$> decodeSnapshotConfirmed o _ -> pure SomethingElse +decodeTxValid :: Json.Object -> Json.Parser PartialTransaction +decodeTxValid o = do + tx <- o .: "transaction" + id <- tx .: "id" >>= decodeTransactionId + let inputs = [] -- TODO + let outputs = [] -- TODO + let datums = Map.empty -- TODO + let scripts = Map.empty -- TODO + let metadata = Nothing -- TODO + pure PartialTransaction + { id + , inputs + , outputs + , datums + , scripts + , metadata + } + decodeSnapshotConfirmed :: Json.Object -> Json.Parser Snapshot decodeSnapshotConfirmed o = do snapshot <- o .: "snapshot" number <- snapshot .: "snapshotNumber" - pure $ Snapshot { number, confirmedTransactionIds = undefined } + confirmedTransactionIds <- snapshot .: "confirmedTransactions" >>= mapM decodeTransactionId + pure Snapshot + { number + , confirmedTransactionIds + } diff --git a/src/Kupo/Data/Ogmios.hs b/src/Kupo/Data/Ogmios.hs index 9699fe01..71015385 100644 --- a/src/Kupo/Data/Ogmios.hs +++ b/src/Kupo/Data/Ogmios.hs @@ -15,6 +15,8 @@ module Kupo.Data.Ogmios , decodeFindIntersectionResponse , decodeNextBlockResponse + -- ** Cardano decoders + , decodeTransactionId ) where import Kupo.Prelude