pub enum SeedMaterial {
Bip39Mnemonic(Bip39Mnemonic),
Seed(Seed),
}
Expand description
Source material used to generate cryptographic keys in a Zcash wallet.
SeedMaterial
represents the fundamental secret data from which a wallet derives
all its cryptographic keys. It can be either a BIP-39 mnemonic phrase (seed words)
or a raw 32-byte seed that predates the BIP-39 standard.
§Zcash Concept Relation
In Zcash wallet systems:
-
BIP-39 Mnemonics: Human-readable seed phrases (typically 12 or 24 words) that encode entropy in a memorable format. These phrases are used to generate HD wallet hierarchical deterministic keys following BIP-32/BIP-44 derivation paths.
-
Pre-BIP39 Seeds: Raw 32-byte seeds from older wallet implementations that predate the BIP-39 standard. These are typically stored as binary data and lack the mnemonic recovery mechanism.
Wallet implementations use this seed material as the root of their key derivation, generating both transparent and shielded keys from this source.
§Data Preservation
During wallet migration, the seed material is the most critical component to preserve:
- Mnemonic Phrases: The complete, unmodified word sequence in the correct order
- Raw Seeds: The exact 32-byte value without any modification
Preserving this data ensures a wallet can be reconstructed with all its derivable keys and addresses intact, providing access to all funds.
§Security Considerations
Seed material is extremely sensitive information that provides complete control over all wallet funds. It must be handled with appropriate security precautions:
- Never transmit unencrypted over networks
- Store encrypted at rest
- Ensure secure memory handling to prevent leaks
§Examples
// Create from a BIP-39 mnemonic phrase
let language = MnemonicLanguage::English;
let mnemonic = SeedMaterial::Bip39Mnemonic(
Bip39Mnemonic::new("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", Some(language))
);
// Create from a pre-BIP39 raw seed
let raw_seed = [0u8; 32];
let seed = Seed::new(raw_seed);
let binary_seed = SeedMaterial::Seed(seed);
Variants§
Bip39Mnemonic(Bip39Mnemonic)
A BIP-39 mnemonic phrase (typically 12 or 24 words) used as a human-readable seed
Seed(Seed)
A raw 32-byte seed predating the BIP-39 standard
Trait Implementations§
Source§impl Clone for SeedMaterial
impl Clone for SeedMaterial
Source§fn clone(&self) -> SeedMaterial
fn clone(&self) -> SeedMaterial
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for SeedMaterial
impl Debug for SeedMaterial
Source§impl Display for SeedMaterial
impl Display for SeedMaterial
Source§impl From<SeedMaterial> for Envelope
impl From<SeedMaterial> for Envelope
Source§fn from(value: SeedMaterial) -> Self
fn from(value: SeedMaterial) -> Self
Source§impl PartialEq for SeedMaterial
impl PartialEq for SeedMaterial
Source§impl TryFrom<Envelope> for SeedMaterial
impl TryFrom<Envelope> for SeedMaterial
impl StructuralPartialEq for SeedMaterial
Auto Trait Implementations§
impl Freeze for SeedMaterial
impl RefUnwindSafe for SeedMaterial
impl Send for SeedMaterial
impl Sync for SeedMaterial
impl Unpin for SeedMaterial
impl UnwindSafe for SeedMaterial
Blanket Implementations§
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> EnvelopeEncodable for T
impl<T> EnvelopeEncodable for T
Source§fn into_envelope(self) -> Envelope
fn into_envelope(self) -> Envelope
Converts the value into an envelope by using its Into<Envelope>
implementation.
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 more