| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Cardano.Api.Experimental.Plutus
Synopsis
- data AnyPlutusScript era where
- AnyPlutusScript :: forall era (lang :: Language). (Era era, EraPlutusTxInfo lang era, Typeable lang, PlutusLanguage lang) => PlutusScriptInEra lang era -> AnyPlutusScript era
- decodeAnyPlutusScript :: forall era apiEra. (IsShelleyBasedEra apiEra, era ~ ShelleyLedgerEra apiEra) => ByteString -> AnyPlutusScriptLanguage -> Either DecoderError (AnyPlutusScript era)
- serialiseAnyPlutusScriptToTextEnvelope :: Maybe TextEnvelopeDescr -> AnyPlutusScript era -> TextEnvelope
- deserialiseAnyPlutusScriptFromTextEnvelope :: forall era apiEra. (IsShelleyBasedEra apiEra, era ~ ShelleyLedgerEra apiEra) => TextEnvelope -> Either TextEnvelopeError (AnyPlutusScript era)
- data PlutusScriptInEra (lang :: Language) era where
- PlutusScriptInEra :: forall (lang :: Language) era. EraPlutusTxInfo lang era => PlutusRunnable lang -> PlutusScriptInEra lang era
- data PlutusLangInEra (lang :: Language) era where
- PlutusLangInEra :: forall (lang :: Language) era. EraPlutusTxInfo lang era => SLanguage lang -> PlutusLangInEra lang era
- plutusLangInEra :: forall era (lang :: Language). (IsShelleyBasedEra era, PlutusLanguage lang) => SLanguage lang -> Maybe (PlutusLangInEra lang (ShelleyLedgerEra era))
- plutusLangInShelleyBasedEra :: forall (lang :: Language) era. PlutusLanguage lang => ShelleyBasedEra era -> SLanguage lang -> Maybe (PlutusLangInEra lang (ShelleyLedgerEra era))
- data AnyPlutusScriptLanguage where
- AnyPlutusScriptLanguage :: forall (lang :: Language). PlutusLanguage lang => SLanguage lang -> AnyPlutusScriptLanguage
- deserialisePlutusScriptInEra :: forall era (lang :: Language). EraPlutusTxInfo lang era => ByteString -> Either DecoderError (PlutusScriptInEra lang era)
- hashPlutusScriptInEra :: forall era (lang :: Language). IsEra era => PlutusScriptInEra lang (LedgerEra era) -> ScriptHash
- plutusLanguageToText :: AnyPlutusScriptLanguage -> Text
- plutusScriptInEraLanguage :: forall (lang :: Language) era. PlutusLanguage lang => PlutusScriptInEra lang era -> Language
- plutusScriptInEraSLanguage :: forall (lang :: Language) era. PlutusLanguage lang => PlutusScriptInEra lang era -> SLanguage lang
- plutusScriptInEraToScript :: forall (lang :: Language) era. PlutusScriptInEra lang era -> Script era
- textToPlutusLanguage :: Text -> Maybe AnyPlutusScriptLanguage
- legacyWitnessToScriptRequirements :: forall era (witnessable :: WitnessableItem) ctx. AlonzoEraOnwards era -> [(Witnessable witnessable (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness ctx era))] -> Either DecoderError (TxScriptWitnessRequirements (ShelleyLedgerEra era))
- legacyWitnessConversion :: forall era (witnessable :: WitnessableItem) ctx. AlonzoEraOnwards era -> [(Witnessable witnessable (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness ctx era))] -> Either DecoderError [(Witnessable witnessable (ShelleyLedgerEra era), AnyWitness (ShelleyLedgerEra era))]
- toPlutusSLanguage :: PlutusScriptVersion lang -> SLanguage (ToLedgerPlutusLanguage lang)
- fromPlutusSLanguage :: forall (lang :: Language). SLanguage lang -> PlutusScriptVersion (FromLedgerPlutusLanguage lang)
- obtainLangConstraints :: forall (lang :: Language) a. SLanguage lang -> ((PlutusLanguage lang, Typeable lang, HasTypeProxy (SLanguage lang)) => a) -> a
- mkLegacyPolicyId :: IsEra era => Script (LedgerEra era) -> PolicyId
- data PlutusScriptWitness (lang :: Language) (purpose :: PlutusScriptPurpose) era where
- PlutusScriptWitness :: forall (lang :: Language) era (purpose :: PlutusScriptPurpose). SLanguage lang -> PlutusScriptOrReferenceInput lang era -> PlutusScriptDatum lang purpose -> ScriptRedeemer -> ExecutionUnits -> PlutusScriptWitness lang purpose era
- data PlutusScriptOrReferenceInput (lang :: Language) era
- = PScript (PlutusScriptInEra lang era)
- | PReferenceScript TxIn
- type ScriptRedeemer = HashableScriptData
- data PlutusScriptPurpose
- data PlutusScriptDatum (lang :: Language) (purpose :: PlutusScriptPurpose) where
- SpendingScriptDatum :: forall (lang :: Language). PlutusScriptDatumF lang 'SpendingScript -> PlutusScriptDatum lang 'SpendingScript
- InlineDatum :: forall (lang :: Language) (purpose :: PlutusScriptPurpose). PlutusScriptDatum lang purpose
- NoScriptDatum :: forall (lang :: Language) (purpose :: PlutusScriptPurpose). PlutusScriptDatum lang purpose
- data NoScriptDatum
- mkSpendingScriptDatum :: forall (lang :: Language). SLanguage lang -> HashableScriptData -> PlutusScriptDatum lang 'SpendingScript
- getPlutusScriptWitnessLanguage :: forall (lang :: Language) (purpose :: PlutusScriptPurpose) era. PlutusScriptWitness lang purpose era -> Language
- data AnyIndexedPlutusScriptWitness era where
- AnyIndexedPlutusScriptWitness :: forall (witnessable :: WitnessableItem) (lang :: Language) (purpose :: PlutusScriptPurpose) era. IndexedPlutusScriptWitness witnessable lang purpose era -> AnyIndexedPlutusScriptWitness era
- data IndexedPlutusScriptWitness (witnessable :: WitnessableItem) (lang :: Language) (purpose :: PlutusScriptPurpose) era where
- IndexedPlutusScriptWitness :: forall era (witnessable :: WitnessableItem) (lang :: Language) (purpose :: PlutusScriptPurpose). AlonzoEraScript era => Witnessable witnessable era -> PlutusPurpose AsIx era -> AnyPlutusScriptWitness lang purpose era -> IndexedPlutusScriptWitness witnessable lang purpose era
- data Witnessable (thing :: WitnessableItem) era where
- WitTxIn :: forall era. AlonzoEraScript era => TxIn -> Witnessable 'TxInItem era
- WitTxCert :: forall era. (EraTxCert era, AlonzoEraScript era) => TxCert era -> Witnessable 'CertItem era
- WitMint :: forall era. AlonzoEraScript era => PolicyId -> PolicyAssets -> Witnessable 'MintItem era
- WitWithdrawal :: forall era. AlonzoEraScript era => StakeAddress -> Coin -> Witnessable 'WithdrawalItem era
- WitVote :: forall era. ConwayEraScript era => Voter -> Witnessable 'VoterItem era
- WitProposal :: forall era. (ConwayEraScript era, EraPParams era) => ProposalProcedure era -> Witnessable 'ProposalItem era
- WitGuard :: forall era. DijkstraEraScript era => Credential 'Guard -> Witnessable 'GuardItem era
- data WitnessableItem
- toPlutusScriptPurpose :: forall (thing :: WitnessableItem) era. Word32 -> Witnessable thing era -> PlutusPurpose AsIx era
- toPlutusScriptPurposeIndex :: ShelleyBasedEra era -> PlutusPurpose AsIx (ShelleyLedgerEra era) -> (PlutusScriptPurpose, Word32)
- createIndexedPlutusScriptWitnesses :: forall era (witnessable :: WitnessableItem). AlonzoEraScript era => [(Witnessable witnessable era, AnyWitness era)] -> [AnyIndexedPlutusScriptWitness era]
- getAnyWitnessRedeemerPointerMap :: forall era (witnessable :: WitnessableItem). AlonzoEraScript era => [(Witnessable witnessable era, AnyWitness era)] -> Redeemers era
- obtainAlonzoScriptPurposeConstraints :: AlonzoEraOnwards era -> (AlonzoEraScript (ShelleyLedgerEra era) => a) -> a
- constructRedeeemerPointerMap :: AlonzoEraScript era => [AnyIndexedPlutusScriptWitness era] -> Redeemers era
Plutus Script
data AnyPlutusScript era where Source #
Constructors
| AnyPlutusScript :: forall era (lang :: Language). (Era era, EraPlutusTxInfo lang era, Typeable lang, PlutusLanguage lang) => PlutusScriptInEra lang era -> AnyPlutusScript era |
Instances
| Eq (AnyPlutusScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.Script Methods (==) :: AnyPlutusScript era -> AnyPlutusScript era -> Bool Source # (/=) :: AnyPlutusScript era -> AnyPlutusScript era -> Bool Source # | |
| Show (AnyPlutusScript era) Source # | |
decodeAnyPlutusScript :: forall era apiEra. (IsShelleyBasedEra apiEra, era ~ ShelleyLedgerEra apiEra) => ByteString -> AnyPlutusScriptLanguage -> Either DecoderError (AnyPlutusScript era) Source #
The ledger era era comes first for type applications; apiEra follows from it.
serialiseAnyPlutusScriptToTextEnvelope :: Maybe TextEnvelopeDescr -> AnyPlutusScript era -> TextEnvelope Source #
Serialise an AnyPlutusScript to a TextEnvelope. The text envelope type
is determined by the Plutus language version of the script.
deserialiseAnyPlutusScriptFromTextEnvelope :: forall era apiEra. (IsShelleyBasedEra apiEra, era ~ ShelleyLedgerEra apiEra) => TextEnvelope -> Either TextEnvelopeError (AnyPlutusScript era) Source #
Deserialise an AnyPlutusScript from a TextEnvelope. The text envelope type
is matched against the Plutus language versions from nonNativeLanguages
that the era supports, so new language versions are picked up automatically.
The ledger era era comes first for type applications; apiEra follows from it.
data PlutusScriptInEra (lang :: Language) era where Source #
A Plutus script in a particular era.
Why PlutusRunnable? Mainly for deserialization benefits.
The deserialization of this type looks at the
major protocol version and the script language to determine if
indeed the script is runnable. This is a dramatic improvement over the old api
which essentially read a ByteString and hoped for the best.
Any failures due to malformed/invalid scripts were caught upon transaction
submission or running the script when attempting to predict the necessary execution units.
Where do we get the major protocol version from?
In order to access the major protocol version we pass in an era type parameter which
can be translated to the major protocol version.
Where do we get the script language from?
The serialized version of PlutusRunnable encodes the script language.
See `DecCBOR (PlutusRunnable l)` in cardano-ledger for more details.
The constructor carries EraPlutusTxInfo evidence, so a value can only exist
for a language and era pairing the ledger supports. That evidence is what makes
the conversion to the ledger's own script type total; see plutusScriptInEraToScript.
Constructors
| PlutusScriptInEra :: forall (lang :: Language) era. EraPlutusTxInfo lang era => PlutusRunnable lang -> PlutusScriptInEra lang era |
Instances
data PlutusLangInEra (lang :: Language) era where Source #
Evidence that the ledger era era accepts Plutus scripts of lang.
The ledger's EraPlutusTxInfo instances are the table; matching gives AlonzoEraScript.
Constructors
| PlutusLangInEra :: forall (lang :: Language) era. EraPlutusTxInfo lang era => SLanguage lang -> PlutusLangInEra lang era |
Instances
| Eq (PlutusLangInEra lang era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.Language Methods (==) :: PlutusLangInEra lang era -> PlutusLangInEra lang era -> Bool Source # (/=) :: PlutusLangInEra lang era -> PlutusLangInEra lang era -> Bool Source # | |
| Show (PlutusLangInEra lang era) Source # | |
plutusLangInEra :: forall era (lang :: Language). (IsShelleyBasedEra era, PlutusLanguage lang) => SLanguage lang -> Maybe (PlutusLangInEra lang (ShelleyLedgerEra era)) Source #
plutusLangInShelleyBasedEra for code that only has the era type.
Eras before Alonzo always give Nothing.
With the language known only at the type level, take the singleton from PlutusLanguage:
case plutusLangInEra @era (L.isLanguage @lang) of Just (PlutusLangInEra _) -> -- the era runs the language, 'L.EraPlutusTxInfo' is in scope Nothing -> -- it does not
When the pairing is static and supported, EraPlutusTxInfo already holds and the proof
needs no lookup:
PlutusLangInEra L.isLanguage :: PlutusLangInEra lang era
plutusLangInShelleyBasedEra :: forall (lang :: Language) era. PlutusLanguage lang => ShelleyBasedEra era -> SLanguage lang -> Maybe (PlutusLangInEra lang (ShelleyLedgerEra era)) Source #
The runtime side of the table, for code that learns the language late.
data AnyPlutusScriptLanguage where Source #
Constructors
| AnyPlutusScriptLanguage :: forall (lang :: Language). PlutusLanguage lang => SLanguage lang -> AnyPlutusScriptLanguage |
Instances
deserialisePlutusScriptInEra :: forall era (lang :: Language). EraPlutusTxInfo lang era => ByteString -> Either DecoderError (PlutusScriptInEra lang era) Source #
Decode a script of a language the era supports. The EraPlutusTxInfo
constraint is the proof, so only malformed bytes fail.
hashPlutusScriptInEra :: forall era (lang :: Language). IsEra era => PlutusScriptInEra lang (LedgerEra era) -> ScriptHash Source #
plutusScriptInEraLanguage :: forall (lang :: Language) era. PlutusLanguage lang => PlutusScriptInEra lang era -> Language Source #
plutusScriptInEraSLanguage :: forall (lang :: Language) era. PlutusLanguage lang => PlutusScriptInEra lang era -> SLanguage lang Source #
plutusScriptInEraToScript :: forall (lang :: Language) era. PlutusScriptInEra lang era -> Script era Source #
The EraPlutusTxInfo evidence in the constructor is the proof the ledger
needs, so mkSupportedPlutusScript cannot fail here.
Legacy Scripts
legacyWitnessToScriptRequirements :: forall era (witnessable :: WitnessableItem) ctx. AlonzoEraOnwards era -> [(Witnessable witnessable (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness ctx era))] -> Either DecoderError (TxScriptWitnessRequirements (ShelleyLedgerEra era)) Source #
legacyWitnessConversion :: forall era (witnessable :: WitnessableItem) ctx. AlonzoEraOnwards era -> [(Witnessable witnessable (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness ctx era))] -> Either DecoderError [(Witnessable witnessable (ShelleyLedgerEra era), AnyWitness (ShelleyLedgerEra era))] Source #
When it comes to using plutus scripts we need to provide the following to the tx:
- The redeemer pointer map
- The set of plutus languages in use
- The set of plutus scripts in use (present in the t)
- The datum map
toPlutusSLanguage :: PlutusScriptVersion lang -> SLanguage (ToLedgerPlutusLanguage lang) Source #
fromPlutusSLanguage :: forall (lang :: Language). SLanguage lang -> PlutusScriptVersion (FromLedgerPlutusLanguage lang) Source #
obtainLangConstraints :: forall (lang :: Language) a. SLanguage lang -> ((PlutusLanguage lang, Typeable lang, HasTypeProxy (SLanguage lang)) => a) -> a Source #
Plutus Script Witness
data PlutusScriptWitness (lang :: Language) (purpose :: PlutusScriptPurpose) era where Source #
This is a Plutus script witness. It possesses: 1. The plutus script or reference input 2. The script redeemer 3. The execution units 4. Potentially a script datum. See the PlutusScriptDatum type family for more details.
Note that Plutus script witnesses do not exist on their own. They must witness something
and a redeemer pointer must be constucted to point to the thing being witnessed.
See IndexedPlutusScriptWitness for more details.
Constructors
| PlutusScriptWitness :: forall (lang :: Language) era (purpose :: PlutusScriptPurpose). SLanguage lang -> PlutusScriptOrReferenceInput lang era -> PlutusScriptDatum lang purpose -> ScriptRedeemer -> ExecutionUnits -> PlutusScriptWitness lang purpose era |
Instances
| Eq (PlutusScriptWitness 'PlutusV1 'SpendingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness 'PlutusV1 'SpendingScript era -> PlutusScriptWitness 'PlutusV1 'SpendingScript era -> Bool Source # (/=) :: PlutusScriptWitness 'PlutusV1 'SpendingScript era -> PlutusScriptWitness 'PlutusV1 'SpendingScript era -> Bool Source # | |
| Eq (PlutusScriptWitness 'PlutusV2 'SpendingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness 'PlutusV2 'SpendingScript era -> PlutusScriptWitness 'PlutusV2 'SpendingScript era -> Bool Source # (/=) :: PlutusScriptWitness 'PlutusV2 'SpendingScript era -> PlutusScriptWitness 'PlutusV2 'SpendingScript era -> Bool Source # | |
| Eq (PlutusScriptWitness 'PlutusV3 'SpendingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness 'PlutusV3 'SpendingScript era -> PlutusScriptWitness 'PlutusV3 'SpendingScript era -> Bool Source # (/=) :: PlutusScriptWitness 'PlutusV3 'SpendingScript era -> PlutusScriptWitness 'PlutusV3 'SpendingScript era -> Bool Source # | |
| Eq (PlutusScriptWitness 'PlutusV4 'SpendingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness 'PlutusV4 'SpendingScript era -> PlutusScriptWitness 'PlutusV4 'SpendingScript era -> Bool Source # (/=) :: PlutusScriptWitness 'PlutusV4 'SpendingScript era -> PlutusScriptWitness 'PlutusV4 'SpendingScript era -> Bool Source # | |
| Eq (PlutusScriptWitness lang 'CertifyingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness lang 'CertifyingScript era -> PlutusScriptWitness lang 'CertifyingScript era -> Bool Source # (/=) :: PlutusScriptWitness lang 'CertifyingScript era -> PlutusScriptWitness lang 'CertifyingScript era -> Bool Source # | |
| Eq (PlutusScriptWitness lang 'GuardingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness lang 'GuardingScript era -> PlutusScriptWitness lang 'GuardingScript era -> Bool Source # (/=) :: PlutusScriptWitness lang 'GuardingScript era -> PlutusScriptWitness lang 'GuardingScript era -> Bool Source # | |
| Eq (PlutusScriptWitness lang 'MintingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness lang 'MintingScript era -> PlutusScriptWitness lang 'MintingScript era -> Bool Source # (/=) :: PlutusScriptWitness lang 'MintingScript era -> PlutusScriptWitness lang 'MintingScript era -> Bool Source # | |
| Eq (PlutusScriptWitness lang 'ProposingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness lang 'ProposingScript era -> PlutusScriptWitness lang 'ProposingScript era -> Bool Source # (/=) :: PlutusScriptWitness lang 'ProposingScript era -> PlutusScriptWitness lang 'ProposingScript era -> Bool Source # | |
| Eq (PlutusScriptWitness lang 'VotingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness lang 'VotingScript era -> PlutusScriptWitness lang 'VotingScript era -> Bool Source # (/=) :: PlutusScriptWitness lang 'VotingScript era -> PlutusScriptWitness lang 'VotingScript era -> Bool Source # | |
| Eq (PlutusScriptWitness lang 'WithdrawingScript era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptWitness lang 'WithdrawingScript era -> PlutusScriptWitness lang 'WithdrawingScript era -> Bool Source # (/=) :: PlutusScriptWitness lang 'WithdrawingScript era -> PlutusScriptWitness lang 'WithdrawingScript era -> Bool Source # | |
| Show (PlutusScriptWitness lang purpose era) Source # | |
Constructing a plutus script witness.
data PlutusScriptOrReferenceInput (lang :: Language) era Source #
You can provide the plutus script directly in the transaction or a reference input that points to the script in the UTxO. Using a reference script saves space in your transaction.
Constructors
| PScript (PlutusScriptInEra lang era) | |
| PReferenceScript TxIn |
Instances
| Eq (PlutusScriptOrReferenceInput lang era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.Script Methods (==) :: PlutusScriptOrReferenceInput lang era -> PlutusScriptOrReferenceInput lang era -> Bool Source # (/=) :: PlutusScriptOrReferenceInput lang era -> PlutusScriptOrReferenceInput lang era -> Bool Source # | |
| Show (PlutusScriptOrReferenceInput lang era) Source # | |
type ScriptRedeemer = HashableScriptData Source #
data PlutusScriptPurpose Source #
Every Plutus script has a purpose that indicates what that script is witnessing.
Constructors
| SpendingScript | Witnesses a transaction input |
| MintingScript | Witnesses a minting policy |
| WithdrawingScript | Witnesses a withdrawal |
| CertifyingScript | Witnesses a certificate |
| ProposingScript | Witnesses a proposal |
| VotingScript | Witnesses a vote |
| GuardingScript | Witnesses a guard script (Dijkstra onwards) |
Instances
| Eq PlutusScriptPurpose Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptPurpose -> PlutusScriptPurpose -> Bool Source # (/=) :: PlutusScriptPurpose -> PlutusScriptPurpose -> Bool Source # | |
| Ord PlutusScriptPurpose Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods compare :: PlutusScriptPurpose -> PlutusScriptPurpose -> Ordering Source # (<) :: PlutusScriptPurpose -> PlutusScriptPurpose -> Bool Source # (<=) :: PlutusScriptPurpose -> PlutusScriptPurpose -> Bool Source # (>) :: PlutusScriptPurpose -> PlutusScriptPurpose -> Bool Source # (>=) :: PlutusScriptPurpose -> PlutusScriptPurpose -> Bool Source # max :: PlutusScriptPurpose -> PlutusScriptPurpose -> PlutusScriptPurpose Source # min :: PlutusScriptPurpose -> PlutusScriptPurpose -> PlutusScriptPurpose Source # | |
| Show PlutusScriptPurpose Source # | |
data PlutusScriptDatum (lang :: Language) (purpose :: PlutusScriptPurpose) where Source #
Constructors
| SpendingScriptDatum :: forall (lang :: Language). PlutusScriptDatumF lang 'SpendingScript -> PlutusScriptDatum lang 'SpendingScript | |
| InlineDatum :: forall (lang :: Language) (purpose :: PlutusScriptPurpose). PlutusScriptDatum lang purpose | |
| NoScriptDatum :: forall (lang :: Language) (purpose :: PlutusScriptPurpose). PlutusScriptDatum lang purpose |
Instances
| Eq (PlutusScriptDatum lang 'CertifyingScript) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptDatum lang 'CertifyingScript -> PlutusScriptDatum lang 'CertifyingScript -> Bool Source # (/=) :: PlutusScriptDatum lang 'CertifyingScript -> PlutusScriptDatum lang 'CertifyingScript -> Bool Source # | |
| Eq (PlutusScriptDatum lang 'GuardingScript) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptDatum lang 'GuardingScript -> PlutusScriptDatum lang 'GuardingScript -> Bool Source # (/=) :: PlutusScriptDatum lang 'GuardingScript -> PlutusScriptDatum lang 'GuardingScript -> Bool Source # | |
| Eq (PlutusScriptDatum lang 'MintingScript) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptDatum lang 'MintingScript -> PlutusScriptDatum lang 'MintingScript -> Bool Source # (/=) :: PlutusScriptDatum lang 'MintingScript -> PlutusScriptDatum lang 'MintingScript -> Bool Source # | |
| Eq (PlutusScriptDatum lang 'ProposingScript) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptDatum lang 'ProposingScript -> PlutusScriptDatum lang 'ProposingScript -> Bool Source # (/=) :: PlutusScriptDatum lang 'ProposingScript -> PlutusScriptDatum lang 'ProposingScript -> Bool Source # | |
| Eq (PlutusScriptDatumF lang 'SpendingScript) => Eq (PlutusScriptDatum lang 'SpendingScript) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptDatum lang 'SpendingScript -> PlutusScriptDatum lang 'SpendingScript -> Bool Source # (/=) :: PlutusScriptDatum lang 'SpendingScript -> PlutusScriptDatum lang 'SpendingScript -> Bool Source # | |
| Eq (PlutusScriptDatum lang 'VotingScript) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptDatum lang 'VotingScript -> PlutusScriptDatum lang 'VotingScript -> Bool Source # (/=) :: PlutusScriptDatum lang 'VotingScript -> PlutusScriptDatum lang 'VotingScript -> Bool Source # | |
| Eq (PlutusScriptDatum lang 'WithdrawingScript) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: PlutusScriptDatum lang 'WithdrawingScript -> PlutusScriptDatum lang 'WithdrawingScript -> Bool Source # (/=) :: PlutusScriptDatum lang 'WithdrawingScript -> PlutusScriptDatum lang 'WithdrawingScript -> Bool Source # | |
| Show (PlutusScriptDatum lang purpose) Source # | |
data NoScriptDatum Source #
Instances
| Eq NoScriptDatum Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.ScriptWitness Methods (==) :: NoScriptDatum -> NoScriptDatum -> Bool Source # (/=) :: NoScriptDatum -> NoScriptDatum -> Bool Source # | |
| Show NoScriptDatum Source # | |
mkSpendingScriptDatum :: forall (lang :: Language). SLanguage lang -> HashableScriptData -> PlutusScriptDatum lang 'SpendingScript Source #
Construct the datum of a spending-purpose Plutus script witness from a
plain HashableScriptData.
getPlutusScriptWitnessLanguage :: forall (lang :: Language) (purpose :: PlutusScriptPurpose) era. PlutusScriptWitness lang purpose era -> Language Source #
Constuct an indexed plutus script witness.
data AnyIndexedPlutusScriptWitness era where Source #
Constructors
| AnyIndexedPlutusScriptWitness :: forall (witnessable :: WitnessableItem) (lang :: Language) (purpose :: PlutusScriptPurpose) era. IndexedPlutusScriptWitness witnessable lang purpose era -> AnyIndexedPlutusScriptWitness era |
Instances
data IndexedPlutusScriptWitness (witnessable :: WitnessableItem) (lang :: Language) (purpose :: PlutusScriptPurpose) era where Source #
A Plutus script witness along the thing it is witnessing and the index of that thing. E.g transaction input, certificate, withdrawal, minting policy, etc. A Plutus script witness only makes sense in the context of what it is witnessing and the index of the thing it is witnessing.
Constructors
| IndexedPlutusScriptWitness :: forall era (witnessable :: WitnessableItem) (lang :: Language) (purpose :: PlutusScriptPurpose). AlonzoEraScript era => Witnessable witnessable era -> PlutusPurpose AsIx era -> AnyPlutusScriptWitness lang purpose era -> IndexedPlutusScriptWitness witnessable lang purpose era |
Instances
| Show (IndexedPlutusScriptWitness witnessable lang purpose era) Source # | |
Witnessable things.
data Witnessable (thing :: WitnessableItem) era where Source #
These are all of the "things" a plutus script can witness. We include the relevant
type class constraint to avoid boilerplate when creating the PlutusPurpose in the toPlutusScriptPurpose.
Constructors
| WitTxIn :: forall era. AlonzoEraScript era => TxIn -> Witnessable 'TxInItem era | |
| WitTxCert :: forall era. (EraTxCert era, AlonzoEraScript era) => TxCert era -> Witnessable 'CertItem era | |
| WitMint :: forall era. AlonzoEraScript era => PolicyId -> PolicyAssets -> Witnessable 'MintItem era | |
| WitWithdrawal :: forall era. AlonzoEraScript era => StakeAddress -> Coin -> Witnessable 'WithdrawalItem era | |
| WitVote :: forall era. ConwayEraScript era => Voter -> Witnessable 'VoterItem era | |
| WitProposal :: forall era. (ConwayEraScript era, EraPParams era) => ProposalProcedure era -> Witnessable 'ProposalItem era | |
| WitGuard :: forall era. DijkstraEraScript era => Credential 'Guard -> Witnessable 'GuardItem era |
Instances
| Eq (Witnessable thing era) Source # | |
Defined in Cardano.Api.Experimental.Plutus.Internal.IndexedPlutusScriptWitness Methods (==) :: Witnessable thing era -> Witnessable thing era -> Bool Source # (/=) :: Witnessable thing era -> Witnessable thing era -> Bool Source # | |
| Show (Witnessable thing era) Source # | |
data WitnessableItem Source #
Constructors
| TxInItem | |
| CertItem | |
| MintItem | |
| WithdrawalItem | |
| VoterItem | |
| ProposalItem | |
| GuardItem |
Create the index for a witnessable thing.
toPlutusScriptPurpose :: forall (thing :: WitnessableItem) era. Word32 -> Witnessable thing era -> PlutusPurpose AsIx era Source #
To reduce boilerplate, we reuse the PlutusPurpose type from `cardano-ledger`.
This type is utilized in constructing the redeemer pointers map, which
links the redeemer and execution units with the entity being witnessed.
The map is indexed by the redeemer pointer.
A natural question arises: How do Plutus scripts determine which
execution units and redeemer are paired with them? The ledger constructs a redeemer pointer
for every Plutus script, and this pointer corresponds to the one in the transaction's
redeemer pointers map. For more details, refer to collectPlutusScriptsWithContext
in `cardano-ledger`.
toPlutusScriptPurposeIndex :: ShelleyBasedEra era -> PlutusPurpose AsIx (ShelleyLedgerEra era) -> (PlutusScriptPurpose, Word32) Source #
Classify a ledger redeemer pointer (PlutusPurpose AsIx) into the
PlutusScriptPurpose category it belongs to and the index within that
category. This is the read direction, the inverse of toPlutusScriptPurpose.
createIndexedPlutusScriptWitnesses :: forall era (witnessable :: WitnessableItem). AlonzoEraScript era => [(Witnessable witnessable era, AnyWitness era)] -> [AnyIndexedPlutusScriptWitness era] Source #
Create a list of indexed plutus script witnesses from anything witnessable that has been witnesseed by a plutus script.
getAnyWitnessRedeemerPointerMap :: forall era (witnessable :: WitnessableItem). AlonzoEraScript era => [(Witnessable witnessable era, AnyWitness era)] -> Redeemers era Source #
The transaction's redeemer pointer map allows the ledger to connect a redeemer and execution unit pairing to the relevant script. The ledger basically reconstructs the indicies (redeemer pointers) of this map can then look up the relevant execution units/redeemer pairing. NB: the redeemer pointer has been renamed to 'PlutusPurpose AsIndex' in the ledger.
obtainAlonzoScriptPurposeConstraints :: AlonzoEraOnwards era -> (AlonzoEraScript (ShelleyLedgerEra era) => a) -> a Source #
Low level functions
constructRedeeemerPointerMap :: AlonzoEraScript era => [AnyIndexedPlutusScriptWitness era] -> Redeemers era Source #