cleveland-0.3.0: Testing framework for Morley.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Test.Cleveland.Internal.Actions.Originate

Description

Machinery for the variadic originate function.

Synopsis

Documentation

class ModifyOriginationData od where Source #

Type class implementing modifications to origination data.

Methods

setBalance :: Mutez -> od large -> od large Source #

setDelegate :: KeyHash -> od large -> od large Source #

setLarge :: od 'NotLarge -> od 'IsLarge Source #

Instances

Instances details
ModifyOriginationData UntypedOriginateData Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

ModifyOriginationData (OriginateData cp st vd) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

setBalance :: forall (large :: LargeOrigination). Mutez -> OriginateData cp st vd large -> OriginateData cp st vd large Source #

setDelegate :: forall (large :: LargeOrigination). KeyHash -> OriginateData cp st vd large -> OriginateData cp st vd large Source #

setLarge :: OriginateData cp st vd 'NotLarge -> OriginateData cp st vd 'IsLarge Source #

ModifyOriginationData (TypedOriginateData cp st vd) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

setBalance :: forall (large :: LargeOrigination). Mutez -> TypedOriginateData cp st vd large -> TypedOriginateData cp st vd large Source #

setDelegate :: forall (large :: LargeOrigination). KeyHash -> TypedOriginateData cp st vd large -> TypedOriginateData cp st vd large Source #

setLarge :: TypedOriginateData cp st vd 'NotLarge -> TypedOriginateData cp st vd 'IsLarge Source #

data Large Source #

Mark a contract that doesn't fit into the origination size limit. This will execute multiple origination steps.

Such origination cannot be batched (it simply may not fit).

Constructors

Large 

Instances

Instances details
(OFConstraints ct 'PropLarge props r, GetLarge props ~ 'NotLarge) => OriginateFunc ct props (Large -> r) Source #

Set large origination.

Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

class (MonadOpsInternal m, forall ct props a. Originator (ContractOriginateData ct (GetLarge props)) (m a) => OriginateFunc ct props (m a)) => MonadOriginate m Source #

A convenient synonym class to require the terminating instance for a given monad without leaking too much implementation detail.

Instances

Instances details
(MonadOpsInternal m, forall ct (props :: [Prop]) a. Originator (ContractOriginateData ct (GetLarge props)) (m a) => OriginateFunc ct props (m a)) => MonadOriginate m Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

