pub enum DriveOperation<'a> {
Show 16 variants
DataContractOperation(DataContractOperationType<'a>),
DocumentOperation(DocumentOperationType<'a>),
TokenOperation(TokenOperationType),
WithdrawalOperation(WithdrawalOperationType),
IdentityOperation(IdentityOperationType),
PrefundedSpecializedBalanceOperation(PrefundedSpecializedBalanceOperationType),
SystemOperation(SystemOperationType),
GroupOperation(GroupOperationType),
ContractGroupOperation(ContractGroupOperationType),
ContractModerationOperation(ContractModerationOperationType),
ContractFeePotOperation(ContractFeePotOperationType),
AddressFundsOperation(AddressFundsOperationType),
ShieldedPoolOperation(ShieldedPoolOperationType),
GroveDBOperation(QualifiedGroveDbOp),
GroveDBOpBatch(GroveDbOpBatch),
FinalizeOperation(DriveOperationFinalizeTask),
}Expand description
All types of Drive Operations
Variants§
DataContractOperation(DataContractOperationType<'a>)
A contract operation
DocumentOperation(DocumentOperationType<'a>)
A document operation
TokenOperation(TokenOperationType)
A token operation
WithdrawalOperation(WithdrawalOperationType)
Withdrawal operation
IdentityOperation(IdentityOperationType)
An identity operation
PrefundedSpecializedBalanceOperation(PrefundedSpecializedBalanceOperationType)
An operation on prefunded balances
SystemOperation(SystemOperationType)
A system operation
GroupOperation(GroupOperationType)
A group operation
ContractGroupOperation(ContractGroupOperationType)
A contract group operation
ContractModerationOperation(ContractModerationOperationType)
A contract moderation operation: an entry of a banlist or a suspension list
ContractFeePotOperation(ContractFeePotOperationType)
A contract fee pot operation: credits of a contract’s document action fees
AddressFundsOperation(AddressFundsOperationType)
An address funds operation
ShieldedPoolOperation(ShieldedPoolOperationType)
A shielded pool operation
GroveDBOperation(QualifiedGroveDbOp)
A single low level groveDB operation
GroveDBOpBatch(GroveDbOpBatch)
Multiple low level groveDB operations
FinalizeOperation(DriveOperationFinalizeTask)
An operation that only produces finalization tasks (no low-level ops)
Implementations§
Source§impl DriveOperation<'_>
impl DriveOperation<'_>
Sourcepub fn forfeits_storage_refunds(&self) -> bool
pub fn forfeits_storage_refunds(&self) -> bool
Whether the batch this operation is in refunds nobody for the storage its document
operations remove: see ContractModerationOperationType::ForfeitStorageRefunds.
Sourcepub fn refunds_moderation_storage(&self) -> bool
pub fn refunds_moderation_storage(&self) -> bool
Whether this operation frees moderation storage its payer is owed a refund of: the
replacement of a removal record (a restored one, by a fresh deletion), which may leave
it shorter, the approval that closes a team action, which moves the approvals given
before it and the action’s info to the closed actions, and an approval that deletes the
approvals of members who left the team. A batch forfeiting its refunds then keeps its
document operations apart (Drive::apply_drive_operations generation 1).
Source§impl DriveOperation<'_>
impl DriveOperation<'_>
Sourcepub fn credit_mints(operations: &[DriveOperation<'_>]) -> Credits
pub fn credit_mints(operations: &[DriveOperation<'_>]) -> Credits
Sums the credits the batch mints into Platform (its AddToSystemCredits operations,
saturating). This is the gross inflow of the batch — the net rule of the daily
withdrawal limit records it per block, and netting against removals here instead would
let a same-block deposit and withdrawal hide the inflow.
Sourcepub fn merge_balance_writes(operations: Vec<Self>) -> Result<Vec<Self>, Error>
pub fn merge_balance_writes(operations: Vec<Self>) -> Result<Vec<Self>, Error>
Merges every write of one identity balance, of one contract fee pot, and of one prefunded specialized balance, into a single net operation.
Each of these operations computes the new value from the one committed before its batch, and GroveDB keeps only the last write of a key, so two of them in one batch lose the first: a purchase price and a purchase fee leaving the buyer, a contested document’s voting fund and its creation fee, a sale and the action fee of a contract owner who sponsors the gas. Merged, they apply as if in turn. The merged operation takes the place of the first one on its key, and a balance or pot the writes leave as it was gets none. A key written once keeps its operation untouched.
Two other kinds of write compute from the committed value too and are not merged here,
because no batch repeats their keys: the total system credits
(SystemOperationType) and address balances (AddressFundsOperationType). Their
docs say what keeps it so; a change that could repeat one must extend this merge first.
Sourcepub fn refuse_repeated_token_balance_writes(
operations: &[Self],
) -> Result<(), Error>
pub fn refuse_repeated_token_balance_writes( operations: &[Self], ) -> Result<(), Error>
Refuses a batch whose token operations write one identity’s balance of a token, one token’s total supply, or the total one token’s shielded pool holds, more than once.
These writes compute the new value from the one committed before the batch too, but a transfer writes two balances, a mint or a burn a balance and the supply, and a shield or an unshield a balance and the pool total, so they cannot be merged into operations of their own kinds. No state transition makes two of them on one key: a batch carries one transition, and each writes a key at most once. A batch that did would lose all but the last write, so it is refused instead.
Trait Implementations§
Source§impl<'a> Clone for DriveOperation<'a>
impl<'a> Clone for DriveOperation<'a>
Source§fn clone(&self) -> DriveOperation<'a>
fn clone(&self) -> DriveOperation<'a>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'a> Debug for DriveOperation<'a>
impl<'a> Debug for DriveOperation<'a>
Source§impl DriveLowLevelOperationConverter for DriveOperation<'_>
impl DriveLowLevelOperationConverter for DriveOperation<'_>
Source§fn into_low_level_drive_operations(
self,
drive: &Drive,
estimated_costs_only_with_layer_info: &mut Option<HashMap<KeyInfoPath, EstimatedLayerInformation>>,
block_info: &BlockInfo,
transaction: TransactionArg<'_, '_>,
platform_version: &PlatformVersion,
) -> Result<Vec<LowLevelDriveOperation>, Error>
fn into_low_level_drive_operations( self, drive: &Drive, estimated_costs_only_with_layer_info: &mut Option<HashMap<KeyInfoPath, EstimatedLayerInformation>>, block_info: &BlockInfo, transaction: TransactionArg<'_, '_>, platform_version: &PlatformVersion, ) -> Result<Vec<LowLevelDriveOperation>, Error>
Auto Trait Implementations§
impl<'a> Freeze for DriveOperation<'a>
impl<'a> RefUnwindSafe for DriveOperation<'a>
impl<'a> Send for DriveOperation<'a>
impl<'a> Sync for DriveOperation<'a>
impl<'a> Unpin for DriveOperation<'a>
impl<'a> UnsafeUnpin for DriveOperation<'a>
impl<'a> UnwindSafe for DriveOperation<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> CostsExt for T
impl<T> CostsExt for T
§fn wrap_with_cost(self, cost: OperationCost) -> CostContext<Self>where
Self: Sized,
fn wrap_with_cost(self, cost: OperationCost) -> CostContext<Self>where
Self: Sized,
CostContext object with provided costs.§fn wrap_fn_cost(
self,
f: impl FnOnce(&Self) -> OperationCost,
) -> CostContext<Self>where
Self: Sized,
fn wrap_fn_cost(
self,
f: impl FnOnce(&Self) -> OperationCost,
) -> CostContext<Self>where
Self: Sized,
CostContext object with costs computed using the
value getting wrapped.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T, U> IntoOnNetwork<U> for Twhere
U: FromOnNetwork<T>,
impl<T, U> IntoOnNetwork<U> for Twhere
U: FromOnNetwork<T>,
§fn into_on_network(self, network: Network) -> U
fn into_on_network(self, network: Network) -> U
Calls U::from_on_network(self).
§impl<T, U> IntoPlatformVersioned<U> for Twhere
U: FromPlatformVersioned<T>,
impl<T, U> IntoPlatformVersioned<U> for Twhere
U: FromPlatformVersioned<T>,
§fn into_platform_versioned(self, platform_version: &PlatformVersion) -> U
fn into_platform_versioned(self, platform_version: &PlatformVersion) -> U
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.