Nervously Practice Multithreading

    eth-hd-wallet

    0.5.1 • Public • Published

    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

    Install

    npm i eth-hd-wallet

    DownloadsWeekly Downloads

    114

    Version

    0.5.1

    License

    MIT

    Unpacked Size

    17.6 kB

    Total Files

    9

    Last publish

    Collaborators

    • hiddentao