Skip to content

Commit ca753ee

Browse files
committed
Remove requirement of donation for "current treasury value"
1 parent c1a4e6a commit ca753ee

File tree

13 files changed

+118
-83
lines changed

13 files changed

+118
-83
lines changed

cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import Cardano.CLI.EraBased.Script.Type
2424
import Cardano.CLI.EraBased.Script.Type qualified as PlutusSpend
2525
import Cardano.CLI.EraBased.Script.Vote.Type qualified as Voting
2626
import Cardano.CLI.EraBased.Script.Withdrawal.Type qualified as Withdrawal
27+
import Cardano.CLI.EraBased.Transaction.Command (IncludeCurrentTreasuryValue (..))
2728
import Cardano.CLI.Option.Flag
2829
import Cardano.CLI.Option.Flag.Type qualified as Z
2930
import Cardano.CLI.Orphan ()
@@ -1190,10 +1191,9 @@ pProposalReferencePlutusScriptWitness prefix autoBalanceExecUnits =
11901191
ManualBalance -> pExecutionUnits $ appendedPrefix ++ "reference-tx-in"
11911192
)
11921193

1193-
pCurrentTreasuryValueAndDonation
1194-
:: Parser (Maybe (Maybe TxCurrentTreasuryValue, TxTreasuryDonation))
1195-
pCurrentTreasuryValueAndDonation =
1196-
optional ((,) <$> optional pCurrentTreasuryValue' <*> pTreasuryDonation')
1194+
pCurrentTreasuryValue :: Parser (Maybe TxCurrentTreasuryValue)
1195+
pCurrentTreasuryValue =
1196+
optional pCurrentTreasuryValue'
11971197

11981198
pCurrentTreasuryValue' :: Parser TxCurrentTreasuryValue
11991199
pCurrentTreasuryValue' =
@@ -1206,6 +1206,17 @@ pCurrentTreasuryValue' =
12061206
]
12071207
)
12081208

1209+
pIncludeCurrentTreasuryValue :: Parser IncludeCurrentTreasuryValue
1210+
pIncludeCurrentTreasuryValue =
1211+
asum
1212+
[ Opt.flag' IncludeCurrentTreasuryValue $
1213+
mconcat
1214+
[ Opt.long "include-current-treasury-value"
1215+
, Opt.help "Include the current treasury value in the transaction."
1216+
]
1217+
, pure ExcludeCurrentTreasuryValue
1218+
]
1219+
12091220
pTreasuryDonation :: Parser (Maybe TxTreasuryDonation)
12101221
pTreasuryDonation =
12111222
optional pTreasuryDonation'

cardano-cli/src/Cardano/CLI/EraBased/Transaction/Command.hs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ module Cardano.CLI.EraBased.Transaction.Command
2424
, TransactionViewCmdArgs (..)
2525
, TransactionWitnessCmdArgs (..)
2626
, TxCborFormat (..)
27+
, IncludeCurrentTreasuryValue (..)
2728
, renderTransactionCmds
2829
)
2930
where
@@ -92,7 +93,8 @@ data TransactionBuildRawCmdArgs era = TransactionBuildRawCmdArgs
9293
, mUpdateProprosalFile :: !(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile)))
9394
, voteFiles :: ![(VoteFile In, Maybe (ScriptRequirements Exp.VoterItem))]
9495
, proposalFiles :: ![(ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem))]
95-
, currentTreasuryValueAndDonation :: !(Maybe (Maybe TxCurrentTreasuryValue, TxTreasuryDonation))
96+
, mCurrentTreasuryValue :: !(Maybe TxCurrentTreasuryValue)
97+
, mTreasuryDonation :: !(Maybe TxTreasuryDonation)
9698
, isCborOutCanonical :: !TxCborFormat
9799
, txBodyOutFile :: !(TxBodyFile Out)
98100
}
@@ -107,6 +109,9 @@ data TxCborFormat
107109
| TxCborNotCanonical
108110
deriving (Eq, Show)
109111

