/** * Explain HD Wallets.. * * @_subsection: api/wallet:HD Wallets [hd-wallets] */ import { SigningKey } from "../crypto/index.js"; import { VoidSigner } from "../providers/index.js"; import { BaseWallet } from "./base-wallet.js"; import { Mnemonic } from "./mnemonic.js"; import type { ProgressCallback } from "../crypto/index.js"; import type { Provider } from "../providers/index.js"; import type { BytesLike, Numeric } from "../utils/index.js"; import type { Wordlist } from "../wordlists/index.js"; /** * The default derivation path for Ethereum HD Nodes. (i.e. ``"m/44'/60'/0'/0/0"``) */ export declare const defaultPath: string; /** * An **HDNodeWallet** is a [[Signer]] backed by the private key derived * from an HD Node using the [[link-bip-32]] stantard. * * An HD Node forms a hierarchal structure with each HD Node having a * private key and the ability to derive child HD Nodes, defined by * a path indicating the index of each child. */ export declare class HDNodeWallet extends BaseWallet { #private; /** * The compressed public key. */ readonly publicKey: string; /** * The fingerprint. * * A fingerprint allows quick qay to detect parent and child nodes, * but developers should be prepared to deal with collisions as it * is only 4 bytes. */ readonly fingerprint: string; /** * The parent fingerprint. */ readonly parentFingerprint: string; /** * The mnemonic used to create this HD Node, if available. * * Sources such as extended keys do not encode the mnemonic, in * which case this will be ``null``. */ readonly mnemonic: null | Mnemonic; /** * The chaincode, which is effectively a public key used * to derive children. */ readonly chainCode: string; /** * The derivation path of this wallet. * * Since extended keys do not provider full path details, this * may be ``null``, if instantiated from a source that does not * enocde it. */ readonly path: null | string; /** * The child index of this wallet. Values over ``2 *\* 31`` indicate * the node is hardened. */ readonly index: number; /** * The depth of this wallet, which is the number of components * in its path. */ readonly depth: number; /** * @private */ constructor(guard: any, signingKey: SigningKey, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, mnemonic: null | Mnemonic, provider: null | Provider); connect(provider: null | Provider): HDNodeWallet; /** * Resolves to a [JSON Keystore Wallet](json-wallets) encrypted with * %%password%%. * * If %%progressCallback%% is specified, it will receive periodic * updates as the encryption process progreses. */ encrypt(password: Uint8Array | string, progressCallback?: ProgressCallback): Promise; /** * Returns a [JSON Keystore Wallet](json-wallets) encryped with * %%password%%. * * It is preferred to use the [async version](encrypt) instead, * which allows a [[ProgressCallback]] to keep the user informed. * * This method will block the event loop (freezing all UI) until * it is complete, which may be a non-trivial duration. */ encryptSync(password: Uint8Array | string): string; /** * The extended key. * * This key will begin with the prefix ``xpriv`` and can be used to * reconstruct this HD Node to derive its children. */ get extendedKey(): string; /** * Returns true if this wallet has a path, providing a Type Guard * that the path is non-null. */ hasPath(): this is { path: string; }; /** * Returns a neutered HD Node, which removes the private details * of an HD Node. * * A neutered node has no private key, but can be used to derive * child addresses and other public data about the HD Node. */ neuter(): HDNodeVoidWallet; /** * Return the child for %%index%%. */ deriveChild(_index: Numeric): HDNodeWallet; /** * Return the HDNode for %%path%% from this node. */ derivePath(path: string): HDNodeWallet; /** * Creates a new HD Node from %%extendedKey%%. * * If the %%extendedKey%% will either have a prefix or ``xpub`` or * ``xpriv``, returning a neutered HD Node ([[HDNodeVoidWallet]]) * or full HD Node ([[HDNodeWallet) respectively. */ static fromExtendedKey(extendedKey: string): HDNodeWallet | HDNodeVoidWallet; /** * Creates a new random HDNode. */ static createRandom(password?: string, path?: string, wordlist?: Wordlist): HDNodeWallet; /** * Create am HD Node from %%mnemonic%%. */ static fromMnemonic(mnemonic: Mnemonic, path?: string): HDNodeWallet; /** * Creates an HD Node from a mnemonic %%phrase%%. */ static fromPhrase(phrase: string, password?: string, path?: string, wordlist?: Wordlist): HDNodeWallet; /** * Creates an HD Node from a %%seed%%. */ static fromSeed(seed: BytesLike): HDNodeWallet; } /** * A **HDNodeVoidWallet** cannot sign, but provides access to * the children nodes of a [[link-bip-32]] HD wallet addresses. * * The can be created by using an extended ``xpub`` key to * [[HDNodeWallet_fromExtendedKey]] or by * [nuetering](HDNodeWallet-neuter) a [[HDNodeWallet]]. */ export declare class HDNodeVoidWallet extends VoidSigner { /** * The compressed public key. */ readonly publicKey: string; /** * The fingerprint. * * A fingerprint allows quick qay to detect parent and child nodes, * but developers should be prepared to deal with collisions as it * is only 4 bytes. */ readonly fingerprint: string; /** * The parent node fingerprint. */ readonly parentFingerprint: string; /** * The chaincode, which is effectively a public key used * to derive children. */ readonly chainCode: string; /** * The derivation path of this wallet. * * Since extended keys do not provider full path details, this * may be ``null``, if instantiated from a source that does not * enocde it. */ readonly path: null | string; /** * The child index of this wallet. Values over ``2 *\* 31`` indicate * the node is hardened. */ readonly index: number; /** * The depth of this wallet, which is the number of components * in its path. */ readonly depth: number; /** * @private */ constructor(guard: any, address: string, publicKey: string, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, provider: null | Provider); connect(provider: null | Provider): HDNodeVoidWallet; /** * The extended key. * * This key will begin with the prefix ``xpub`` and can be used to * reconstruct this neutered key to derive its children addresses. */ get extendedKey(): string; /** * Returns true if this wallet has a path, providing a Type Guard * that the path is non-null. */ hasPath(): this is { path: string; }; /** * Return the child for %%index%%. */ deriveChild(_index: Numeric): HDNodeVoidWallet; /** * Return the signer for %%path%% from this node. */ derivePath(path: string): HDNodeVoidWallet; } /** * Returns the [[link-bip-32]] path for the acount at %%index%%. * * This is the pattern used by wallets like Ledger. * * There is also an [alternate pattern](getIndexedAccountPath) used by * some software. */ export declare function getAccountPath(_index: Numeric): string; /** * Returns the path using an alternative pattern for deriving accounts, * at %%index%%. * * This derivation path uses the //index// component rather than the * //account// component to derive sequential accounts. * * This is the pattern used by wallets like MetaMask. */ export declare function getIndexedAccountPath(_index: Numeric): string;