Skip to content

Commit

Permalink
Fix JSON output for utxo command
Browse files Browse the repository at this point in the history
  • Loading branch information
Jimbo4350 committed Feb 2, 2021
1 parent d38e7a7 commit e3f8b18
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 13 deletions.
20 changes: 18 additions & 2 deletions cardano-api/src/Cardano/Api/Query.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,19 @@ module Cardano.Api.Query (
ProtocolState(..),
) where

import Data.Aeson (ToJSON)
import Data.Aeson (ToJSON(..), object, (.=))
import qualified Data.Aeson as Aeson
import Data.Bifunctor (bimap)
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Maybe (mapMaybe)
import Data.Set (Set)
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Text
import qualified Data.Set as Set
import Data.SOP.Strict (SListI)
import Prelude
import qualified Data.Vector as Vector

import Ouroboros.Network.Protocol.LocalStateQuery.Client (Some (..))

Expand All @@ -64,6 +68,7 @@ import qualified Shelley.Spec.Ledger.LedgerState as Shelley
import Cardano.Api.Address
import Cardano.Api.Block
import Cardano.Api.Certificate
import Cardano.Api.SerialiseRaw
import Cardano.Api.Eras
import Cardano.Api.KeysShelley
import Cardano.Api.Modes
Expand Down Expand Up @@ -158,12 +163,23 @@ newtype ByronUpdateState = ByronUpdateState Byron.Update.State

newtype UTxO era = UTxO (Map TxIn (TxOut era))

instance IsCardanoEra era => ToJSON (UTxO era) where
toJSON (UTxO m) = Aeson.Array . Vector.fromList . map convert $ Map.toList m
where
convert :: (TxIn, TxOut era) -> Aeson.Value
convert ((TxIn txId (TxIx ix), txout)) =
let txin = ( Text.decodeUtf8 (serialiseToRawBytesHex txId)
<> "#"
<> Text.pack (show ix)
)
in object [ txin .= toJSON txout]


newtype LedgerState era
= LedgerState (Serialised (Shelley.NewEpochState (ShelleyLedgerEra era)))

newtype ProtocolState era
= ProtocolState (Serialised (Shelley.ChainDepState (Ledger.Crypto (ShelleyLedgerEra era))))
deriving newtype instance IsCardanoEra era => ToJSON (UTxO era)

toShelleyAddrSet :: CardanoEra era
-> Set AddressAny
Expand Down
34 changes: 26 additions & 8 deletions cardano-api/src/Cardano/Api/TxBody.hs
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,8 @@ module Cardano.Api.TxBody (

import Prelude

import Data.Aeson (ToJSON (..))
import Data.Aeson (ToJSON (..), (.=), object)
import qualified Data.Aeson as Aeson
import Data.Aeson.Types (ToJSONKey (..), toJSONKeyText)
import Data.Bifunctor (first)
import Data.ByteString (ByteString)
import qualified Data.ByteString.Lazy as LBS
Expand All @@ -111,6 +110,7 @@ import qualified Data.Sequence.Strict as Seq
import qualified Data.Set as Set
import Data.String (IsString)
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Text
import Data.Word (Word64)
import GHC.Generics

Expand Down Expand Up @@ -234,10 +234,6 @@ getTxId (ShelleyTxBody era tx _) =
data TxIn = TxIn TxId TxIx
deriving (Eq, Generic, Ord, Show)

deriving instance ToJSON TxIn
instance ToJSONKey TxIn where
toJSONKey = toJSONKeyText (Text.pack . show)

newtype TxIx = TxIx Word
deriving stock (Eq, Ord, Show)
deriving newtype (Enum)
Expand Down Expand Up @@ -272,7 +268,26 @@ data TxOut era
= TxOut (AddressInEra era) (TxOutValue era)
deriving Generic

deriving instance IsCardanoEra era => ToJSON (TxOut era)
instance IsCardanoEra era => ToJSON (TxOut era) where
toJSON (TxOut (AddressInEra addrType addr) val) =
case addrType of
ByronAddressInAnyEra ->
let hexAddr = Text.decodeUtf8 $ serialiseToRawBytesHex addr
in object [ hexAddr .= toJSON val ]
ShelleyAddressInEra sbe ->
case sbe of
ShelleyBasedEraShelley ->
let hexAddr = Text.decodeUtf8 $ serialiseToRawBytesHex addr
in object [ hexAddr .= toJSON val ]
ShelleyBasedEraAllegra ->
let hexAddr = Text.decodeUtf8 $ serialiseToRawBytesHex addr
in object [ hexAddr .= toJSON val ]
ShelleyBasedEraMary ->
let hexAddr = Text.decodeUtf8 $ serialiseToRawBytesHex addr
in object [ hexAddr .= toJSON val ]



deriving instance Eq (TxOut era)
deriving instance Show (TxOut era)

Expand Down Expand Up @@ -611,9 +626,12 @@ data TxOutValue era where

deriving instance Eq (TxOutValue era)
deriving instance Show (TxOutValue era)
deriving instance ToJSON (TxOutValue era)
deriving instance Generic (TxOutValue era)

instance ToJSON (TxOutValue era) where
toJSON (TxOutAdaOnly _ (Lovelace int)) = Aeson.Number $ fromInteger int
toJSON (TxOutValue _ val) = toJSON val

-- ----------------------------------------------------------------------------
-- Transaction fees
--
Expand Down
2 changes: 1 addition & 1 deletion cardano-cli/src/Cardano/CLI/Shelley/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ renderShelleyClientCmdError cmd err =
where
renderError :: ShelleyCommand -> (a -> Text) -> a -> Text
renderError shelleyCmd renderer shelCliCmdErr =
mconcat [ "Shelley command failed: "
mconcat [ "Command failed: "
, renderShelleyCommand shelleyCmd
, " Error: "
, renderer shelCliCmdErr
Expand Down
4 changes: 2 additions & 2 deletions cardano-cli/src/Cardano/CLI/Shelley/Run/Query.hs
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ renderShelleyQueryCmdError err =
"Consensus mode and era mismatch. Consensus mode: " <> show cMode <>
" Era: " <> show era
ShelleyQueryCmdEraMismatch (EraMismatch ledgerEra queryEra) ->
"An error mismatch occured. Specified query era: " <> queryEra <>
"Current ledger era: " <> ledgerEra
"\nAn error mismatch occured." <> "\nSpecified query era: " <> queryEra <>
"\nCurrent ledger era: " <> ledgerEra

runQueryCmd :: QueryCmd -> ExceptT ShelleyQueryCmdError IO ()
runQueryCmd cmd =
Expand Down

0 comments on commit e3f8b18

Please sign in to comment.