Skip to main content

WalletWatchParams

Struct WalletWatchParams 

Source
pub struct WalletWatchParams {
    pub public_keys: Vec<String>,
}
Expand description

control.wallet.watch params: which PUBLIC keys the node should follow.

§Keys, never puzzle hashes

The node already derives addresses from the public keys it holds in its own custody, through one standard derivation. Enrolling KEYS reuses that exact derivation for a client’s keys too, so the ecosystem has ONE mapping from key to address and a client and a node can never disagree about which addresses a key covers. Enrolling puzzle hashes instead would make every client re-derive independently, and a client whose derivation window is narrower than the node’s would silently under-report the money it owns.

§No key material crosses (§908)

A G1 public key is public. There is deliberately no seed, phrase, private key or signature field here, and there never may be: enrolment tells the node what to WATCH, and watching needs nothing a signature could be produced from.

§Idempotent, so a client can reconcile without asking first

Submitting keys the node already follows is a SUCCESS that changes nothing — see WalletWatchResult. Duplicates WITHIN one request count once. An empty list is accepted and does nothing, because “enrol everything in this (currently empty) set” is a reconciliation a client legitimately performs.

Fields§

§public_keys: Vec<String>

The public keys to enrol: lowercase 96-hex, unprefixed. A 0x prefix is TOLERATED on input and normalized away by Self::validated; it is never emitted.

Implementations§

Source§

impl WalletWatchParams

Source

pub fn validated(self) -> Result<Self, ControlError>

Normalize and check every key, or reject the request as -32602 INVALID_PARAMS.

The whole request is refused when ANY key is malformed — never the well-formed subset. A partial enrolment would leave the node following fewer addresses than the client believes it asked for, and the client’s next balance read would report a shortfall as though the money were not there. One bad key is a malformed REQUEST.

Accepts exactly two spellings per key — 96 lowercase hex characters, or the same 96 preceded by 0x. Uppercase, whitespace and every other length are refused, because the contract’s hex wire form is lowercase and unprefixed everywhere else.

Trait Implementations§

Source§

impl Clone for WalletWatchParams

Source§

fn clone(&self) -> WalletWatchParams

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 ControlCall for WalletWatchParams

Source§

const METHOD: ControlMethod = ControlMethod::WalletWatch

The wire method this call invokes.
Source§

type Output = WalletWatchResult

The typed result this call returns on success.
Source§

impl Debug for WalletWatchParams

Source§

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

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

impl<'de> Deserialize<'de> for WalletWatchParams

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 WalletWatchParams

Source§

impl PartialEq for WalletWatchParams

Source§

fn eq(&self, other: &WalletWatchParams) -> 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 WalletWatchParams

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 WalletWatchParams

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.