Skip to content

Commit

Permalink
Merge #3177
Browse files Browse the repository at this point in the history
3177: Update cli to allow datum values in the tx r=Jimbo4350 a=Jimbo4350

Resolves #2919

Co-authored-by: Jordan Millar <jordan.millar@iohk.io>
  • Loading branch information
iohk-bors[bot] and Jimbo4350 committed Sep 28, 2021
2 parents f59ae6c + caf26eb commit 0090ffc
Show file tree
Hide file tree
Showing 28 changed files with 449 additions and 247 deletions.
16 changes: 8 additions & 8 deletions bench/tx-generator/src/Cardano/Benchmarking/GeneratorTx.hs
Expand Up @@ -30,7 +30,7 @@ module Cardano.Benchmarking.GeneratorTx
) where

import Cardano.Prelude
import Prelude (error, id, String)
import Prelude (String, error, id)

import qualified Control.Concurrent.STM as STM
import Control.Monad (fail)
Expand All @@ -42,7 +42,7 @@ import qualified Data.List.NonEmpty as NE
import qualified Data.Map.Strict as Map
import Data.Text (pack)
import Network.Socket (AddrInfo (..), AddrInfoFlag (..), Family (..), SocketType (Stream),
addrFamily, addrFlags, addrSocketType, defaultHints, getAddrInfo)
addrFamily, addrFlags, addrSocketType, defaultHints, getAddrInfo)

import Cardano.CLI.Types (SigningKeyFile (..))
import Cardano.Node.Types
Expand All @@ -51,20 +51,20 @@ import Ouroboros.Consensus.Shelley.Eras (StandardShelley)

import Cardano.Api hiding (txFee)

import Cardano.Benchmarking.Types
import qualified Cardano.Benchmarking.FundSet as FundSet
import Cardano.Benchmarking.GeneratorTx.Error
import Cardano.Benchmarking.GeneratorTx.Genesis
import Cardano.Benchmarking.GeneratorTx.NodeToNode
import Cardano.Benchmarking.GeneratorTx.SizedMetadata (mkMetadata)
import Cardano.Benchmarking.GeneratorTx.Submission
import Cardano.Benchmarking.GeneratorTx.SubmissionClient
import Cardano.Benchmarking.GeneratorTx.Tx
import Cardano.Benchmarking.GeneratorTx.SizedMetadata (mkMetadata)
import Cardano.Benchmarking.Tracer
import Cardano.Benchmarking.Types
import Cardano.Benchmarking.Wallet
import qualified Cardano.Benchmarking.FundSet as FundSet

import Shelley.Spec.Ledger.API (ShelleyGenesis)
import Ouroboros.Network.Protocol.LocalTxSubmission.Type (SubmitResult (..))
import Shelley.Spec.Ledger.API (ShelleyGenesis)

readSigningKey :: SigningKeyFile -> ExceptT TxGenError IO (SigningKey PaymentKey)
readSigningKey =
Expand Down Expand Up @@ -195,7 +195,7 @@ splitFunds
-- same TxOut for all
outs = zip [identityIndex ..
identityIndex + fromIntegral numOutsPerInitTx - 1]
(repeat (TxOut globalOutAddr txOut TxOutDatumHashNone))
(repeat (TxOut globalOutAddr txOut TxOutDatumNone))
(mFunds, _fees, outIndices, splitTx) =
mkTransactionGen sKey (initialFund :| []) globalOutAddr outs TxMetadataNone fee
!splitTxId = getTxId $ getTxBody splitTx
Expand Down Expand Up @@ -388,7 +388,7 @@ txGenerator
initRecipientIndex = 0 :: Int
-- The same output for all transactions.
valueForRecipient = quantityToLovelace $ Quantity 1000000 -- 10 ADA
!txOut = TxOut recipientAddress (mkTxOutValueAdaOnly valueForRecipient) TxOutDatumHashNone
!txOut = TxOut recipientAddress (mkTxOutValueAdaOnly valueForRecipient) TxOutDatumNone
totalValue = valueForRecipient + txFee
-- Send possible change to the same 'recipientAddress'.
addressForChange = recipientAddress
Expand Down
Expand Up @@ -25,7 +25,7 @@ import Options.Applicative as Opt

-- Node API imports
import Cardano.Api
import Cardano.CLI.Types (SigningKeyFile(..))
import Cardano.CLI.Types (SigningKeyFile (..))

-- Node imports
import Cardano.Node.Types
Expand Down Expand Up @@ -197,7 +197,7 @@ parseGeneratorCmd =

