plutus-ledger-1.1.0.0: Wallet API
Safe HaskellNone
LanguageHaskell2010

Ledger.Typed.Scripts

Synopsis

Documentation

data Language Source #

Non-Native Script language. This is an Enumerated type. This is expected to be an open type. We will add new Constuctors to this type as additional Non-Native scripting language as are added. We use an enumerated type for two reasons. 1) We can write total functions by case analysis over the constructors 2) We will use DataKinds to make some datatypes indexed by Language For now, the only Non-Native Scriting language is Plutus We might add new languages in the futures.

Note that the the serialization of Language depends on the ordering.

Constructors

PlutusV1 
PlutusV2 

Instances

Instances details
Bounded Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

Enum Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

Eq Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

Ord Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

Show Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

Ix Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

Generic Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

Associated Types

type Rep Language :: Type -> Type Source #

NFData Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

Methods

rnf :: Language -> () Source #

FromCBOR Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

ToCBOR Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

Methods

toCBOR :: Language -> Encoding Source #

encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size) -> Proxy Language -> Size Source #

encodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size) -> Proxy [Language] -> Size Source #

NoThunks Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

ToSchema Language Source # 
Instance details

Defined in Ledger.Orphans

type Rep Language 
Instance details

Defined in Cardano.Ledger.Alonzo.Language

type Rep Language = D1 ('MetaData "Language" "Cardano.Ledger.Alonzo.Language" "cardano-ledger-alonzo-0.1.0.0-NThdmINrvW30AlLdZjZ0g" 'False) (C1 ('MetaCons "PlutusV1" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PlutusV2" 'PrefixI 'False) (U1 :: Type -> Type))

forwardingMintingPolicyHash :: TypedValidator a -> MintingPolicyHash Source #

Hash of the minting policy that forwards all checks to the instance's validator

vForwardingMintingPolicy :: TypedValidator a -> Versioned MintingPolicy Source #

The minting policy that forwards all checks to the instance's validator

forwardingMintingPolicy :: TypedValidator a -> MintingPolicy Source #

The unversioned minting policy that forwards all checks to the instance's validator

generalise :: TypedValidator a -> TypedValidator Any Source #

Generalise the typed validator to one that works with the Data type.

vValidatorScript :: TypedValidator a -> Versioned Validator Source #

The validator script itself.

validatorScript :: TypedValidator a -> Validator Source #

The unversioned validator script itself.

validatorAddress :: TypedValidator a -> Address Source #

The address of the validator.

validatorHash :: TypedValidator a -> ValidatorHash Source #

The hash of the validator.

data Any Source #

Instances

Instances details
Eq Any 
Instance details

Defined in Plutus.Script.Utils.Typed

Methods

(==) :: Any -> Any -> Bool Source #

(/=) :: Any -> Any -> Bool Source #

Show Any 
Instance details

Defined in Plutus.Script.Utils.Typed

Generic Any 
Instance details

Defined in Plutus.Script.Utils.Typed

Associated Types

type Rep Any :: Type -> Type Source #

Methods

from :: Any -> Rep Any x Source #

to :: Rep Any x -> Any Source #

ToJSON Any 
Instance details

Defined in Plutus.Script.Utils.Typed

ValidatorTypes Any 
Instance details

Defined in Plutus.Script.Utils.Typed

Associated Types

type RedeemerType Any Source #

type DatumType Any Source #

type Rep Any 
Instance details

Defined in Plutus.Script.Utils.Typed

type Rep Any = D1 ('MetaData "Any" "Plutus.Script.Utils.Typed" "plutus-script-utils-1.1.0.0-IFwyzE6CIQ44doxQRh05YH" 'False) (V1 :: Type -> Type)
type DatumType Any 
Instance details

Defined in Plutus.Script.Utils.Typed

type RedeemerType Any 
Instance details

Defined in Plutus.Script.Utils.Typed

type family DatumType a Source #

The type of the data of this connection type.

Instances

Instances details
type DatumType Void 
Instance details

Defined in Plutus.Script.Utils.Typed

type DatumType Any 
Instance details

Defined in Plutus.Script.Utils.Typed

type family RedeemerType a Source #

The type of the redeemers of this connection type.

Instances

Instances details
type RedeemerType Void 
Instance details

Defined in Plutus.Script.Utils.Typed

type RedeemerType Any 
Instance details

Defined in Plutus.Script.Utils.Typed

class ValidatorTypes a Source #

A class that associates a type standing for a connection type with two types, the type of the redeemer and the data script for that connection type.

Associated Types

type RedeemerType a Source #

The type of the redeemers of this connection type.

type RedeemerType a = ()

type DatumType a Source #

The type of the data of this connection type.

type DatumType a = ()

Instances

Instances details
ValidatorTypes Void 
Instance details

Defined in Plutus.Script.Utils.Typed

Associated Types

type RedeemerType Void Source #

type DatumType Void Source #

ValidatorTypes Any 
Instance details

Defined in Plutus.Script.Utils.Typed

Associated Types

type RedeemerType Any Source #

type DatumType Any Source #

data TypedValidator a Source #

A typed validator script with its ValidatorScript and Address.

Constructors

TypedValidator 

Fields

Instances

Instances details
Eq (TypedValidator a) 
Instance details

Defined in Plutus.Script.Utils.Typed

Show (TypedValidator a) 
Instance details

Defined in Plutus.Script.Utils.Typed

Generic (TypedValidator a) 
Instance details

Defined in Plutus.Script.Utils.Typed

Associated Types

type Rep (TypedValidator a) :: Type -> Type Source #

ToJSON (TypedValidator a) Source # 
Instance details

Defined in Ledger.Typed.Scripts.Orphans

FromJSON (TypedValidator a) Source # 
Instance details

Defined in Ledger.Typed.Scripts.Orphans

type Rep (TypedValidator a) 
Instance details

Defined in Plutus.Script.Utils.Typed

type Rep (TypedValidator a) = D1 ('MetaData "TypedValidator" "Plutus.Script.Utils.Typed" "plutus-script-utils-1.1.0.0-IFwyzE6CIQ44doxQRh05YH" 'False) (C1 ('MetaCons "TypedValidator" 'PrefixI 'True) ((S1 ('MetaSel ('Just "tvValidator") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Versioned Validator)) :*: S1 ('MetaSel ('Just "tvValidatorHash") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ValidatorHash)) :*: (S1 ('MetaSel ('Just "tvForwardingMPS") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Versioned MintingPolicy)) :*: S1 ('MetaSel ('Just "tvForwardingMPSHash") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 MintingPolicyHash))))

class UnsafeFromData sc => IsScriptContext sc where Source #

Minimal complete definition

Nothing

Methods

mkUntypedValidator :: (UnsafeFromData d, UnsafeFromData r) => (d -> r -> sc -> Bool) -> UntypedValidator Source #

Converts a custom datum and redeemer from a validator function to an untyped validator function. See Note [Scripts returning Bool].

Here's an example of how this function can be used:

  import PlutusTx qualified
  import Plutus.V2.Ledger.Scripts qualified as Plutus
  import Plutus.Script.Utils.V2.Scripts (mkUntypedValidator)

  newtype MyCustomDatum = MyCustomDatum Integer
  PlutusTx.unstableMakeIsData ''MyCustomDatum
  newtype MyCustomRedeemer = MyCustomRedeemer Integer
  PlutusTx.unstableMakeIsData ''MyCustomRedeemer

  mkValidator :: MyCustomDatum -> MyCustomRedeemer -> Plutus.ScriptContext -> Bool
  mkValidator _ _ _ = True

  validator :: Plutus.Validator
  validator = Plutus.mkValidatorScript
      $$(PlutusTx.compile [|| wrap ||])
   where
      wrap = mkUntypedValidator mkValidator

Here's an example using a parameterized validator:

  import PlutusTx qualified
  import Plutus.V2.Ledger.Scripts qualified as Plutus
  import Plutus.Script.Utils.V2.Scripts (mkUntypedValidator)

  newtype MyCustomDatum = MyCustomDatum Integer
  PlutusTx.unstableMakeIsData ''MyCustomDatum
  newtype MyCustomRedeemer = MyCustomRedeemer Integer
  PlutusTx.unstableMakeIsData ''MyCustomRedeemer

  mkValidator :: Int -> MyCustomDatum -> MyCustomRedeemer -> Plutus.ScriptContext -> Bool
  mkValidator _ _ _ _ = True

  validator :: Int -> Plutus.Validator
  validator i = Plutus.mkValidatorScript
      $$(PlutusTx.compile [|| wrap . mkValidator ||]) applyCode PlutusTx.liftCode i
   where
      wrap = mkUntypedValidator

For debugging purpose, it may be of interest to know that in the default implementation, the parameters are decoded in the order they appear (data, redeemer and then script context). A log trace is generated after each successfully decoded parameter. Thus, if a parameter can't be decoded, the culprit is the first parameter in the list that doesn't appear as successfully decoded in the log trace.

mkUntypedStakeValidator :: UnsafeFromData r => (r -> sc -> Bool) -> UntypedStakeValidator Source #

Converts a custom redeemer from a stake validator function to an untyped stake validator function. See Note [Scripts returning Bool].

Here's an example of how this function can be used:

  import PlutusTx qualified
  import Plutus.V1.Ledger.Scripts qualified as Plutus
  import Plutus.Script.Utils.V1.Scripts (mkUntypedStakeValidator)

  newtype MyCustomRedeemer = MyCustomRedeemer Integer
  PlutusTx.unstableMakeIsData ''MyCustomRedeemer

  mkStakeValidator :: MyCustomRedeemer -> ScriptContext -> Bool
  mkStakeValidator _ _ = True

  validator :: Plutus.Validator
  validator = Plutus.mkStakeValidatorScript
      $$(PlutusTx.compile [|| wrap ||])
   where
      wrap = mkUntypedStakeValidator mkStakeValidator

For debugging purpose, it may be of interest to know that in the default implementation, the parameters are decoded in the order they appear (redeemer and then script context). A log trace is generated after each successfully decoded parameter. Thus, if a parameter can't be decoded, the culprit is the first parameter in the list that doesn't appear as successfully decoded in the log trace.

mkUntypedMintingPolicy :: UnsafeFromData r => (r -> sc -> Bool) -> UntypedMintingPolicy Source #

Converts a custom redeemer from a minting policy function to an untyped minting policy function. See Note [Scripts returning Bool].

Here's an example of how this function can be used:

  import PlutusTx qualified
  import Plutus.V1.Ledger.Scripts qualified as Plutus
  import Plutus.Script.Utils.V1.Scripts (mkUntypedMintingPolicy)

  newtype MyCustomRedeemer = MyCustomRedeemer Integer
  PlutusTx.unstableMakeIsData ''MyCustomRedeemer

  mkMintingPolicy :: MyCustomRedeemer -> ScriptContext -> Bool
  mkMintingPolicy _ _ = True

  validator :: Plutus.Validator
  validator = Plutus.mkMintingPolicyScript
      $$(PlutusTx.compile [|| wrap ||])
   where
      wrap = mkUntypedMintingPolicy mkMintingPolicy

For debugging purpose, it may be of interest to know that in the default implementation, the parameters are decoded in the order they appear (redeemer and then script context). A log trace is generated after each successfully decoded parameter. Thus, if a parameter can't be decoded, the culprit is the first parameter in the list that doesn't appear as successfully decoded in the log trace.

data Versioned script Source #

A script of some kind with its Plutus language version

Constructors

Versioned 

Fields

Instances

Instances details
Functor Versioned 
Instance details

Defined in Plutus.Script.Utils.Scripts

Methods

fmap :: (a -> b) -> Versioned a -> Versioned b Source #

(<$) :: a -> Versioned b -> Versioned a Source #

Eq script => Eq (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

Methods

(==) :: Versioned script -> Versioned script -> Bool Source #

(/=) :: Versioned script -> Versioned script -> Bool Source #

Ord script => Ord (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

Methods

compare :: Versioned script -> Versioned script -> Ordering Source #

(<) :: Versioned script -> Versioned script -> Bool Source #

(<=) :: Versioned script -> Versioned script -> Bool Source #

(>) :: Versioned script -> Versioned script -> Bool Source #

(>=) :: Versioned script -> Versioned script -> Bool Source #

max :: Versioned script -> Versioned script -> Versioned script Source #

min :: Versioned script -> Versioned script -> Versioned script Source #

Show script => Show (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

Methods

showsPrec :: Int -> Versioned script -> ShowS Source #

show :: Versioned script -> String Source #

showList :: [Versioned script] -> ShowS Source #

Generic (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

Associated Types

type Rep (Versioned script) :: Type -> Type Source #

Methods

from :: Versioned script -> Rep (Versioned script) x Source #

to :: Rep (Versioned script) x -> Versioned script Source #

NFData script => NFData (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

Methods

rnf :: Versioned script -> () Source #

ToJSON script => ToJSON (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

FromJSON script => FromJSON (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

ToSchema script => ToSchema (Versioned script) Source # 
Instance details

Defined in Ledger.Orphans

Pretty script => Pretty (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

Methods

pretty :: Versioned script -> Doc ann Source #

prettyList :: [Versioned script] -> Doc ann Source #

Serialise script => Serialise (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

type Rep (Versioned script) 
Instance details

Defined in Plutus.Script.Utils.Scripts

type Rep (Versioned script) = D1 ('MetaData "Versioned" "Plutus.Script.Utils.Scripts" "plutus-script-utils-1.1.0.0-IFwyzE6CIQ44doxQRh05YH" 'False) (C1 ('MetaCons "Versioned" 'PrefixI 'True) (S1 ('MetaSel ('Just "unversioned") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 script) :*: S1 ('MetaSel ('Just "version") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Language)))

data MintingPolicy Source #

MintingPolicy is a wrapper around Scripts which are used as validators for minting constraints.

Instances

Instances details
Eq MintingPolicy 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Ord MintingPolicy 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Show MintingPolicy 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Generic MintingPolicy 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Associated Types

type Rep MintingPolicy :: Type -> Type Source #

NFData MintingPolicy 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Methods

rnf :: MintingPolicy -> () Source #

ToJSON MintingPolicy Source # 
Instance details

Defined in Ledger.Scripts.Orphans

FromJSON MintingPolicy Source # 
Instance details

Defined in Ledger.Scripts.Orphans

ToSchema MintingPolicy Source # 
Instance details

Defined in Ledger.Orphans

Pretty MintingPolicy 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Serialise MintingPolicy 
Instance details

Defined in Plutus.V1.Ledger.Scripts

type Rep MintingPolicy 
Instance details

Defined in Plutus.V1.Ledger.Scripts

type Rep MintingPolicy = D1 ('MetaData "MintingPolicy" "Plutus.V1.Ledger.Scripts" "plutus-ledger-api-1.0.0.1-EUjexvcAhXiGIaLon6olWb" 'True) (C1 ('MetaCons "MintingPolicy" 'PrefixI 'True) (S1 ('MetaSel ('Just "getMintingPolicy") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Script)))

data Validator Source #

Validator is a wrapper around Scripts which are used as validators in transaction outputs.

Instances

Instances details
Eq Validator 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Ord Validator 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Show Validator 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Generic Validator 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Associated Types

type Rep Validator :: Type -> Type Source #

NFData Validator 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Methods

rnf :: Validator -> () Source #

ToJSON Validator Source # 
Instance details

Defined in Ledger.Scripts.Orphans

FromJSON Validator Source # 
Instance details

Defined in Ledger.Scripts.Orphans

ToSchema Validator Source # 
Instance details

Defined in Ledger.Orphans

Pretty Validator 
Instance details

Defined in Plutus.V1.Ledger.Scripts

Methods

pretty :: Validator -> Doc ann Source #

prettyList :: [Validator] -> Doc ann Source #

Serialise Validator 
Instance details

Defined in Plutus.V1.Ledger.Scripts

type Rep Validator 
Instance details

Defined in Plutus.V1.Ledger.Scripts

type Rep Validator = D1 ('MetaData "Validator" "Plutus.V1.Ledger.Scripts" "plutus-ledger-api-1.0.0.1-EUjexvcAhXiGIaLon6olWb" 'True) (C1 ('MetaCons "Validator" 'PrefixI 'True) (S1 ('MetaSel ('Just "getValidator") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Script)))

data ConnectionError Source #

An error we can get while trying to type an existing transaction part.

Instances

Instances details
Eq ConnectionError 
Instance details

Defined in Plutus.Script.Utils.V1.Typed.Scripts.Validators

Ord ConnectionError 
Instance details

Defined in Plutus.Script.Utils.V1.Typed.Scripts.Validators

Show ConnectionError 
Instance details

Defined in Plutus.Script.Utils.V1.Typed.Scripts.Validators

Generic ConnectionError 
Instance details

Defined in Plutus.Script.Utils.V1.Typed.Scripts.Validators

Associated Types

type Rep ConnectionError :: Type -> Type Source #

ToJSON ConnectionError Source # 
Instance details

Defined in Ledger.Typed.Scripts.Orphans

FromJSON ConnectionError Source # 
Instance details

Defined in Ledger.Typed.Scripts.Orphans

Pretty ConnectionError 
Instance details

Defined in Plutus.Script.Utils.V1.Typed.Scripts.Validators

type Rep ConnectionError 
Instance details

Defined in Plutus.Script.Utils.V1.Typed.Scripts.Validators

type Rep ConnectionError = D1 ('MetaData "ConnectionError" "Plutus.Script.Utils.V1.Typed.Scripts.Validators" "plutus-script-utils-1.1.0.0-IFwyzE6CIQ44doxQRh05YH" 'False) ((C1 ('MetaCons "WrongValidatorAddress" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Address) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Address)) :+: (C1 ('MetaCons "WrongOutType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 WrongOutTypeError)) :+: C1 ('MetaCons "WrongValidatorType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))) :+: ((C1 ('MetaCons "WrongRedeemerType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 BuiltinData)) :+: C1 ('MetaCons "WrongDatumType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 BuiltinData))) :+: (C1 ('MetaCons "NoDatum" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TxOutRef) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 DatumHash)) :+: C1 ('MetaCons "UnknownRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TxOutRef)))))

unsafeMkTypedValidator :: Versioned Validator -> TypedValidator Any Source #

Make a TypedValidator (with no type constraints) from an untyped Validator script.

type ValidatorType a = DatumType a -> RedeemerType a -> ScriptContext -> Bool Source #

The type of validators for the given connection type.

mkTypedValidator Source #

Arguments

:: CompiledCode (ValidatorType a)

Validator script (compiled)

-> CompiledCode (ValidatorType a -> UntypedValidator)

A wrapper for the compiled validator

-> TypedValidator a 

Make a TypedValidator from the CompiledCode of a validator script and its wrapper.

mkTypedValidatorParam Source #

Arguments

:: forall a param. Lift DefaultUni param 
=> CompiledCode (param -> ValidatorType a)

Validator script (compiled)

-> CompiledCode (ValidatorType a -> UntypedValidator)

A wrapper for the compiled validator

-> param

The extra paramater for the validator script

-> TypedValidator a 

Make a TypedValidator from the CompiledCode of a parameterized validator script and its wrapper.