112+
data IncludeCurrentTreasuryValue = IncludeCurrentTreasuryValue | ExcludeCurrentTreasuryValue
113+
deriving (Eq, Show)
114+
110115
-- | Like 'TransactionBuildRaw' but without the fee, and with a change output.
111116
data TransactionBuildCmdArgs era = TransactionBuildCmdArgs
112117
{ currentEra :: !(Exp.Era era)
@@ -148,7 +153,8 @@ data TransactionBuildCmdArgs era = TransactionBuildCmdArgs
148153
, mUpdateProposalFile :: !(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile)))
149154
, voteFiles :: ![(VoteFile In, Maybe (ScriptRequirements Exp.VoterItem))]
150155
, proposalFiles :: ![(ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem))]
151-
, treasuryDonation :: !(Maybe TxTreasuryDonation)
156+
, includeCurrentTreasuryValue :: !IncludeCurrentTreasuryValue
157+
, mTreasuryDonation :: !(Maybe TxTreasuryDonation)
152158
, isCborOutCanonical :: !TxCborFormat
153159
, buildOutputOptions :: !TxBuildOutputOptions
154160
}
@@ -198,7 +204,8 @@ data TransactionBuildEstimateCmdArgs era = TransactionBuildEstimateCmdArgs
198204
, metadataFiles :: ![MetadataFile]
199205
, voteFiles :: ![(VoteFile In, Maybe (ScriptRequirements Exp.VoterItem))]
200206
, proposalFiles :: ![(ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem))]
201-
, currentTreasuryValueAndDonation :: !(Maybe (Maybe TxCurrentTreasuryValue, TxTreasuryDonation))
207+
, currentTreasuryValue :: !(Maybe TxCurrentTreasuryValue)
208+
, treasuryDonation :: !(Maybe TxTreasuryDonation)
202209
, isCborOutCanonical :: !TxCborFormat
203210
, txBodyOutFile :: !(TxBodyFile Out)
204211
}

cardano-cli/src/Cardano/CLI/EraBased/Transaction/Option.hs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ pTransactionBuildCmd envCli = do
222222
<*> pFeatured era' (optional pUpdateProposalFile)
223223
<*> pVoteFiles AutoBalance
224224
<*> pProposalFiles AutoBalance
225+
<*> pIncludeCurrentTreasuryValue
225226
<*> pTreasuryDonation
226227
<*> pIsCborOutCanonical
227228
<*> pTxBuildOutputOptions
@@ -285,7 +286,8 @@ pTransactionBuildEstimateCmd _envCli = do
285286
<*> many pMetadataFile
286287
<*> pVoteFiles ManualBalance
287288
<*> pProposalFiles ManualBalance
288-
<*> pCurrentTreasuryValueAndDonation
289+
<*> pCurrentTreasuryValue
290+
<*> pTreasuryDonation
289291
<*> pIsCborOutCanonical
290292
<*> pTxBodyFileOut
291293

@@ -324,7 +326,8 @@ pTransactionBuildRaw =
324326
<*> pFeatured Exp.useEra (optional pUpdateProposalFile)
325327
<*> pVoteFiles ManualBalance
326328
<*> pProposalFiles ManualBalance
327-
<*> pCurrentTreasuryValueAndDonation
329+
<*> pCurrentTreasuryValue
330+
<*> pTreasuryDonation
328331
<*> pIsCborOutCanonical
329332
<*> pTxBodyFileOut
330333

cardano-cli/src/Cardano/CLI/EraBased/Transaction/Run.hs

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ runTransactionBuildCmd
157157
, mUpdateProposalFile
158158
, voteFiles
159159
, proposalFiles
160-
, treasuryDonation -- Maybe TxTreasuryDonation
160+
, includeCurrentTreasuryValue
161+
, mTreasuryDonation
161162
, isCborOutCanonical
162163
, buildOutputOptions
163164
} = do
@@ -288,14 +289,9 @@ runTransactionBuildCmd
288289
)
289290
& fromEitherCIOCli
290291

