Skip to content

Commit eab98ec

Browse files
committed
more wip
1 parent c461679 commit eab98ec

File tree

4 files changed

+104
-55
lines changed

4 files changed

+104
-55
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1516,7 +1516,7 @@ pPlutusStakeReferenceScriptWitnessFilesVotingProposing prefix autoBalanceExecUni
15161516
AutoBalance -> pure (ExecutionUnits 0 0)
15171517
ManualBalance -> pExecutionUnits $ prefix ++ "reference-tx-in"
15181518
)
1519-
<*> pure Nothing
1519+
<*> pure NoPolicyIdSource
15201520

15211521
pPlutusStakeReferenceScriptWitnessFiles
15221522
:: String
@@ -1533,7 +1533,7 @@ pPlutusStakeReferenceScriptWitnessFiles prefix autoBalanceExecUnits =
15331533
AutoBalance -> pure (ExecutionUnits 0 0)
15341534
ManualBalance -> pExecutionUnits $ prefix ++ "reference-tx-in"
15351535
)
1536-
<*> pure Nothing
1536+
<*> pure NoPolicyIdSource
15371537

15381538
pPlutusScriptLanguage :: String -> Parser AnyScriptLanguage
15391539
pPlutusScriptLanguage prefix = plutusP prefix PlutusScriptV2 "v2" <|> plutusP prefix PlutusScriptV3 "v3"
@@ -1922,7 +1922,7 @@ pTxIn sbe balance =
19221922
-> ScriptWitnessFiles WitCtxTxIn
19231923
createSimpleReferenceScriptWitnessFiles refTxIn =
19241924
let simpleLang = AnyScriptLanguage SimpleScriptLanguage
1925-
in SimpleReferenceScriptWitnessFiles refTxIn simpleLang Nothing
1925+
in SimpleReferenceScriptWitnessFiles refTxIn simpleLang NoPolicyIdSource
19261926

19271927
pPlutusReferenceScriptWitness
19281928
:: ShelleyBasedEra era -> BalanceTxExecUnits -> Parser (ScriptWitnessFiles WitCtxTxIn)
@@ -1960,7 +1960,7 @@ pTxIn sbe balance =
19601960
-> ExecutionUnits
19611961
-> ScriptWitnessFiles WitCtxTxIn
19621962
createPlutusReferenceScriptWitnessFiles refIn sLang sDatum sRedeemer execUnits =
1963-
PlutusReferenceScriptWitnessFiles refIn sLang sDatum sRedeemer execUnits Nothing
1963+
PlutusReferenceScriptWitnessFiles refIn sLang sDatum sRedeemer execUnits NoPolicyIdSource
19641964

19651965
pEmbeddedPlutusScriptWitness :: Parser (ScriptWitnessFiles WitCtxTxIn)
19661966
pEmbeddedPlutusScriptWitness =
@@ -2170,7 +2170,7 @@ pMintMultiAsset sbe balanceExecUnits =
21702170
-> ScriptWitnessFiles WitCtxMint
21712171
createSimpleMintingReferenceScriptWitnessFiles refTxIn pid =
21722172
let simpleLang = AnyScriptLanguage SimpleScriptLanguage
2173-
in SimpleReferenceScriptWitnessFiles refTxIn simpleLang (Just pid)
2173+
in SimpleReferenceScriptWitnessFiles refTxIn simpleLang (ConcretePolicyId pid)
21742174

21752175
pPlutusMintReferenceScriptWitnessFiles
21762176
:: BalanceTxExecUnits -> Parser (ScriptWitnessFiles WitCtxMint)
@@ -2184,7 +2184,7 @@ pMintMultiAsset sbe balanceExecUnits =
21842184
AutoBalance -> pure (ExecutionUnits 0 0)
21852185
ManualBalance -> pExecutionUnits "mint-reference-tx-in"
21862186
)
2187-
<*> (Just <$> pPolicyId)
2187+
<*> (ConcretePolicyId <$> pPolicyId)
21882188

21892189
helpText =
21902190
mconcat

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

