npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

jwallet-web-keystore

v0.7.4

Published

Library for ethereum blockchain accounts management

Downloads

47

Readme

jwallet-web-keystore

Library for ethereum blockchain wallets management.

About

Keystore can hold read only / full access wallets of two types:

  • privateKey / address
  • mnemonic / bip32XPublicKey

Also Keystore API provides several utility methods for working with mnemonics / hashes / passwords.

Get Started

npm install jwallet-web-keystore
const Keystore = require('jwallet-web-keystore')

const keystore = new Keystore(props)

Available npm scripts:

  • lint: check code-style errors
  • test: run mocha tests
  • clean: clean ./lib dir
  • compile: clean, then compile library
  • build: lint & compile & test

Wallet properties

| Property | Type | Description | | -------------------- | ------- | --------------------------------------------------------- | | id | String | Unique ID of wallet | | type | String | Type of wallet (mnemonic / address) | | name | String | Wallet name | | salt | String | Salt for enforcing of password | | address | String | Address of wallet | | customType | String | User-friendly type of wallet | | isReadOnly | Boolean | Read-only flag of wallet | | addressIndex | Number | Current index of address of mnemonic wallet | | derivationPath | String | Derivation path for generating of addresses from mnemonic | | bip32XPublicKey | String | BIP32 Extended Public Key | | encrypted | Object | Container of encrypted data | | encrypted.privateKey | Object | Encrypted private key | | encrypted.mnemonic | Object | Encrypted mnemonic |

Notes:

  • isReadOnly - flag means that wallet can be used only for balance / transactions checking
  • bip32XPublicKey - xpub... key that used for deriving of public keys (addresses)

Public API definitions

See mocha tests for examples of usage.

new Keystore(props)

Instantiates Keystore object with provided props.

Parameters

| Param | Type | Default | Description | | ------------------------------ | ------ | -------------------------- | ----------------------------- | | props | Object | {} | Constructor properties | | props.defaultDerivationPath | String | "m/44'/60'/0'/0" | Default derivation path for new Mnemonic wallets | | props.defaultEncryptionType | String | 'nacl.secretbox' | Default encryption type. Currently nacl.secretbox is only one supported | | props.paddedMnemonicLength | Number | 120 | Mnemonic will be padded left with this size before encryption | | props.saltByteCount | Number | 32 | Count of bytes of generated salt for password strength | | props.scryptParams | Object | { N: 2 ** 18, r: 8, p: 1 } | Scrypt params for key deriving | | props.derivedKeyLength | String | 32 | Derived key length | | props.passwordConfig | Object | {} | Options to test password strength |

Returns

New instance of Keystore class.

Example
const keystore = new Keystore({ defaultDerivationPath: "m/44'/61'/0'/0" })

Instance methods

getWallets()

Returns

Wallets list presented in keystore.

Example
const wallets = keystore.getWallets()

getWallet(walletId)

Parameters

Wallet ID.

Returns

Wallet found by its ID.

Example
const wallet = keystore.getWallet('JHJ23jG^*DGHj667s')

createWallet(props)

Parameters

wallet properties(Wallet properties):

  • type
  • name
  • address
  • mnemonic
  • isReadOnly
  • privateKey
  • derivationPath
  • bip32XPublicKey
Returns

Unique ID of created wallet

Example
const walletId = keystore.createWallet({
  type: 'address',
  name: 'My wallet',
  isReadonly: false,
  password: 'JHJ23jG^*DGHj667s',
  privateKey: '0x8a02a99cc7a801da6996a2dacc406ffa5190dc9c8a02a99cc7a801da6996a2da',
})

removeWallet(walletId)

Parameters

| Param | Type | Description | | -------- | ------ | ------------------- | | walletId | String | Unique ID of wallet |

Returns

Removed wallet data.

Example
const removedWallet = keystore.removeWallet('110ec58a-a0f2-4ac4-8393-c977d813b8d1') // data

removeWallets()

Example
keystore.removeWallets() // ok, wallets were removed

setWalletName(walletId, newName)

Parameters

| Param | Type | Description | | -------- | ------ | ------------------- | | walletId | String | Unique ID of wallet | | newName | String | New wallet name |

Returns

Updated wallet.

Example
const updatedWallet = keystore.setWalletName('110ec58a-a0f2-4ac4-8393-c977d813b8d1', 'New wallet name')

getPrivateKey(password, walletId)

Parameters

| Param | Type | Description | | -------- | ------ | ------------------- | | password | String | Wallet password | | walletId | String | Unique ID of wallet |

Returns

Decrypted private key.

Example
const privateKey = keystore.getPrivateKey('JHJ23jG^*DGHj667s', '110ec58a-a0f2-4ac4-8393-c977d813b8d1')

setDerivationPath(password, walletId, newDerivationPath)

Note: used only for mnemonic wallets.

Parameters

| Param | Type | Description | | ----------------- | ------ | ------------------- | | password | String | Wallet password | | walletId | String | Unique ID of wallet | | newDerivationPath | String | New derivation path |

Note: default derivation path that will be assigned to all new created wallets can be managed by defaultDerivationPath constructor parameter.

Returns

Updated wallet.

Example
const updatedWallet = keystore.setDerivationPath('JHJ23jG^*DGHj667s', '110ec58a-a0f2-4ac4-8393-c977d813b8d1', "m/44'/61'/0'/0")

getMnemonic(password, walletId)

Note: used only for mnemonic wallets.

Parameters

| Param | Type | Description | | -------- | ------ | ------------------- | | password | String | Wallet password | | walletId | String | Unique ID of wallet |

