pub struct Any<E: RStorage + Clock + Metrics, K: Array, V: Array, H: CHasher, T: Translator> { /* private fields */ }
Expand description
A key-value ADB based on an MMR over its log of operations, supporting authentication of any value ever associated with a key.
Implementations§
Source§impl<E: RStorage + Clock + Metrics, K: Array, V: Array, H: CHasher, T: Translator> Any<E, K, V, H, T>
impl<E: RStorage + Clock + Metrics, K: Array, V: Array, H: CHasher, T: Translator> Any<E, K, V, H, T>
Sourcepub async fn init(context: E, cfg: Config<T>) -> Result<Self, Error>
pub async fn init(context: E, cfg: Config<T>) -> Result<Self, Error>
Returns any Any
adb initialized from cfg
. Any uncommitted log operations will be
discarded and the state of the db will be as of the last committed operation.
Sourcepub fn op_digest(hasher: &mut Standard<H>, op: &Operation<K, V>) -> H::Digest
pub fn op_digest(hasher: &mut Standard<H>, op: &Operation<K, V>) -> H::Digest
Return a digest of the operation.
Sourcepub async fn get(&self, key: &K) -> Result<Option<V>, Error>
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.
Sourcepub fn op_count(&self) -> u64
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.
Sourcepub fn oldest_retained_loc(&self) -> Option<u64>
pub fn oldest_retained_loc(&self) -> Option<u64>
Return the oldest location that remains readable & provable.
Sourcepub async fn update(&mut self, key: K, value: V) -> Result<UpdateResult, Error>
pub async fn update(&mut self, key: K, value: V) -> Result<UpdateResult, 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
.
Sourcepub async fn delete(&mut self, key: K) -> Result<Option<u64>, Error>
pub async fn delete(&mut self, key: K) -> Result<Option<u64>, 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
. Returns the location of the deleted value for the key (if any).
Sourcepub async fn proof(
&self,
start_loc: u64,
max_ops: u64,
) -> Result<(Proof<H::Digest>, Vec<Operation<K, V>>), Error>
pub async fn proof( &self, start_loc: u64, max_ops: u64, ) -> Result<(Proof<H::Digest>, Vec<Operation<K, V>>), Error>
Generate and return:
- a proof of all operations applied to the db in the range starting at (and including)
location
start_loc
, and ending at the first of either:- the last operation performed, or
- the operation
max_ops
from the start.
- the operations corresponding to the leaves in this range.
§Warning
Panics if there are uncommitted operations.
Sourcepub async fn historical_proof(
&self,
size: u64,
start_loc: u64,
max_ops: u64,
) -> Result<(Proof<H::Digest>, Vec<Operation<K, V>>), Error>
pub async fn historical_proof( &self, size: u64, start_loc: u64, max_ops: u64, ) -> Result<(Proof<H::Digest>, Vec<Operation<K, V>>), Error>
Analagous to proof but for a previous database state.
Specifically, the state when the MMR had size
elements.
Sourcepub fn verify_proof(
hasher: &mut Standard<H>,
proof: &Proof<H::Digest>,
start_loc: u64,
ops: &[Operation<K, V>],
root_digest: &H::Digest,
) -> bool
pub fn verify_proof( hasher: &mut Standard<H>, proof: &Proof<H::Digest>, start_loc: u64, ops: &[Operation<K, V>], root_digest: &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.
Sourcepub async fn commit(&mut self) -> Result<(), Error>
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, and prunes those operations below it. Batch operations will be parallelized if a thread pool is provided.
Trait Implementations§
Source§impl<E, K, V, H, T> Resolver for &Any<E, K, V, H, T>
impl<E, K, V, H, T> Resolver for &Any<E, K, V, H, T>
type Digest = <H as Hasher>::Digest
type Key = K
type Value = V
Source§async fn get_operations(
&self,
size: u64,
start_loc: u64,
max_ops: NonZeroU64,
) -> Result<GetOperationsResult<H::Digest, Self::Key, Self::Value>, Error>
async fn get_operations( &self, size: u64, start_loc: u64, max_ops: NonZeroU64, ) -> Result<GetOperationsResult<H::Digest, Self::Key, Self::Value>, Error>
start_loc
in the database, up to max_ops
operations.
Returns the operations and a proof that they were present in the database when it had
size
operations.Auto Trait Implementations§
impl<E, K, V, H, T> Freeze for Any<E, K, V, H, T>
impl<E, K, V, H, T> !RefUnwindSafe for Any<E, K, V, H, T>
impl<E, K, V, H, T> Send for Any<E, K, V, H, T>
impl<E, K, V, H, T> Sync for Any<E, K, V, H, T>
impl<E, K, V, H, T> Unpin for Any<E, K, V, H, T>
impl<E, K, V, H, T> !UnwindSafe for Any<E, K, V, H, T>
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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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