aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/keyrings/hd.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/scripts/keyrings/hd.js')
-rw-r--r--app/scripts/keyrings/hd.js125
1 files changed, 0 insertions, 125 deletions
diff --git a/app/scripts/keyrings/hd.js b/app/scripts/keyrings/hd.js
deleted file mode 100644
index 3a66f7868..000000000
--- a/app/scripts/keyrings/hd.js
+++ /dev/null
@@ -1,125 +0,0 @@
-const EventEmitter = require('events').EventEmitter
-const hdkey = require('ethereumjs-wallet/hdkey')
-const bip39 = require('bip39')
-const ethUtil = require('ethereumjs-util')
-
-// *Internal Deps
-const sigUtil = require('../lib/sig-util')
-
-// Options:
-const hdPathString = `m/44'/60'/0'/0`
-const type = 'HD Key Tree'
-
-class HdKeyring extends EventEmitter {
-
- /* PUBLIC METHODS */
-
- constructor (opts = {}) {
- super()
- this.type = type
- this.deserialize(opts)
- }
-
- serialize () {
- return Promise.resolve({
- mnemonic: this.mnemonic,
- numberOfAccounts: this.wallets.length,
- })
- }
-
- deserialize (opts = {}) {
- this.opts = opts || {}
- this.wallets = []
- this.mnemonic = null
- this.root = null
-
- if (opts.mnemonic) {
- this._initFromMnemonic(opts.mnemonic)
- }
-
- if (opts.numberOfAccounts) {
- return this.addAccounts(opts.numberOfAccounts)
- }
-
- return Promise.resolve([])
- }
-
- addAccounts (numberOfAccounts = 1) {
- if (!this.root) {
- this._initFromMnemonic(bip39.generateMnemonic())
- }
-
- const oldLen = this.wallets.length
- const newWallets = []
- for (let i = oldLen; i < numberOfAccounts + oldLen; i++) {
- const child = this.root.deriveChild(i)
- const wallet = child.getWallet()
- newWallets.push(wallet)
- this.wallets.push(wallet)
- }
- const hexWallets = newWallets.map(w => w.getAddress().toString('hex'))
- return Promise.resolve(hexWallets)
- }
-
- getAccounts () {
- return Promise.resolve(this.wallets.map(w => w.getAddress().toString('hex')))
- }
-
- // tx is an instance of the ethereumjs-transaction class.
- signTransaction (address, tx) {
- const wallet = this._getWalletForAccount(address)
- var privKey = wallet.getPrivateKey()
- tx.sign(privKey)
- return Promise.resolve(tx)
- }
-
- // For eth_sign, we need to sign transactions:
- // hd
- signMessage (withAccount, data) {
- const wallet = this._getWalletForAccount(withAccount)
- const message = ethUtil.stripHexPrefix(data)
- var privKey = wallet.getPrivateKey()
- var msgSig = ethUtil.ecsign(new Buffer(message, 'hex'), privKey)
- var rawMsgSig = ethUtil.bufferToHex(sigUtil.concatSig(msgSig.v, msgSig.r, msgSig.s))
- return Promise.resolve(rawMsgSig)
- }
-
- // For eth_sign, we need to sign transactions:
- newGethSignMessage (withAccount, msgHex) {
- const wallet = this._getWalletForAccount(withAccount)
- const privKey = wallet.getPrivateKey()
- const msgBuffer = ethUtil.toBuffer(msgHex)
- const msgHash = ethUtil.hashPersonalMessage(msgBuffer)
- const msgSig = ethUtil.ecsign(msgHash, privKey)
- const rawMsgSig = ethUtil.bufferToHex(sigUtil.concatSig(msgSig.v, msgSig.r, msgSig.s))
- return Promise.resolve(rawMsgSig)
- }
-
- exportAccount (address) {
- const wallet = this._getWalletForAccount(address)
- return Promise.resolve(wallet.getPrivateKey().toString('hex'))
- }
-
-
- /* PRIVATE METHODS */
-
- _initFromMnemonic (mnemonic) {
- this.mnemonic = mnemonic
- const seed = bip39.mnemonicToSeed(mnemonic)
- this.hdWallet = hdkey.fromMasterSeed(seed)
- this.root = this.hdWallet.derivePath(hdPathString)
- }
-
-
- _getWalletForAccount (account) {
- const targetAddress = sigUtil.normalize(account)
- return this.wallets.find((w) => {
- const address = w.getAddress().toString('hex')
- return ((address === targetAddress) ||
- (sigUtil.normalize(address) === targetAddress))
- })
- }
-}
-
-HdKeyring.type = type
-module.exports = HdKeyring