Returns

Decrypted mnemonic.

Example
const mnemonic = keystore.getMnemonic('JHJ23jG^*DGHj667s', '110ec58a-a0f2-4ac4-8393-c977d813b8d1')

getAddressesFromMnemonic(walletId, iteration, limit)

Note: used only for mnemonic wallets.

Parameters

| Param | Type | Description | | --------- | ------ | ------------------------------------------------------------------------ | | walletId | String | Unique ID of wallet | | iteration | Number | Iteration index (aka page for pagination) to generate bunch of addresses | | limit | Number | Count of addresses to generate from mnemonic per one page / iteration |

Returns

List of generated addresses.

Example
const addresses = keystore.getAddressesFromMnemonic('110ec58a-a0f2-4ac4-8393-c977d813b8d1', 3, 10)

getAddress(walletId, addressIndex)

Parameters

| Param | Type | Description | | -------- | ------ | ------------------- | | walletId | String | Unique ID of wallet |

Returns

Current address of wallet.

Example
const address = keystore.getAddress('110ec58a-a0f2-4ac4-8393-c977d813b8d1')

setAddressIndex(walletId, addressIndex)

Note: used only for mnemonic wallets.

Parameters

| Param | Type | Description | | ------------ | ------ | -------------------------------------------------------------- | | walletId | String | Unique ID of wallet | | addressIndex | String | Index of address to derive from mnemonic / bip32XPublicKey |

Returns

Updated wallet.

Example
const updatedWallet = keystore.setAddress('110ec58a-a0f2-4ac4-8393-c977d813b8d1', 5)

serialize()

Returns

Serialized keystore data for backup.

Example
const keystoreSerializedData = keystore.serialize()

deserialize(backupData)

Parameters

| Param | Type | Description | | ---------- | ------ | ------------------------ | | backupData | String | Keystore serialized data |

Example
const backupData = '{"wallets":[{"type":"mnemonic","id":"2e820ddb-a9ce-43e1-b7ec-dbed59eec7e9",...'
keystore.deserialize(backupData)

getDecryptedWallet(password, walletId)

Parameters

| Param | Type | Description | | -------- | ------ | ------------------- | | password | String | Wallet password | | walletId | String | Unique ID of wallet |

Returns

Wallet with decrypted data.

Example
const decryptedWallet = keystore.getDecryptedWallets('JHJ23jG^*DGHj667s', '110ec58a-a0f2-4ac4-8393-c977d813b8d1')

setPassword(password, newPassword, walletId)

Parameters

| Param | Type | Description | | ----------- | ------ | --------------------- | | password | String | Wallet password | | newPassword | String | New keystore password | | walletId | String | Unique ID of wallet |

Example
keystore.setPassword('JHJ23jG^*DGHj667s', 'Tw5E^g7djfd(29j', '110ec58a-a0f2-4ac4-8393-c977d813b8d1')

Static methods

generateMnemonic(entropy, randomBufferLength)

| Param | Type | Description | | ------------------- | ------ | --------------------------------------------------- | | entropy | String | Entropy for mnemonic initialisation (see new Mnemonic) | | randomBufferLength | Number | Buffer length (if entropy param is used) |

Returns

Mnemonic - 12 English words splited by space.

Example
const mnemonic = Keystore.generateMnemonic()

isMnemonicValid(mnemonic)

Parameters

| Param | Type | Description | | -------- | ------ | ----------------- | | mnemonic | String | Mnemonic to check |

Returns

true if mnemonic is valid and false otherwise.

Example
const mnemonic = 'come average primary sunny profit eager toy pulp struggle hazard tourist round'
const isValid = Keystore.isMnemonicValid(mnemonic) // true

isBip32XPublicKeyValid(bip32XPublicKey)

| Param | Type | Description | | --------------- | ------ | ------------------------- | | bip32XPublicKey | String | BIP32 Extended Public Key |

Returns

true if bip32XPublicKey is valid and false otherwise.

Example
const isValid = Keystore.isBip32XPublicKeyValid('xpub...')

isAddressValid(address)

| Param | Type | Description | | --------- | ------ | --------------------------------------------------- | | address | String | Address to check. Accepts checksummed addresses too |

Returns

true if address is valid and false otherwise.

Example
const isValid = Keystore.isAddressValid('0x8a02a99ee7a801da6996a2dacc406ffa5190dc9c')

isPrivateKeyValid(privateKey)

| Param | Type | Description | | ---------- | ------ | -------------------- | | privateKey | String | Private Key to check |

Returns

true if privateKey is valid and false otherwise.

Example
const pk = '0xa7fcb4efc392d2c8983cbfe64063f994f85120e60843407af95907d905d0dc9f'
const isValid = Keystore.isPrivateKeyValid(pk)

isDerivationPathValid(derivationPath)

| Param | Type | Description | | -------------- | ------ | --------------- | | derivationPath | String | Derivation path |

Returns

true if derivationPath is valid and false otherwise.

Example
const isValid = Keystore.isDerivationPathValid("m/44'/60'/0'/0")

testPassword(password, passwordConfig)

| Param | Type | Default | Description | | ------------------------ | ------ | ------- | -------------------------- | | password | String | | Wallet password | | passwordConfig | Object | {} | Password options container | | passwordConfig.minLength | Number | 10 | Min length for password | | passwordConfig.minLength | Number | 128 | Max length for password |

Returns

Object that contains following fields:

  • errors - error messages array
  • failedTests - failed test names array
  • passedTests - passed test names array
Example
const result = Keystore.testPassword('JHJ23jG^*DGHj667s')