Skip to content

Commit c461679

Browse files
committed
Remove unneeded ScriptHash in PReferenceScript/SReferenceScript
1 parent 808d843 commit c461679

File tree

4 files changed

+53
-40
lines changed

4 files changed

+53
-40
lines changed

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

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import Cardano.CLI.Types.TxFeature
5656
import qualified Ouroboros.Network.Protocol.LocalStateQuery.Type as Consensus
5757
import qualified Ouroboros.Network.Protocol.LocalTxSubmission.Client as Net.Tx
5858

59+
import Control.Applicative
5960
import Control.Monad (forM)
6061
import Data.Aeson ((.=))
6162
import qualified Data.Aeson as Aeson
@@ -71,7 +72,7 @@ import Data.Function ((&))
7172
import qualified Data.List as List
7273
import Data.Map.Strict (Map)
7374
import qualified Data.Map.Strict as Map
74-
import Data.Maybe (catMaybes, fromMaybe, mapMaybe)
75+
import Data.Maybe (catMaybes, fromMaybe, mapMaybe, maybeToList)
7576
import Data.Set (Set)
7677
import qualified Data.Set as Set
7778
import qualified Data.Text as Text
@@ -204,7 +205,7 @@ runTransactionBuildCmd
204205
let allReferenceInputs =
205206
getAllReferenceInputs
206207
inputsAndMaybeScriptWits
207-
(snd valuesWithScriptWits)
208+
(snd <$> snd valuesWithScriptWits)
208209
certsAndMaybeScriptWits
209210
withdrawalsAndMaybeScriptWits
210211
votingProceduresAndMaybeScriptWits
@@ -697,7 +698,7 @@ runTxBuildRaw
697698
-- ^ Tx upper bound
698699
-> Lovelace
699700
-- ^ Tx fee
700-
-> (Value, [ScriptWitness WitCtxMint era])
701+
-> (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
701702
-- ^ Multi-Asset value(s)
702703
-> [(Certificate era, Maybe (ScriptWitness WitCtxStake era))]
703704
-- ^ Certificate with potential script witness
@@ -783,7 +784,7 @@ constructTxBodyContent
783784
-- ^ Tx lower bound
784785
-> TxValidityUpperBound era
785786
-- ^ Tx upper bound
786-
-> (Value, [ScriptWitness WitCtxMint era])
787+
-> (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
787788
-- ^ Multi-Asset value(s)
788789
-> [(Certificate era, Maybe (ScriptWitness WitCtxStake era))]
789790
-- ^ Certificate with potential script witness
@@ -830,7 +831,7 @@ constructTxBodyContent
830831
let allReferenceInputs =
831832
getAllReferenceInputs
832833
inputsAndMaybeScriptWits
833-
(snd valuesWithScriptWits)
834+
(snd <$> snd valuesWithScriptWits)
834835
certsAndMaybeScriptWits
835836
withdrawals
836837
votingProcedures
@@ -923,7 +924,7 @@ runTxBuild
923924
-- ^ Normal outputs
924925
-> TxOutChangeAddress
925926
-- ^ A change output
926-
-> (Value, [ScriptWitness WitCtxMint era])
927+
-> (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
927928
-- ^ Multi-Asset value(s)
928929
-> Maybe SlotNo
929930
-- ^ Tx lower bound
@@ -977,7 +978,7 @@ runTxBuild
977978
let allReferenceInputs =
978979
getAllReferenceInputs
979980
inputsAndMaybeScriptWits
980-
(snd valuesWithScriptWits)
981+
(snd <$> snd valuesWithScriptWits)
981982
certsAndMaybeScriptWits
982983
withdrawals
983984
votingProcedures
@@ -1182,9 +1183,9 @@ getAllReferenceInputs
11821183
:: ScriptWitness witctx era -> Maybe TxIn
11831184
getReferenceInput sWit =
11841185
case sWit of
1185-
PlutusScriptWitness _ _ (PReferenceScript refIn _) _ _ _ -> Just refIn
1186+
PlutusScriptWitness _ _ (PReferenceScript refIn) _ _ _ -> Just refIn
11861187
PlutusScriptWitness _ _ PScript{} _ _ _ -> Nothing
1187-
SimpleScriptWitness _ (SReferenceScript refIn _) -> Just refIn
1188+
SimpleScriptWitness _ (SReferenceScript refIn) -> Just refIn
11881189
SimpleScriptWitness _ SScript{} -> Nothing
11891190

11901191
toAddressInAnyEra
@@ -1328,7 +1329,7 @@ toTxAlonzoDatum supp cliDatum =
13281329
createTxMintValue
13291330
:: forall era
13301331
. ShelleyBasedEra era
1331-
-> (Value, [ScriptWitness WitCtxMint era])
1332+
-> (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
13321333
-> Either TxCmdError (TxMintValue BuildTx era)
13331334
createTxMintValue era (val, scriptWitnesses) =
13341335
if List.null (toList val) && List.null scriptWitnesses
@@ -1337,28 +1338,37 @@ createTxMintValue era (val, scriptWitnesses) =
13371338
caseShelleyToAllegraOrMaryEraOnwards
13381339
(const (txFeatureMismatchPure (toCardanoEra era) TxFeatureMintValue))
13391340
( \w -> do
1340-
-- The set of policy ids for which we need witnesses:
1341-
let witnessesNeededSet :: Set PolicyId
1342-
witnessesNeededSet =
1343-
fromList [pid | (AssetId pid _, _) <- toList val]
1341+
let policiesWithAssets :: [(PolicyId, AssetName, Quantity)]
1342+
policiesWithAssets = [(pid, assetName, quantity) | (AssetId pid assetName, quantity) <- toList val]
13441343

1345-
let witnessesProvidedMap :: Map PolicyId (ScriptWitness WitCtxMint era)
1344+
-- The set of policy ids for which we need witnesses:
1345+
witnessesNeededSet :: Set PolicyId
1346+
witnessesNeededSet = fromList [pid | (pid, _, _) <- policiesWithAssets]
1347+
1348+
witnessesProvidedMap :: Map PolicyId (ScriptWitness WitCtxMint era)
13461349
witnessesProvidedMap = fromList $ gatherMintingWitnesses scriptWitnesses
13471350
witnessesProvidedSet = Map.keysSet witnessesProvidedMap
13481351

1349-
-- Check not too many, nor too few:
1352+
policiesWithWitnesses =
1353+
Map.fromListWith
1354+
(<>)
1355+
[ (pid, [(assetName, quantity, BuildTxWith witness)])
1356+
| (pid, assetName, quantity) <- policiesWithAssets
1357+
, witness <- maybeToList $ Map.lookup pid witnessesProvidedMap
1358+
]
1359+
13501360
validateAllWitnessesProvided witnessesNeededSet witnessesProvidedSet
13511361
validateNoUnnecessaryWitnesses witnessesNeededSet witnessesProvidedSet
1352-
return (TxMintValue w val (BuildTxWith witnessesProvidedMap))
1362+
pure $ TxMintValue w policiesWithWitnesses
13531363
)
13541364
era
13551365
where
13561366
gatherMintingWitnesses
1357-
:: [ScriptWitness WitCtxMint era]
1367+
:: [(Maybe PolicyId, ScriptWitness WitCtxMint era)]
13581368
-> [(PolicyId, ScriptWitness WitCtxMint era)]
13591369
gatherMintingWitnesses [] = []
1360-
gatherMintingWitnesses (sWit : rest) =
1361-
case scriptWitnessPolicyId sWit of
1370+
gatherMintingWitnesses ((mPid, sWit) : rest) =
1371+
case scriptWitnessPolicyId sWit <|> mPid of
13621372
Nothing -> gatherMintingWitnesses rest
13631373
Just pid -> (pid, sWit) : gatherMintingWitnesses rest
13641374

@@ -1377,17 +1387,17 @@ createTxMintValue era (val, scriptWitnesses) =
13771387
scriptWitnessPolicyId :: ScriptWitness witctx era -> Maybe PolicyId
13781388
scriptWitnessPolicyId (SimpleScriptWitness _ (SScript script)) =
13791389
Just . scriptPolicyId $ SimpleScript script
1380-
scriptWitnessPolicyId (SimpleScriptWitness _ (SReferenceScript _ mPid)) =
1381-
PolicyId <$> mPid
1390+
scriptWitnessPolicyId (SimpleScriptWitness _ (SReferenceScript _)) =
1391+
Nothing
13821392
scriptWitnessPolicyId (PlutusScriptWitness _ version (PScript script) _ _ _) =
13831393
Just . scriptPolicyId $ PlutusScript version script
1384-
scriptWitnessPolicyId (PlutusScriptWitness _ _ (PReferenceScript _ mPid) _ _ _) =
1385-
PolicyId <$> mPid
1394+
scriptWitnessPolicyId (PlutusScriptWitness _ _ (PReferenceScript _) _ _ _) =
1395+
Nothing
13861396

13871397
readValueScriptWitnesses
13881398
:: ShelleyBasedEra era
13891399
-> (Value, [ScriptWitnessFiles WitCtxMint])
1390-
-> ExceptT TxCmdError IO (Value, [ScriptWitness WitCtxMint era])
1400+
-> ExceptT TxCmdError IO (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
13911401
readValueScriptWitnesses era (v, sWitFiles) = do
13921402
sWits <- mapM (firstExceptT TxCmdScriptWitnessError . readScriptWitness era) sWitFiles
13931403
return (v, sWits)

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,8 @@ friendlyLovelace value = String $ docToText (pretty value)
804804
friendlyMintValue :: TxMintValue ViewTx era -> Aeson.Value
805805
friendlyMintValue = \case
806806
TxMintNone -> Null
807-
TxMintValue sbe v _ -> friendlyValue (maryEraOnwardsToShelleyBasedEra sbe) v
807+
txMintValue@(TxMintValue w _) ->
808+
friendlyValue (maryEraOnwardsToShelleyBasedEra w) (txMintValueToValue txMintValue)
808809

809810
friendlyTxOutValue :: TxOutValue era -> Aeson.Value
810811
friendlyTxOutValue = \case

cardano-cli/src/Cardano/CLI/Read.hs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ readScriptWitnessFiles
272272
readScriptWitnessFiles era = mapM readSwitFile
273273
where
274274
readSwitFile (tIn, Just switFile) = do
275-
sWit <- readScriptWitness era switFile
275+
sWit <- snd <$> readScriptWitness era switFile
276276
return (tIn, Just sWit)
277277
readSwitFile (tIn, Nothing) = return (tIn, Nothing)
278278

@@ -283,22 +283,22 @@ readScriptWitnessFilesTuple
283283
readScriptWitnessFilesTuple era = mapM readSwitFile
284284
where
285285
readSwitFile (tIn, b, Just switFile) = do
286-
sWit <- readScriptWitness era switFile
286+
sWit <- snd <$> readScriptWitness era switFile
287287
return (tIn, b, Just sWit)
288288
readSwitFile (tIn, b, Nothing) = return (tIn, b, Nothing)
289289

290290
readScriptWitness
291291
:: ShelleyBasedEra era
292292
-> ScriptWitnessFiles witctx
293-
-> ExceptT ScriptWitnessError IO (ScriptWitness witctx era)
293+
-> ExceptT ScriptWitnessError IO (Maybe PolicyId, ScriptWitness witctx era)
294294
readScriptWitness era (SimpleScriptWitnessFile (File scriptFile)) = do
295295
script@(ScriptInAnyLang lang _) <-
296296
firstExceptT ScriptWitnessErrorFile $
297297
readFileScriptInAnyLang scriptFile
298298
ScriptInEra langInEra script' <- validateScriptSupportedInEra era script
299299
case script' of
300300
SimpleScript sscript ->
301-
return . SimpleScriptWitness langInEra $ SScript sscript
301+
return . (Nothing,) . SimpleScriptWitness langInEra $ SScript sscript
302302
-- If the supplied cli flags were for a simple script (i.e. the user did
303303
-- not supply the datum, redeemer or ex units), but the script file turns
304304
-- out to be a valid plutus script, then we must fail.
@@ -327,7 +327,7 @@ readScriptWitness
327327
redeemer <-
328328
firstExceptT ScriptWitnessErrorScriptData $
329329
readScriptRedeemerOrFile redeemerOrFile
330-
return $
330+
pure . (Nothing,) $
331331
PlutusScriptWitness
332332
langInEra
333333
version
@@ -375,11 +375,11 @@ readScriptWitness
375375
redeemer <-
376376
firstExceptT ScriptWitnessErrorScriptData $
377377
readScriptRedeemerOrFile redeemerOrFile
378-
return $
378+
return . (mPid,) $
379379
PlutusScriptWitness
380380
sLangInEra
381381
version
382-
(PReferenceScript refTxIn (unPolicyId <$> mPid))
382+
(PReferenceScript refTxIn)
383383
datum
384384
redeemer
385385
execUnits
@@ -406,8 +406,8 @@ readScriptWitness
406406
Just sLangInEra ->
407407
case languageOfScriptLanguageInEra sLangInEra of
408408
SimpleScriptLanguage ->
409-
return . SimpleScriptWitness sLangInEra $
410-
SReferenceScript refTxIn (unPolicyId <$> mPid)
409+
return . (mPid,) . SimpleScriptWitness sLangInEra $
410+
SReferenceScript refTxIn
411411
PlutusScriptLanguage{} ->
412412
error "readScriptWitness: Should not be possible to specify a plutus script"
413413
Nothing ->
@@ -922,8 +922,9 @@ readSingleVote w (voteFp, mScriptWitFiles) = do
922922
let sbe = conwayEraOnwardsToShelleyBasedEra w
923923
runExceptT $ do
924924
sWits <-
925-
firstExceptT VoteErrorScriptWitness $
926-
mapM (readScriptWitness sbe) sWitFile
925+
fmap (fmap snd) $
926+
firstExceptT VoteErrorScriptWitness $
927+
mapM (readScriptWitness sbe) sWitFile
927928
hoistEither $ (,sWits) <$> votProceds
928929

929930
data ConstitutionError
@@ -968,8 +969,9 @@ readProposal w (fp, mScriptWit) = do
968969
let sbe = conwayEraOnwardsToShelleyBasedEra w
969970
runExceptT $ do
970971
sWit <-
971-
firstExceptT ProposalErrorScriptWitness $
972-
mapM (readScriptWitness sbe) sWitFile
972+
fmap (fmap snd) $
973+
firstExceptT ProposalErrorScriptWitness $
974+
mapM (readScriptWitness sbe) sWitFile
973975
hoistEither $ (,sWit) <$> prop
974976

975977
constitutionHashSourceToHash

cardano-cli/src/Cardano/CLI/Types/Output.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ renderScriptCosts (UTxO utxo) eUnitPrices scriptMapping executionCostMapping =
383383
Left err -> Left (PlutusScriptCostErrExecError sWitInd (Just scriptHash) err) : accum
384384
-- TODO: Create a new sum type to encapsulate the fact that we can also
385385
-- have a txin and render the txin in the case of reference scripts.
386-
Just (AnyScriptWitness (PlutusScriptWitness _ _ (PReferenceScript refTxIn _) _ _ _)) ->
386+
Just (AnyScriptWitness (PlutusScriptWitness _ _ (PReferenceScript refTxIn) _ _ _)) ->
387387
case Map.lookup refTxIn utxo of
388388
Nothing -> Left (PlutusScriptCostErrRefInputNotInUTxO refTxIn) : accum
389389
Just (TxOut _ _ _ refScript) ->

0 commit comments

Comments
 (0)