Skip to main content

DerivationStyle

Enum DerivationStyle 

Source
#[non_exhaustive]
pub enum DerivationStyle { Standard, LedgerLive, LedgerLegacy, }
Expand description

Ethereum derivation path styles for different wallet software.

Different hardware and software wallets use different derivation paths even though they all follow BIP-44 principles. This enum provides the most common styles for maximum compatibility.

§Path Specifications (as of 2024)

  • MetaMask/Trezor: Standard BIP-44 m/44'/60'/0'/0/{index}
  • Ledger Live: Account-based m/44'/60'/{index}'/0/0
  • Ledger Legacy: MEW/MyCrypto compatible m/44'/60'/0'/{index}

§Example

use kobe_eth::DerivationStyle;

let style = DerivationStyle::LedgerLive;
assert_eq!(style.path(0), "m/44'/60'/0'/0/0");
assert_eq!(style.path(1), "m/44'/60'/1'/0/0");

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Standard

Standard BIP-44 path used by MetaMask and Trezor.

Path format: m/44'/60'/0'/0/{index}

This is the most widely adopted standard where:

  • Purpose: 44’ (BIP-44)
  • Coin type: 60’ (Ethereum)
  • Account: 0’ (fixed)
  • Change: 0 (external)
  • Address index: variable
§

LedgerLive

Ledger Live derivation path.

Path format: m/44'/60'/{index}'/0/0

Ledger Live treats each index as a separate account:

  • Purpose: 44’ (BIP-44)
  • Coin type: 60’ (Ethereum)
  • Account: variable (hardened)
  • Change: 0 (external)
  • Address index: 0 (fixed)
§

LedgerLegacy

Ledger Legacy derivation path (MEW/MyCrypto compatible).

Path format: m/44'/60'/0'/{index}

Used by older Ledger Chrome app and compatible with MEW/MyCrypto:

  • Purpose: 44’ (BIP-44)
  • Coin type: 60’ (Ethereum)
  • Account: 0’ (fixed)
  • Address index: variable (at 4th level, non-hardened)

Implementations§

Source§

impl DerivationStyle

Source

pub fn path(self, index: u32) -> String

Generate the derivation path string for a given index.

§Arguments
  • index - The address/account index to derive
§Returns

A BIP-32 derivation path string.

Source

pub const fn name(self) -> &'static str

Get the human-readable name of this derivation style.

Source

pub const fn id(self) -> &'static str

Get a short identifier for CLI usage.

Source

pub const fn all() -> &'static [Self]

Get all available derivation styles.

Trait Implementations§

Source§

impl Clone for DerivationStyle

Source§

fn clone(&self) -> DerivationStyle

Returns a duplicate 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 DerivationStyle

Source§

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

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

impl Default for DerivationStyle

Source§

fn default() -> DerivationStyle

Returns the “default value” for a type. Read more
Source§

impl Display for DerivationStyle

Source§

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

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

impl FromStr for DerivationStyle

Source§

type Err = ParseDerivationStyleError

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

fn from_str(s: &str) -> Result<Self, Self::Err>

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

impl Hash for DerivationStyle

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for DerivationStyle

Source§

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

Source§

impl Eq for DerivationStyle

Source§

impl StructuralPartialEq for DerivationStyle

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> 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> Same for T

Source§

type Output = T

Should always be Self
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§

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.