Skip to content

Commit

Permalink
Replace ToJSON/FromJSON Tx with cbor encoding
Browse files Browse the repository at this point in the history
  • Loading branch information
locallycompact committed Jan 9, 2024
1 parent a1b4e90 commit c924c33
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions hydra-node/src/Hydra/Ledger/Cardano.hs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import Hydra.Ledger.Cardano.Builder
import Cardano.Api.UTxO (fromPairs, pairs)
import Cardano.Api.UTxO qualified as UTxO
import Cardano.Crypto.DSIGN qualified as CC
import Cardano.Ledger.Api (Babbage)
import Cardano.Ledger.Babbage.Tx qualified as Ledger
import Cardano.Ledger.BaseTypes (StrictMaybe (..))
import Cardano.Ledger.BaseTypes qualified as Ledger
Expand All @@ -28,6 +29,8 @@ import Cardano.Ledger.Shelley.UTxO qualified as Ledger
import Codec.CBOR.Decoding qualified as CBOR
import Codec.CBOR.Encoding qualified as CBOR
import Control.Monad (foldM)
import Data.Aeson (withObject, (.:))
import Data.Aeson qualified as Aeson
import Data.ByteString qualified as BS
import Data.Default (def)
import Data.Map.Strict qualified as Map
Expand All @@ -36,7 +39,7 @@ import Data.Text.Lazy.Builder (toLazyText)
import Formatting.Buildable (build)
import Hydra.Contract.Head qualified as Head
import Hydra.Ledger (ChainSlot (..), IsTx (..), Ledger (..), ValidationError (..))
import Hydra.Ledger.Cardano.Json ()
import Hydra.Ledger.Cardano.Json (parseHexEncodedCborAnnotated)
import PlutusLedgerApi.V2 (fromBuiltin)
import Test.Cardano.Ledger.Babbage.Arbitrary ()
import Test.QuickCheck (
Expand All @@ -50,6 +53,7 @@ import Test.QuickCheck (
suchThat,
vectorOf,
)
import qualified Data.ByteString.Base16 as Base16

-- * Ledger

Expand Down Expand Up @@ -125,10 +129,21 @@ instance FromCBOR Tx where
(pure . fromLedgerTx)

instance ToJSON Tx where
toJSON = toJSON . toLedgerTx
toJSON tx = Aeson.String $ decodeUtf8 @Text $ Base16.encode $ serialiseToCBOR tx

instance FromJSON Tx where
parseJSON = fmap fromLedgerTx . parseJSON
parseJSON value =
fromLedgerTx
<$> ( parseAsEnvelopedBase16CBOR value
<|> parseHexEncodedCborAnnotated @Babbage "Tx" value
)
where
parseAsEnvelopedBase16CBOR =
withObject "Tx" $ \o -> do
let TextEnvelopeType envelopeType = textEnvelopeType (proxyToAsType (Proxy @Tx))
str <- o .: "cborHex"
guard . (== envelopeType) =<< (o .: "type")
parseHexEncodedCborAnnotated @Babbage "Tx" (Aeson.String str)

instance Arbitrary Tx where
-- TODO: shrinker!
Expand Down

0 comments on commit c924c33

Please sign in to comment.