Struct Mask

Source
pub struct Mask {
    pub inner: Arc<Mutex<MaskImpl>>,
}

Fields§

§inner: Arc<Mutex<MaskImpl>>

Implementations§

Source§

impl Mask

Source

pub(super) fn with<F, R>(&self, fun: F) -> R
where F: FnOnce(&mut MaskImpl) -> R,

Source§

impl Mask

Source

pub fn new_root(db: Database<V2>) -> Self

Source

pub fn new_unattached(depth: usize) -> Self

Source

pub fn create(depth: usize) -> Self

Source

pub fn create_with_token_owners(depth: usize) -> Self

Source

pub fn set_token_owners(&mut self)

Source

pub fn unset_token_owners(&mut self)

Source

pub fn make_child(&self) -> Mask

Source

pub fn set_parent( &self, parent: Mask, parent_last_filled: Option<Option<Address>>, ) -> Mask

Source

pub(crate) fn nmasks_to_root(&self) -> usize

Source

pub fn copy(&self) -> Mask

Source

pub fn register_mask(&self, mask: Mask) -> Mask

Make mask a child of self

Source

pub fn unregister_mask(&self, behavior: UnregisterBehavior) -> Mask

Detach this mask from its parent

Source

pub(super) fn unregister_mask_impl( &self, behavior: UnregisterBehavior, remove_from_parent: bool, ) -> Mask

Source

pub(super) fn remove_child_uuid(&self, uuid: Uuid) -> Option<Mask>

Source

pub fn is_root(&self) -> bool

Source

pub fn is_attached(&self) -> bool

Source

fn uuid(&self) -> Uuid

Source

pub fn get_parent(&self) -> Option<Mask>

Source

pub fn unset_parent(&self, trigger_detach_signal: bool)

Source

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.

Source

pub fn get_hash(&self, addr: Address) -> Option<Fp>

get hash from mask, if present, else from its parent

Source

pub fn commit(&self)

commit all state to the parent, flush state locally

Source

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.

Source

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 *)

Source

pub fn remove_parent(&self) -> Option<Mask>

Source

pub fn depth(&self) -> u8

Source

pub fn get_cached_hash(&mut self, addr: &Address) -> Option<Fp>

Source

pub fn set_cached_hash_unchecked(&mut self, addr: &Address, hash: Fp)

Source

pub(super) fn set_impl( &mut self, addr: Address, account: Box<Account>, ignore: Option<Uuid>, )

Source

pub(super) fn transfert_hashes(&mut self, hashes: HashesMatrix)

Source

pub(super) fn remove_accounts_without_notif(&mut self, ids: &[AccountId])

Source

pub fn short(&self) -> MaskImplShort

Source

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.

Source

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.

Source

pub fn set_raw_inner_hashes(&self, hashes: Vec<(u64, Fp)>)

Sets the contents of this mask’s hash matrix using raw data.

Source

pub fn has_token_owners(&self) -> bool

Source

pub fn fuzzing_to_root(&self) -> Mask

Use for fuzzing only

Trait Implementations§

Source§

impl BaseLedger for Mask

Source§

fn to_list(&self) -> Vec<Account>

list of accounts in the ledger
Source§

fn iter<F>(&self, fun: F)
where F: FnMut(&Account),

iterate over all indexes and accounts
Source§

fn fold<B, F>(&self, init: B, fun: F) -> B
where F: FnMut(B, &Account) -> B,

fold over accounts in the ledger, passing the Merkle address
Source§

fn fold_with_ignored_accounts<B, F>( &self, ignoreds: HashSet<AccountId>, init: B, fun: F, ) -> B
where F: FnMut(B, &Account) -> B,

the set of account_ids are ledger elements to skip during the fold, because they’re in a mask
Source§

fn fold_until<B, F>(&self, init: B, fun: F) -> B
where F: FnMut(B, &Account) -> ControlFlow<B, B>,

fold until fun returns ControlFlow::Stop
Source§

fn accounts(&self) -> HashSet<AccountId>

set of account ids associated with accounts
Source§

fn token_owner(&self, token_id: TokenId) -> Option<AccountId>

Get the account id that owns a token.
Source§

fn tokens(&self, public_key: CompressedPubKey) -> HashSet<TokenId>

Get all of the tokens for which a public key has accounts.
Source§

fn location_of_account(&self, account_id: &AccountId) -> Option<Address>

Source§

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>

This may return an error if the ledger is full.
Source§

fn close(&self)

the ledger should not be used after calling close
Source§

fn last_filled(&self) -> Option<Address>

for account locations in the ledger, the last (rightmost) filled location
Source§

