pub struct BlockChanges {
pub extractor: String,
pub chain: Chain,
pub block: Block,
pub finalized_block_height: u64,
pub revert: bool,
pub new_tokens: HashMap<Address, 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<Address, 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>, ) -> Self
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: Self) -> Result<Self, MergeError>
pub fn merge_partial(self, other: Self) -> Result<Self, 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,
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 more