Giter VIP home page Giter VIP logo

ethereum-hdwallet's Introduction


logo


ethereum-hdwallet

CLI and Node.js library for Ethereum HD Wallet derivations from mnemonic

License Build Status Coverage Status dependencies Status NPM version

Demo

https://lab.miguelmota.com/ethereum-hdwallet

Install

npm install ethereum-hdwallet

CDN

Available on jsDelivr CDN:

<script src="https://cdn.jsdelivr.net/npm/ethereum-hdwallet@latest/ethereum-hdwallet.js"></script>

Getting started

Creating a new HD wallet from a mnemonic:

const HDWallet = require('ethereum-hdwallet')

const mnemonic = 'tag volcano eight thank tide danger coast health above argue embrace heavy'
const hdwallet = HDWallet.fromMnemonic(mnemonic)
console.log(`0x${hdwallet.derive(`m/44'/60'/0'/0/0`).getAddress().toString('hex')}`) // 0xc49926c4124cee1cba0ea94ea31a6c12318df947

Creating a new HD wallet from a seed:

const seed = Buffer.from('efea201152e37883bdabf10b28fdac9c146f80d2e161a544a7079d2ecc4e65948a0d74e47e924f26bf35aaee72b24eb210386bcb1deda70ded202a2b7d1a8c2e', 'hex')
const hdwallet= HDWallet.fromSeed(seed)
console.log(`0x${hdwallet.derive(`m/44'/60'/0'/0/0`).getAddress().toString('hex')}`) // 0xc49926c4124cee1cba0ea94ea31a6c12318df947

Deriving keys at a HD path:

console.log(hdwallet.derive(`m/44'/60'/0'/0/0`).getPublicKey().toString('hex')) // 6005c86a6718f66221713a77073c41291cc3abbfcd03aa4955e9b2b50dbf7f9b6672dad0d46ade61e382f79888a73ea7899d9419becf1d6c9ec2087c1188fa18
console.log(hdwallet.derive(`m/44'/60'/0'/0/0`).getPublicKey(true).toString('hex')) // 026005c86a6718f66221713a77073c41291cc3abbfcd03aa4955e9b2b50dbf7f9b
console.log(hdwallet.derive(`m/44'/60'/0'/0/0`).getPrivateKey().toString('hex')) // 63e21d10fd50155dbba0e7d3f7431a400b84b4c2ac1ee38872f82448fe3ecfb9
console.log(`0x${hdwallet.derive(`m/44'/60'/0'/0/0`).getAddress().toString('hex')}`) // 0xc49926c4124cee1cba0ea94ea31a6c12318df947

Deriving wallets given account index:

const hdwallet = HDWallet.fromMnemonic(mnemonic)
const mywallet = hdwallet.derive(`m/44'/60'/0'/0`)
console.log(`0x${mywallet.derive(1).getAddress().toString('hex')}`) // 0x8230645ac28a4edd1b0b53e7cd8019744e9dd559
console.log(`0x${mywallet.derive(2).getAddress().toString('hex')}`) // 0x65c150b7ef3b1adbb9cb2b8041c892b15edde05a
console.log(`0x${mywallet.derive(3).getAddress().toString('hex')}`) // 0x1aebbe69459b80d4975259378577bc01d2924cf4
console.log(`0x${mywallet.derive(3).hdpath()}`) // m/44'/60'/0'/0/3

Signing transaction with a wallet:

const hdwallet = HDWallet.fromMnemonic(mnemonic)
const signedRawTx = hdwallet.derive(`m/44'/60'/0'/0/0`).signTransaction({
  to: '0x0000000000000000000000000000000000000000',
  value: '0x0',
  data: '0x0'
})

console.log(`0x${signedRawTx.toString('hex')}`) // 0xf85d80808094000000000000000000000000000000000000000080001ca0de4b34f17bf51d0b783082090c10d133dcc867c7e981c07cda5ddd1e3211f44ca02125dff6879141708899838356bc42df8815220069ce10507ae4ea980791dac4

CLI

Install

npm install ethereum-hdwallet -g

Usage

$ ethereum_hdwallet --help

  Usage
$ ethereum_hdwallet [options]

  Options
    -i, --index Account Index (e.g. 4)
    -c, --columns Columns to display (e.g. address, publickey, privatekey, hdpath)
    -r, --range Account Index Range (e.g 1-100)
    -m, --mnemonic Mnemonic
    -s, --seed Seed in hex format
    -p, --hdpath HD Path

  Examples
    $ ethereum_hdwallet -m "tag volcano eight thank tide danger coast health ab
ove argue embrace heavy" -r 0-10

The default HD path is m/44'/60'/0'/0/.

Examples

Display the address at a particular account index:

$ ethereum_hdwallet -m "tag volcano eight thank tide danger coast health above argue embrace heavy" -i 4

account address
4       0x32f48bf54dbbfce73172e69fe563c130d536cd5f

Display the account address derived from a range of account indexes:

$ ethereum_hdwallet -m "tag volcano eight thank tide danger coast health above argue embrace heavy" -r 5-10

account address
5       0x1c255db352e8b3cc16efd721c61d7b1b5952b2bb
6       0x1a41029aeb54a8c09211539b92b2a3fd92ea8270
7       0x54c0897a1e281b107eee25d4f8eee5f6ae13f9d9
8       0x3d503e7c3799ab9478b6c04623275fdc0ad09b1e
9       0x2d69b45301b9b3e01c4797c7a48bbc7e7f9b355b
10      0x5e611cbdd26f78a4c837759378a7b41caa17b41b

Display the private keys of accounts:

$ ethereum_hdwallet -m "tag volcano eight thank tide danger coast health above argue embrace heavy" -r 5-10 -c privatekey

account private key
5       1a69b812ca32e38bcac5197a63f6c1a1fcb6ac202e524382565cef16f1b3c84c
6       83d5a75675cc8f1be09c7d4189117fe33ee3f09d1f9b5783140f03016a35b132
7       526db1890baf94e82162f17f25ad769eb7f981272d8d99c527ea1af443c2d0cc
8       cae7ce30e8e07507988d43ad8907edea2fd23f848fb1b8522dee53cac43a825f
9       7525a4c5f03fb0b22fd88862e23833d62719b609e32a9264f6e437d56520d375
10      9974334c5b8fc190302e93bc0e233709192f89fb2a7eeaf1d2f877cd3ae24262

Display the HD path of the account:

$ ethereum_hdwallet -m "tag volcano eight thank tide danger coast health above argue embrace heavy" -i 3 -c hdpath

account hd path
3       m/44'/60'/0'/0/3

Use a custom HD path:

$ ethereum_hdwallet -m "tag volcano eight thank tide danger coast health above argue embrace heavy" -p "m/44'/60'/20'/0/0" -r 0-3

account address
0       0xba59f66b853f1acb242bcc57ef188754fc79434b
1       0xbf4cfeb783b913c0ed1710f00e9ae1844d597c86
2       0x62b6ffac78674392e0c30ec042636e22907fbcd2
3       0xce8bf9293cf5c4e9ecb50aa8f9e42adf568ae356

Display multiple columns:

$ ethereum_hdwallet -m "tag volcano eight thank tide danger coast health above argue embrace heavy" -c address,hdpath -r 0-5

account address                                    hd path
0       0xc49926c4124cee1cba0ea94ea31a6c12318df947 m/44'/60'/0'/0/0
1       0x8230645ac28a4edd1b0b53e7cd8019744e9dd559 m/44'/60'/0'/0/1
2       0x65c150b7ef3b1adbb9cb2b8041c892b15edde05a m/44'/60'/0'/0/2
3       0x1aebbe69459b80d4975259378577bc01d2924cf4 m/44'/60'/0'/0/3
4       0x32f48bf54dbbfce73172e69fe563c130d536cd5f m/44'/60'/0'/0/4
5       0x1c255db352e8b3cc16efd721c61d7b1b5952b2bb m/44'/60'/0'/0/5

Pipe mnemonic:

$ echo "tag volcano eight thank tide danger coast health above argue embrace heavy" | ethereum_hdwallet -i 0

account address
0       0xc49926c4124cee1cba0ea94ea31a6c12318df947

Test

npm test

FAQ

  • Q: How do I generate a random mnemonic?

    • A: Use the bip39 library for generating mnemonics.
  • Q: Why is the default HD path 44'/60'/0'/0?

License

MIT

ethereum-hdwallet's People

Contributors

dependabot[bot] avatar miguelmota avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

ethereum-hdwallet's Issues

Invalid public key generate

I have add same example file code and check address and private key generate fine but public key is not correct generate

mnemonic key : tag volcano eight thank tide danger coast health above argue embrace heavy
Address : 0xc49926c4124cee1cba0ea94ea31a6c12318df947
public key : "6005c86a6718f66221713a77073c41291cc3abbfcd03aa4955e9b2b50dbf7f9b6672dad0d46ade61e382f79888a73ea7899d9419becf1d6c9ec2087c1188fa18" this key generate from code and it is wrong key
correct key "0x026005c86a6718f66221713a77073c41291cc3abbfcd03aa4955e9b2b50dbf7f9b"
Screenshot 2022-02-19 193330

can you please help for generate correct public key

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.