Skip to main content

PaymentVerifier

Struct PaymentVerifier 

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

Main payment verifier for ant-node.

Uses:

  1. LRU cache for fast lookups of previously verified XorName values
  2. EVM payment verification for new data (always required)
  3. Pool-level cache for merkle batch payments (avoids repeated on-chain queries)

Implementations§

Source§

impl PaymentVerifier

Source

pub fn new(config: PaymentVerifierConfig) -> Self

Create a new payment verifier.

Source

pub fn attach_p2p_node(&self, node: Arc<P2PNode>)

Attach the node’s P2PNode handle so merkle-payment verification can check candidate pub_keys against the DHT’s actual closest peers to the pool midpoint.

Production startup MUST call this once the P2PNode exists. Without it, the closeness check fails CLOSED in release builds (rejects the PUT with a visible error) and fails open in test builds. Idempotent: calling twice replaces the handle.

Source

pub fn check_payment_required(&self, xorname: &XorName) -> PaymentStatus

Check if payment is required for the given XorName.

This is the main entry point for payment verification:

  1. Check LRU cache (fast path)
  2. If not cached, payment is required
§Arguments
  • xorname - The content-addressed name of the data
§Returns
  • PaymentStatus::CachedAsVerified - Found in local cache (previously paid)
  • PaymentStatus::PaymentRequired - Not cached (payment required)
Source

pub async fn verify_payment( &self, xorname: &XorName, payment_proof: Option<&[u8]>, ) -> Result<PaymentStatus>

Verify that a PUT request has valid payment.

This is the complete payment verification flow:

  1. Check if data is in cache (previously paid)
  2. If not, verify the provided payment proof
§Arguments
  • xorname - The content-addressed name of the data
  • payment_proof - Optional payment proof (required if not in cache)
§Returns
  • Ok(PaymentStatus) - Verification succeeded
  • Err(Error::Payment) - No payment and not cached, or payment invalid
§Errors

Returns an error if payment is required but not provided, or if payment is invalid.

Source

pub fn cache_stats(&self) -> CacheStats

Get cache statistics.

Source

pub fn cache_len(&self) -> usize

Get the number of cached entries.

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

Source§

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