291-
let currentTreasuryValueAndDonation =
292-
case (treasuryDonation, unFeatured <$> featuredCurrentTreasuryValueM) of
293-
(Nothing, _) -> Nothing -- We shouldn't specify the treasury value when no donation is being done
294-
(Just td, mctv) -> Just (mctv, td) -- Current treasury value is not mandatory for donations, see:
295-
-- \* https://intersectmbo.github.io/formal-ledger-specifications/site/Ledger.Conway.Specification.Utxo.html#sec:the-utxo-transition-system
296-
-- \* https://intersectmbo.github.io/formal-ledger-specifications/site/Notation.html#the-maybe-type
297-
-- And discussion:
298-
-- \* https://discord.com/channels/1136727663583698984/1239888777015590913/1364244737602879498
292+
let mCurrenTreasuryValue = case includeCurrentTreasuryValue of
293+
IncludeCurrentTreasuryValue -> unFeatured <$> featuredCurrentTreasuryValueM
294+
ExcludeCurrentTreasuryValue -> Nothing
299295

300296
-- We need to construct the txBodycontent outside of runTxBuild
301297
BalancedTxBody txBodyContent balancedTxBody _ _ <-
@@ -323,7 +319,8 @@ runTransactionBuildCmd
323319
mOverrideWitnesses
324320
votingProceduresAndMaybeScriptWits
325321
proposals
326-
currentTreasuryValueAndDonation
322+
mCurrenTreasuryValue
323+
mTreasuryDonation
327324

328325
-- TODO: Calculating the script cost should live as a different command.
329326
-- Why? Because then we can simply read a txbody and figure out
@@ -410,7 +407,8 @@ runTransactionBuildEstimateCmd -- TODO change type
410407
, proposalFiles
411408
, plutusCollateral
412409
, totalReferenceScriptSize
413-
, currentTreasuryValueAndDonation
410+
, currentTreasuryValue
411+
, treasuryDonation
414412
, isCborOutCanonical
415413
, txBodyOutFile
416414
} = do
@@ -497,7 +495,8 @@ runTransactionBuildEstimateCmd -- TODO change type
497495
TxUpdateProposalNone
498496
votingProceduresAndMaybeScriptWits
499497
proposals
500-
currentTreasuryValueAndDonation
498+
currentTreasuryValue
499+
treasuryDonation
501500
let stakeCredentialsToDeregisterMap = fromList $ catMaybes [getStakeDeregistrationInfo cert | (cert, _) <- certsAndMaybeScriptWits]
502501
drepsToDeregisterMap =
503502
fromList $
@@ -615,7 +614,8 @@ runTransactionBuildRawCmd
615614
, mUpdateProprosalFile
616615
, voteFiles
617616
, proposalFiles
618-
, currentTreasuryValueAndDonation
617+
, mCurrentTreasuryValue
618+
, mTreasuryDonation
619619
, isCborOutCanonical
620620
, txBodyOutFile
621621
} = Exp.obtainCommonConstraints eon $ do
@@ -701,7 +701,8 @@ runTransactionBuildRawCmd
701701
txUpdateProposal
702702
votingProceduresAndMaybeScriptWits
703703
proposals
704-
currentTreasuryValueAndDonation
704+
mCurrentTreasuryValue
705+
mTreasuryDonation
705706

706707
let Exp.SignedTx tx = Exp.signTx eon [] [] txBody
707708
-- TODO: Create equivalent write text envelope functions for
@@ -746,7 +747,8 @@ runTxBuildRaw
746747
-> TxUpdateProposal era
747748
-> [(VotingProcedures era, Maybe (VoteScriptWitness era))]
748749
-> [(Proposal era, Maybe (ProposalScriptWitness era))]
749-
-> Maybe (Maybe TxCurrentTreasuryValue, TxTreasuryDonation)
750+
-> Maybe TxCurrentTreasuryValue
751+
-> Maybe TxTreasuryDonation
750752
-> Either TxCmdError (Exp.UnsignedTx era)
751753
runTxBuildRaw
752754
mScriptValidity
@@ -769,7 +771,8 @@ runTxBuildRaw
769771
txUpdateProposal
770772
votingProcedures
771773
proposals
772-
mCurrentTreasuryValueAndDonation = do
774+
mCurrentTreasuryValue
775+
mTreasuryDonation = do
773776
txBodyContent <-
774777
constructTxBodyContent
775778
mScriptValidity
@@ -792,7 +795,8 @@ runTxBuildRaw
792795
txUpdateProposal
793796
votingProcedures
794797
proposals
795-
mCurrentTreasuryValueAndDonation
798+
mCurrentTreasuryValue
799+
mTreasuryDonation
796800

