pub struct MerkelizedChain { /* private fields */ }Expand description
Merkelized chain object (Rust analogue of Python SimpleChainObject)
Maintains an append-only chain of SHA256 hashes where each hash is derived from the previous hash. Supports digest-based synchronization for efficient state sync between nodes.
Implementations§
Source§impl MerkelizedChain
impl MerkelizedChain
Sourcepub fn calculate_hash(data: &str) -> String
pub fn calculate_hash(data: &str) -> String
Calculate the SHA256 hash of data (consistent with Python)
Sourcepub fn calculate_next_hash(prev_hash: &str) -> String
pub fn calculate_next_hash(prev_hash: &str) -> String
Calculate what the next hash should be given a previous hash
Sourcepub fn chain_length(&self) -> usize
pub fn chain_length(&self) -> usize
Get the current chain length (including genesis)
Sourcepub fn genesis_hash(&self) -> &str
pub fn genesis_hash(&self) -> &str
Get the genesis hash
Sourcepub fn latest_hash(&self) -> &str
pub fn latest_hash(&self) -> &str
Get the latest (tip) hash
Sourcepub fn is_valid_next_hash(&self, hash: &str) -> bool
pub fn is_valid_next_hash(&self, hash: &str) -> bool
Check if a hash is valid as the next hash in the chain
Sourcepub fn add_next_hash(&mut self) -> String
pub fn add_next_hash(&mut self) -> String
Add a next hash to the chain (returns the new hash)
Sourcepub fn try_add_hash(&mut self, hash: &str) -> bool
pub fn try_add_hash(&mut self, hash: &str) -> bool
Try to add an existing hash to the chain (for sync from peers) Returns true if the hash was added, false if invalid or duplicate
Sourcepub fn find_hash_index(&self, hash: &str) -> Option<usize>
pub fn find_hash_index(&self, hash: &str) -> Option<usize>
Find the index of a hash in the chain
Trait Implementations§
Source§impl ApplicationObject for MerkelizedChain
impl ApplicationObject for MerkelizedChain
Source§fn id(&self) -> &SharedObjectId
fn id(&self) -> &SharedObjectId
Get the object’s unique identifier
Source§fn is_valid<'life0, 'life1, 'async_trait>(
&'life0 self,
message: &'life1 SharedMessage,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn is_valid<'life0, 'life1, 'async_trait>(
&'life0 self,
message: &'life1 SharedMessage,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Validate if a message is valid for this object
Source§fn add_message<'life0, 'async_trait>(
&'life0 mut self,
message: SharedMessage,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn add_message<'life0, 'async_trait>(
&'life0 mut self,
message: SharedMessage,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Add a validated message to the object
Source§fn is_merkleized(&self) -> bool
fn is_merkleized(&self) -> bool
Check if this object supports merkleized synchronization
Source§fn get_latest_digest<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_latest_digest<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get the latest state digest
Source§fn has_digest<'life0, 'life1, 'async_trait>(
&'life0 self,
digest: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn has_digest<'life0, 'life1, 'async_trait>(
&'life0 self,
digest: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Check if object has a specific digest
Source§fn is_valid_digest<'life0, 'life1, 'async_trait>(
&'life0 self,
digest: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn is_valid_digest<'life0, 'life1, 'async_trait>(
&'life0 self,
digest: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Validate if a digest is valid
Source§fn add_digest<'life0, 'async_trait>(
&'life0 mut self,
digest: String,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn add_digest<'life0, 'async_trait>(
&'life0 mut self,
digest: String,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Add a digest to the object
Source§fn gossip_messages<'life0, 'life1, 'async_trait>(
&'life0 self,
digest: Option<&'life1 str>,
) -> Pin<Box<dyn Future<Output = Result<Vec<SharedMessage>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn gossip_messages<'life0, 'life1, 'async_trait>(
&'life0 self,
digest: Option<&'life1 str>,
) -> Pin<Box<dyn Future<Output = Result<Vec<SharedMessage>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Get messages for gossip protocol
Source§fn get_messages_since_digest<'life0, 'life1, 'async_trait>(
&'life0 self,
digest: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<SharedMessage>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_messages_since_digest<'life0, 'life1, 'async_trait>(
&'life0 self,
digest: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<SharedMessage>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Get messages since a specific digest
Source§fn get_state<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Value>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_state<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Value>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get the current state as JSON
Source§fn reset<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn reset<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Reset the object to initial state
Source§fn clone_box(&self) -> Box<dyn ApplicationObject>
fn clone_box(&self) -> Box<dyn ApplicationObject>
Clone the object
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
Get mutable reference as Any for downcasting
Source§impl Clone for MerkelizedChain
impl Clone for MerkelizedChain
Source§fn clone(&self) -> MerkelizedChain
fn clone(&self) -> MerkelizedChain
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for MerkelizedChain
impl Debug for MerkelizedChain
Auto Trait Implementations§
impl Freeze for MerkelizedChain
impl RefUnwindSafe for MerkelizedChain
impl Send for MerkelizedChain
impl Sync for MerkelizedChain
impl Unpin for MerkelizedChain
impl UnsafeUnpin for MerkelizedChain
impl UnwindSafe for MerkelizedChain
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
Mutably borrows from an owned value. Read more