Skip to main content

SsaPseudonymEntry

Struct SsaPseudonymEntry 

Source
struct SsaPseudonymEntry<S: PixSpec> {
    ssa_index: SsaIndex,
    poly_queue: VecDeque<IndexedPolynomial<S>>,
    retained_commitments: VecDeque<RetainedCommitment<S>>,
    cursor: usize,
    highest_emitted: Option<SsaIndex>,
    front_run: usize,
    front_emitted: u64,
}

Fields§

§ssa_index: SsaIndex§poly_queue: VecDeque<IndexedPolynomial<S>>§retained_commitments: VecDeque<RetainedCommitment<S>>

Commitment material of the cycles most recently committed for this pseudonym, oldest first.

Bounded by MAX_RETAINED_COMMITMENT_CYCLES and by nothing else — in particular not by emission, which is not a proxy for the peer’s need: the peer completes a cycle out of the shares it has already buffered and the commitment it is still missing, on its own deadline, whether or not the polynomials that produced those shares are still queued here. Releasing on drain would take the material away exactly where the repair is worth most, since a fully emitted cycle is one whose every share has gone out and whose only missing piece is the one a dropped packet took.

§cursor: usize

Position within the emission window, i.e. into the first SHARE_EMISSION_WINDOW entries of poly_queue.

§highest_emitted: Option<SsaIndex>

Highest SSA index a share has actually been emitted for, None until the first one goes out.

Monotone. Equal to the index of the cycle at the front of poly_queue while that cycle is being served, since the window no longer straddles cycle boundaries — see front_run. Kept as its own field rather than derived, because it must survive the front cycle being drained and removed. Read by SsaShareGenerator::emission_progress.

§front_run: usize

Polynomials of the front cycle still in poly_queue, or 0 when that cycle is drained and the next one has yet to be picked up.

This is what confines the emission window to a single cycle. Refreshed lazily in EntryShareGenerator::next_share rather than at commit time: removals only ever touch the front cycle, so when it hits 0 the new front cycle is necessarily untouched and its run is a full polynomials_per_ssa — which holds whether or not further cycles were committed in the meantime.

§front_emitted: u64

Shares emitted so far for the cycle currently at the front of poly_queue.

Reset in lockstep with front_run, so it measures the front cycle only. Where highest_emitted says which cycle is being served, this says how far into it — and the difference is the whole admission decision: highest_emitted reaches the last committed index on that cycle’s very first share, which is 0 % of the way through the batch, not the ~85 % at which a conforming Exit asks for the next one.

Auto Trait Implementations§

§

impl<S> Freeze for SsaPseudonymEntry<S>

§

impl<S> RefUnwindSafe for SsaPseudonymEntry<S>
where <<S as PixSpec>::Curve as CurveArithmetic>::ProjectivePoint: RefUnwindSafe, <<<S as PixSpec>::Curve as CurveArithmetic>::ProjectivePoint as GroupEncoding>::Repr: RefUnwindSafe, <S as PixSpec>::Pseudonym: RefUnwindSafe, <<<S as PixSpec>::Curve as Curve>::FieldBytesSize as ArraySize>::ArrayType<u8>: RefUnwindSafe, <<S as PixSpec>::Curve as CurveArithmetic>::Scalar: RefUnwindSafe,

§

impl<S> Send for SsaPseudonymEntry<S>

§

impl<S> Sync for SsaPseudonymEntry<S>

§

impl<S> Unpin for SsaPseudonymEntry<S>
where <<S as PixSpec>::Curve as CurveArithmetic>::ProjectivePoint: Unpin, <<<S as PixSpec>::Curve as CurveArithmetic>::ProjectivePoint as GroupEncoding>::Repr: Unpin, <S as PixSpec>::Pseudonym: Unpin, <<<S as PixSpec>::Curve as Curve>::FieldBytesSize as ArraySize>::ArrayType<u8>: Unpin, <<S as PixSpec>::Curve as CurveArithmetic>::Scalar: Unpin,

§

impl<S> UnsafeUnpin for SsaPseudonymEntry<S>

§

impl<S> UnwindSafe for SsaPseudonymEntry<S>
where <<S as PixSpec>::Curve as CurveArithmetic>::ProjectivePoint: UnwindSafe, <<<S as PixSpec>::Curve as CurveArithmetic>::ProjectivePoint as GroupEncoding>::Repr: UnwindSafe, <S as PixSpec>::Pseudonym: UnwindSafe, <<<S as PixSpec>::Curve as Curve>::FieldBytesSize as ArraySize>::ArrayType<u8>: UnwindSafe, <<S as PixSpec>::Curve as CurveArithmetic>::Scalar: UnwindSafe,

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.

§

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, 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