Skip to content

Commit 867b295

Browse files
Merge pull request #1028 from IntersectMBO/mgalazyn/fix/correct-certificates-representation
Fix costs calculation for transaction with more than one certificates with the same stake credential and script witness
2 parents 7146c85 + ddeefdf commit 867b295

File tree

6 files changed

+41
-82
lines changed

6 files changed

+41
-82
lines changed

cabal.project

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ repository cardano-haskell-packages
1414
-- you need to run if you change them
1515
index-state:
1616
, hackage.haskell.org 2024-12-24T12:56:48Z
17-
, cardano-haskell-packages 2025-01-15T09:59:24Z
17+
, cardano-haskell-packages 2025-02-01T07:12:29Z
1818

1919
packages:
2020
cardano-cli

cardano-cli/cardano-cli.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ library
212212
binary,
213213
bytestring,
214214
canonical-json,
215-
cardano-api ^>=10.6,
215+
cardano-api ^>=10.8,
216216
cardano-binary,
217217
cardano-crypto,
218218
cardano-crypto-class ^>=2.1.2,

cardano-cli/src/Cardano/CLI/Compatible/Transaction.hs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import Data.Function
3939
import qualified Data.Map.Strict as Map
4040
import Data.Maybe
4141
import Data.Text (Text)
42-
import GHC.Exts (IsList (..))
4342
import Options.Applicative
4443
import qualified Options.Applicative as Opt
4544

@@ -300,7 +299,7 @@ runCompatibleTransactionCmd
300299
validatedRefInputs <-
301300
liftEither . first CompatibleTxCmdError . validateTxInsReference $
302301
certsRefInputs <> votesRefInputs <> proposalsRefInputs
303-
let txCerts = convertCertificates certsAndMaybeScriptWits
302+
let txCerts = mkTxCertificates sbe certsAndMaybeScriptWits
304303

305304
-- this body is only for witnesses
306305
apiTxBody <-
@@ -331,23 +330,6 @@ runCompatibleTransactionCmd
331330
newExceptT $
332331
writeTxFileTextEnvelopeCddl sbe outputFp signedTx
333332
where
334-
convertCertificates
335-
:: [(Certificate era, Maybe (ScriptWitness WitCtxStake era))]
336-
-> TxCertificates BuildTx era
337-
convertCertificates certsAndScriptWitnesses =
338-
TxCertificates sbe certs $ BuildTxWith reqWits
339-
where
340-
certs = map fst certsAndScriptWitnesses
341-
reqWits = fromList $ mapMaybe convert' certsAndScriptWitnesses
342-
convert'
343-
:: (Certificate era, Maybe (ScriptWitness WitCtxStake era))
344-
-> Maybe (StakeCredential, Witness WitCtxStake era)
345-
convert' (cert, mScriptWitnessFiles) = do
346-
sCred <- selectStakeCredentialWitness cert
347-
Just . (sCred,) $ case mScriptWitnessFiles of
348-
Just sWit -> ScriptWitness ScriptWitnessForStakeAddr sWit
349-
Nothing -> KeyWitness KeyWitnessForStakeAddr
350-
351333
validateTxInsReference
352334
:: [TxIn]
353335
-> Either TxCmdError (TxInsReference era)

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

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ import Data.Function ((&))
8282
import qualified Data.List as List
8383
import Data.Map.Strict (Map)
8484
import qualified Data.Map.Strict as Map
85-
import Data.Maybe (catMaybes, fromMaybe, mapMaybe, maybeToList)
85+
import Data.Maybe
8686
import Data.Set (Set)
8787
import qualified Data.Set as Set
8888
import qualified Data.Text as Text
@@ -954,7 +954,7 @@ constructTxBodyContent
954954
& setTxExtraKeyWits validatedReqSigners
955955
& setTxProtocolParams (BuildTxWith $ LedgerProtocolParameters <$> mPparams)
956956
& setTxWithdrawals (TxWithdrawals sbe $ map convertWithdrawals withdrawals)
957-
& setTxCertificates (convertCertificates sbe certsAndMaybeScriptWits)
957+
& setTxCertificates (mkTxCertificates sbe certsAndMaybeScriptWits)
958958
& setTxUpdateProposal txUpdateProposal
959959
& setTxMintValue validatedMintValue
960960
& setTxScriptValidity validatedTxScriptValidity
@@ -1071,15 +1071,11 @@ runTxBuild
10711071
testEquality era nodeEra
10721072
& hoistMaybe (TxCmdTxNodeEraMismatchError $ NodeEraMismatchError era nodeEra)
10731073

