Skip to content
On this page

Hierarchical Deterministic (HD) Account โ€‹

A Hierarchical Deterministic (HD) Account is derived from a HD Key and an optional HD path.

It has the ability to sign transactions and messages with the private key derived from the HD Node.

INFO

viem internally uses @scure/bip32, an audited implementation of BIP-32 HD wallets, for hierarchical deterministic (HD) wallet derivation.

Import โ€‹

ts
import { HDKey, hdKeyToAccount } from 'viem/accounts'

Note: viem re-exports HDKey from @scure/bip32.

Usage โ€‹

To initialize a HD Account, you will need to pass a HDKey instance to hdKeyToAccount.

The HDKey instance comes with a few static methods to derive a HD Key:

  • fromMasterSeed
  • fromExtendedKey
  • fromJSON
ts
import { createWalletClient, http } from 'viem'
import { HDKey, hdKeyToAccount } from 'viem/accounts'
import { mainnet } from 'viem/chains'

const hdKey = HDKey.fromMasterSeed(...) 
const hdKey = HDKey.fromExtendedKey(...)
const hdKey = HDKey.fromJSON({ xpriv: ... })

const account = hdKeyToAccount(hdKey) 

const client = createWalletClient({
  account,
  chain: mainnet,
  transport: http(),
})

Parameters โ€‹

mnemonic โ€‹

  • Type: string

The BIP-39 mnemonic phrase.

ts
const account = mnemonicToAccount(
  'legal winner thank year wave sausage worth useful legal winner thank yellow' 
)

options.accountIndex โ€‹

  • Type: number
  • Default: 0

The account index to use in the path ("m/44'/60'/${accountIndex}'/0/0") to derive a private key.

ts
const account = mnemonicToAccount(
  'legal winner thank year wave sausage worth useful legal winner thank yellow',
  {
    accountIndex: 1 
  }
)

options.addressIndex โ€‹

  • Type: number
  • Default: 0

The address index to use in the path ("m/44'/60'/0'/0/${addressIndex}") to derive a private key.

ts
const account = mnemonicToAccount(
  'legal winner thank year wave sausage worth useful legal winner thank yellow',
  {
    accountIndex: 1,
    addressIndex: 6 
  }
)

options.changeIndex โ€‹

  • Type: number
  • Default: 0

The change index to use in the path ("m/44'/60'/0'/${changeIndex}/0") to derive a private key.

ts
const account = mnemonicToAccount(
  'legal winner thank year wave sausage worth useful legal winner thank yellow',
  {
    accountIndex: 1,
    addressIndex: 6,
    changeIndex: 2 
  }
)

options.path โ€‹

  • Type: "m/44'/60'/${string}"

The HD path to use to derive a private key.

ts
const account = mnemonicToAccount(
  'legal winner thank year wave sausage worth useful legal winner thank yellow',
  {
    path: "m/44'/60'/5'/0/2" 
  }
)

Released under the MIT License.