UNPKG

seele-sdk-javascript

Version:
116 lines (103 loc) 3.21 kB
const createKeccakHash = require('keccak') const RLP = require('rlp') const secp256k1 = require('secp256k1') let bip32 = require('bip32') let bip39 = require('bip39') let bip44 = require('bip44-constants'), BIP44 = {} let Base58 = require('base-58') const key = require('./key') bip44.splice(450, 0, [ 0x800001c8, 'SEELE', 'Seele' ]) // right before 'AE' for ( var c of bip44 ) { BIP44[c[1]] = { name: c[2], index: c[0] - 2147483648 } } bip44 = BIP44 const maxShard = 4 /** @namespace*/ var wallet = { /** * @method * @param {string} word A string of mnemonic words * @return {object} Account object containing 4 keypairs, one from each of 4 shards * @example * wallet.fromWord() * // returns */ fromWord: function accountFromWord(word){ // check word validity return this.fromSeed(bip39.mnemonicToSeedSync(word).toString('hex')) }, /** * @method * @param {string} seed A string of seed in base 58 * @return {object} Account object containing 4 keypairs, one from each of 4 shards * @example * wallet.fromSeed() * // returns */ fromSeed: function accountFromSeed(seed){ // check seed validity var seedB = Buffer.from(seed, 'hex') var account = [] var root = bip32.fromSeed(seedB); for ( var shard = 1 ; shard <= maxShard ; shard++ ){ var info = { shard: null, privateKey: null, address: null }, i = 0; while( info.shard != shard ){ var path = `m/44'/${bip44.SEELE.index}'/0'/0/${i}` var node = root.derivePath(path) var priv = '0x'+node.privateKey.toString('hex') var addr = key.addof(priv) var shrd = key.shard(addr) info.shard = shrd info.privateKey = priv info.address = addr info.index = i i++; } account.push(info) } return account }, /** * @method * @param {string} word A string of mnemonic words * @param {number} depth The number of addresses to discover * @return {object} Object containing shard distribution and address by index * @example * wallet.distWord() * // returns */ distWord: function distributionFromWord(word, depth){ return this.distSeed(bip39.mnemonicToSeedSync(word), depth) }, /** * @method * @param {string} seed A string of seed in base 58 * @param {number} depth The number of addresses to discover * @return {object} Object containing shard distribution and address by index * @example * wallet.distSeed() * // returns */ distSeed: function distributionFromSeed(seed, depth){ var i = 0, shards = [] var root = bip32.fromSeed(seed); while ( i < depth ) { var path = `m/44'/${bip44.SEELE.index}'/0'/0/${i}` // console.log(path); var node = root.derivePath(path) var priv = '0x'+node.privateKey.toString('hex') var addr = key.addof(priv) var shrd = key.shard(addr) shards.push({ 'index': i, 'shard': shrd, 'address': addr }) i++; } return shards; } } module.exports = wallet