From 57da24db7cfe69f00d21b810147da1b7a019e954 Mon Sep 17 00:00:00 2001 From: Yuriy Syrovetskiy Date: Fri, 17 Sep 2021 16:06:50 +0300 Subject: [PATCH] cardano-cli: Expect AssetName in hex in --mint and --tx-out --- cardano-api/src/Cardano/Api/ValueParser.hs | 7 +++-- cardano-cli/cardano-cli.cabal | 1 + cardano-cli/src/Cardano/CLI/Helpers.hs | 9 +++++- cardano-cli/src/Cardano/CLI/Run/Friendly.hs | 28 ++++++++----------- .../Test/Golden/Shelley/Transaction/Build.hs | 8 ++++-- cardano-cli/test/Test/Golden/TxView.hs | 16 +++++++++-- .../data/golden/mary/transaction-view.out | 11 ++++++-- 7 files changed, 51 insertions(+), 29 deletions(-) diff --git a/cardano-api/src/Cardano/Api/ValueParser.hs b/cardano-api/src/Cardano/Api/ValueParser.hs index 9a6e639a693..e3eb212ce92 100644 --- a/cardano-api/src/Cardano/Api/ValueParser.hs +++ b/cardano-api/src/Cardano/Api/ValueParser.hs @@ -5,15 +5,14 @@ module Cardano.Api.ValueParser import Prelude +import Control.Applicative (many, some, (<|>)) +import qualified Data.ByteString.Char8 as BSC import qualified Data.Char as Char import Data.Functor (void, ($>)) import Data.List (foldl') import qualified Data.Text as Text import qualified Data.Text.Encoding as Text import Data.Word (Word64) - -import Control.Applicative (many, some, (<|>)) - import Text.Parsec as Parsec (notFollowedBy, try, ()) import Text.Parsec.Char (alphaNum, char, digit, hexDigit, space, spaces, string) import Text.Parsec.Expr (Assoc (..), Operator (..), buildExpressionParser) @@ -24,6 +23,8 @@ import Cardano.Api.SerialiseRaw import Cardano.Api.Utils (note) import Cardano.Api.Value +import Cardano.CLI.Helpers (note) + -- | Parse a 'Value' from its string representation. parseValue :: Parser Value parseValue = evalValueExpr <$> parseValueExpr diff --git a/cardano-cli/cardano-cli.cabal b/cardano-cli/cardano-cli.cabal index 06c6ab6f5d3..3e3de0c1d57 100644 --- a/cardano-cli/cardano-cli.cabal +++ b/cardano-cli/cardano-cli.cabal @@ -206,6 +206,7 @@ test-suite cardano-cli-golden type: exitcode-stdio-1.0 build-depends: aeson >= 1.5.6.0 + , base16-bytestring , bytestring , cardano-api , cardano-cli diff --git a/cardano-cli/src/Cardano/CLI/Helpers.hs b/cardano-cli/src/Cardano/CLI/Helpers.hs index 1c4de2cbabe..0ad932b4381 100644 --- a/cardano-cli/src/Cardano/CLI/Helpers.hs +++ b/cardano-cli/src/Cardano/CLI/Helpers.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} @@ -14,12 +15,13 @@ module Cardano.CLI.Helpers , hushM ) where -import Cardano.Prelude +import Cardano.Prelude hiding (note) 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 @@ -126,3 +128,8 @@ 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 diff --git a/cardano-cli/src/Cardano/CLI/Run/Friendly.hs b/cardano-cli/src/Cardano/CLI/Run/Friendly.hs index c0793694312..3e94d522f08 100644 --- a/cardano-cli/src/Cardano/CLI/Run/Friendly.hs +++ b/cardano-cli/src/Cardano/CLI/Run/Friendly.hs @@ -162,25 +162,21 @@ 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 _ -> - object - [ friendlyAssetId assetId .= quantity - | (assetId, quantity) <- valueToList v - ] - -friendlyAssetId :: AssetId -> Text -friendlyAssetId = \case - AdaAssetId -> "ADA" - AssetId policyId (AssetName assetName) -> - decodeUtf8 $ serialiseToRawBytesHex policyId <> suffix - where - suffix = - case assetName of - "" -> "" - _ -> "." <> assetName + TxMintValue _ v _ -> toJSON v friendlyTxOutValue :: TxOutValue era -> Aeson.Value friendlyTxOutValue = \case diff --git a/cardano-cli/test/Test/Golden/Shelley/Transaction/Build.hs b/cardano-cli/test/Test/Golden/Shelley/Transaction/Build.hs index b417cd8b391..cbaae466c74 100644 --- a/cardano-cli/test/Test/Golden/Shelley/Transaction/Build.hs +++ b/cardano-cli/test/Test/Golden/Shelley/Transaction/Build.hs @@ -11,6 +11,8 @@ module Test.Golden.Shelley.Transaction.Build import Cardano.Prelude import Prelude (String) +import qualified Data.ByteString.Base16 as Base16 +import qualified Data.ByteString.Char8 as BSC import Hedgehog (Property) import Test.OptParse @@ -76,7 +78,9 @@ golden_shelleyTransactionBuild_Minting = , scriptWit ] - let dummyMA = filter (/= '\n') $ "50 " ++ polid ++ ".ethereum" + let dummyMA = + filter (/= '\n') $ + "50 " ++ polid ++ "." ++ BSC.unpack (Base16.encode "ethereum") txBodyOutFile <- noteTempFile tempDir "tx-body-out" @@ -134,5 +138,3 @@ golden_shelleyTransactionBuild_TxInScriptWitnessed = H.assertFileOccurences 1 "TxBodyMary" txBodyOutFile H.assertEndsWithSingleNewline txBodyOutFile - - diff --git a/cardano-cli/test/Test/Golden/TxView.hs b/cardano-cli/test/Test/Golden/TxView.hs index 5651fd81976..a6b1c2bcfb0 100644 --- a/cardano-cli/test/Test/Golden/TxView.hs +++ b/cardano-cli/test/Test/Golden/TxView.hs @@ -127,11 +127,21 @@ golden_view_mary = , "--fee", "139" , "--invalid-before", "140" , "--mint" - , "42 d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf\ + , "130 d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf\ \ + \ - \43 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528.snow\ + \132 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528.cafe\ \ + \ - \44 d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf.sky" + \134 d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf.f00d\ + \ + \ + \136 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528.dead\ + \ + \ + \138\ + \ d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf\ + \.736e6f77\ + \ + \ + \142\ + \ 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528\ + \.736b79" , "--minting-script-file", "test/data/golden/mary/scripts/mint.all" , "--minting-script-file", "test/data/golden/mary/scripts/mint.any" , "--out-file", transactionBodyFile diff --git a/cardano-cli/test/data/golden/mary/transaction-view.out b/cardano-cli/test/data/golden/mary/transaction-view.out index c84682bd066..e50468388c8 100644 --- a/cardano-cli/test/data/golden/mary/transaction-view.out +++ b/cardano-cli/test/data/golden/mary/transaction-view.out @@ -6,9 +6,14 @@ inputs: - fe5dd07fb576bff960d6e066eade5b26cdb5afebe29f76ea58d0a098bce5d891#135 metadata: null mint: - 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528.snow: 43 - d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf: 42 - d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf.sky: 44 + 52dc3d43b6d2465e96109ce75ab61abe5e9c1d8a3c9ce6ff8a3af528: + 736b79: 142 + cafe: 132 + dead: 136 + d441227553a0f1a965fee7d60a0f724b368dd1bddbc208730fccebcf: + '': 130 + 736e6f77: 138 + f00d: 134 outputs: - address: addr_test1qrefnr4k09pvge6dq83v6s67ruter8sftmky8qrmkqqsxy7q5psgn8tgqmupq4r79jmxlyk4eqt6z6hj5g8jd8393msqaw47f4 address era: Shelley