Current

Struct Current 

Source
pub struct Current<E: RStorage + Clock + Metrics, K: Array, V: CodecFixed<Cfg = ()> + Clone, H: CHasher, T: Translator, const N: usize> {
    pub any: Any<E, K, V, H, T>,
    pub status: Bitmap<H, N>,
    /* private fields */
}
Expand description

A key-value ADB based on an MMR over its log of operations, supporting authentication of whether a key ever had a specific value, and whether the key currently has that value.

Note: The generic parameter N is not really generic, and must be manually set to double the size of the hash digest being produced by the hasher. A compile-time assertion is used to prevent any other setting.

Fields§

§any: Any<E, K, V, H, T>

An Any authenticated database that provides the ability to prove whether a key ever had a specific value.

§status: Bitmap<H, N>

The bitmap over the activity status of each operation. Supports augmenting Any proofs in order to further prove whether a key currently has a specific value.

Implementations§

Source§

impl<E: RStorage + Clock + Metrics, K: Array, V: CodecFixed<Cfg = ()> + Clone, H: CHasher, T: Translator, const N: usize> Current<E, K, V, H, T, N>

Source

pub async fn init(context: E, config: Config<T>) -> Result<Self, Error>

Initializes a Current authenticated database from the given config. Leverages parallel Merkleization to initialize the bitmap MMR if a thread pool is provided.

Source

pub fn op_count(&self) -> u64

Get the number of operations that have been applied to this db, including those that are not yet committed.

Source

pub fn inactivity_floor_loc(&self) -> u64

Return the inactivity floor location. Locations prior to this point can be safely pruned.

Source

pub async fn get(&self, key: &K) -> Result<Option<V>, Error>

Get the value of key in the db, or None if it has no value.

Source

pub async fn get_loc(&self, loc: u64) -> Result<Option<V>, Error>

Get the value of the operation with location loc in the db. Returns Error::OperationPruned if loc precedes the oldest retained location. The location is otherwise assumed valid.

Source

pub async fn update(&mut self, key: K, value: V) -> Result<(), Error>

Updates key to have value value. If the key already has this same value, then this is a no-op. The operation is reflected in the snapshot, but will be subject to rollback until the next successful commit.

Source

pub async fn delete(&mut self, key: K) -> Result<(), Error>

Delete key and its value from the db. Deleting a key that already has no value is a no-op. The operation is reflected in the snapshot, but will be subject to rollback until the next successful commit.

Source

pub async fn commit(&mut self) -> Result<(), Error>

Commit any pending operations to the db, ensuring they are persisted to disk & recoverable upon return from this function. Also raises the inactivity floor according to the schedule. Leverages parallel Merkleization of the MMR structures if a thread pool is provided.

Source

pub async fn sync(&mut self) -> Result<(), Error>

Sync data to disk, ensuring clean recovery.

Source

pub async fn prune(&mut self, target_prune_loc: u64) -> Result<(), Error>

Prune all operations prior to target_prune_loc from the db.

§Panic

Panics if target_prune_loc is greater than the inactivity floor.

Source

pub async fn root(&self, hasher: &mut Standard<H>) -> Result<H::Digest, Error>

Return the root of the db.

§Warning

Panics if there are uncommitted operations.

Source

pub async fn range_proof( &self, hasher: &mut H, start_loc: u64, max_ops: NonZeroU64, ) -> Result<(Proof<H::Digest>, Vec<Fixed<K, V>>, Vec<[u8; N]>), Error>

Returns a proof that the specified range of operations are part of the database, along with the operations from the range. A truncated range (from hitting the max) can be detected by looking at the length of the returned operations vector. Also returns the bitmap chunks required to verify the proof.

§Panics

Panics if there are uncommitted operations or if start_loc is invalid.

Source

pub fn verify_range_proof( hasher: &mut Standard<H>, proof: &Proof<H::Digest>, start_loc: u64, ops: &[Fixed<K, V>], chunks: &[[u8; N]], root: &H::Digest, ) -> bool

Return true if the given sequence of ops were applied starting at location start_loc in the log with the provided root.

Source

pub async fn key_value_proof( &self, hasher: &mut H, key: K, ) -> Result<(Proof<H::Digest>, KeyValueProofInfo<K, V, N>), Error>

Generate and return a proof of the current value of key, along with the other KeyValueProofInfo required to verify the proof. Returns KeyNotFound error if the key is not currently assigned any value.

§Warning

Panics if there are uncommitted operations.

Source

pub fn verify_key_value_proof( hasher: &mut H, proof: &Proof<H::Digest>, info: &KeyValueProofInfo<K, V, N>, root: &H::Digest, ) -> bool

Return true if the proof authenticates that key currently has value value in the db with the given root.

Source

pub async fn close(self) -> Result<(), Error>

Close the db. Operations that have not been committed will be lost.

Source

pub async fn destroy(self) -> Result<(), Error>

Destroy the db, removing all data from disk.

Auto Trait Implementations§

§

impl<E, K, V, H, T, const N: usize> Freeze for Current<E, K, V, H, T, N>
where E: Freeze, T: Freeze, H: Freeze, <H as Hasher>::Digest: Freeze, <E as Storage>::Blob: Freeze,

§

impl<E, K, V, H, T, const N: usize> !RefUnwindSafe for Current<E, K, V, H, T, N>

§

impl<E, K, V, H, T, const N: usize> Send for Current<E, K, V, H, T, N>
where T: Send, V: Send, <T as Translator>::Key: Send,

§

impl<E, K, V, H, T, const N: usize> Sync for Current<E, K, V, H, T, N>
where T: Sync, V: Sync, <T as Translator>::Key: Sync,

§

impl<E, K, V, H, T, const N: usize> Unpin for Current<E, K, V, H, T, N>
where E: Unpin, T: Unpin, H: Unpin, <H as Hasher>::Digest: Unpin, <E as Storage>::Blob: Unpin, K: Unpin, V: Unpin, <T as Translator>::Key: Unpin,

§

impl<E, K, V, H, T, const N: usize> !UnwindSafe for Current<E, K, V, H, T, N>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

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

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

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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

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

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,