data GeneratorFunds
= FundsGenesis SigningKeyFile
| FundsUtxo SigningKeyFile TxIn (TxOut ShelleyEra)
| FundsUtxo SigningKeyFile TxIn (TxOut CtxTx ShelleyEra)
| FundsSplitUtxo SigningKeyFile FilePath
deriving stock Show

Expand Down
Expand Up @@ -6,22 +6,19 @@ where
import Cardano.Prelude hiding (option)
import Prelude (String)

import Cardano.Api
import Cardano.CLI.Types (SigningKeyFile (..))
import Cardano.Node.Types
import qualified Control.Arrow as Arr
import Control.Monad (fail)
import qualified Data.Attoparsec.ByteString.Char8 as Atto
import qualified Data.ByteString.Char8 as BSC
import qualified Data.Char as Char
import qualified Data.Text.Encoding as Text
import qualified Data.Text as Text
import Options.Applicative
( Parser
, auto, bashCompleter, completer, flag, help
, long, metavar, option, strOption
)
import qualified Data.Text.Encoding as Text
import Options.Applicative (Parser, auto, bashCompleter, completer, flag, help, long,
metavar, option, strOption)
import qualified Options.Applicative as Opt
import qualified Control.Arrow as Arr
import Cardano.Api
import Cardano.CLI.Types (SigningKeyFile (..))
import Cardano.Node.Types


lastly :: Parser a -> Parser (Last a)
Expand Down Expand Up @@ -133,7 +130,7 @@ readerFromAttoParser :: Atto.Parser a -> Opt.ReadM a
readerFromAttoParser p =
Opt.eitherReader (Atto.parseOnly (p <* Atto.endOfInput) . BSC.pack)

pTxOut :: Parser (TxOut ShelleyEra)
pTxOut :: Parser (TxOut CtxTx ShelleyEra)
pTxOut =
Opt.option (readerFromAttoParser parseTxOut)
( Opt.long "tx-out"
Expand All @@ -143,12 +140,12 @@ pTxOut =
\Lovelace."
)
where
parseTxOut :: Atto.Parser (TxOut ShelleyEra)
parseTxOut :: Atto.Parser (TxOut CtxTx ShelleyEra)
parseTxOut =
TxOut <$> parseAddressInEra
<* Atto.char '+'
<*> (TxOutAdaOnly AdaOnlyInShelleyEra <$> parseLovelace)
<*> pure TxOutDatumHashNone
<*> pure TxOutDatumNone

parseAddressInEra :: IsCardanoEra era => Atto.Parser (AddressInEra era)
parseAddressInEra = do
Expand Down
Expand Up @@ -8,17 +8,18 @@ module Cardano.Benchmarking.GeneratorTx.Genesis
where

import Cardano.Prelude hiding (TypeError, filter)
import Prelude (error, filter)
import qualified Data.Map.Strict as Map
import Prelude (error, filter)

import Control.Arrow ((***))
import Cardano.Api
import Cardano.Api.Shelley (fromShelleyLovelace, fromShelleyStakeReference, fromShelleyPaymentCredential)
import Cardano.Api.Shelley (fromShelleyLovelace, fromShelleyPaymentCredential,
fromShelleyStakeReference)
import Control.Arrow ((***))

import Cardano.Benchmarking.GeneratorTx.Tx

import Shelley.Spec.Ledger.API (Addr(..), ShelleyGenesis, sgInitialFunds)
import Ouroboros.Consensus.Shelley.Eras (StandardShelley)
import Shelley.Spec.Ledger.API (Addr (..), ShelleyGenesis, sgInitialFunds)

genesisFunds :: forall era. IsShelleyBasedEra era
=> NetworkId -> ShelleyGenesis StandardShelley -> [(AddressInEra era, Lovelace)]
Expand Down Expand Up @@ -58,7 +59,7 @@ genesisExpenditure networkId key addr coin fee ttl = (tx, fund)
tx = mkGenesisTransaction (castKey key) 0 ttl fee [ pseudoTxIn ] [ txout ]

value = mkTxOutValueAdaOnly $ coin - fee
txout = TxOut addr value TxOutDatumHashNone
txout = TxOut addr value TxOutDatumNone

pseudoTxIn = genesisUTxOPseudoTxIn networkId
(verificationKeyHash $ getVerificationKey $ castKey key)
Expand Down
@@ -1,18 +1,18 @@
{- HLINT ignore "Use camelCase" -}
{- HLINT ignore "Use uncurry" -}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Cardano.Benchmarking.GeneratorTx.SizedMetadata
where

import Prelude

import Cardano.Api
import Cardano.Benchmarking.GeneratorTx.Tx
import qualified Data.ByteString as BS
import qualified Data.Map.Strict as Map
import Data.Word (Word64)
import qualified Data.ByteString as BS
import Cardano.Benchmarking.GeneratorTx.Tx
import Cardano.Api

