Skip to main content

SsaServerCommitmentMessage

Struct SsaServerCommitmentMessage 

Source
pub struct SsaServerCommitmentMessage<I, G, D> {
    pub session_id: I,
    pub params: u32,
    pub deposit_data: HashMap<SsaIndex, D>,
    pub commitments: BTreeMap<SsaIndex, G>,
    pub missing: BTreeMap<SsaIndex, Vec<PolynomialRun>>,
}
Expand description

Sent by the Server either to deliver the commitment to new Session Stealth Addresses (SSAs), or to ask for the parts of an earlier commitment it never received.

The first kind is typically sent right after the StartEstablished message if PIX capabilities are indicated in the StartInitiation message and the Server accepts it, and then again every time the Server needs the next batch of SSAs (with indices strictly greater than in the last batch) to be committed to.

The second kind exists because the Client’s answer to the first is not one message but hundreds, and the Server can use none of it until every one of them has landed. It names the gaps in missing and asks for nothing new; see there.

Exactly one of commitments and missing is populated, which is what makes the two kinds impossible to confuse — Self::new and Self::recommit each build one of them, and both encoding and decoding refuse a message that is neither.

Fields§

§session_id: I

Session ID.

§params: u32

Parameters of the PIX protocol the server requires, packed by PixParams::to_u32.

§deposit_data: HashMap<SsaIndex, D>

Per-SSA deposit/payment data, carried in CBOR as a single map keyed by the same SsaIndex as commitments.

Empty on a retransmission request: it asks for no new SSA, and the deposit data of the cycles it names was delivered when they were first requested.

§commitments: BTreeMap<SsaIndex, G>

Server’s serialized commitments to the SSAs, ordered by the SSA index.

Empty on a retransmission request — see the type-level documentation.

§missing: BTreeMap<SsaIndex, Vec<PolynomialRun>>

Polynomial-index runs whose commitments the Server never received, per SSA.

Empty on a request for new SSAs. Non-empty makes this a retransmission request: the Server is asking the Client to re-send the commitments it names for cycles it has already committed to, and nothing else. Nothing new is requested, no deposit follows, and the Client must not announce one — the deposit address of a cycle is fixed when it is first committed.

The runs of one SSA are ascending and disjoint, which the decoder enforces: it makes the scope canonical, bounds the indices one request can name at the cycle’s polynomial count, and lets the answer be assembled without deduplicating.

Implementations§

Source§

impl<I, G, D> SsaServerCommitmentMessage<I, G, D>

Source

pub fn new( session_id: I, params: PixParams, commitments: impl IntoIterator<Item = (SsaIndex, G)>, deposit_data: impl IntoIterator<Item = (SsaIndex, D)>, ) -> Self

Convenience constructor for creating a new SsaServerCommitmentMessage.

Source

pub fn recommit( session_id: I, params: PixParams, missing: impl IntoIterator<Item = (SsaIndex, Vec<PolynomialRun>)>, ) -> Self

Asks the Client to re-send the commitments of polynomial runs the Server never received.

A constructor of its own rather than a field to fill in, so the two request kinds cannot be mixed: this one carries no commitments and no deposit data, which is the invariant the codec enforces. params is echoed so the recipient can check the request against what was negotiated, exactly as it does for a request for new SSAs.

The caller is responsible for keeping the runs of each SSA ascending and disjoint, and for naming no more of them than StartProtocol::max_missing_runs allows.

Source

pub fn missing_run_count(&self) -> usize

Total number of polynomial runs this request names, across every SSA.

The wire form is a flat table, so this — not the number of SSAs — is what has to fit a packet.

Source

pub fn dimensions(&self) -> Result<PixParams>

The PIX dimensions this request was made under, and the curve suite they are dimensions of.

Fails if the peer packed values outside the protocol ranges, or named a curve suite that does not exist. The name predates the suite and is kept because the callers read it for the dimensions; the suite rides along because both sides must agree on it too.

Trait Implementations§

Source§

impl<I: Clone, G: Clone, D: Clone> Clone for SsaServerCommitmentMessage<I, G, D>

Source§

fn clone(&self) -> SsaServerCommitmentMessage<I, G, D>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<I: Debug, G: Debug, D: Debug> Debug for SsaServerCommitmentMessage<I, G, D>

Source§

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

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

impl<I: Eq, G: Eq, D: Eq> Eq for SsaServerCommitmentMessage<I, G, D>

Source§

impl<I: PartialEq, G: PartialEq, D: PartialEq> PartialEq for SsaServerCommitmentMessage<I, G, D>

Source§

fn eq(&self, other: &SsaServerCommitmentMessage<I, G, D>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<I: PartialEq, G: PartialEq, D: PartialEq> StructuralPartialEq for SsaServerCommitmentMessage<I, G, D>

Auto Trait Implementations§

§

impl<I, G, D> Freeze for SsaServerCommitmentMessage<I, G, D>
where I: Freeze,

§

impl<I, G, D> RefUnwindSafe for SsaServerCommitmentMessage<I, G, D>

§

impl<I, G, D> Send for SsaServerCommitmentMessage<I, G, D>
where I: Send, G: Send, D: Send,

§

impl<I, G, D> Sync for SsaServerCommitmentMessage<I, G, D>
where I: Sync, G: Sync, D: Sync,

§

impl<I, G, D> Unpin for SsaServerCommitmentMessage<I, G, D>
where I: Unpin, D: Unpin,

§

impl<I, G, D> UnsafeUnpin for SsaServerCommitmentMessage<I, G, D>
where I: UnsafeUnpin,

§

impl<I, G, D> UnwindSafe for SsaServerCommitmentMessage<I, G, D>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

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

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

fn with_current_context(self) -> WithContext<Self>

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

impl<T> Instrument for T

§

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

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

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
§

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> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + 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
§

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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