797801
first TxCmdTxBodyError $ Exp.makeUnsignedTx Exp.useEra txBodyContent
798802

@@ -832,7 +836,8 @@ constructTxBodyContent
832836
-> TxUpdateProposal era
833837
-> [(VotingProcedures era, Maybe (VoteScriptWitness era))]
834838
-> [(Proposal era, Maybe (ProposalScriptWitness era))]
835-
-> Maybe (Maybe TxCurrentTreasuryValue, TxTreasuryDonation)
839+
-> Maybe TxCurrentTreasuryValue
840+
-> Maybe TxTreasuryDonation
836841
-- ^ The current treasury value and the donation. This is a stop gap as the
837842
-- semantics of the donation and treasury value depend on the script languages
838843
-- being used.
@@ -858,7 +863,8 @@ constructTxBodyContent
858863
txUpdateProposal
859864
votingProcedures
860865
proposals
861-
mCurrentTreasuryValueAndDonation =
866+
mCurrentTreasuryValue
867+
mTreasuryDonation =
862868
do
863869
let sbe = convert $ Exp.useEra @era
864870
let allReferenceInputs =
@@ -894,8 +900,8 @@ constructTxBodyContent
894900
[(prop, pswScriptWitness <$> mSwit) | (Proposal prop, mSwit) <- proposals]
895901
Featured w txp
896902

897-
let validatedCurrentTreasuryValue = validateTxCurrentTreasuryValue @era (fst =<< mCurrentTreasuryValueAndDonation)
898-
validatedTreasuryDonation = validateTxTreasuryDonation @era (snd <$> mCurrentTreasuryValueAndDonation)
903+
let validatedCurrentTreasuryValue = validateTxCurrentTreasuryValue @era mCurrentTreasuryValue
904+
validatedTreasuryDonation = validateTxTreasuryDonation @era mTreasuryDonation
899905
return $
900906
shelleyBasedEraConstraints
901907
sbe
@@ -972,7 +978,8 @@ runTxBuild
972978
-> Maybe Word
973979
-> [(VotingProcedures era, Maybe (VoteScriptWitness era))]
974980
-> [(Proposal era, Maybe (ProposalScriptWitness era))]
975-
-> Maybe (Maybe TxCurrentTreasuryValue, TxTreasuryDonation)
981+
-> Maybe TxCurrentTreasuryValue
982+
-> Maybe TxTreasuryDonation
976983
-- ^ The current treasury value and the donation.
977984
-> ExceptT TxCmdError IO (BalancedTxBody era)
978985
runTxBuild
@@ -998,7 +1005,8 @@ runTxBuild
9981005
mOverrideWits
9991006
votingProcedures
10001007
proposals
1001-
mCurrentTreasuryValueAndDonation = do
1008+
mCurrentTreasuryValue
1009+
mTreasuryDonation = do
10021010
let sbe = convert (Exp.useEra @era)
10031011
shelleyBasedEraConstraints sbe $ do
10041012
-- TODO: All functions should be parameterized by ShelleyBasedEra
@@ -1065,7 +1073,8 @@ runTxBuild
10651073
txUpdateProposal
10661074
votingProcedures
10671075
proposals
1068-
mCurrentTreasuryValueAndDonation
1076+
mCurrentTreasuryValue
1077+
mTreasuryDonation
10691078

10701079
firstExceptT TxCmdTxInsDoNotExist
10711080
. hoistEither

cardano-cli/test/cardano-cli-golden/Test/Golden/Conway/Transaction/BuildRaw.hs

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@
33
module Test.Golden.Conway.Transaction.BuildRaw where
44

55
import Control.Monad (void)
6-
import Data.List (isInfixOf)
7-
import System.Exit (ExitCode (..))
86

97
import Test.Cardano.CLI.Util
108

119
import Hedgehog
12-
import Hedgehog qualified as H
1310
import Hedgehog.Extras.Test qualified as H
1411