1074-
let certs =
1075-
case convertCertificates sbe certsAndMaybeScriptWits of
1076-
TxCertificates _ cs _ -> cs
1077-
_ -> []
1078-
1074+
let certsToQuery = fst <$> certsAndMaybeScriptWits
10791075
(txEraUtxo, pparams, eraHistory, systemStart, stakePools, stakeDelegDeposits, drepDelegDeposits, _) <-
10801076
lift
10811077
( executeLocalStateQueryExpr localNodeConnInfo Consensus.VolatileTip $
1082-
queryStateForBalancedTx nodeEra allTxInputs certs
1078+
queryStateForBalancedTx nodeEra allTxInputs certsToQuery
10831079
)
10841080
& onLeft (left . TxCmdQueryConvenienceError . AcqFailure)
10851081
& onLeft (left . TxCmdQueryConvenienceError)
@@ -1140,25 +1136,6 @@ runTxBuild
11401136

11411137
return balancedTxBody
11421138

1143-
convertCertificates
1144-
:: ()
1145-
=> ShelleyBasedEra era
1146-
-> [(Certificate era, Maybe (ScriptWitness WitCtxStake era))]
1147-
-> TxCertificates BuildTx era
1148-
convertCertificates sbe certsAndScriptWitnesses =
1149-
TxCertificates sbe certs $ BuildTxWith reqWits
1150-
where
1151-
certs = map fst certsAndScriptWitnesses
1152-
reqWits = fromList $ mapMaybe convertCert certsAndScriptWitnesses
1153-
convertCert
1154-
:: (Certificate era, Maybe (ScriptWitness WitCtxStake era))
1155-
-> Maybe (StakeCredential, Witness WitCtxStake era)
1156-
convertCert (cert, mScriptWitnessFiles) = do
1157-
sCred <- selectStakeCredentialWitness cert
1158-
Just $ case mScriptWitnessFiles of
1159-
Just sWit -> (sCred, ScriptWitness ScriptWitnessForStakeAddr sWit)
1160-
Nothing -> (sCred, KeyWitness KeyWitnessForStakeAddr)
1161-
11621139
-- ----------------------------------------------------------------------------
11631140
-- Transaction body validation and conversion
11641141
--

