Skip to main content

Distributor

Struct Distributor 

Source
pub struct Distributor<'a> { /* private fields */ }
Expand description

The Distributor endpoints, reached with FyuzClient::distributor.

The Distributor pays back a share of platform fees every round: most of the pot pro-rata by points, the remainder to one VRF-picked winner. Everything here is a public read of that ledger.

Every *_wei field is an exact decimal string. Lifetime totals run past 2^53, so parsing them into f64 corrupts them silently. See the models docs.

let client = fyuz::FyuzClient::new()?;
let stats = client.distributor().get_stats().await?;
println!("{} wei paid out over {} rounds", stats.total_paid_wei, stats.rounds_settled);

Implementations§

Source§

impl<'a> Distributor<'a>

Source

pub async fn get_stats(&self) -> Result<PayoutStats>

GET /distributor/stats — lifetime payback totals.

let client = fyuz::FyuzClient::new()?;
let stats = client.distributor().get_stats().await?;
// Decimal string, not a number: print it, do not parse it.
println!("largest single payout: {} wei", stats.largest_payout_wei);
Source

pub async fn get_pot(&self) -> Result<Pot>

GET /distributor/pot — the live undistributed pot and the parameters needed to price a point.

Pot::pot_bnb and Pot::total_points are None when the value could not be read. That is unknown, not zero — hide the figure rather than showing 0.

let client = fyuz::FyuzClient::new()?;
let pot = client.distributor().get_pot().await?;
if let (Some(bnb), Some(points)) = (pot.pot_bnb, pot.total_points) {
    println!("{:.6} BNB per point", bnb * pot.distribute_bps / 10_000.0 / points);
}
Source

pub async fn get_shares(&self, params: &SharesParams) -> Result<Shares>

GET /distributor/shares — the share allocation for the current window, plus the exact calldata the round-runner posts on-chain.

use fyuz::SharesParams;

let client = fyuz::FyuzClient::new()?;
let shares = client.distributor().get_shares(&SharesParams::new().limit(50)).await?;
println!("{} holders, calldata {} bytes", shares.holders.len(), shares.packed.len() / 2 - 1);
Source

pub async fn list_rounds( &self, params: &RoundsParams, ) -> Result<Vec<RoundReceipt>>

GET /distributor/rounds — the public payout ledger, newest first.

use fyuz::RoundsParams;

let client = fyuz::FyuzClient::new()?;
for round in client.distributor().list_rounds(&RoundsParams::new().limit(5)).await? {
    // `None` means "not indexed yet", never zero.
    match round.distributed_wei.as_deref() {
        Some(wei) => println!("round {}: {wei} wei", round.round_id),
        None => println!("round {}: pending settlement", round.round_id),
    }
}
Source

pub async fn get_round(&self, id: i64) -> Result<RoundDetail>

GET /distributor/rounds/{id} — one round’s receipt and its recipient list.

The receipt fields are flattened into the top level of the JSON object; in Rust they live under RoundDetail::round.

Answers 404 for an unknown round.

let client = fyuz::FyuzClient::new()?;
let detail = client.distributor().get_round(7).await?;
println!("round {} paid {} wallets", detail.round.round_id, detail.payouts.len());
Source

pub async fn get_payouts(&self, address: &str) -> Result<AddressPayouts>

GET /distributor/payouts/{address} — every payout one wallet has received.

let client = fyuz::FyuzClient::new()?;
let paid = client
    .distributor()
    .get_payouts("0x1111111111111111111111111111111111111111")
    .await?;
println!("{} wei across {} rounds", paid.total_wei, paid.rounds_paid);
Source

pub async fn get_claimable(&self, address: &str) -> Result<Claimable>

GET /distributor/claimable/{address} — wei owed from payout pushes the contract could not complete.

Claimable::claimable_wei is None when the RPC is unreachable or no Distributor is configured. Hide the banner in that case rather than telling someone they are owed nothing.

let client = fyuz::FyuzClient::new()?;
let c = client
    .distributor()
    .get_claimable("0x1111111111111111111111111111111111111111")
    .await?;

match c.claimable_wei.as_deref() {
    Some("0") => println!("nothing pending"),
    Some(wei) => println!("{wei} wei claimable from {:?}", c.distributor_address),
    None => println!("unknown — do not render a zero here"),
}

Trait Implementations§

Source§

impl<'a> Clone for Distributor<'a>

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<'a> Copy for Distributor<'a>

Source§

impl<'a> Debug for Distributor<'a>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for Distributor<'a>

§

impl<'a> !UnwindSafe for Distributor<'a>

§

impl<'a> Freeze for Distributor<'a>

§

impl<'a> Send for Distributor<'a>

§

impl<'a> Sync for Distributor<'a>

§

impl<'a> Unpin for Distributor<'a>

§

impl<'a> UnsafeUnpin for Distributor<'a>

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