maxMapSize :: Int
maxMapSize = 1000
Expand Down Expand Up @@ -108,7 +108,6 @@ dummyTxSizeInEra metadata = case makeTransactionBody dummyTx of
, txValidityRange = (TxValidityNoLowerBound, mkValidityUpperBound 0)
, txMetadata = metadata
, txAuxScripts = TxAuxScriptsNone
, txExtraScriptData = BuildTxWith TxExtraScriptDataNone
, txExtraKeyWits = TxExtraKeyWitnessesNone
, txProtocolParams = BuildTxWith Nothing
, txWithdrawals = TxWithdrawalsNone
Expand Down
18 changes: 8 additions & 10 deletions bench/tx-generator/src/Cardano/Benchmarking/GeneratorTx/Tx.hs
Expand Up @@ -23,12 +23,12 @@ where

import Prelude

import Data.List.NonEmpty (NonEmpty (..))
import qualified Data.List.NonEmpty as NonEmpty
import Data.List.NonEmpty (NonEmpty(..))
import qualified Data.Map.Strict as Map
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map

import Cardano.Benchmarking.Types (TxAdditionalSize(..))
import Cardano.Benchmarking.Types (TxAdditionalSize (..))

import Cardano.Api

Expand Down Expand Up @@ -58,7 +58,7 @@ mkGenesisTransaction :: forall era .
-> SlotNo
-> Lovelace
-> [TxIn]
-> [TxOut era]
-> [TxOut CtxTx era]
-> Tx era
mkGenesisTransaction key _payloadSize ttl fee txins txouts
= case makeTransactionBody txBodyContent of
Expand All @@ -73,7 +73,6 @@ mkGenesisTransaction key _payloadSize ttl fee txins txouts
, txValidityRange = (TxValidityNoLowerBound, validityUpperBound)
, txMetadata = TxMetadataNone
, txAuxScripts = TxAuxScriptsNone
, txExtraScriptData = BuildTxWith TxExtraScriptDataNone
, txExtraKeyWits = TxExtraKeyWitnessesNone
, txProtocolParams = BuildTxWith Nothing
, txWithdrawals = TxWithdrawalsNone
Expand All @@ -100,7 +99,7 @@ mkTransaction :: forall era .
-> SlotNo
-> Lovelace
-> [TxIn]
-> [TxOut era]
-> [TxOut CtxTx era]
-> Tx era
mkTransaction key metadata ttl fee txins txouts
= case makeTransactionBody txBodyContent of
Expand All @@ -115,7 +114,6 @@ mkTransaction key metadata ttl fee txins txouts
, txValidityRange = (TxValidityNoLowerBound, mkValidityUpperBound ttl)
, txMetadata = metadata
, txAuxScripts = TxAuxScriptsNone
, txExtraScriptData = BuildTxWith TxExtraScriptDataNone
, txExtraKeyWits = TxExtraKeyWitnessesNone
, txProtocolParams = BuildTxWith Nothing
, txWithdrawals = TxWithdrawalsNone
Expand Down Expand Up @@ -150,7 +148,7 @@ mkTransactionGen :: forall era .
=> SigningKey PaymentKey
-> NonEmpty Fund
-> AddressInEra era
-> [(Int, TxOut era)]
-> [(Int, TxOut CtxTx era)]
-- ^ Each recipient and their payment details
-> TxMetadataInEra era
-- ^ Optional size of additional binary blob in transaction (as 'txAttributes')
Expand Down Expand Up @@ -178,7 +176,7 @@ mkTransactionGen signingKey inputs address payments metadata fee =

(txOutputs, mChange) = case compare changeValue 0 of
GT ->
let changeTxOut = TxOut address (mkTxOutValueAdaOnly changeValue) TxOutDatumHashNone
let changeTxOut = TxOut address (mkTxOutValueAdaOnly changeValue) TxOutDatumNone
changeIndex = TxIx $ fromIntegral $ length payTxOuts -- 0-based index
in
(appendr payTxOuts (changeTxOut :| []), Just (changeIndex, changeValue))
Expand All @@ -192,7 +190,7 @@ mkTransactionGen signingKey inputs address payments metadata fee =
offsetMap = Map.fromList $ zipWith (\payment index -> (fst payment, TxIx index))
payments
[0..]
txOutSum :: [ TxOut era ] -> Lovelace
txOutSum :: [ TxOut CtxTx era ] -> Lovelace
txOutSum l = sum $ map toVal l