fn get_uuid(&self) -> Uuid

Source§

fn get_directory(&self) -> Option<PathBuf>

return Some directory for ledgers that use a file system, else None
Source§

fn get_account_hash(&mut self, account_index: AccountIndex) -> Option<Fp>

Source§

fn get(&self, addr: Address) -> Option<Box<Account>>

Source§

fn get_batch(&self, addr: &[Address]) -> Vec<(Address, Option<Box<Account>>)>

Source§

fn set(&mut self, addr: Address, account: Box<Account>)

Source§

fn set_batch(&mut self, list: &[(Address, Box<Account>)])

Source§

fn get_at_index(&self, index: AccountIndex) -> Option<Box<Account>>

Source§

fn set_at_index( &mut self, index: AccountIndex, account: Box<Account>, ) -> Result<(), ()>

Source§

fn index_of_account(&self, account_id: AccountId) -> Option<AccountIndex>

Source§

fn merkle_root(&mut self) -> Fp

meant to be a fast operation: the root hash is stored, rather than calculated dynamically
Source§

fn merkle_path(&mut self, addr: Address) -> Vec<MerklePath>

Source§

fn merkle_path_at_index(&mut self, index: AccountIndex) -> Vec<MerklePath>

Source§

fn remove_accounts(&mut self, ids: &[AccountId])

Source§

fn detached_signal(&mut self)

Triggers when the ledger has been detached and should no longer be accessed.
Source§

fn depth(&self) -> u8

Source§

fn num_accounts(&self) -> usize

Source§

fn merkle_path_at_addr(&mut self, addr: Address) -> Vec<MerklePath>

Source§

fn get_inner_hash_at_addr(&mut self, addr: Address) -> Result<Fp, String>

Source§

fn set_inner_hash_at_addr(&mut self, addr: Address, hash: Fp) -> Result<(), ()>

Source§

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>)>>

Get all of the accounts that are in a subtree of the underlying Merkle tree rooted at address. The accounts are ordered by their addresses.
Source§

fn make_space_for(&mut self, space: usize)

Source§

fn commit(&mut self)

Used on mask only, has no effect with other implementation Required for LedgerIntf on masks
Source§

fn set_batch_accounts(&mut self, list: &[(Address, Box<Account>)])

Source§

impl Clone for Mask

Source§

fn clone(&self) -> Mask

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Mask

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for Mask

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl LedgerInterface for Mask

Source§

type W = ()

Source§

type AccountUpdate = AccountUpdateSkeleton<Body>

Source§

type Account = Account

Source§

type Bool = bool

Source§

type InclusionProof = ExistingOrNew<<Mask as LedgerIntf>::Location>

Source§

fn empty(depth: usize) -> Self

Source§

fn get_account( &self, account_update: &Self::AccountUpdate, _w: &mut Self::W, ) -> Result<(Self::Account, Self::InclusionProof), String>

Source§

fn set_account( &mut self, account: (Self::Account, Self::InclusionProof), _w: &mut Self::W, ) -> Result<(), String>

Source§

fn check_inclusion( &self, _account: &(Self::Account, Self::InclusionProof), _w: &mut Self::W, )

Source§

fn check_account( public_key: &CompressedPubKey, token_id: &TokenId, account: (&Self::Account, &Self::InclusionProof), _w: &mut Self::W, ) -> Result<Self::Bool, String>

Source§

fn exists_no_check(self, _w: &mut Self::W) -> Self

Source§

fn exists_no_check_on_bool(self, _b: Self::Bool, _w: &mut Self::W) -> Self

Source§

impl LedgerIntf for Mask

Source§

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<(), ()>

Source§

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.

Source§

type Location = Address<NBYTES>

Source§

fn get(&self, addr: &Address) -> Option<Box<Account>>

Source§

fn location_of_account(&self, account_id: &AccountId) -> Option<Address>

Source§

fn set(&mut self, addr: &Address, account: Box<Account>)

Source§

fn remove_accounts_exn(&mut self, account_ids: &[AccountId])

Source§

fn merkle_root(&mut self) -> Fp

Source§

fn empty(depth: usize) -> Self

Source§

fn apply_mask(&mut self, mask: Self)

Source§

fn account_locations(&self) -> Vec<Self::Location>

Returns all account locations in this ledger (and its parents if any) Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows 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) -> R
where R: 'a,

Mutably borrows 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> LedgerNonSnark for T
where T: LedgerInterface<W = (), AccountUpdate = AccountUpdateSkeleton<Body>, Account = Account, Bool = bool>,

§

impl<T> MaybeSendSync for T