import log from 'loglevel' import Wallet from 'ethereumjs-wallet' import importers from 'ethereumjs-wallet/thirdparty' import ethUtil from 'ethereumjs-util' const accountImporter = { importAccount (strategy, args) { try { const importer = this.strategies[strategy] const privateKeyHex = importer(...args) return Promise.resolve(privateKeyHex) } catch (e) { return Promise.reject(e) } }, strategies: { 'Private Key': (privateKey) => { if (!privateKey) { throw new Error('Cannot import an empty key.') } const prefixed = ethUtil.addHexPrefix(privateKey) const buffer = ethUtil.toBuffer(prefixed) if (!ethUtil.isValidPrivate(buffer)) { throw new Error('Cannot import invalid private key.') } const stripped = ethUtil.stripHexPrefix(prefixed) return stripped }, 'JSON File': (input, password) => { let wallet try { wallet = importers.fromEtherWallet(input, password) } catch (e) { log.debug('Attempt to import as EtherWallet format failed, trying V3') wallet = Wallet.fromV3(input, password, true) } return walletToPrivateKey(wallet) }, }, } function walletToPrivateKey (wallet) { const privateKeyBuffer = wallet.getPrivateKey() return ethUtil.bufferToHex(privateKeyBuffer) } export default accountImporter