pub struct ASPNonMembership;Implementations§
Source§impl ASPNonMembership
impl ASPNonMembership
Sourcepub fn __constructor(env: Env, admin: Address) -> Result<(), Error>
pub fn __constructor(env: Env, admin: Address) -> Result<(), Error>
Constructor: initialize the contract with an admin address and an empty tree
Sets up the contract with the specified admin and initializes an empty Sparse Merkle Tree with root = 0. This function can only be called once.
§Arguments
env- The Soroban environmentadmin- Address that will have permission to modify the tree
§Returns
Returns Ok(()) on success
Sourcepub fn update_admin(env: Env, new_admin: Address)
pub fn update_admin(env: Env, new_admin: Address)
Update the admin address
Transfers administrative control to a new address. Requires authorization from the current admin.
§Arguments
env- The Soroban environmentnew_admin- New address that will have permission to modify the tree
Sourcepub fn find_key(env: Env, key: U256) -> Result<FindResult, Error>
pub fn find_key(env: Env, key: U256) -> Result<FindResult, Error>
Find a key in the tree
Public entry point for searching the tree. Returns comprehensive information about the key including whether it exists, its value, and the Merkle path siblings required for proof generation.
§Arguments
env- The Soroban environmentkey- Key to search for in the tree
§Returns
Returns Ok(FindResult) containing whether the key was found, siblings
along the path, and collision information for non-membership proofs,
or an error if database operations fail.
§Errors
Error::KeyNotFound- Database operations failed or invalid node structure
Sourcepub fn insert_leaf(env: Env, key: U256, value: U256) -> Result<(), Error>
pub fn insert_leaf(env: Env, key: U256, value: U256) -> Result<(), Error>
Insert a new key-value pair into the tree
Adds a new leaf to the Sparse Merkle tree, building any missing intermediate nodes. Handles collision cases where a new key shares a path prefix with an existing leaf by extending the tree depth. Requires admin authorization.
§Arguments
env- The Soroban environmentkey- Key to insertvalue- Value to associate with the key
§Returns
Returns Ok(()) on success, emitting a LeafInsertedEvent with the new
root.
§Errors
Error::KeyAlreadyExists- Key already exists in the treeError::KeyNotFound- Database operations failed
Sourcepub fn delete_leaf(env: Env, key: U256) -> Result<(), Error>
pub fn delete_leaf(env: Env, key: U256) -> Result<(), Error>
Delete a key from the tree
Removes a leaf from the Sparse Merkle tree, handling both sparse branches (single child) and mixed branches (two populated children). When a leaf is deleted, its sibling may be promoted to replace the parent node, collapsing the tree structure. Requires admin authorization.
§Arguments
env- The Soroban environmentkey- Key to delete from the tree
§Returns
Returns Ok(()) on success, emitting a LeafDeletedEvent with the new
root.
§Errors
Error::KeyNotFound- Key does not exist in the tree or database operations failed
Sourcepub fn update_leaf(env: Env, key: U256, new_value: U256) -> Result<(), Error>
pub fn update_leaf(env: Env, key: U256, new_value: U256) -> Result<(), Error>
Update a key-value pair in the tree
Changes the value associated with an existing key. Recomputes all nodes along the path from the leaf to the root, removing old nodes and creating new ones. Requires admin authorization.
§Arguments
env- The Soroban environmentkey- Key to updatenew_value- New value to associate with the key
§Returns
Returns Ok(()) on success, emitting a LeafUpdatedEvent with the new
root.
§Errors
Error::KeyNotFound- Key does not exist in the tree or database operations failed
Sourcepub fn verify_non_membership(
env: Env,
key: U256,
siblings: Vec<U256>,
not_found_key: U256,
not_found_value: U256,
) -> Result<bool, Error>
pub fn verify_non_membership( env: Env, key: U256, siblings: Vec<U256>, not_found_key: U256, not_found_value: U256, ) -> Result<bool, Error>
Verify non-membership proof for a key
Verifies that a key is NOT in the tree by checking the provided Merkle proof. The proof includes siblings along the path and collision information (not_found_key/value at the leaf). Reconstructs the root from the proof and compares it with the stored root.
§Arguments
env- The Soroban environmentkey- Key to verify is not in the treesiblings- Sibling hashes along the path from root to leafnot_found_key- Key at the collision point (or queried key if empty path)not_found_value- Value at the collision point (or zero if empty path)
§Returns
Returns Ok(true) if non-membership is verified, Ok(false) if the key
actually exists in the tree.
Source§impl ASPNonMembership
impl ASPNonMembership
Sourcepub const fn spec_xdr___constructor() -> [u8; 444]
pub const fn spec_xdr___constructor() -> [u8; 444]
Constructor: initialize the contract with an admin address and an empty tree
Sets up the contract with the specified admin and initializes an empty Sparse Merkle Tree with root = 0. This function can only be called once.
§Arguments
env- The Soroban environmentadmin- Address that will have permission to modify the tree
§Returns
Returns Ok(()) on success
Source§impl ASPNonMembership
impl ASPNonMembership
Sourcepub const fn spec_xdr_update_admin() -> [u8; 300]
pub const fn spec_xdr_update_admin() -> [u8; 300]
Update the admin address
Transfers administrative control to a new address. Requires authorization from the current admin.
§Arguments
env- The Soroban environmentnew_admin- New address that will have permission to modify the tree
Source§impl ASPNonMembership
impl ASPNonMembership
Sourcepub const fn spec_xdr_find_key() -> [u8; 660]
pub const fn spec_xdr_find_key() -> [u8; 660]
Find a key in the tree
Public entry point for searching the tree. Returns comprehensive information about the key including whether it exists, its value, and the Merkle path siblings required for proof generation.
§Arguments
env- The Soroban environmentkey- Key to search for in the tree
§Returns
Returns Ok(FindResult) containing whether the key was found, siblings
along the path, and collision information for non-membership proofs,
or an error if database operations fail.
§Errors
Error::KeyNotFound- Database operations failed or invalid node structure
Source§impl ASPNonMembership
impl ASPNonMembership
Sourcepub const fn spec_xdr_insert_leaf() -> [u8; 680]
pub const fn spec_xdr_insert_leaf() -> [u8; 680]
Insert a new key-value pair into the tree
Adds a new leaf to the Sparse Merkle tree, building any missing intermediate nodes. Handles collision cases where a new key shares a path prefix with an existing leaf by extending the tree depth. Requires admin authorization.
§Arguments
env- The Soroban environmentkey- Key to insertvalue- Value to associate with the key
§Returns
Returns Ok(()) on success, emitting a LeafInsertedEvent with the new
root.
§Errors
Error::KeyAlreadyExists- Key already exists in the treeError::KeyNotFound- Database operations failed
Source§impl ASPNonMembership
impl ASPNonMembership
Sourcepub const fn spec_xdr_delete_leaf() -> [u8; 636]
pub const fn spec_xdr_delete_leaf() -> [u8; 636]
Delete a key from the tree
Removes a leaf from the Sparse Merkle tree, handling both sparse branches (single child) and mixed branches (two populated children). When a leaf is deleted, its sibling may be promoted to replace the parent node, collapsing the tree structure. Requires admin authorization.
§Arguments
env- The Soroban environmentkey- Key to delete from the tree
§Returns
Returns Ok(()) on success, emitting a LeafDeletedEvent with the new
root.
§Errors
Error::KeyNotFound- Key does not exist in the tree or database operations failed
Source§impl ASPNonMembership
impl ASPNonMembership
Sourcepub const fn spec_xdr_update_leaf() -> [u8; 620]
pub const fn spec_xdr_update_leaf() -> [u8; 620]
Update a key-value pair in the tree
Changes the value associated with an existing key. Recomputes all nodes along the path from the leaf to the root, removing old nodes and creating new ones. Requires admin authorization.
§Arguments
env- The Soroban environmentkey- Key to updatenew_value- New value to associate with the key
§Returns
Returns Ok(()) on success, emitting a LeafUpdatedEvent with the new
root.
§Errors
Error::KeyNotFound- Key does not exist in the tree or database operations failed
Source§impl ASPNonMembership
impl ASPNonMembership
Sourcepub const fn spec_xdr_verify_non_membership() -> [u8; 868]
pub const fn spec_xdr_verify_non_membership() -> [u8; 868]
Verify non-membership proof for a key
Verifies that a key is NOT in the tree by checking the provided Merkle proof. The proof includes siblings along the path and collision information (not_found_key/value at the leaf). Reconstructs the root from the proof and compares it with the stored root.
§Arguments
env- The Soroban environmentkey- Key to verify is not in the treesiblings- Sibling hashes along the path from root to leafnot_found_key- Key at the collision point (or queried key if empty path)not_found_value- Value at the collision point (or zero if empty path)
§Returns
Returns Ok(true) if non-membership is verified, Ok(false) if the key
actually exists in the tree.
Source§impl ASPNonMembership
impl ASPNonMembership
Sourcepub const fn spec_xdr_get_root() -> [u8; 312]
pub const fn spec_xdr_get_root() -> [u8; 312]
Auto Trait Implementations§
impl Freeze for ASPNonMembership
impl RefUnwindSafe for ASPNonMembership
impl Send for ASPNonMembership
impl Sync for ASPNonMembership
impl Unpin for ASPNonMembership
impl UnwindSafe for ASPNonMembership
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<T, U, V, E, C> Compare<(T, U, V)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E> + Compare<U> + Compare<V>,
impl<T, U, V, E, C> Compare<(T, U, V)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E> + Compare<U> + Compare<V>,
§impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W>,
impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W>,
type Error = E
fn compare( &self, a: &(T, U, V, W), b: &(T, U, V, W), ) -> Result<Ordering, <C as Compare<(T, U, V, W)>>::Error>
§impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W> + Compare<X>,
impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for Cwhere
C: Compare<T, Error = E, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W> + Compare<X>,
type Error = E
fn compare( &self, a: &(T, U, V, W, X), b: &(T, U, V, W, X), ) -> Result<Ordering, <C as Compare<(T, U, V, W, X)>>::Error>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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