cleveland-0.2.1: 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 #

setLarge :: od 'NotLarge -> od '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
(ModifyOriginationData (ContractOriginateData ct), OriginateFunc ct bal 'IsLarge r, CheckDupLarge isLarge, isLarge ~ 'NotLarge) => OriginateFunc ct bal isLarge (Large -> r) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

originate'r :: ContractOriginateData ct isLarge -> Large -> r Source #

class (forall ct bal large a. OFConstraint ct large (m a) => OriginateFunc ct bal large (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
(forall ct (bal :: HasBalance) (large :: LargeOrigination) (a :: k). OFConstraint ct large (m a) => OriginateFunc ct bal large (m a)) => MonadOriginate (m :: k -> Type) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

type OFConstraint ct large r = (ContractClass ct, Originator (ContractOriginateData ct large) r) Source #

Convenience synonym.

type family CheckDupLarge mod :: Constraint where ... Source #

Type family raising a type error on IsLarge argument. Used to improve error reporting for OriginateFunc instances with equality constraints.

Equations

CheckDupLarge 'IsLarge = TypeError ('Text "Large is specified more than once.") 
CheckDupLarge 'NotLarge = () 

type family CheckDupBalance mod :: Constraint where ... Source #

Type family raising a type error on HasBalance argument. Used to improve error reporting for OriginateFunc instances with equality constraints.

Equations

CheckDupBalance 'HasBalance = TypeError ('Text "Balance is specified more than once.") 
CheckDupBalance 'NoBalance = () 

data HasBalance Source #

Simple flag to track duplicate balance specification.

Constructors

NoBalance 
HasBalance 

class ContractClass contract => OriginateFunc contract (bal :: HasBalance) isLarge 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 isLarge -> r Source #

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

Instances

Instances details
OFConstraint ct large (ClevelandOpsBatch a) => OriginateFunc ct bal large (ClevelandOpsBatch a) Source #

The terminating case for batched transfer.

Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

(ModifyOriginationData (ContractOriginateData ct), OriginateFunc ct bal 'IsLarge r, CheckDupLarge isLarge, isLarge ~ 'NotLarge) => OriginateFunc ct bal isLarge (Large -> r) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

originate'r :: ContractOriginateData ct isLarge -> Large -> r Source #

(ModifyOriginationData (ContractOriginateData ct), OriginateFunc ct 'HasBalance isLarge r, CheckDupBalance bal, bal ~ 'NoBalance) => OriginateFunc ct bal isLarge (Mutez -> r) Source # 
Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

originate'r :: ContractOriginateData ct isLarge -> Mutez -> r Source #

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

Catchall incoherent instance to report argument errors.

Instance details

Defined in Test.Cleveland.Internal.Actions.Originate

Methods

originate'r :: ContractOriginateData ct large -> x -> r Source #

OFConstraint ct large (ReaderT cap base a) => OriginateFunc ct bal large (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 large -> 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, OriginateFunc contract 'NoBalance 'NotLarge 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.