Coder Social home page Coder Social logo

eth-hd-wallet's Introduction

eth-hd-wallet

Build Status NPM module

Features:

  • Lightweight, works in Node.js and browsers
  • Supports custom-generated mnemonics
  • Batch-generate addresses in iterations
  • Sign transactions and data
  • Recover signer public key
  • Comprehensive test coverage

Installation

npm install eth-hd-wallet

Or if using Yarn (we recommend this):

yarn add eth-hd-wallet

API

(static) fromMnemonic(): Generate wallet from mnemonic

const { generateMnemonic, EthHdWallet } = require('eth-hd-wallet')

const wallet = EthHdWallet.fromMnemonic(generateMnemonic())

console.log( wallet instanceof EthHdWallet ); /* true */
*/

generateAddresses(): Generating addresses

// generate 2 addresses
console.log( wallet.generateAddresses(2) )

/*
[
  '0xd7c0cd9e7d2701c710d64fc492c7086679bdf7b4',
  '0x1acfb961c5a8268eac8e09d6241a26cbeff42241',
]
*/

discardAddresses(): Discarding addresses

// generate 5 addresses
wallet.generateAddresses(5)
// discard the last 2 (leaving just the first 3)
console.log( wallet.discardAddresses(2) )

/*
[
  '0xd7c0cd9e7d2701c710d64fc492c7086679bdf7b4',
  '0x1acfb961c5a8268eac8e09d6241a26cbeff42241',
]
*/

Note: the next time you run generateAddresses() it will again generate those discarded addresses.

getAddresses(): Get all generated addresses

wallet.generateAddresses(2)
wallet.generateAddresses(3)

// get all addresses
console.log( wallet.getAddresses() )

/*
[
  '0xd7c0cd9e7d2701c710d64fc492c7086679bdf7b4',
  '0x1acfb961c5a8268eac8e09d6241a26cbeff42241',
  '0xabc2bca51709b8615147352c62420f547a63a00c',
  '0x26042cb13cc4140a281c0fcc7464074c5e9fd0b4',
  '0x5d0d1a012a3ab2b3424c2023246d8c834bf599d9'
]
*/

hasAddress(): Check if given address exists in current list of generated addresses

wallet.generateAddresses(2)
wallet.generateAddresses(3)

/*
[
  '0xd7c0cd9e7d2701c710d64fc492c7086679bdf7b4',
  '0x1acfb961c5a8268eac8e09d6241a26cbeff42241',
  '0xabc2bca51709b8615147352c62420f547a63a00c',
  '0x26042cb13cc4140a281c0fcc7464074c5e9fd0b4',
  '0x5d0d1a012a3ab2b3424c2023246d8c834bf599d9'
]
*/

wallet.hasAddress('0x1efd1a012a3ab2b3424c2023246d8c834bf58723') /* false */
wallet.hasAddress('0x26042cb13cc4140a281c0fcc7464074c5e9fd0b4') /* true */

getAddressCount(): Get no. of addresses

wallet.generateAddresses(2)
wallet.generateAddresses(3)

console.log( wallet.getAddressCount() ) /* 5 */

signTransaction(): Sign a transaction

const rawTx = wallet.signTransaction({
  from: '0x...',
  to: '0x...',
  value: 200000000000000000,
  nonce: 0x0,
  gasPrice: 50000000000,
  gasLimit: 21000,
  chainId: 1 /* see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md */
})

console.log( rawTx ) /* "0x...." */

web3.eth.sendRawTransaction(rawTx, (err) => { ... })

sign(): Sign data

const signature = wallet.sign({
  address: '0x...',
  data: '...'
})

console.log( signature ) /* "0x...." */

recoverSignerPublicKey(): Recover public key (address) of signer

const address = '0x...'
const data = '...'

const signature = wallet.sign({ address, data })

const publicKey = wallet.recoverSignerPublicKey({ signature, data })

console.log( publicKey ) /* will be same as "address" */

getPrivateKey(): Get private key of address

const [ address ] = wallet.generateAddresses(1)

const privateKey = wallet.getPrivateKey(address)

console.log( privateKey.toString('hex') ) /* "123FA..." */

Developing

Ensure you have geth installed and available in your PATH.

  • To run tests: yarn test
  • Tests with coverage: yarn test:coverage
  • Tests with watcher: yarn test:watch
  • Linter: yarn lint
  • Build dist/: yarn build

Note: If you've never installed geth before then make sure you run geth makedag 0 ~/.ethash to generate the DAG needed for mining, otherwise the tests will timeout.

Acknowledgements

Inspired by code from the following great projects:

References

License

MIT - see LICENSE.md

eth-hd-wallet's People

Contributors

hiddentao avatar animo2233 avatar

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.