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<SdlId>, Error>
pub async fn submit(&self) -> Result<Option<SdlId>, 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(sdl_id))- If diffs were successfully submitted, returns the SDL idOk(None)- If there were no pending diffs to submitErr(error)- If the submission failed
Sourcepub async fn prove(&self, sdl_id: SdlId) -> Result<(), Error>
pub async fn prove(&self, sdl_id: SdlId) -> 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_id- The id 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_id: SdlId,
local_laws_input: Box<dyn Serialize + Send + Sync>,
) -> Result<(), Error>
pub async fn prove_with_local_laws_input( &self, sdl_id: SdlId, local_laws_input: Box<dyn Serialize + Send + Sync>, ) -> 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_id- The id 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 fn updates(&self) -> Receiver<Update>
pub fn updates(&self) -> Receiver<Update>
Subscribes to a stream of events from the running domain.
Sourcepub async fn apply_prove_submit(
&self,
messages: Vec<VerifiableWithDiffs>,
) -> Result<Option<SdlId>, Error>
pub async fn apply_prove_submit( &self, messages: Vec<VerifiableWithDiffs>, ) -> Result<Option<SdlId>, 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(sdl_id))- Success, an SDL with this id 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,
) -> Result<(), Error>
pub async fn ensure_domain_agreement( &self, new_shard_fee: Planck, ) -> 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> 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> 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