Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Machinery for the variadic originate
function.
Synopsis
- class ModifyOriginationData od where
- setBalance :: Mutez -> od large -> od large
- setDelegate :: KeyHash -> od large -> od large
- setLarge :: od 'NotLarge -> od 'IsLarge
- data Large = Large
- class (MonadOpsInternal m, forall ct props a. Originator (ContractOriginateData ct (GetLarge props)) (m a) => OriginateFunc ct props (m a)) => MonadOriginate m
- type OFConstraints ct prop props r = (ModifyOriginationData (ContractOriginateData ct), OriginateFunc ct (prop ': props) r, CheckDupProp prop props)
- type family CheckDupProp name props where ...
- type family GetLarge a where ...
- type family PropName a where ...
- data Prop
- class OriginateFunc contract (props :: [Prop]) r where
- originate'r :: HasCallStack => ContractOriginateData contract (GetLarge props) -> 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, ContractClass contract, OriginateFunc contract '[] r) => ContractAlias -> ContractStorage contract -> contract -> r
Documentation
class ModifyOriginationData od where Source #
Type class implementing modifications to origination data.
setBalance :: Mutez -> od large -> od large Source #
setDelegate :: KeyHash -> 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).
Instances
(OFConstraints ct 'PropLarge props r, GetLarge props ~ 'NotLarge) => OriginateFunc ct props (Large -> r) Source # | Set large origination. |
Defined in Test.Cleveland.Internal.Actions.Originate originate'r :: ContractOriginateData ct (GetLarge props) -> Large -> r Source # |
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
(MonadOpsInternal m, forall ct (props :: [Prop]) a. Originator (ContractOriginateData ct (GetLarge props)) (m a) => OriginateFunc ct props (m a)) => MonadOriginate m Source # | |
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.
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
.
type family PropName a where ... Source #
Pretty prop name.
PropName 'PropBalance = "Balance" | |
PropName 'PropDelegate = "Delegate" | |
PropName 'PropLarge = "Large" |
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.
Nothing
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
class ContractClass contract where Source #
Type class that abstracts different contract types for the purpose of origination.
type ContractStorage contract Source #
type ContractOriginateData contract :: LargeOrigination -> Type Source #
initialData :: ContractAlias -> ContractStorage contract -> contract -> ContractOriginateData contract 'NotLarge Source #
Instances
class Originator od res where Source #
Class implementing actual origination.
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, 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.