pub trait Invocation: Clone {
    fn zomes(&self) -> ZomesToInvoke;
    fn fn_components(&self) -> FnComponents ;
    fn host_input(self) -> Result<ExternIO, SerializedBytesError>;
    fn auth(&self) -> InvocationAuth;
}

Required Methods§

Some invocations call into a single zome and some call into many or all zomes. An example of an invocation that calls across all zomes is init. Init must pass for every zome in order for the Dna overall to successfully init. An example of an invocation that calls a single zome is validation of an entry, because the entry is only defined in a single zome, so it only makes sense for that exact zome to define the validation logic for that entry. In the future this may be expanded to support a subset of zomes that is larger than one. For example, we may want to trigger a callback in all zomes that implement a trait/interface, but this doesn’t exist yet, so the only valid options are All or One.

Invocations execute in a “sparse” manner of decreasing specificity. In technical terms this means that the list of strings in FnComponents will be concatenated into a single function name to be called, then the last string will be removed and a shorter function name will be attempted and so on until all variations have been attempted. For example, if FnComponents was vec![“foo”, “bar”, “baz”] it would loop as “foo_bar_baz” then “foo_bar” then “foo”. All of those three callbacks that are defined will be called unless a definitive callback result is returned. See CallbackResult::is_definitive in zome_types. All of the individual callback results are then folded into a single overall result value as a From implementation on the invocation results structs (e.g. zome results vs. ribosome results).

the serialized input from the host for the wasm call this is intentionally NOT a reference to self because ExternIO may be huge we want to be careful about cloning invocations

Implementors§