Skip to main content

WalletCoinSpendResult

Struct WalletCoinSpendResult 

Source
pub struct WalletCoinSpendResult {
    pub spend: Option<WalletCoinSpend>,
    pub source: Option<WalletReadSource>,
    pub synced: bool,
    pub peak_height: Option<u32>,
}
Expand description

control.wallet.coinSpend — the spend that spent one coin, named by that coin’s id.

§spend: null is an ANSWER with TWO honest causes; an unreachable chain is an ERROR

null means a chain WAS consulted and no spend of that coin exists there — either because the coin is UNSPENT, or because the chain holds no such coin at all. Both are legitimately “there is no spend”, and the contract deliberately does not distinguish them here: a caller that needs to tell them apart asks WalletCoinByIdResult, whose coin: null separates the two.

What null NEVER means is that the node could not answer. That is a catalogued error (WalletNoChainSource / WalletReadFailed / WalletRateLimited). The three-valued distinction is money-critical: a caller following a singleton forward reads “no spend” as this is the current tip and stops walking. Collapsing “could not answer” into it makes a stale coin look like the tip, and a spend built against a superseded singleton is invalid.

§A negative answer requires a view that could have held the spend

spend: null is a VERDICT, and the same rule WalletCoinByIdResult states applies unchanged: a node whose replica is still catching up, or whose index is address-scoped rather than a full chain view, has established only that IT cannot see the spend. Such a node MUST return WalletNoChainSource / WalletReadFailed and MUST NOT answer null.

Fields§

§spend: Option<WalletCoinSpend>

The spend, or null when the consulted chain holds no spend of that coin (see the type docs).

The key MUST be present. null is a verdict here, so an ABSENT key must not decode into one — the same reason WalletCoinByIdResult::coin is required.

§source: Option<WalletReadSource>

Which tier answered, or None from a node too old to disclose it. See WalletReadSource.

§synced: bool

Whether this answer reflects a caught-up view of the tier that ANSWERED, measured against that tier’s own peak — never against the node’s replica or its held peers.

true only when that peak came from the SAME read that produced these figures; a carried-over peak means false.

§peak_height: Option<u32>

The peak height of the tier that ANSWERED, or null when that tier tracks no peak.

It MUST be the height that tier reported in the SAME read that produced the figures, or null.

Trait Implementations§

Source§

impl Clone for WalletCoinSpendResult

Source§

fn clone(&self) -> WalletCoinSpendResult

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 Debug for WalletCoinSpendResult

Source§

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

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

impl<'de> Deserialize<'de> for WalletCoinSpendResult

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for WalletCoinSpendResult

Source§

impl PartialEq for WalletCoinSpendResult

Source§

fn eq(&self, other: &WalletCoinSpendResult) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for WalletCoinSpendResult

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for WalletCoinSpendResult

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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