Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Test.Cleveland.Internal.Actions.Originate
Description
Machinery for the variadic originate
function.
Synopsis
- class ModifyOriginationData od where
- setBalance :: Mutez -> od large -> od large
- setLarge :: od 'NotLarge -> od 'IsLarge
- data Large = Large
- class (forall ct bal large a. OFConstraint ct large (m a) => OriginateFunc ct bal large (m a)) => MonadOriginate m
- type OFConstraint ct large r = (ContractClass ct, Originator (ContractOriginateData ct large) r)
- type family CheckDupLarge mod :: Constraint where ...
- type family CheckDupBalance mod :: Constraint where ...
- data HasBalance
- class ContractClass contract => OriginateFunc contract (bal :: HasBalance) isLarge r where
- originate'r :: HasCallStack => ContractOriginateData contract isLarge -> r
- class ContractClass contract where
- type ContractStorage contract
- type ContractOriginateData contract :: LargeOrigination -> Type
- initialData :: ContractAlias -> ContractStorage contract -> contract -> ContractOriginateData contract 'NotLarge
- class Originator od res where
- originateFn :: HasCallStack => od -> res
- originate :: forall contract r. (HasCallStack, OriginateFunc contract 'NoBalance 'NotLarge r) => ContractAlias -> ContractStorage contract -> contract -> r
Documentation
class ModifyOriginationData od where Source #
Type class implementing modifications to origination data.
Methods
setBalance :: Mutez -> od large -> od large Source #
Instances
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
(ModifyOriginationData (ContractOriginateData ct), OriginateFunc ct bal 'IsLarge r, CheckDupLarge isLarge, isLarge ~ 'NotLarge) => OriginateFunc ct bal isLarge (Large -> r) Source # | |
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
(forall ct (bal :: HasBalance) (large :: LargeOrigination) (a :: k). OFConstraint ct large (m a) => OriginateFunc ct bal large (m a)) => MonadOriginate (m :: k -> Type) Source # | |
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
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
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
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.