Skip to content

Commit

Permalink
Update "build-raw" cli command to use TxOutAnyEra
Browse files Browse the repository at this point in the history
  • Loading branch information
Jimbo4350 committed Nov 26, 2020
1 parent 4f8b2c6 commit 3a5591e
Show file tree
Hide file tree
Showing 7 changed files with 144 additions and 89 deletions.
1 change: 1 addition & 0 deletions cardano-api/src/Cardano/API.hs
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ module Cardano.API (
valueToList,
filterValue,
negateValue,
onlyAdaInValue,

-- ** Ada \/ Lovelace within multi-asset values
quantityToLovelace,
Expand Down
3 changes: 2 additions & 1 deletion cardano-api/src/Cardano/Api/Typed.hs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ module Cardano.Api.Typed (
valueToList,
filterValue,
negateValue,
onlyAdaInValue,

-- ** Ada \/ Lovelace within multi-asset values
quantityToLovelace,
Expand Down Expand Up @@ -512,7 +513,7 @@ import qualified Cardano.Chain.Slotting as Byron
--
-- Shelley imports
--
import Ouroboros.Consensus.Shelley.Eras (StandardAllegra, StandardShelley, StandardMary)
import Ouroboros.Consensus.Shelley.Eras (StandardAllegra, StandardMary, StandardShelley)
import Ouroboros.Consensus.Shelley.Protocol.Crypto (StandardCrypto)

import qualified Shelley.Spec.Ledger.Address as Shelley
Expand Down
6 changes: 5 additions & 1 deletion cardano-api/src/Cardano/Api/Value.hs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ module Cardano.Api.Value
, valueToList
, filterValue
, negateValue
, onlyAdaInValue

-- ** Ada \/ Lovelace specifically
, quantityToLovelace
Expand All @@ -45,8 +46,8 @@ import Data.String (IsString)
import qualified Cardano.Chain.Common as Byron

import qualified Cardano.Ledger.Era as Ledger
import qualified Shelley.Spec.Ledger.Coin as Shelley
import qualified Cardano.Ledger.Mary.Value as Mary
import qualified Shelley.Spec.Ledger.Coin as Shelley

import Ouroboros.Consensus.Shelley.Protocol.Crypto (StandardCrypto)

Expand Down Expand Up @@ -170,6 +171,9 @@ selectLovelace = quantityToLovelace . flip selectAsset AdaAssetId
lovelaceToValue :: Lovelace -> Value
lovelaceToValue = Value . Map.singleton AdaAssetId . lovelaceToQuantity

onlyAdaInValue :: Value -> Bool
onlyAdaInValue v = let Value m = filterValue (/= AdaAssetId) v
in if m == Map.empty then True else False

toMaryValue :: forall ledgerera.
Ledger.Crypto ledgerera ~ StandardCrypto
Expand Down
17 changes: 12 additions & 5 deletions cardano-cli/src/Cardano/CLI/Shelley/Commands.hs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ module Cardano.CLI.Shelley.Commands
import Data.Text (Text)
import Prelude

import Cardano.Api.Typed hiding (PoolId)
import Cardano.Api.Protocol (Protocol)
import Cardano.Api.Typed hiding (PoolId)

import Ouroboros.Consensus.BlockchainTime (SystemStart (..))

Expand Down Expand Up @@ -163,13 +163,20 @@ data TransactionCmd
= TxBuildRaw
UseCardanoEra
[TxIn]
[TxOut ShelleyEra]
(Maybe String) -- Placeholder for multi asset Values
SlotNo
Lovelace
[TxOutAnyEra]
(Maybe Value)
-- ^ Multi-Asset value
(Maybe SlotNo)
-- ^ Transaction lower bound
(Maybe SlotNo)
-- ^ Transaction upper bound
(Maybe Lovelace)
-- ^ Tx fee
[CertificateFile]
[(StakeAddress, Lovelace)]
TxMetadataJsonSchema
[ScriptFile]
-- ^ Auxillary scripts
[MetaDataFile]
(Maybe UpdateProposalFile)
TxBodyFile
Expand Down
62 changes: 39 additions & 23 deletions cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ module Cardano.CLI.Shelley.Parsers
import Cardano.Prelude hiding (All, Any, option)
import Prelude (String)

import Cardano.Api.Typed hiding (PoolId)
import Cardano.Api.Protocol (Protocol (..))
import Cardano.Api.Typed hiding (PoolId)

import Cardano.Chain.Slotting (EpochSlots (..))
import Cardano.CLI.Shelley.Commands
Expand Down Expand Up @@ -496,12 +496,14 @@ pTransaction =
pTransactionBuild = TxBuildRaw <$> pUseCardanoEra
<*> some pTxIn
<*> some pTxOut
<*> optional pMint
<*> pTxTTL
<*> pTxFee
<*> optional pMintMultiAsset
<*> optional pTxLowerBound
<*> optional pTxUpperBound
<*> optional pTxFee
<*> many pCertificateFile
<*> many pWithdrawal
<*> pTxMetadataJsonSchema
<*> many pScript
<*> many pMetaDataFile
<*> optional pUpdateProposalFile
<*> pTxBodyFile Output
Expand Down Expand Up @@ -1474,7 +1476,7 @@ parseTxIx :: Atto.Parser TxIx
parseTxIx = toEnum <$> Atto.decimal


pTxOut :: Parser (TxOut ShelleyEra)
pTxOut :: Parser TxOutAnyEra
pTxOut =
Opt.option (readerFromAttoParser parseTxOut)
( Opt.long "tx-out"
Expand All @@ -1484,30 +1486,44 @@ pTxOut =
\Lovelace."
)
where
parseTxOut :: Atto.Parser (TxOut ShelleyEra)
parseTxOut :: Atto.Parser (TxOutAnyEra)
parseTxOut =
TxOut <$> parseAddressInEra
<* Atto.char '+'
<*> (TxOutAdaOnly AdaOnlyInShelleyEra <$> parseLovelace)
TxOutAnyEra <$> parseAddressAny
<* Atto.char '+'
<*> pAdaOnlyValue

pMint :: Parser String
pMint =
Opt.strOption
( Opt.long "mint"
<> Opt.metavar "VALUE"
<> Opt.help "Mint multi-asset value(s) with the multi-asset cli syntax"
<> Opt.value ""
)
pAdaOnlyValue :: Atto.Parser Value
pAdaOnlyValue = lovelaceToValue <$> parseLovelace

pMintMultiAsset :: Parser Value
pMintMultiAsset =
Opt.option
(Opt.eitherReader readValue)
( Opt.long "mint"
<> Opt.metavar "VALUE"
<> Opt.help "Mint multi-asset value(s) with the multi-asset cli syntax"
)

readValue :: String -> Either String Value
readValue _maCliSyntax = Left "Need 2072 for MA cli syntax parser"

pTxTTL :: Parser SlotNo
pTxTTL =
pTxLowerBound :: Parser SlotNo
pTxLowerBound =
SlotNo <$>
Opt.option Opt.auto
( Opt.long "ttl"
( Opt.long "lower-bound"
<> Opt.metavar "SLOT"
<> Opt.help "Time to live (in slots)."
<> Opt.help "Time that transaction is valid from (in slots)."
)

pTxUpperBound :: Parser SlotNo
pTxUpperBound =
SlotNo <$>
Opt.option Opt.auto
( Opt.long "upper-bound"
<> Opt.metavar "SLOT"
<> Opt.help "Time that transaction is valid until (in slots)."
)
pTxFee :: Parser Lovelace
pTxFee =
Lovelace . (fromIntegral :: Natural -> Integer) <$>
Expand Down Expand Up @@ -2246,8 +2262,8 @@ parseAddressAny = do
Nothing -> fail "invalid address"
Just addr -> pure addr

parseAddressInEra :: IsCardanoEra era => Atto.Parser (AddressInEra era)
parseAddressInEra = do
_parseAddressInEra :: IsCardanoEra era => Atto.Parser (AddressInEra era)
_parseAddressInEra = do
addr <- parseAddressAny
case anyAddressInEra addr of
Nothing -> fail "invalid address in the target era"
Expand Down
Loading

0 comments on commit 3a5591e

Please sign in to comment.