Lines changed: 58 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
{-# LANGUAGE EmptyCase #-}
44
{-# LANGUAGE FlexibleContexts #-}
55
{-# LANGUAGE GADTs #-}
6+
{-# LANGUAGE KindSignatures #-}
67
{-# LANGUAGE LambdaCase #-}
78
{-# LANGUAGE NamedFieldPuns #-}
89
{-# LANGUAGE RankNTypes #-}
@@ -73,6 +74,7 @@ import qualified Data.List as List
7374
import Data.Map.Strict (Map)
7475
import qualified Data.Map.Strict as Map
7576
import Data.Maybe (catMaybes, fromMaybe, mapMaybe, maybeToList)
77+
import Data.Proxy
7678
import Data.Set (Set)
7779
import qualified Data.Set as Set
7880
import qualified Data.Text as Text
@@ -169,7 +171,7 @@ runTransactionBuildCmd
169171
txMetadata <-
170172
firstExceptT TxCmdMetadataError . newExceptT $
171173
readTxMetadata eon metadataSchema metadataFiles
172-
valuesWithScriptWits <- readValueScriptWitnesses eon $ fromMaybe mempty mValue
174+
valuesWithScriptWits <- readMintScriptWitnesses eon $ fromMaybe mempty mValue
173175
scripts <-
174176
firstExceptT TxCmdScriptFileError $
175177
mapM (readFileScriptInAnyLang . unFile) scriptFiles
@@ -205,7 +207,7 @@ runTransactionBuildCmd
205207
let allReferenceInputs =
206208
getAllReferenceInputs
207209
inputsAndMaybeScriptWits
208-
(snd <$> snd valuesWithScriptWits)
210+
(snd valuesWithScriptWits)
209211
certsAndMaybeScriptWits
210212
withdrawalsAndMaybeScriptWits
211213
votingProceduresAndMaybeScriptWits
@@ -360,7 +362,7 @@ runTransactionBuildEstimateCmd -- TODO change type
360362
firstExceptT TxCmdMetadataError
361363
. newExceptT
362364
$ readTxMetadata sbe metadataSchema metadataFiles
363-
valuesWithScriptWits <- readValueScriptWitnesses sbe $ fromMaybe mempty mValue
365+
valuesWithScriptWits <- readMintScriptWitnesses sbe $ fromMaybe mempty mValue
364366
scripts <-
365367
firstExceptT TxCmdScriptFileError $
366368
mapM (readFileScriptInAnyLang . unFile) scriptFiles
@@ -594,7 +596,7 @@ runTransactionBuildRawCmd
594596
firstExceptT TxCmdMetadataError
595597
. newExceptT
596598
$ readTxMetadata eon metadataSchema metadataFiles
597-
valuesWithScriptWits <- readValueScriptWitnesses eon $ fromMaybe mempty mValue
599+
valuesWithScriptWits <- readMintScriptWitnesses eon $ fromMaybe mempty mValue
598600
scripts <-
599601
firstExceptT TxCmdScriptFileError $
600602
mapM (readFileScriptInAnyLang . unFile) scriptFiles
@@ -698,7 +700,7 @@ runTxBuildRaw
698700
-- ^ Tx upper bound
699701
-> Lovelace
700702
-- ^ Tx fee
701-
-> (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
703+
-> (Value, [UpdatedReferenceScriptWitness era])
702704
-- ^ Multi-Asset value(s)
703705
-> [(Certificate era, Maybe (ScriptWitness WitCtxStake era))]
704706
-- ^ Certificate with potential script witness
@@ -784,7 +786,7 @@ constructTxBodyContent
784786
-- ^ Tx lower bound
785787
-> TxValidityUpperBound era
786788
-- ^ Tx upper bound
787-
-> (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
789+
-> (Value, [UpdatedReferenceScriptWitness era])
788790
-- ^ Multi-Asset value(s)
789791
-> [(Certificate era, Maybe (ScriptWitness WitCtxStake era))]
790792
-- ^ Certificate with potential script witness
@@ -831,7 +833,7 @@ constructTxBodyContent
831833
let allReferenceInputs =
832834
getAllReferenceInputs
833835
inputsAndMaybeScriptWits
834-
(snd <$> snd valuesWithScriptWits)
836+
(snd valuesWithScriptWits)
835837
certsAndMaybeScriptWits
836838
withdrawals
837839
votingProcedures
@@ -924,7 +926,7 @@ runTxBuild
924926
-- ^ Normal outputs
925927
-> TxOutChangeAddress
926928
-- ^ A change output
927-
-> (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
929+
-> (Value, [UpdatedReferenceScriptWitness era])
928930
-- ^ Multi-Asset value(s)
929931
-> Maybe SlotNo
930932
-- ^ Tx lower bound
@@ -978,7 +980,7 @@ runTxBuild
978980
let allReferenceInputs =
979981
getAllReferenceInputs
980982
inputsAndMaybeScriptWits
981-
(snd <$> snd valuesWithScriptWits)
983+
(snd valuesWithScriptWits)
982984
certsAndMaybeScriptWits
983985
withdrawals
984986
votingProcedures
@@ -1145,7 +1147,7 @@ validateTxInsReference sbe allRefIns = do
11451147

11461148
getAllReferenceInputs
11471149
:: [(TxIn, Maybe (ScriptWitness WitCtxTxIn era))]
1148-
-> [ScriptWitness WitCtxMint era]
1150+
-> [UpdatedReferenceScriptWitness era]
11491151
-> [(Certificate era, Maybe (ScriptWitness WitCtxStake era))]
11501152
-> [(StakeAddress, Lovelace, Maybe (ScriptWitness WitCtxStake era))]
11511153
-> [(VotingProcedures era, Maybe (ScriptWitness WitCtxStake era))]
@@ -1162,7 +1164,7 @@ getAllReferenceInputs
11621164
propProceduresAnMaybeScriptWits
11631165
readOnlyRefIns = do
11641166
let txinsWitByRefInputs = [getReferenceInput sWit | (_, Just sWit) <- txins]
1165-
mintingRefInputs = map getReferenceInput mintWitnesses
1167+
mintingRefInputs = [getReferenceInput sWit | UpdatedReferenceScriptWitness _ sWit <- mintWitnesses]
11661168
certsWitByRefInputs = [getReferenceInput sWit | (_, Just sWit) <- certFiles]
11671169
withdrawalsWitByRefInputs = [getReferenceInput sWit | (_, _, Just sWit) <- withdrawals]
11681170
votesWitByRefInputs = [getReferenceInput sWit | (_, Just sWit) <- votingProceduresAndMaybeScriptWits]
@@ -1329,7 +1331,7 @@ toTxAlonzoDatum supp cliDatum =
13291331
createTxMintValue
13301332
:: forall era
13311333
. ShelleyBasedEra era
1332-
-> (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
1334+
-> (Value, [UpdatedReferenceScriptWitness era])
13331335
-> Either TxCmdError (TxMintValue BuildTx era)
13341336
createTxMintValue era (val, scriptWitnesses) =
13351337
if List.null (toList val) && List.null scriptWitnesses
@@ -1364,10 +1366,14 @@ createTxMintValue era (val, scriptWitnesses) =
13641366
era
13651367
where
13661368
gatherMintingWitnesses
1367-
:: [(Maybe PolicyId, ScriptWitness WitCtxMint era)]
1369+
:: [UpdatedReferenceScriptWitness era]
13681370
-> [(PolicyId, ScriptWitness WitCtxMint era)]
13691371
gatherMintingWitnesses [] = []
1370-
gatherMintingWitnesses ((mPid, sWit) : rest) =
1372+
gatherMintingWitnesses (UpdatedReferenceScriptWitness mPidSource sWit : rest) = do
1373+
let mPid =
1374+
mPidSource >>= \case
1375+
ConcretePolicyId pid -> Just pid
1376+
QueryUtxoPolicyId _ -> Nothing -- TODO
13711377
case scriptWitnessPolicyId sWit <|> mPid of
13721378
Nothing -> gatherMintingWitnesses rest
13731379
Just pid -> (pid, sWit) : gatherMintingWitnesses rest
@@ -1384,23 +1390,45 @@ createTxMintValue era (val, scriptWitnesses) =
13841390
where
13851391
witnessesExtra = Set.elems (witnessesProvided Set.\\ witnessesNeeded)
13861392

1387-
scriptWitnessPolicyId :: ScriptWitness witctx era -> Maybe PolicyId
1388-
scriptWitnessPolicyId (SimpleScriptWitness _ (SScript script)) =
1389-
Just . scriptPolicyId $ SimpleScript script
1390-
scriptWitnessPolicyId (SimpleScriptWitness _ (SReferenceScript _)) =
1391-
Nothing
1392-
scriptWitnessPolicyId (PlutusScriptWitness _ version (PScript script) _ _ _) =
1393-
Just . scriptPolicyId $ PlutusScript version script
1394-
scriptWitnessPolicyId (PlutusScriptWitness _ _ (PReferenceScript _) _ _ _) =
1395-
Nothing
1396-
1397-
readValueScriptWitnesses
1393+
-- TOOD remove
1394+
scriptWitnessPolicyId :: ScriptWitness WitCtxMint era -> Maybe PolicyId
1395+
scriptWitnessPolicyId = \case
1396+
SimpleScriptWitness _ (SScript script) -> Just . scriptPolicyId $ SimpleScript script
1397+
SimpleScriptWitness _ (SReferenceScript _) -> Nothing
1398+
PlutusScriptWitness _ version (PScript script) _ _ _ -> Just . scriptPolicyId $ PlutusScript version script
1399+
PlutusScriptWitness _ _ (PReferenceScript _) _ _ _ -> Nothing
1400+
1401+
readMintScriptWitnesses
13981402
:: ShelleyBasedEra era
1399-
-> (Value, [ScriptWitnessFiles WitCtxMint])
1400-
-> ExceptT TxCmdError IO (Value, [(Maybe PolicyId, ScriptWitness WitCtxMint era)])
1401-
readValueScriptWitnesses era (v, sWitFiles) = do
1402-
sWits <- mapM (firstExceptT TxCmdScriptWitnessError . readScriptWitness era) sWitFiles
1403-
return (v, sWits)
1403+
-> (a, [ScriptWitnessFiles WitCtxMint])
1404+
-> (TxIn -> ExceptT QueryConvenienceError IO (UTxO era))
1405+
-> ExceptT
1406+
TxCmdError
1407+
IO
1408+
(a, [UpdatedReferenceScriptWitness era])
1409+
readMintScriptWitnesses era getUtxo (v, sWitFiles) =
1410+
fmap (v,) . forM sWitFiles $ \witFile -> do
1411+
wit <- firstExceptT TxCmdScriptWitnessError $ readScriptWitness era witFile
1412+
mPid <- case witFile of
1413+
SimpleScriptWitnessFile{} -> Nothing
1414+
PlutusScriptWitnessFiles{} -> Nothing
1415+
PlutusReferenceScriptWitnessFiles _ _ _ _ _ (ConcretePolicyId pid) -> Just pid
1416+
PlutusReferenceScriptWitnessFiles txIn _ _ _ _ QueryUtxoPolicyId -> do
1417+
utxo <- getUtxo txIn
1418+
undefined
1419+
SimpleReferenceScriptWitnessFiles _ _ (ConcretePolicyId pid) -> Just pid
1420+
SimpleReferenceScriptWitnessFiles txIn _ QueryUtxoPolicyId -> do
1421+
utxo <- getUtxo txIn
1422+
undefined
1423+
let mFilePid = scriptWitnessPolicyId wit
1424+
-- todo read pid from a file here
1425+
pure $ UpdatedReferenceScriptWitness (mPid <|> mFilePid) wit
1426+
1427+
getpid = undefined :: ScriptWitness WitCtxMint era -> PolicyId
1428+
1429+
setpid = undefined :: PolicyId -> ScriptWitness WitCtxMint era -> ScriptWitness WitCtxMint era
1430+
1431+
foo = Proxy @SimpleScriptWitness
14041432

14051433
-- ----------------------------------------------------------------------------
14061434
-- Transaction signing

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

Lines changed: 16 additions & 15 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 <- snd <$> readScriptWitness era switFile
275+
sWit <- readScriptWitness era switFile
276276
return (tIn, Just sWit)
277277
readSwitFile (tIn, Nothing) = return (tIn, Nothing)
278278

@@ -283,22 +283,25 @@ readScriptWitnessFilesTuple
283283
readScriptWitnessFilesTuple era = mapM readSwitFile
284284
where
285285
readSwitFile (tIn, b, Just switFile) = do
286-
sWit <- snd <$> readScriptWitness era switFile
286+
sWit <- 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 (Maybe PolicyId, ScriptWitness witctx era)
293+
-> ExceptT
294+
ScriptWitnessError
295+
IO
296+
(ScriptWitness witctx era)
294297
readScriptWitness era (SimpleScriptWitnessFile (File scriptFile)) = do
295298
script@(ScriptInAnyLang lang _) <-
296299
firstExceptT ScriptWitnessErrorFile $
297300
readFileScriptInAnyLang scriptFile
298301
ScriptInEra langInEra script' <- validateScriptSupportedInEra era script
299302
case script' of
300303
SimpleScript sscript ->
301-
return . (Nothing,) . SimpleScriptWitness langInEra $ SScript sscript
304+
return . SimpleScriptWitness langInEra $ SScript sscript
302305
-- If the supplied cli flags were for a simple script (i.e. the user did
303306
-- not supply the datum, redeemer or ex units), but the script file turns
304307
-- out to be a valid plutus script, then we must fail.
@@ -327,7 +330,7 @@ readScriptWitness
327330
redeemer <-
328331
firstExceptT ScriptWitnessErrorScriptData $
329332
readScriptRedeemerOrFile redeemerOrFile
330-
pure . (Nothing,) $
333+
pure $
331334
PlutusScriptWitness
332335
langInEra
333336
version
@@ -352,7 +355,7 @@ readScriptWitness
352355
datumOrFile
353356
redeemerOrFile
354357
execUnits
355-
mPid
358+
_
356359
) = do
357360
caseShelleyToAlonzoOrBabbageEraOnwards
358361
( const $
@@ -375,7 +378,7 @@ readScriptWitness
375378
redeemer <-
376379
firstExceptT ScriptWitnessErrorScriptData $
377380
readScriptRedeemerOrFile redeemerOrFile
378-
return . (mPid,) $
381+
return $
379382
PlutusScriptWitness
380383
sLangInEra
381384
version
@@ -393,7 +396,7 @@ readScriptWitness
393396
( SimpleReferenceScriptWitnessFiles
394397
refTxIn
395398
anyScrLang@(AnyScriptLanguage anyScriptLanguage)
396-
mPid
399+
_pid
397400
) = do
398401
caseShelleyToAlonzoOrBabbageEraOnwards
399402
( const $
@@ -406,7 +409,7 @@ readScriptWitness
406409
Just sLangInEra ->
407410
case languageOfScriptLanguageInEra sLangInEra of
408411
SimpleScriptLanguage ->
409-
return . (mPid,) . SimpleScriptWitness sLangInEra $
412+
return . SimpleScriptWitness sLangInEra $
410413
SReferenceScript refTxIn
411414
PlutusScriptLanguage{} ->
412415
error "readScriptWitness: Should not be possible to specify a plutus script"
@@ -922,9 +925,8 @@ readSingleVote w (voteFp, mScriptWitFiles) = do
922925
let sbe = conwayEraOnwardsToShelleyBasedEra w
923926
runExceptT $ do
924927
sWits <-
925-
fmap (fmap snd) $
926-
firstExceptT VoteErrorScriptWitness $
927-
mapM (readScriptWitness sbe) sWitFile
928+
firstExceptT VoteErrorScriptWitness $
929+
mapM (readScriptWitness sbe) sWitFile
928930
hoistEither $ (,sWits) <$> votProceds
929931

930932
data ConstitutionError
@@ -969,9 +971,8 @@ readProposal w (fp, mScriptWit) = do
969971
let sbe = conwayEraOnwardsToShelleyBasedEra w
970972
runExceptT $ do
971973
sWit <-
972-
fmap (fmap snd) $
973-
firstExceptT ProposalErrorScriptWitness $
974-
mapM (readScriptWitness sbe) sWitFile
974+
firstExceptT ProposalErrorScriptWitness $
975+
mapM (readScriptWitness sbe) sWitFile
975976
hoistEither $ (,sWit) <$> prop
976977

977978
constitutionHashSourceToHash

0 commit comments

Comments
 (0)