@@ -328,7 +328,7 @@ scriptDataToUtxoRpcPlutusData = \case
328328 & # fields .~ map scriptDataToUtxoRpcPlutusData args
329329 defMessage & # constr .~ constr
330330
331- utxoToUtxoRpcAnyUtxoData :: forall era . IsCardanoEra era => UTxO era -> [Proto UtxoRpc. AnyUtxoData ]
331+ utxoToUtxoRpcAnyUtxoData :: forall era . IsEra era => UTxO era -> [Proto UtxoRpc. AnyUtxoData ]
332332utxoToUtxoRpcAnyUtxoData utxo =
333333 toList utxo <&> \ (txIn, txOut) -> do
334334 defMessage
@@ -337,7 +337,7 @@ utxoToUtxoRpcAnyUtxoData utxo =
337337 & # cardano .~ (txOutToUtxoRpcTxOutput txOut)
338338
339339txOutToUtxoRpcTxOutput
340- :: forall era . IsCardanoEra era => TxOut CtxUTxO era -> Proto UtxoRpc. TxOutput
340+ :: forall era . IsEra era => TxOut CtxUTxO era -> Proto UtxoRpc. TxOutput
341341txOutToUtxoRpcTxOutput (TxOut addressInEra txOutValue datum script) = do
342342 let multiAsset =
343343 fromList $
@@ -363,29 +363,39 @@ txOutToUtxoRpcTxOutput (TxOut addressInEra txOutValue datum script) = do
363363 & # originalCbor .~ mempty -- we don't have it
364364 TxOutDatumInline _ hashableScriptData ->
365365 defMessage
366- & # hash .~ serialiseToRawBytes (hashScriptDataBytes hashableScriptData)
366+ & # hash .~ serialiseToCBOR hashableScriptData
367367 & # payload .~ scriptDataToUtxoRpcPlutusData (getScriptData hashableScriptData)
368368 & # originalCbor .~ getOriginalScriptDataBytes hashableScriptData
369369
370370 defMessage
371371 -- TODO we don't have serialiseToRawBytes for AddressInEra, so perhaps this is wrong, because 'address'
372372 -- has type bytes, but we're putting text there
373- & # address .~ T. encodeUtf8 (cardanoEraConstraints (cardanoEra @ era ) $ serialiseAddress addressInEra)
373+ & # address .~ T. encodeUtf8 (obtainCommonConstraints (useEra @ era ) $ serialiseAddress addressInEra)
374374 & # coin .~ fromIntegral (L. unCoin (txOutValueToLovelace txOutValue))
375375 & # assets .~ multiAsset
376376 & # datum .~ datumRpc
377377 & # script .~ referenceScriptToUtxoRpcScript script
378378
379379utxoRpcTxOutputToTxOut
380- :: forall era . IsShelleyBasedEra era => Proto UtxoRpc. TxOutput -> Either String (TxOut CtxUTxO era )
380+ :: forall era . IsEra era => Proto UtxoRpc. TxOutput -> Either String (TxOut CtxUTxO era )
381381utxoRpcTxOutputToTxOut txOutput = do
382+ let era = useEra @ era
382383 addrUtf8 <- T. decodeUtf8' (txOutput ^. # address) ?!& displayError
383384 address <-
384385 deserialiseAddress (AsAddress AsShelleyAddr ) addrUtf8
385386 ?! (" Cannot decode address: " <> T. unpack addrUtf8)
387+ datum <-
388+ case txOutput ^. # maybe'datum of
389+ Just datumRpc ->
390+ case datumRpc ^. # maybe'originalCbor of
391+ Just cbor ->
392+ TxOutDatumInline (convert era) <$> deserialiseFromCBOR asType cbor ?!& displayError
393+ Nothing ->
394+ TxOutDatumHash (convert era) <$> deserialiseFromRawBytes asType (datumRpc ^. # hash) ?!& displayError
395+ Nothing -> pure TxOutDatumNone
386396 pure $
387397 TxOut
388- (AddressInEra (ShelleyAddressInEra (shelleyBasedEra @ era )) address)
389- undefined
398+ (AddressInEra (ShelleyAddressInEra (convert era)) address)
390399 undefined
400+ datum
391401 undefined
0 commit comments