cardano-cli/src/Cardano/CLI/Json/Friendly.hs

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -223,38 +223,38 @@ friendlyTxBodyImpl era tb = do
223223
, "withdrawals" .= friendlyWithdrawals txWithdrawals
224224
]
225225
++ ( monoidForEraInEon @AlonzoEraOnwards
226-
era
227-
(`getScriptWitnessDetails` tb)
226+
era
227+
(`getScriptWitnessDetails` tb)
228228
)
229229
++ ( monoidForEraInEon @ConwayEraOnwards
230-
era
231-
( \cOnwards ->
232-
conwayEraOnwardsConstraints cOnwards $
233-
case txProposalProcedures of
234-
Nothing -> []
235-
Just (Featured _ TxProposalProceduresNone) -> []
236-
Just (Featured _ pp) -> do
237-
let lProposals = toList $ convProposalProcedures pp
238-
["governance actions" .= (friendlyLedgerProposals cOnwards lProposals)]
239-
)
230+
era
231+
( \cOnwards ->
232+
conwayEraOnwardsConstraints cOnwards $
233+
case txProposalProcedures of
234+
Nothing -> []
235+
Just (Featured _ TxProposalProceduresNone) -> []
236+
Just (Featured _ pp) -> do
237+
let lProposals = toList $ convProposalProcedures pp
238+
["governance actions" .= (friendlyLedgerProposals cOnwards lProposals)]
239+
)
240240
)
241241
++ ( monoidForEraInEon @ConwayEraOnwards
242-
era
243-
( \cOnwards ->
244-
case txVotingProcedures of
245-
Nothing -> []
246-
Just (Featured _ TxVotingProceduresNone) -> []
247-
Just (Featured _ (TxVotingProcedures votes _witnesses)) ->
248-
["voters" .= friendlyVotingProcedures cOnwards votes]
249-
)
242+
era
243+
( \cOnwards ->
244+
case txVotingProcedures of
245+
Nothing -> []
246+
Just (Featured _ TxVotingProceduresNone) -> []
247+
Just (Featured _ (TxVotingProcedures votes _witnesses)) ->
248+
["voters" .= friendlyVotingProcedures cOnwards votes]
249+
)
250250
)
251251
++ ( monoidForEraInEon @ConwayEraOnwards
252-
era
253-
(const ["currentTreasuryValue" .= toJSON (unFeatured <$> txCurrentTreasuryValue)])
252+
era
253+
(const ["currentTreasuryValue" .= toJSON (unFeatured <$> txCurrentTreasuryValue)])
254254
)
255255
++ ( monoidForEraInEon @ConwayEraOnwards
256-
era
257-
(const ["treasuryDonation" .= toJSON (unFeatured <$> txTreasuryDonation)])
256+
era
257+
(const ["treasuryDonation" .= toJSON (unFeatured <$> txTreasuryDonation)])
258258
)
259259
)
260260
where
@@ -545,9 +545,9 @@ friendlyUpdateProposal = \case
545545
[ "epoch" .= epoch
546546
, "updates"
547547
.= [ object
548-
[ "genesis key hash" .= genesisKeyHash
549-
, "update" .= friendlyProtocolParametersUpdate parameterUpdate
550-
]
548+
[ "genesis key hash" .= genesisKeyHash
549+
, "update" .= friendlyProtocolParametersUpdate parameterUpdate
550+
]
551551
| (genesisKeyHash, parameterUpdate) <- Map.assocs parameterUpdates
552552
]
553553
]
@@ -626,7 +626,7 @@ friendlyPrices ExecutionUnitPrices{priceExecutionMemory, priceExecutionSteps} =
626626
friendlyCertificates :: ShelleyBasedEra era -> TxCertificates ViewTx era -> Aeson.Value
627627
friendlyCertificates sbe = \case
628628
TxCertificatesNone -> Null
629-
TxCertificates _ cs _ -> array $ map (friendlyCertificate sbe) cs
629+
TxCertificates _ cs -> array $ map (friendlyCertificate sbe . fst) $ toList cs
630630

631631
friendlyCertificate :: ShelleyBasedEra era -> Certificate era -> Aeson.Value
632632
friendlyCertificate sbe =
@@ -802,9 +802,9 @@ friendlyMirTarget sbe = \case
802802
L.StakeAddressesMIR addresses ->
803803
"target stake addresses"
804804
.= [ object
805-
[ friendlyStakeCredential credential
806-
, "amount" .= friendlyLovelace (L.Coin 0 `L.addDeltaCoin` lovelace)
807-
]
805+
[ friendlyStakeCredential credential
806+
, "amount" .= friendlyLovelace (L.Coin 0 `L.addDeltaCoin` lovelace)
807+
]
808808
| (credential, lovelace) <- shelleyBasedEraConstraints sbe $ toList addresses
809809
]
810810
L.SendToOppositePotMIR amount -> "MIR amount" .= friendlyLovelace amount

flake.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)