Skip to main content

VcExternalCommitJoinBuilder

Struct VcExternalCommitJoinBuilder 

Source
pub struct VcExternalCommitJoinBuilder { /* private fields */ }
Available on crate feature virtual-clients-draft and (32-bit or 64-bit) only.
Expand description

Builder for bootstrapping a virtual client’s sibling emulator client into a higher-level group by processing another sibling’s external commit, when this client is not yet a member of that group.

The first emulator client joined the higher-level group via an external commit. A second emulator client (this one), sharing the same emulation epoch, reconstructs the resulting group state from that commit.

The join happens in two steps. Self::process_commit rebuilds the prior-epoch group and verifies the commit, returning a StagedVcExternalCommitJoin. The application inspects the verified proposals it exposes, resolves any AppDataUpdate proposals, and completes the join with StagedVcExternalCommitJoin::into_group.

Implementations§

Source§

impl VcExternalCommitJoinBuilder

Source

pub fn new() -> Self

Creates a new VcExternalCommitJoinBuilder with default values.

Source

pub fn with_config(self, join_config: MlsGroupJoinConfig) -> Self

Specifies the configuration to use for the joined group.

Source

pub fn with_ratchet_tree(self, ratchet_tree: RatchetTreeIn) -> Self

Specifies the prior-epoch ratchet tree. This is only used if the ratchet tree is not provided in the VerifiableGroupInfo extensions. A ratchet tree must be provided, either in the VerifiableGroupInfo extensions or via this method.

Source

pub fn skip_lifetime_validation(self) -> Self

Skip the validation of lifetimes in leaf nodes in the ratchet tree. Note that only the leaf nodes are checked that were never updated.

By default they are validated.

Source

pub fn process_commit<Provider: OpenMlsProvider>( self, provider: &Provider, verifiable_group_info: VerifiableGroupInfo, external_commit: impl Into<ProtocolMessage>, epoch_id: EpochId, ) -> Result<StagedVcExternalCommitJoin, VcExternalCommitJoinError<Provider::StorageError>>

Rebuilds the higher-level group at the epoch before the external commit from verifiable_group_info (and the ratchet tree, taken from the GroupInfo’s ratchet_tree extension or Self::with_ratchet_tree), and verifies external_commit against it: the GroupInfo signature and tree, the commit’s signature and external-commit shape, and that the commit’s derivation info references the shared emulation epoch epoch_id.

Nothing is consumed or persisted at this point. Dropping the returned StagedVcExternalCommitJoin discards the join without advancing the shared operation secret tree.

Trait Implementations§

Source§

impl Debug for VcExternalCommitJoinBuilder

Source§

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

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

impl Default for VcExternalCommitJoinBuilder

Source§

fn default() -> VcExternalCommitJoinBuilder

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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
§

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
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
§

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

§

fn vzip(self) -> V