type OFConstraints ct prop props r = (ModifyOriginationData (ContractOriginateData ct), OriginateFunc ct (prop ': props) r, CheckDupProp prop props) Source #

Convenience synonym for constraints used in OriginateFunc instances.

type family CheckDupProp name props where ... Source #

Type family raising a type error if element is in list. Used to improve error reporting for OriginateFunc instances with equality constraints.

Equations

CheckDupProp name (name ': _) = TypeError ('Text (PropName name) :<>: 'Text " is specified more than once.") 
CheckDupProp name (_ ': xs) = CheckDupProp name xs 
CheckDupProp _ '[] = () 

type family GetLarge a where ... Source #

Convert a list of props into LargeOrigination.

Equations

GetLarge ('PropLarge ': _) = 'IsLarge 
GetLarge (_ ': xs) = GetLarge xs 
GetLarge '[] = 'NotLarge 

type family PropName a where ... Source #

Pretty prop name.

Equations

PropName 'PropBalance = "Balance" 
PropName 'PropDelegate = "Delegate" 
PropName 'PropLarge = "Large" 

data Prop Source #

Enum for props we track duplicates of.

class OriginateFunc contract (props :: [Prop]) r where Source #

The class implementing a guarded "printf trick" for the originate function.

If you see GHC asking for this constraint, you most likely need to add MonadOriginate constraint on the return monad instead.

Minimal complete definition

Nothing

Methods

originate'r :: HasCallStack => ContractOriginateData contract (GetLarge props) -> r Source #

default originate'r :: (HasCallStack, Originator (ContractOriginateData contract (GetLarge props)) r) => ContractOriginateData contract (GetLarge props) -> r Source #

Instances

Instances details
Originator (ContractOriginateData ct (GetLarge props)) (ClevelandOpsBatch a) => OriginateFunc ct props (ClevelandOpsBatch a) Source #

The terminating case for batched transfer.

Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

(OFConstraints ct 'PropLarge props r, GetLarge props ~ 'NotLarge) => OriginateFunc ct props (Large -> r) Source #

Set large origination.

Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

OFConstraints ct 'PropBalance props r => OriginateFunc ct props (Mutez -> r) Source #

Set balance.

Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

OFConstraints ct 'PropDelegate props r => OriginateFunc ct props (KeyHash -> r) Source #

Set delegate.

Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

originate'r :: ContractOriginateData ct (GetLarge props) -> KeyHash -> r Source #

(TypeError (('Text "Incorrect argument for the 'originate' function: " :<>: 'ShowType x) :$$: 'Text "If in doubt, try adding a type annotation.") :: Constraint, Bottom) => OriginateFunc ct props (x -> r) Source #

Catchall incoherent instance to report argument errors.

Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

originate'r :: ContractOriginateData ct (GetLarge props) -> x -> r Source #

Originator (ContractOriginateData ct (GetLarge props)) (ReaderT cap base a) => OriginateFunc ct props (ReaderT cap base a) Source #

The terminating case for Cleveland monads.

Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

originate'r :: ContractOriginateData ct (GetLarge props) -> ReaderT cap base a Source #

class ContractClass contract where Source #

Type class that abstracts different contract types for the purpose of origination.

Associated Types

type ContractStorage contract Source #

type ContractOriginateData contract :: LargeOrigination -> Type Source #

Methods

initialData :: ContractAlias -> ContractStorage contract -> contract -> ContractOriginateData contract 'NotLarge Source #

Instances

Instances details
ContractClass Contract Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Associated Types

type ContractStorage Contract Source #

type ContractOriginateData Contract :: LargeOrigination -> Type Source #

Methods

initialData :: ContractAlias -> ContractStorage Contract -> Contract -> ContractOriginateData Contract 'NotLarge Source #

ContractClass (Contract cp st vd) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Associated Types

type ContractStorage (Contract cp st vd) Source #

type ContractOriginateData (Contract cp st vd) :: LargeOrigination -> Type Source #

Methods

initialData :: ContractAlias -> ContractStorage (Contract cp st vd) -> Contract cp st vd -> ContractOriginateData (Contract cp st vd) 'NotLarge Source #

ContractClass (TypedContract cp st vd) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

class Originator od res where Source #

Class implementing actual origination.

Methods

originateFn :: HasCallStack => od -> res Source #

Low-level polymorphic origination function. It takes UntypedOriginateData, TypedOriginateData or OriginateData, and returns correspondingly an Address, or a ContractHandle, in a suitable monad.

Instances

Instances details
(a ~ ContractAddress, MonadOpsInternal m) => Originator (UntypedOriginateData 'NotLarge) (m a) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

(HasClevelandCaps caps, base ~ ClevelandBaseMonad caps, a ~ ContractAddress) => Originator (UntypedOriginateData 'IsLarge) (ReaderT caps base a) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

(a ~ ContractHandle cp st vd, MonadOpsInternal m, Originator (UntypedOriginateData large) (m ContractAddress)) => Originator (OriginateData cp st vd large) (m a) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

originateFn :: OriginateData cp st vd large -> m a Source #

(a ~ ContractHandle cp st vd, MonadOpsInternal m, Originator (UntypedOriginateData large) (m ContractAddress), NiceStorage st, NiceViewsDescriptor vd, NiceParameter cp) => Originator (TypedOriginateData cp st vd large) (m a) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

originateFn :: TypedOriginateData cp st vd large -> m a Source #

originate :: forall contract r. (HasCallStack, ContractClass contract, OriginateFunc contract '[] r) => ContractAlias -> ContractStorage contract -> contract -> r Source #

Originate a new contract with given data.

Can accept untypted or Lorentz contracts as-is. With typed Michelson contracts, you need to wrap the contract in TypedContract specifying its Haskell-land parameter, storage types and view descriptors, e.g.

originate "typed contract" defaultStorage $ TypedContract @Param @Storage @() michelsonContract

Storage type can be auto-deduced in most cases, so you can skip it with @_.

After the mandatory arguments, you can add Large or a Mutez value, e.g. by using tz quasi-quoter:

originate "contract" initialStorage contract Large
originate "contract" initialStorage contract [tz|123micro|]
originate "contract" initialStorage contract [tz|123micro|] Large

The order is arbitrary, but each can be specified at most once.