toVal (TxOut _ val _) = txOutValueToLovelace val
Expand Down
17 changes: 8 additions & 9 deletions bench/tx-generator/src/Cardano/Benchmarking/PlutusExample.hs
Expand Up @@ -3,19 +3,19 @@
{-# LANGUAGE ScopedTypeVariables #-}
module Cardano.Benchmarking.PlutusExample
where
import Prelude
import Prelude

import Control.Monad.Trans.Except
import qualified Data.ByteString.Char8 as BSC
import Control.Monad.Trans.Except

import Cardano.CLI.Shelley.Script (readFileScriptInAnyLang)
import Cardano.CLI.Shelley.Script (readFileScriptInAnyLang)

import Cardano.Api
import Cardano.Api.Shelley (ProtocolParameters)
import Cardano.Api
import Cardano.Api.Shelley (ProtocolParameters)

import Cardano.Benchmarking.FundSet
import Cardano.Benchmarking.GeneratorTx.Tx as Tx (mkTxOutValueAdaOnly)
import Cardano.Benchmarking.Wallet
import Cardano.Benchmarking.FundSet
import Cardano.Benchmarking.GeneratorTx.Tx as Tx (mkTxOutValueAdaOnly)
import Cardano.Benchmarking.Wallet

mkUtxoScript ::
NetworkId
Expand Down Expand Up @@ -85,7 +85,6 @@ genTxPlutusSpend protocolParameters collateral scriptWitness fee metadata inFund
, txValidityRange = (TxValidityNoLowerBound, TxValidityNoUpperBound ValidityNoUpperBoundInAlonzoEra)
, txMetadata = metadata
, txAuxScripts = TxAuxScriptsNone
, txExtraScriptData = BuildTxWith TxExtraScriptDataNone
, txExtraKeyWits = TxExtraKeyWitnessesNone
, txProtocolParams = BuildTxWith $ Just protocolParameters
, txWithdrawals = TxWithdrawalsNone
Expand Down
11 changes: 5 additions & 6 deletions bench/tx-generator/src/Cardano/Benchmarking/Wallet.hs
Expand Up @@ -11,14 +11,14 @@ import Control.Concurrent.MVar

import Cardano.Api

import Cardano.Benchmarking.Types (NumberOfTxs(..))
import Cardano.Benchmarking.GeneratorTx.Tx as Tx hiding (Fund)
import Cardano.Benchmarking.FundSet as FundSet
import Cardano.Benchmarking.GeneratorTx.Tx as Tx hiding (Fund)
import Cardano.Benchmarking.Types (NumberOfTxs (..))

type WalletRef = MVar Wallet

type TxGenerator era = [Fund] -> [TxOut era] -> Either String (Tx era, TxId)
type ToUTxO era = [Lovelace] -> ([TxOut era], TxId -> [Fund])
type TxGenerator era = [Fund] -> [TxOut CtxTx era] -> Either String (Tx era, TxId)
type ToUTxO era = [Lovelace] -> ([TxOut CtxTx era], TxId -> [Fund])

data Wallet = Wallet {
walletNetworkId :: !NetworkId
Expand Down Expand Up @@ -117,7 +117,7 @@ mkUTxO networkId key validity values
, newFunds
)
where
mkTxOut v = TxOut (Tx.keyAddress @ era networkId key) (mkTxOutValueAdaOnly v) TxOutDatumHashNone
mkTxOut v = TxOut (Tx.keyAddress @ era networkId key) (mkTxOutValueAdaOnly v) TxOutDatumNone

newFunds txId = zipWith (mkNewFund txId) [TxIx 0 ..] values

Expand Down Expand Up @@ -149,7 +149,6 @@ genTx fee metadata inFunds outputs
, txValidityRange = (TxValidityNoLowerBound, upperBound)
, txMetadata = metadata
, txAuxScripts = TxAuxScriptsNone
, txExtraScriptData = BuildTxWith TxExtraScriptDataNone
, txExtraKeyWits = TxExtraKeyWitnessesNone
, txProtocolParams = BuildTxWith Nothing
, txWithdrawals = TxWithdrawalsNone
Expand Down
1 change: 1 addition & 0 deletions cardano-api/cardano-api.cabal
Expand Up @@ -217,6 +217,7 @@ test-suite cardano-api-test
Test.Cardano.Api.KeysByron
Test.Cardano.Api.Ledger
Test.Cardano.Api.Metadata
Test.Cardano.Api.Typed.Address
Test.Cardano.Api.Typed.Bech32
Test.Cardano.Api.Typed.CBOR
Test.Cardano.Api.Typed.Envelope
Expand Down

0 comments on commit 0090ffc

Please sign in to comment.