pub struct ChiaLightClient { /* private fields */ }Expand description
A subscribing Chia wallet-protocol light client over a shared PeerBackend.
Implementations§
Source§impl ChiaLightClient
impl ChiaLightClient
Sourcepub async fn new(backend: Arc<PeerBackend>, request_timeout: Duration) -> Self
pub async fn new(backend: Arc<PeerBackend>, request_timeout: Duration) -> Self
Builds a light client over backend’s pool and starts the drive-loop that keeps its
subscription cache current.
No connection is made here: the pool is already holding sessions, and this client pins one of them the first time it subscribes.
Sourcepub async fn subscribe_coins(
&self,
coin_ids: Vec<Bytes32>,
) -> Result<(), LightClientError>
pub async fn subscribe_coins( &self, coin_ids: Vec<Bytes32>, ) -> Result<(), LightClientError>
Subscribes to coin_ids on the anchor session and seeds the cache with their current state.
Wraps request_coin_state(subscribe = true); future changes stream back via the drive-loop.
Sourcepub async fn subscribe_puzzle_hashes(
&self,
puzzle_hashes: Vec<Bytes32>,
filters: CoinStateFilters,
) -> Result<(), LightClientError>
pub async fn subscribe_puzzle_hashes( &self, puzzle_hashes: Vec<Bytes32>, filters: CoinStateFilters, ) -> Result<(), LightClientError>
Subscribes to every coin paying to puzzle_hashes under filters, seeding the cache.
Wraps request_puzzle_state(subscribe = true) (paging until finished).
Sourcepub async fn submit_spend(
&self,
bundle: SpendBundle,
) -> Result<SubmitOutcome, LightClientError>
pub async fn submit_spend( &self, bundle: SpendBundle, ) -> Result<SubmitOutcome, LightClientError>
Submits bundle to the network, mapping the node’s ack to a typed SubmitOutcome.
This is a WRITE path and is deliberately NOT part of the reads-only ChainSource surface.
Sourcepub async fn peak(&self) -> Option<(u32, Bytes32)>
pub async fn peak(&self) -> Option<(u32, Bytes32)>
The current peak (height, header_hash) as observed on the followed session, if known.
Deliberately the FOLLOWED peer’s peak and not
PeerPool::peak_height, which is the highest
any held peer has claimed. The cache’s coin states come from one session, and the
no-coin-above-the-peak invariant that keeps a confirmation count from underflowing is only
meaningful if the peak came from the same session as the coins.
Sourcepub async fn unsubscribe_coins(
&self,
coin_ids: Vec<Bytes32>,
) -> Result<(), LightClientError>
pub async fn unsubscribe_coins( &self, coin_ids: Vec<Bytes32>, ) -> Result<(), LightClientError>
Removes the subscription to coin_ids and stops tracking them locally.
Sourcepub fn needs_rearm(&self) -> bool
pub fn needs_rearm(&self) -> bool
Whether the followed session has ENDED, so the subscription set is no longer armed anywhere.
A consumer polling this can tell a chain with nothing to say from a stream that stopped talking — the distinction a silent light client otherwise hides.
Sourcepub async fn reconnect(&self) -> Result<(), LightClientError>
pub async fn reconnect(&self) -> Result<(), LightClientError>
Re-anchors on a live pooled session and re-arms the existing subscription set, so a dropped connection recovers without the caller re-subscribing.
Cheaper than its chia-peer ancestor by exactly one dial: the pool is already holding
replacement sessions, so this re-issues subscriptions rather than reconnecting.
Sourcepub async fn as_chain_source_provider(
&self,
handle: Handle,
) -> LightClientProvider
pub async fn as_chain_source_provider( &self, handle: Handle, ) -> LightClientProvider
Exposes the read side as a LightClientProvider for registration in a chain-source
registry.
handle MUST belong to a multi-thread tokio runtime (the sync facade blocks on it).
Call this AFTER subscribing. The descriptor’s ProviderKind is read from the session this
client is actually anchored to, and before the first subscription there is none — so an
early call reports the conservative Custom rather than guessing.
Sourcepub async fn provider_info(&self) -> ProviderInfo
pub async fn provider_info(&self) -> ProviderInfo
The provider descriptor this client registers with.
LocalNode when the answering session was reached from a
configured or co-resident address, Custom when it came from a DNS
introducer. This is what the pool OBSERVED, not what an operator declared — chia-peer
derived the same field from a config flag, so a discovered peer answering a
config.endpoint client was reported as the operator’s own node.
trustless is always false: a light-client answer is one peer’s word. The registry’s
custody view is operator-assigned and fails closed, and this flag is advisory there — it
never grants trust, which is why reporting the origin honestly matters more than the
priority does.
Trait Implementations§
Source§impl Drop for ChiaLightClient
impl Drop for ChiaLightClient
Auto Trait Implementations§
impl !RefUnwindSafe for ChiaLightClient
impl !UnwindSafe for ChiaLightClient
impl Freeze for ChiaLightClient
impl Send for ChiaLightClient
impl Sync for ChiaLightClient
impl Unpin for ChiaLightClient
impl UnsafeUnpin for ChiaLightClient
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.