Skip to content

Split script datum types to prepare for uninhabitable NoScriptDatum#1348

Draft
Jimbo4350 wants to merge 2 commits intomasterfrom
jordan/1082-make-NoScriptDatum-uninhabitable
Draft

Split script datum types to prepare for uninhabitable NoScriptDatum#1348
Jimbo4350 wants to merge 2 commits intomasterfrom
jordan/1082-make-NoScriptDatum-uninhabitable

Conversation

@Jimbo4350
Copy link
Contributor

Summary

  • Splits OnDiskPlutusScriptCliArgs into OnDiskPlutusScriptCliArgsSpending (pinned to TxInItem, carries ScriptDatumOrFileSpending) and OnDiskPlutusScriptCliArgsNonSpending (no datum field)
  • Splits PlutusRefScriptCliArgs into PlutusRefScriptCliArgsSpending (pinned to TxInItem, carries datum) and PlutusRefScriptCliArgsNonSpending (no datum, retains MintPolicyId witnessable)
  • Removes the OptionalDatum type family and all uses of NoScriptDatumAllowed
  • Propagates changes across all 15 affected files

Closes #1082

Notes

The non-spending constructors are still polymorphic in witnessable, meaning GHC cannot statically rule them out in a spending context. Two error "impossible" branches are added in Spend/Read.hs as a temporary measure — this will be revisited when the type structure is tightened further.

The remaining Exp.NoScriptDatum usages in the PlutusScriptWitness constructions in the Read files are intentionally left — these will be addressed when the cardano-api side of #1082 lands.

…NoScriptDatum

Split both types into spending and non-spending constructors, pinning the
spending constructors to Exp.TxInItem. This removes the OptionalDatum type
family and all uses of NoScriptDatumAllowed in preparation for making
NoScriptDatum uninhabitable in cardano-api.
…ed ADTs

Replace the polymorphic `ScriptRequirements witnessable` GADT (and its inner
types `OnDiskPlutusScriptCliArgs`, `PlutusRefScriptCliArgs`,
`SimpleRefScriptCliArgs`, `MintPolicyId`, `NoPolicyId`) with flat,
context-specific ADTs:

- `SimpleScriptRequirements` (on-disk or reference, no datum/redeemer)
- `PlutusSpendingScriptRequirements` (with datum support for CIP-69)
- `PlutusMintingScriptRequirements` (includes PolicyId for reference scripts)
- `PlutusNonAssetScriptRequirements` (cert/withdrawal/vote/proposal)

Command-level sum types replace `ScriptRequirements witnessable` in records:
- `AnySpendScript` (for TxIn spending witnesses)
- `AnyMintScript` (for minting witnesses, 3 constructors to encode
  the PolicyId invariant exhaustively)
- `AnyNonAssetScript` (for cert/withdrawal/vote/proposal witnesses)

All pattern matches are now exhaustive. The `error "impossible"` branches
in Spend/Read.hs are eliminated. The golden test CLI interface is unchanged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FR] - Integrate QueryLedgerConfig

1 participant