fractal_utils::wallet_address

Struct WalletAddress

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

The object representation of a wallet address.

Wallet addresses are structs that act as as an easy manipulation object for wallet addresses. Addresses that come from user input can be verified, and made sure they are correct.

Address can be used as strings or displayed using the Display trait:

use fractal_utils::{WalletAddress, WALLET_ADDRESS_LEN};

let addr = WalletAddress::from_data([0u8; WALLET_ADDRESS_LEN]);
let addr_str = format!("{}", addr);
assert_eq!(addr_str, "fr111111111");

All Fractal wallet addresses start with fr, and then they have a base-58 encoded string representing WALLET_ADDRESS_LEN+2 bytes. The first byte will be 0x00, that the rest bytes until WALLET_ADDRESS_LEN will compose the actual address, while the other two are the checksum. That way addresses coming from user input can be verified:

use std::str::FromStr;
use std::result::Result;
use fractal_utils::{WalletAddress, WALLET_ADDRESS_LEN};

let wallet: Result<WalletAddress, _> = "fr111111111".parse();
assert!(wallet.is_ok());

let wallet: Result<WalletAddress, _> = "fr111111112".parse();
assert!(wallet.is_err());

The checksums are calculated by doing the XOR operation in all the bytes of the wallet address and doing XOR of the checksum’s first byte with the second one for each byte:

let check_addr = [0x00, 0x11, 0x2A, 0x44, 0xCD, 0xFF, 0xE0];
let mut checksum = [0u8; 2];

for b in &check_addr {
    checksum[0] ^= *b;
    checksum[1] ^= checksum[0];
}

assert_eq!(checksum, [0xAD, 0x07]);

Implementations§

Source§

impl WalletAddress

Source

pub fn from_data(addr: [u8; 7]) -> WalletAddress

Creates a new wallet address from raw data.

This should only be used if the raw input data is verified to be correct, ir it could lead o a false address.

It will panic if the address does not start with byte 0x00.

Source

pub fn get_raw(&self) -> &[u8]

Returns the wallet address bytes.

This could be useful to store the bytes in databases where space can be an issue, or where fast search is required. It does not contain checksums nor any other verification mechanism.

Trait Implementations§

Source§

impl Clone for WalletAddress

Source§

fn clone(&self) -> WalletAddress

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for WalletAddress

Source§

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

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

impl Decodable for WalletAddress

Source§

fn decode<__D: Decoder>(d: &mut __D) -> Result<WalletAddress, __D::Error>

Deserialize a value using a Decoder.
Source§

impl Display for WalletAddress

Source§

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

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

impl Encodable for WalletAddress

Source§

fn encode<__S: Encoder>(&self, s: &mut __S) -> Result<(), __S::Error>

Serialize a value using an Encoder.
Source§

impl From<[u8; 7]> for WalletAddress

Source§

fn from(other: [u8; 7]) -> WalletAddress

Converts to this type from the input type.
Source§

impl FromStr for WalletAddress

Source§

type Err = WalletAddressParseError

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<WalletAddress, WalletAddressParseError>

Parses a string s to return a value of this type. Read more
Source§

impl Ord for WalletAddress

Source§

fn cmp(&self, other: &WalletAddress) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for WalletAddress

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for WalletAddress

Source§

fn partial_cmp(&self, other: &WalletAddress) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Copy for WalletAddress

Source§

impl Eq for WalletAddress

Source§

impl StructuralPartialEq for WalletAddress

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, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
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> ToString for T
where T: Display + ?Sized,

Source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
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.