pub struct DomainClient { /* private fields */ }Expand description
Client to perform actions on a running domain.
The client is cloneable and can be shared across tasks. It provides methods to apply verifiable messages, submit state diffs to the base layer, and generate and submit proofs.
Without running the domain first, actions performed by the client cannot be executed.
Implementations§
Source§impl DomainClient
impl DomainClient
Sourcepub async fn apply(
&self,
messages: Vec<VerifiableWithDiffs>,
) -> Result<(), Error>
pub async fn apply( &self, messages: Vec<VerifiableWithDiffs>, ) -> Result<(), Error>
Apply state diffs to the vaults
Changes to the vaults are visible immediately locally. The resulting state diff is buffered until a call to Self::submit.
§Parameters
messages- The verifiable messages with diffs to be applied
§Returns
Ok(()) if application succeeded, or an Error if it failed
Sourcepub async fn submit(&self) -> Result<Option<HashDigest>, Error>
pub async fn submit(&self) -> Result<Option<HashDigest>, Error>
Submit all diffs that were applied since the last call to the base layer and return the hash of the resulting SDL.
§Returns
Ok(Some(hash))- If diffs were successfully submitted, returns the SDL hashOk(None)- If there were no pending diffs to submitErr(error)- If the submission failed
Sourcepub async fn prove(&self, sdl: HashDigest) -> Result<(), Error>
pub async fn prove(&self, sdl: HashDigest) -> Result<(), Error>
Prove the SDL specified by the hash.
Generates a proof for the SDL with the given hash and only returns once the proof is finished (or fails).
Use Self::prove_with_local_laws_input if you need to provide additional inputs for the local laws.
§Parameters
sdl- The hash of the SDL to generate a proof for
§Returns
Ok(()) if proving succeeded, Error otherwise
Sourcepub async fn prove_with_local_laws_input(
&self,
sdl: HashDigest,
local_laws_input: Vec<u8>,
) -> Result<(), Error>
pub async fn prove_with_local_laws_input( &self, sdl: HashDigest, local_laws_input: Vec<u8>, ) -> Result<(), Error>
Prove the SDL specified by the hash with additional inputs.
Generates a proof for the SDL with the given hash and only returns once the proof is finished (or fails).
§Parameters
sdl- The hash of the SDL to generate a proof forlocal_laws_input- Additional inputs to the configured local laws
§Returns
Ok(()) if proving succeeded, Error otherwise
Sourcepub async fn submit_proof(&self, sdl: HashDigest) -> Result<(), Error>
pub async fn submit_proof(&self, sdl: HashDigest) -> Result<(), Error>
Sourcepub fn updates(&self) -> Receiver<SdlUpdate>
pub fn updates(&self) -> Receiver<SdlUpdate>
Subscribes to a stream of events from the running domain.
Sourcepub async fn apply_prove_submit(
&self,
messages: Vec<VerifiableWithDiffs>,
) -> Result<Option<HashDigest>, Error>
pub async fn apply_prove_submit( &self, messages: Vec<VerifiableWithDiffs>, ) -> Result<Option<HashDigest>, Error>
Shorthand to apply verifiables, submit an SDL, generate and submit a proof
This method combines the following:
- apply to apply verifiables to the vaults
- submit to batch the changes in an SDL and submit it to the base layer
- proving to start proving the SDL
- submit_proof to submit the proof to the base layer
This method does not allow setting additional inputs for the local laws.
§Parameters
messages- The verifiable messages to be applied
§Returns
Ok(Some(hash))- Success, an SDL with this hash was created & provenOk(None)- Success but there were no state changes to submitErr(error)- Any step in the process failed.
Sourcepub async fn submit_domain_agreement(
&self,
new_shard_fee: Planck,
) -> Result<(), Error>
pub async fn submit_domain_agreement( &self, new_shard_fee: Planck, ) -> Result<(), Error>
Submit a Domain Agreement for this domain.
Having an active domain agreement is a prerequisite to submit transactions to the base layer. You can check whether a domain agreement is already active with Self::check_valid_domain_agreement.
Note that after submitting the domain agreement, it still has to be applied on the base layer, before the domain is allowed to send transactions.
§Parameters
new_shard_fee- amount of native token that will be charged to the domain operator keys’s base layer vault for creation of the new shard
§Returns
Ok(())- if the domain agreement was successfully submittedErr(_)- see crate::domain_agreement::Error for error interpretation
Sourcepub async fn check_valid_domain_agreement(&self) -> Result<(), Error>
pub async fn check_valid_domain_agreement(&self) -> Result<(), Error>
Check that there is an active Domain Agreement for this domain.
This method can typically be used as a safe-guard before calling Self::submit or other methods that require an active domain agreement for transactions to be accepted.
§Returns
Ok(())- if there is an active domain agreement for this domainErr(_)- see crate::domain_agreement::Error for interpretation
Sourcepub async fn ensure_domain_agreement(
&self,
new_shard_fee: Planck,
interval: Duration,
timeout: Duration,
) -> Result<(), Error>
pub async fn ensure_domain_agreement( &self, new_shard_fee: Planck, interval: Duration, timeout: Duration, ) -> Result<(), Error>
Ensure that the domain has a valid Domain Agreement.
If no valid Domain Agreement is
found, a new one will be
submitted and awaited up to timeout.
§Parameters
new_shard_fee- amount of native token that will be charged to the domain operator keys’s base layer vault for creation of the new shardinterval- duration between polling for the the domain agreementtimeout- maximal duration to await the new domain agreement
Trait Implementations§
Source§impl Clone for DomainClient
impl Clone for DomainClient
Source§fn clone(&self) -> DomainClient
fn clone(&self) -> DomainClient
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !Freeze for DomainClient
impl !RefUnwindSafe for DomainClient
impl Send for DomainClient
impl Sync for DomainClient
impl Unpin for DomainClient
impl !UnwindSafe for DomainClient
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> 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<F, EF, E> ExtensionOperand<F, EF> for Ewhere
F: Field,
EF: ExtensionField<F>,
E: Any,
impl<F, EF, E> ExtensionOperand<F, EF> for Ewhere
F: Field,
EF: ExtensionField<F>,
E: Any,
fn to_operand(self) -> ExtOperand<F, EF>
§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>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§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.