factombip44

0.2.2 • Public • Published

Factom Bip44

Generate addresses off your 12-word mnemonic seed. Same seed as EnterpriseWallet and factom-walletd.

There are faster ways to do this, but this gets the job done easily. It does a lot of computation more than once if you end up generating a lot of addresses.

Example

const bip44 = require("factombip44")
const { seedToPrivateFctAddress, getPublicAddress } = require("factom")
 
// Mnemonic seed
const mnemonic =
  "yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow"
 
// Create the wallet
const wallet = new bip44.FactomHDWallet({ mnemonic })
 
// Generating private keys. Typically you only need to increment the last parameter,
// unless you want to make multiple chains of addresses
const privKey1 = wallet.generateFactoidPrivateKey(0, 0, 0)
const privKey2 = wallet.generateFactoidPrivateKey(0, 0, 1)
 
// Get Fs... private human readable address
const humanPrivKey = seedToPrivateFctAddress(privKey1)
 
// Get Fa... public human readable address
const humanPubKey = getPublicAddress(humanPrivKey)

For random mnemonics

// Generate a new mnemonic
const mn = bip44.randomMnemonic()
 
// You can validate it if you want to verify
const valid = bip44.validMnemonic(mn)
// valid == true because we generated. If user is inputting, if might not be valid

If you are generating many addresses in a row, doing the first example is slow. You can speed it up like so:

const mnemonic =
  "yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow"
const wallet = new bip44.FactomHDWallet({ mnemonic })
 
// We will store all the keys here
const privateKeys = []
 
// This chain object saves us some computation for each new address
const chain = wallet.getFactoidChain(0, 0, 0)
for (let i = 0; i < 5; i++) {
  // This is the next key, we will throw it onto our array
  const next = chain.next()
  privateKeys.push(next)
}
 
// Lost the chain? Do it again
const chain = wallet.getFactoidChain(0, 0, 0)
// for (var i = 0; i < 5; i++) { ... }

Chains are the same as the generate, just quicker as the first set of computation is saved, so there is less work. They can only be generated sequentially though

// The 'next()' refer to the next index in the generate function, so:
const chain = wallet.getFactoidChain(0, 0, 0)
chain.next() == wallet.generateFactoidPrivateKey(0, 0, 0)
chain.next() == wallet.generateFactoidPrivateKey(0, 0, 1)
chain.next() == wallet.generateFactoidPrivateKey(0, 0, 2)
// etc

Precompiled for Web

Use dist/factombip44.js and use like so:

// There is a require function to act similar to node
const bip44 = require("factombip44")
 
// Use like normal
const mn = bip44.randomMnemonic()
// ...

Libraries

Bip39 : https://github.com/bitcoinjs/bip39

Readme

Keywords

Package Sidebar

Install

npm i factombip44

Weekly Downloads

2

Version

0.2.2

License

MIT

Unpacked Size

938 kB

Total Files

14

Last publish

Collaborators

  • emyrk