pub struct Mask {
pub inner: Arc<Mutex<MaskImpl>>,
}
Fields§
§inner: Arc<Mutex<MaskImpl>>
Implementations§
Source§impl Mask
impl Mask
pub fn new_root(db: Database<V2>) -> Self
pub fn new_unattached(depth: usize) -> Self
pub fn create(depth: usize) -> Self
pub fn create_with_token_owners(depth: usize) -> Self
pub fn set_token_owners(&mut self)
pub fn unset_token_owners(&mut self)
pub fn make_child(&self) -> Mask
pub fn set_parent( &self, parent: Mask, parent_last_filled: Option<Option<Address>>, ) -> Mask
pub(crate) fn nmasks_to_root(&self) -> usize
pub fn copy(&self) -> Mask
Sourcepub fn register_mask(&self, mask: Mask) -> Mask
pub fn register_mask(&self, mask: Mask) -> Mask
Make mask
a child of self
Sourcepub fn unregister_mask(&self, behavior: UnregisterBehavior) -> Mask
pub fn unregister_mask(&self, behavior: UnregisterBehavior) -> Mask
Detach this mask from its parent
pub(super) fn unregister_mask_impl( &self, behavior: UnregisterBehavior, remove_from_parent: bool, ) -> Mask
pub(super) fn remove_child_uuid(&self, uuid: Uuid) -> Option<Mask>
pub fn is_root(&self) -> bool
pub fn is_attached(&self) -> bool
fn uuid(&self) -> Uuid
pub fn get_parent(&self) -> Option<Mask>
pub fn unset_parent(&self, trigger_detach_signal: bool)
Sourcepub fn remove_and_reparent(&self) -> Option<Mask>
pub fn remove_and_reparent(&self) -> Option<Mask>
// o
// /
// /
// o — o -
// ^ ^
// parent |
// mask o
// children
Removes the attached mask from its parent and attaches the children to the parent instead. Raises an exception if the merkle roots of the mask and the parent are not the same.
Sourcepub fn get_hash(&self, addr: Address) -> Option<Fp>
pub fn get_hash(&self, addr: Address) -> Option<Fp>
get hash from mask, if present, else from its parent
Sourcepub fn commit_and_reparent_to_root(&mut self) -> Option<Mask>
pub fn commit_and_reparent_to_root(&mut self) -> Option<Mask>
commit all the masks from this mask all the way upto the root and return root mask while also detaching all intermediary masks.
Sourcepub fn parent_set_notify(&self, account_index: AccountIndex, account: &Account)
pub fn parent_set_notify(&self, account_index: AccountIndex, account: &Account)
called when parent sets an account; update local state
if the mask’s parent sets an account, we can prune an entry in the mask if the account in the parent is the same in the mask *)
pub fn remove_parent(&self) -> Option<Mask>
pub fn depth(&self) -> u8
pub fn get_cached_hash(&mut self, addr: &Address) -> Option<Fp>
pub fn set_cached_hash_unchecked(&mut self, addr: &Address, hash: Fp)
pub(super) fn set_impl( &mut self, addr: Address, account: Box<Account>, ignore: Option<Uuid>, )
pub(super) fn transfert_hashes(&mut self, hashes: HashesMatrix)
pub(super) fn remove_accounts_without_notif(&mut self, ids: &[AccountId])
pub fn short(&self) -> MaskImplShort
Sourcepub fn validate_inner_hashes(&mut self) -> Result<(), ()>
pub fn validate_inner_hashes(&mut self) -> Result<(), ()>
Validate inner hashes by rehashing everything.
Returns Ok(())
if recalculated hashes matched the existing ones.
Warning: Heavy operation.
Sourcepub fn get_raw_inner_hashes(&self) -> Vec<(u64, Fp)>
pub fn get_raw_inner_hashes(&self) -> Vec<(u64, Fp)>
Returns a vector of tuples of (index, hash) of all the hashes contained in this mask.
Sourcepub fn set_raw_inner_hashes(&self, hashes: Vec<(u64, Fp)>)
pub fn set_raw_inner_hashes(&self, hashes: Vec<(u64, Fp)>)
Sets the contents of this mask’s hash matrix using raw data.
pub fn has_token_owners(&self) -> bool
Sourcepub fn fuzzing_to_root(&self) -> Mask
pub fn fuzzing_to_root(&self) -> Mask
Use for fuzzing only
Trait Implementations§
Source§impl BaseLedger for Mask
impl BaseLedger for Mask
Source§fn fold<B, F>(&self, init: B, fun: F) -> B
fn fold<B, F>(&self, init: B, fun: F) -> B
Source§fn fold_with_ignored_accounts<B, F>(
&self,
ignoreds: HashSet<AccountId>,
init: B,
fun: F,
) -> B
fn fold_with_ignored_accounts<B, F>( &self, ignoreds: HashSet<AccountId>, init: B, fun: F, ) -> B
account_id
s are ledger elements to skip during the fold,
because they’re in a maskSource§fn fold_until<B, F>(&self, init: B, fun: F) -> B
fn fold_until<B, F>(&self, init: B, fun: F) -> B
fun
returns ControlFlow::Stop
Source§fn token_owner(&self, token_id: TokenId) -> Option<AccountId>
fn token_owner(&self, token_id: TokenId) -> Option<AccountId>
Source§fn tokens(&self, public_key: CompressedPubKey) -> HashSet<TokenId>
fn tokens(&self, public_key: CompressedPubKey) -> HashSet<TokenId>
fn location_of_account(&self, account_id: &AccountId) -> Option<Address>
fn location_of_account_batch( &self, account_ids: &[AccountId], ) -> Vec<(AccountId, Option<Address>)>
Source§fn get_or_create_account(
&mut self,
account_id: AccountId,
account: Account,
) -> Result<GetOrCreated, DatabaseError>
fn get_or_create_account( &mut self, account_id: AccountId, account: Account, ) -> Result<GetOrCreated, DatabaseError>
Source§fn last_filled(&self) -> Option<Address>
fn last_filled(&self) -> Option<Address>
fn get_uuid(&self) -> Uuid
Source§fn get_directory(&self) -> Option<PathBuf>
fn get_directory(&self) -> Option<PathBuf>
directory
for ledgers that use a file system, else Nonefn get_account_hash(&mut self, account_index: AccountIndex) -> Option<Fp>
fn get(&self, addr: Address) -> Option<Box<Account>>
fn get_batch(&self, addr: &[Address]) -> Vec<(Address, Option<Box<Account>>)>
fn set(&mut self, addr: Address, account: Box<Account>)
fn set_batch(&mut self, list: &[(Address, Box<Account>)])
fn get_at_index(&self, index: AccountIndex) -> Option<Box<Account>>
fn set_at_index( &mut self, index: AccountIndex, account: Box<Account>, ) -> Result<(), ()>
fn index_of_account(&self, account_id: AccountId) -> Option<AccountIndex>
Source§fn merkle_root(&mut self) -> Fp
fn merkle_root(&mut self) -> Fp
fn merkle_path(&mut self, addr: Address) -> Vec<MerklePath>
fn merkle_path_at_index(&mut self, index: AccountIndex) -> Vec<MerklePath>
fn remove_accounts(&mut self, ids: &[AccountId])
Source§fn detached_signal(&mut self)
fn detached_signal(&mut self)
fn depth(&self) -> u8
fn num_accounts(&self) -> usize
fn merkle_path_at_addr(&mut self, addr: Address) -> Vec<MerklePath>
fn get_inner_hash_at_addr(&mut self, addr: Address) -> Result<Fp, String>
fn set_inner_hash_at_addr(&mut self, addr: Address, hash: Fp) -> Result<(), ()>
fn set_all_accounts_rooted_at( &mut self, addr: Address, accounts: &[Box<Account>], ) -> Result<(), ()>
Source§fn get_all_accounts_rooted_at(
&self,
addr: Address,
) -> Option<Vec<(Address, Box<Account>)>>
fn get_all_accounts_rooted_at( &self, addr: Address, ) -> Option<Vec<(Address, Box<Account>)>>
address
. The accounts are ordered by their addresses.fn make_space_for(&mut self, space: usize)
Source§fn commit(&mut self)
fn commit(&mut self)
LedgerIntf
on masksfn set_batch_accounts(&mut self, list: &[(Address, Box<Account>)])
Source§impl LedgerInterface for Mask
impl LedgerInterface for Mask
type W = ()
type AccountUpdate = AccountUpdateSkeleton<Body>
type Account = Account
type Bool = bool
type InclusionProof = ExistingOrNew<<Mask as LedgerIntf>::Location>
fn empty(depth: usize) -> Self
fn get_account( &self, account_update: &Self::AccountUpdate, _w: &mut Self::W, ) -> Result<(Self::Account, Self::InclusionProof), String>
fn set_account( &mut self, account: (Self::Account, Self::InclusionProof), _w: &mut Self::W, ) -> Result<(), String>
fn check_inclusion( &self, _account: &(Self::Account, Self::InclusionProof), _w: &mut Self::W, )
fn check_account( public_key: &CompressedPubKey, token_id: &TokenId, account: (&Self::Account, &Self::InclusionProof), _w: &mut Self::W, ) -> Result<Self::Bool, String>
fn exists_no_check(self, _w: &mut Self::W) -> Self
fn exists_no_check_on_bool(self, _b: Self::Bool, _w: &mut Self::W) -> Self
Source§impl LedgerIntf for Mask
impl LedgerIntf for Mask
Source§fn get_or_create(
&mut self,
account_id: &AccountId,
) -> Result<(AccountState, Box<Account>, Address), String>
fn get_or_create( &mut self, account_id: &AccountId, ) -> Result<(AccountState, Box<Account>, Address), String>
Source§fn create_new_account(
&mut self,
account_id: AccountId,
account: Account,
) -> Result<(), ()>
fn create_new_account( &mut self, account_id: AccountId, account: Account, ) -> Result<(), ()>
Source§fn create_masked(&self) -> Self
fn create_masked(&self) -> Self
Create a ledger as a mask on top of the existing ledger. Warning: This skips mask registration, for use in transaction logic, where we always have either 0 or 1 masks, and the mask is always either committed or discarded. This function is deliberately not exposed in the public API of this module. This should NOT be used to create a ledger for other purposes.
type Location = Address<NBYTES>
fn get(&self, addr: &Address) -> Option<Box<Account>>
fn location_of_account(&self, account_id: &AccountId) -> Option<Address>
fn set(&mut self, addr: &Address, account: Box<Account>)
fn remove_accounts_exn(&mut self, account_ids: &[AccountId])
fn merkle_root(&mut self) -> Fp
fn empty(depth: usize) -> Self
fn apply_mask(&mut self, mask: Self)
Auto Trait Implementations§
impl Freeze for Mask
impl RefUnwindSafe for Mask
impl Send for Mask
impl Sync for Mask
impl Unpin for Mask
impl UnwindSafe for Mask
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> Conv for T
impl<T> Conv for T
§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>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§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> 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.