pub struct BlockChanges {
pub extractor: String,
pub chain: Chain,
pub block: Block,
pub finalized_block_height: u64,
pub revert: bool,
pub new_tokens: HashMap<Bytes, Token>,
pub txs_with_update: Vec<TxWithChanges>,
pub block_contract_changes: Vec<TxWithContractChanges>,
pub trace_results: Vec<TracedEntryPoint>,
pub partial_block_index: Option<u32>,
}Fields§
§extractor: String§chain: Chain§block: Block§finalized_block_height: u64§revert: bool§new_tokens: HashMap<Bytes, Token>§txs_with_update: Vec<TxWithChanges>Vec of updates at this block, aggregated by tx and sorted by tx index in ascending order
block_contract_changes: Vec<TxWithContractChanges>§trace_results: Vec<TracedEntryPoint>Required here so that it is part of the reorg buffer and thus inserted into storage once
finalized.
Populated by the DynamicContractIndexer
partial_block_index: Option<u32>The index of the partial block. None if it’s a full block.
Implementations§
Source§impl BlockChanges
impl BlockChanges
pub fn new( extractor: String, chain: Chain, block: Block, finalized_block_height: u64, revert: bool, txs_with_update: Vec<TxWithChanges>, block_contract_changes: Vec<TxWithContractChanges>, ) -> BlockChanges
Sourcepub fn into_aggregated(
self,
db_committed_block_height: Option<u64>,
) -> Result<BlockAggregatedChanges, MergeError>
pub fn into_aggregated( self, db_committed_block_height: Option<u64>, ) -> Result<BlockAggregatedChanges, MergeError>
Aggregates component and account updates.
This function aggregates all protocol updates into a BlockAggregatedChanges object. This
new object should have all individual changes merged into only one final/compacted change
per component and account. This means there is only one state delta and component balance
per component, and one account delta and account balance per account. DCI trace results are
also aggregated into a result per entry point.
Note - all non-protocol specific data in the BlockChanges object are lost during aggregation. This means block_storage_changes is dropped.
§Errors
This returns a MergeError if there was a problem during merge.
pub fn protocol_components(&self) -> Vec<ProtocolComponent>
Sourcepub fn is_partial_block(&self) -> bool
pub fn is_partial_block(&self) -> bool
Returns true if the block is a partial block.
Sourcepub fn set_partial_block_index(&mut self, index: Option<u32>)
pub fn set_partial_block_index(&mut self, index: Option<u32>)
Sets the partial block index.
Sourcepub fn normalize_block_hash(&mut self)
pub fn normalize_block_hash(&mut self)
Sets every transaction’s block_hash in txs_with_update and block_contract_changes
to this block’s hash. Used after merging partials so all txs refer to the same block
(e.g. the final block hash).
Sourcepub fn merge_partial(
self,
other: BlockChanges,
) -> Result<BlockChanges, MergeError>
pub fn merge_partial( self, other: BlockChanges, ) -> Result<BlockChanges, MergeError>
Merges another partial block into this one, preserving later changes.
The partial block with the higher index represents later changes and takes precedence.
Merges new_tokens, txs_with_update (sorted by index), block_contract_changes,
and trace_results. When both blocks have the same token address, the token from the
block with the higher partial index is kept.
Works regardless of merge order: partial_0.merge_partial(partial_1) and
partial_1.merge_partial(partial_0) produce equivalent results.
§Errors
- Non-partial block: Either block is not marked as partial
- Extractor mismatch: Blocks from different extractors
- Chain mismatch: Blocks from different chains
- Block mismatch: Different block numbers (hash may differ for temp vs final partial)
- Revert mismatch: Different revert status
Trait Implementations§
Source§impl BlockScoped for BlockChanges
impl BlockScoped for BlockChanges
Source§impl Clone for BlockChanges
impl Clone for BlockChanges
Source§fn clone(&self) -> BlockChanges
fn clone(&self) -> BlockChanges
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BlockChanges
impl Debug for BlockChanges
Source§impl DeepSizeOf for BlockChanges
impl DeepSizeOf for BlockChanges
Source§fn deep_size_of_children(&self, context: &mut Context) -> usize
fn deep_size_of_children(&self, context: &mut Context) -> usize
Source§fn deep_size_of(&self) -> usize
fn deep_size_of(&self) -> usize
Source§impl Default for BlockChanges
impl Default for BlockChanges
Source§fn default() -> BlockChanges
fn default() -> BlockChanges
Source§impl PartialEq for BlockChanges
impl PartialEq for BlockChanges
Source§fn eq(&self, other: &BlockChanges) -> bool
fn eq(&self, other: &BlockChanges) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for BlockChanges
Auto Trait Implementations§
impl !Freeze for BlockChanges
impl RefUnwindSafe for BlockChanges
impl Send for BlockChanges
impl Sync for BlockChanges
impl Unpin for BlockChanges
impl UnsafeUnpin for BlockChanges
impl UnwindSafe for BlockChanges
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§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 moreSource§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 moreSource§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
Source§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
Source§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.Source§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.Source§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.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.