Skip to main content

VoucherProgress

Struct VoucherProgress 

Source
pub struct VoucherProgress { /* private fields */ }
Expand description

The lane’s committed voucher watermark, returned by [UpstreamPull::finish] / [UpstreamPull::abort] / [UpstreamPull::progress] and threaded through the test-util stream_fetch_tracked wrapper as an out-param, so the caller can persist what it paid (#852).

A pull runs through a PoolLedger seeded from the lane’s prior cumulative state; this watermark is that ledger read back (VoucherProgress::from_ledger) — so it always holds the absolute cumulative totals of the last presumed-accepted voucher (not per-stream deltas), exactly the (bytes_delivered, amount) pair the buyer-pool lane record expects. Because the copy-back runs on every return path (including the Err/timeout arms), the latest totals survive a mid-stream failure or a paid-but-corrupt delivery.

Implicit acceptance. The watermark tracks vouchers the upstream is presumed to have accepted — continued delivery is acceptance (ADR 005), so a sent voucher advances it and only an explicit VoucherRejected rewinds it.

Read the persistable totals via VoucherProgress::advanced, which yields None when nothing was paid on this stream (so there is nothing to persist).

Implementations§

Source§

impl VoucherProgress

Source

pub fn from_cumulative(cum: Cumulative, prior_amount: U256) -> Self

Build the watermark from a ledger Cumulative plus the lane’s seed amount. advanced is set when the cumulative amount rose past the seed, preserving the “something was paid iff the watermark advanced” contract even when the ledger was shared across concurrent streams.

Public because a caller that owns its ledger persists from it directly rather than through the &mut VoucherProgress out-param — including from a Drop, where nothing can be awaited and PoolLedger::committed is the only readable source (#1145 review).

Source

pub const fn with_rebase_anchor(self, anchor: Option<Cumulative>) -> Self

Attach the watermark the ledger rebased DOWN to and has not persisted yet (PoolLedger::take_unsaved_rebase).

Source

pub const fn rebase_anchor(&self) -> Option<Cumulative>

The watermark to overwrite the lane record with before advancing, when the ledger rebased down to the node’s and no persist has recorded it yet. A monotone advance refuses a lower watermark, so without the overwrite the next run would sign from the anchor the node refused.

Source

pub fn from_ledger(ledger: &PoolLedger, prior_amount: U256) -> Self

The same watermark, read from a live ledger.

Prefer this wherever a ledger is in hand: it reads PoolLedger::settlement rather than a copied-back cumulative, so a voucher left armed by an ambiguous send is still reported as owed.

It also TAKES the ledger’s unsaved rebase anchor, so call it only where the result is persisted: the anchor is handed out once.

Source

pub fn advanced(&self) -> Option<(U256, U256)>

The cumulative (bytes_delivered, amount) to persist via the lane record, or None if nothing new was paid on this stream (nothing to record).

Source

pub const fn totals(&self) -> (U256, U256)

The cumulative (bytes_delivered, amount) this watermark carries, whether or not it advanced past the seed.

Trait Implementations§

Source§

impl Clone for VoucherProgress

Source§

fn clone(&self) -> Self

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 Copy for VoucherProgress

Source§

impl Debug for VoucherProgress

Source§

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

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

impl Default for VoucherProgress

Source§

fn default() -> Self

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
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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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
Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

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
Source§

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
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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

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