1512
-- | Execute me with:
@@ -81,35 +78,36 @@ hprop_golden_conway_build_raw_donation_no_current_treasury_value =
8178

8279
H.diffFileVsGoldenFile outFile goldenFile
8380

84-
-- Negative test: Missing --treasury-donation
81+
-- Donations is not mandatory for current treasury value, see formal spec:
82+
-- \* https://intersectmbo.github.io/formal-ledger-specifications/site/Ledger.Conway.Specification.Utxo.html#sec:the-utxos-transition-rule
83+
-- \* https://intersectmbo.github.io/formal-ledger-specifications/site/Notation.html#the-maybe-type
8584

8685
-- | Execute me with:
8786
-- @cabal test cardano-cli-golden --test-options '-p "/golden conway build raw donation no treasury donation/"'@
8887
hprop_golden_conway_build_raw_donation_no_treasury_donation :: Property
8988
hprop_golden_conway_build_raw_donation_no_treasury_donation =
9089
watchdogProp . propertyOnce . H.moduleWorkspace "tmp" $ \tempDir -> do
90+
let goldenFile = "test/cardano-cli-golden/files/golden/conway/current-val-no-donation.tx"
9191
-- Key filepaths
9292
outFile <- noteTempFile tempDir "out.json"
9393

94-
(exitCode, _stdout, stderr) <-
95-
H.noteShowM $
96-
execDetailCardanoCLI
97-
[ "conway"
98-
, "transaction"
99-
, "build-raw"
100-
, "--tx-in"
101-
, "f62cd7bc15d8c6d2c8519fb8d13c57c0157ab6bab50af62bc63706feb966393d#0"
102-
, "--tx-out"
103-
, "addr_test1qpmxr8d8jcl25kyz2tz9a9sxv7jxglhddyf475045y8j3zxjcg9vquzkljyfn3rasfwwlkwu7hhm59gzxmsyxf3w9dps8832xh+1199989833223"
104-
, "--tx-out"
105-
, "addr_test1vpqgspvmh6m2m5pwangvdg499srfzre2dd96qq57nlnw6yctpasy4+10000000"
106-
, "--current-treasury-value"
107-
, "1000343"
108-
, "--fee"
109-
, "166777"
110-
, "--out-file"
111-
, outFile
112-
]
113-
114-
exitCode H.=== ExitFailure 1
115-
H.assertWith stderr ("Missing: --treasury-donation LOVELACE" `isInfixOf`)
94+
void $
95+
execCardanoCLI
96+
[ "conway"
97+
, "transaction"
98+
, "build-raw"
99+
, "--tx-in"
100+
, "f62cd7bc15d8c6d2c8519fb8d13c57c0157ab6bab50af62bc63706feb966393d#0"
101+
, "--tx-out"
102+
, "addr_test1qpmxr8d8jcl25kyz2tz9a9sxv7jxglhddyf475045y8j3zxjcg9vquzkljyfn3rasfwwlkwu7hhm59gzxmsyxf3w9dps8832xh+1199989833223"
103+
, "--tx-out"
104+
, "addr_test1vpqgspvmh6m2m5pwangvdg499srfzre2dd96qq57nlnw6yctpasy4+10000000"
105+
, "--current-treasury-value"
106+
, "1000343"
107+
, "--fee"
108+
, "166777"
109+
, "--out-file"
110+
, outFile
111+
]
112+
113+
H.diffFileVsGoldenFile outFile goldenFile
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "Tx ConwayEra",
3+
"description": "Ledger Cddl Format",
4+
"cborHex": "84a400d9010281825820f62cd7bc15d8c6d2c8519fb8d13c57c0157ab6bab50af62bc63706feb966393d0001828258390076619da7963eaa588252c45e960667a4647eed69135f51f5a10f2888d2c20ac07056fc8899c47d825cefd9dcf5efba150236e043262e2b431b0000011764f7be0782581d604088059bbeb6add02eecd0c6a2a52c06910f2a6b4ba0029e9fe6ed131a00989680021a00028b79151a000f4397a0f5f6"
5+
}

0 commit comments

Comments
 (0)