Skip to content

Commit

Permalink
cardano-cli: Friendly output multi-asset with ASCII version where pos…
Browse files Browse the repository at this point in the history
…sible

As desktop client does
  • Loading branch information
cblp committed Oct 12, 2021
1 parent e1e0fe4 commit e7e0ea4
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 33 deletions.
9 changes: 1 addition & 8 deletions cardano-cli/src/Cardano/CLI/Helpers.hs
@@ -1,4 +1,3 @@
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}

Expand All @@ -15,13 +14,12 @@ module Cardano.CLI.Helpers
, hushM
) where

import Cardano.Prelude hiding (note)
import Cardano.Prelude
import Prelude (String)

import Codec.CBOR.Pretty (prettyHexEnc)
import Codec.CBOR.Read (DeserialiseFailure, deserialiseFromBytes)
import Codec.CBOR.Term (decodeTerm, encodeTerm)
import Control.Monad.Fail (fail)
import Control.Monad.Trans.Except.Extra (handleIOExceptT, left)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as LB
Expand Down Expand Up @@ -128,8 +126,3 @@ hushM :: forall e m a. Monad m => Either e a -> (e -> m ()) -> m (Maybe a)
hushM r f = case r of
Right a -> return (Just a)
Left e -> f e >> return Nothing

note :: MonadFail m => String -> Maybe a -> m a
note msg = \case
Nothing -> fail msg
Just a -> pure a
48 changes: 34 additions & 14 deletions cardano-cli/src/Cardano/CLI/Run/Friendly.hs
Expand Up @@ -15,10 +15,13 @@ import Cardano.Prelude
import Data.Aeson (Value (..), object, toJSON, (.=))
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Types as Aeson
import qualified Data.ByteString.Char8 as BSC
import qualified Data.Map.Strict as Map
import qualified Data.Text as Text
import Data.Yaml (array)
import Data.Yaml.Pretty (defConfig, encodePretty, setConfCompare)

import Cardano.Api
import Cardano.Api as Api
import Cardano.Api.Shelley (Address (ShelleyAddress), StakeAddress (..))
import Cardano.Ledger.Crypto (Crypto)
import qualified Cardano.Ledger.Shelley.API as Shelley
Expand Down Expand Up @@ -162,26 +165,43 @@ friendlyFee = \case
friendlyLovelace :: Lovelace -> Aeson.Value
friendlyLovelace (Lovelace value) = String $ textShow value <> " Lovelace"

{-
current output:
52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528:
736b79: 142
TODO:
policy 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528:
asset 736b79 (sky): 142
-}
friendlyMintValue :: TxMintValue ViewTx era -> Aeson.Value
friendlyMintValue = \case
TxMintNone -> Null
TxMintValue _ v _ -> toJSON v
TxMintValue _ v _ -> friendlyValue v

friendlyTxOutValue :: TxOutValue era -> Aeson.Value
friendlyTxOutValue = \case
TxOutAdaOnly _ lovelace -> friendlyLovelace lovelace
TxOutValue _ multiasset -> toJSON multiasset
TxOutValue _ v -> friendlyValue v

friendlyValue :: Api.Value -> Aeson.Value
friendlyValue v =
object
[ case bundle of
ValueNestedBundleAda q -> "lovelace" .= q
ValueNestedBundle policy assets ->
friendlyPolicyId policy .= friendlyAssets assets
| bundle <- bundles
]
where

ValueNestedRep bundles = valueToNestedRep v

friendlyPolicyId = ("policy " <>) . serialiseToRawBytesHexText

friendlyAssets = Map.mapKeys friendlyAssetName

friendlyAssetName = \case
"" -> "default asset"
name@(AssetName nameBS) ->
"asset " <> serialiseToRawBytesHexText name <> nameAsciiSuffix
where
nameAsciiSuffix
| nameIsAscii = " (" <> nameAscii <> ")"
| otherwise = ""
nameIsAscii = BSC.all (\c -> isAscii c && isAlphaNum c) nameBS
nameAscii = Text.pack $ BSC.unpack nameBS

friendlyMetadata :: TxMetadataInEra era -> Aeson.Value
friendlyMetadata = \case
Expand Down
27 changes: 24 additions & 3 deletions cardano-cli/test/Test/Golden/TxView.hs
Expand Up @@ -94,7 +94,9 @@ golden_view_allegra =
, "fe5dd07fb576bff960d6e066eade5b26cdb5afebe29f76ea58d0a098bce5d891\
\#94"
, "--tx-out"
, "addr_test1qrefnr4k09pvge6dq83v6s67ruter8sftmky8qrmkqqsxy7q5psgn8tgqmupq4r79jmxlyk4eqt6z6hj5g8jd8393msqaw47f4\
, "addr_test1\
\qrefnr4k09pvge6dq83v6s67ruter8sftmky8qrmkqqsxy7q5psgn8tgqmupq4r7\
\9jmxlyk4eqt6z6hj5g8jd8393msqaw47f4\
\+99"
, "--fee", "100"
, "--invalid-hereafter", "101"
Expand Down Expand Up @@ -122,8 +124,27 @@ golden_view_mary =
, "fe5dd07fb576bff960d6e066eade5b26cdb5afebe29f76ea58d0a098bce5d891\
\#135"
, "--tx-out"
, "addr_test1qrefnr4k09pvge6dq83v6s67ruter8sftmky8qrmkqqsxy7q5psgn8tgqmupq4r79jmxlyk4eqt6z6hj5g8jd8393msqaw47f4\
\+138"
, "addr_test1\
\qrefnr4k09pvge6dq83v6s67ruter8sftmky8qrmkqqsxy7q5psgn8tgqmupq4r7\
\9jmxlyk4eqt6z6hj5g8jd8393msqaw47f4\
\ + \
\138\
\ + \
\130 d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf\
\ + \
\132 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528.cafe\
\ + \
\134 d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf.f00d\
\ + \
\136 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528.dead\
\ + \
\138\
\ d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf\
\.736e6f77\
\ + \
\142\
\ 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528\
\.736b79"
, "--fee", "139"
, "--invalid-before", "140"
, "--mint"
Expand Down
24 changes: 16 additions & 8 deletions cardano-cli/test/data/golden/mary/transaction-view.out
Expand Up @@ -6,19 +6,27 @@ inputs:
- fe5dd07fb576bff960d6e066eade5b26cdb5afebe29f76ea58d0a098bce5d891#135
metadata: null
mint:
52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528:
736b79: 142
cafe: 132
dead: 136
d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf:
'': 130
736e6f77: 138
f00d: 134
policy 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528:
asset 736b79 (sky): 142
asset cafe: 132
asset dead: 136
policy d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf:
asset 736e6f77 (snow): 138
asset f00d: 134
default asset: 130
outputs:
- address: addr_test1qrefnr4k09pvge6dq83v6s67ruter8sftmky8qrmkqqsxy7q5psgn8tgqmupq4r79jmxlyk4eqt6z6hj5g8jd8393msqaw47f4
address era: Shelley
amount:
lovelace: 138
policy 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528:
asset 736b79 (sky): 142
asset cafe: 132
asset dead: 136
policy d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf:
asset 736e6f77 (snow): 138
asset f00d: 134
default asset: 130
network: Testnet
payment credential:
key hash: f2998eb67942c4674d01e2cd435e1f17919e095eec43807bb0010313
Expand Down

0 comments on commit e7e0ea4

Please sign in to comment.