pub enum ChainTopOrdering {
Relaxed,
Strict,
}
Variants
Relaxed
Relaxed chain top ordering REWRITES ACTIONS INLINE during a flush of
the source chain to sit on top of the current chain top. The “as at”
of the zome call initial state is completely ignored.
This may be significantly more efficient if you are CERTAIN that none
of your zome or validation logic is order dependent. Examples include
simple chat messages or tweets. Note however that even chat messages
and tweets may have subtle order dependencies, such as if a cap grant
was written or revoked that would have invalidated the zome call that
wrote data after the revocation, etc.
The efficiency of relaxed ordering comes from simply rehashing and
signing actions on the new chain top during flush, avoiding the
overhead of the client, websockets, zome call instance, wasm execution,
validation, etc. that would result from handling a HeadMoved
error
via an external driver.
Strict
The default Strict
ordering is the default for a very good reason.
Writes normally compare the chain head from the start of a zome call
against the time a write transaction is flushed from the source chain.
This is REQUIRED for data integrity if any zome or validation logic
depends on the ordering of data in a chain.
This order dependence could be obvious such as an explicit reference or
dependency. It could be very subtle such as checking for the existence
or absence of some data.
If you are unsure whether your data is order dependent you should err
on the side of caution and handle HeadMoved
errors on the client of
the zome call and restart the zome call from the start.
Trait Implementations
sourceimpl Clone for ChainTopOrdering
impl Clone for ChainTopOrdering
sourcefn clone(&self) -> ChainTopOrdering
fn clone(&self) -> ChainTopOrdering
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for ChainTopOrdering
impl Debug for ChainTopOrdering
sourceimpl Default for ChainTopOrdering
impl Default for ChainTopOrdering
sourceimpl<'de> Deserialize<'de> for ChainTopOrdering
impl<'de> Deserialize<'de> for ChainTopOrdering
sourcefn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl PartialEq<ChainTopOrdering> for ChainTopOrdering
impl PartialEq<ChainTopOrdering> for ChainTopOrdering
sourceimpl Serialize for ChainTopOrdering
impl Serialize for ChainTopOrdering
impl Copy for ChainTopOrdering
impl StructuralPartialEq for ChainTopOrdering
Auto Trait Implementations
impl RefUnwindSafe for ChainTopOrdering
impl Send for ChainTopOrdering
impl Sync for ChainTopOrdering
impl Unpin for ChainTopOrdering
impl UnwindSafe for ChainTopOrdering
Blanket Implementations
impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
fn pointer_metadata(
&<T as ArchivePointee>::ArchivedMetadata
) -> <T as Pointee>::Metadata
fn pointer_metadata(
&<T as ArchivePointee>::ArchivedMetadata
) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<F, W, T, D> Deserialize<With<T, W>, D> for F where
W: DeserializeWith<F, T, D>,
D: Fallible + ?Sized,
F: ?Sized,
impl<F, W, T, D> Deserialize<With<T, W>, D> for F where
W: DeserializeWith<F, T, D>,
D: Fallible + ?Sized,
F: ?Sized,
fn deserialize(
&self,
deserializer: &mut D
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize(
&self,
deserializer: &mut D
) -> Result<With<T, W>, <D as Fallible>::Error>
Deserializes using the given deserializer
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more