|
|
@ -55,7 +55,7 @@ module.exports = class KeyringController extends EventEmitter { |
|
|
|
return { |
|
|
|
return { |
|
|
|
seedWords: this.configManager.getSeedWords(), |
|
|
|
seedWords: this.configManager.getSeedWords(), |
|
|
|
isInitialized: (!!wallet || !!vault), |
|
|
|
isInitialized: (!!wallet || !!vault), |
|
|
|
isUnlocked: !!this.key, |
|
|
|
isUnlocked: Boolean(this.password), |
|
|
|
isDisclaimerConfirmed: this.configManager.getConfirmedDisclaimer(), // AUDIT this.configManager.getConfirmedDisclaimer(),
|
|
|
|
isDisclaimerConfirmed: this.configManager.getConfirmedDisclaimer(), // AUDIT this.configManager.getConfirmedDisclaimer(),
|
|
|
|
unconfTxs: this.configManager.unconfirmedTxs(), |
|
|
|
unconfTxs: this.configManager.unconfirmedTxs(), |
|
|
|
transactions: this.configManager.getTxList(), |
|
|
|
transactions: this.configManager.getTxList(), |
|
|
@ -113,34 +113,24 @@ module.exports = class KeyringController extends EventEmitter { |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
migrateAndGetKey (password) { |
|
|
|
migrateOldVaultIfAny (password) { |
|
|
|
let key |
|
|
|
|
|
|
|
const shouldMigrate = !!this.configManager.getWallet() && !this.configManager.getVault() |
|
|
|
const shouldMigrate = !!this.configManager.getWallet() && !this.configManager.getVault() |
|
|
|
return this.loadKey(password) |
|
|
|
return this.idStoreMigrator.migratedVaultForPassword(password) |
|
|
|
.then((derivedKey) => { |
|
|
|
|
|
|
|
key = derivedKey |
|
|
|
|
|
|
|
this.key = key |
|
|
|
|
|
|
|
return this.idStoreMigrator.migratedVaultForPassword(password) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
.then((serialized) => { |
|
|
|
.then((serialized) => { |
|
|
|
if (serialized && shouldMigrate) { |
|
|
|
if (serialized && shouldMigrate) { |
|
|
|
const keyring = this.restoreKeyring(serialized) |
|
|
|
const keyring = this.restoreKeyring(serialized) |
|
|
|
this.keyrings.push(keyring) |
|
|
|
this.keyrings.push(keyring) |
|
|
|
this.configManager.setSelectedAccount(keyring.getAccounts()[0]) |
|
|
|
this.configManager.setSelectedAccount(keyring.getAccounts()[0]) |
|
|
|
return this.persistAllKeyrings() |
|
|
|
return this.persistAllKeyrings() |
|
|
|
.then(() => { return key }) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
return key |
|
|
|
return |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createNewVault (password, cb) { |
|
|
|
createNewVault (password, cb) { |
|
|
|
const configManager = this.configManager |
|
|
|
return this.migrateOldVaultIfAny(password) |
|
|
|
const salt = this.encryptor.generateSalt() |
|
|
|
|
|
|
|
configManager.setSalt(salt) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return this.migrateAndGetKey(password) |
|
|
|
|
|
|
|
.then(() => { |
|
|
|
.then(() => { |
|
|
|
|
|
|
|
this.password = password |
|
|
|
return this.persistAllKeyrings() |
|
|
|
return this.persistAllKeyrings() |
|
|
|
}) |
|
|
|
}) |
|
|
|
.then(() => { |
|
|
|
.then(() => { |
|
|
@ -184,9 +174,9 @@ module.exports = class KeyringController extends EventEmitter { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
submitPassword (password, cb) { |
|
|
|
submitPassword (password, cb) { |
|
|
|
this.migrateAndGetKey(password) |
|
|
|
this.migrateOldVaultIfAny(password) |
|
|
|
.then((key) => { |
|
|
|
.then(() => { |
|
|
|
return this.unlockKeyrings(key) |
|
|
|
return this.unlockKeyrings(password) |
|
|
|
}) |
|
|
|
}) |
|
|
|
.then((keyrings) => { |
|
|
|
.then((keyrings) => { |
|
|
|
this.keyrings = keyrings |
|
|
|
this.keyrings = keyrings |
|
|
@ -200,16 +190,6 @@ module.exports = class KeyringController extends EventEmitter { |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
loadKey (password) { |
|
|
|
|
|
|
|
const salt = this.configManager.getSalt() || this.encryptor.generateSalt() |
|
|
|
|
|
|
|
return this.encryptor.keyFromPassword(password + salt) |
|
|
|
|
|
|
|
.then((key) => { |
|
|
|
|
|
|
|
this.key = key |
|
|
|
|
|
|
|
this.configManager.setSalt(salt) |
|
|
|
|
|
|
|
return key |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
addNewKeyring (type, opts, cb) { |
|
|
|
addNewKeyring (type, opts, cb) { |
|
|
|
const Keyring = this.getKeyringClassForType(type) |
|
|
|
const Keyring = this.getKeyringClassForType(type) |
|
|
|
const keyring = new Keyring(opts) |
|
|
|
const keyring = new Keyring(opts) |
|
|
@ -285,16 +265,16 @@ module.exports = class KeyringController extends EventEmitter { |
|
|
|
data: keyring.serialize(), |
|
|
|
data: keyring.serialize(), |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
return this.encryptor.encryptWithKey(this.key, serialized) |
|
|
|
return this.encryptor.encrypt(this.password, serialized) |
|
|
|
.then((encryptedString) => { |
|
|
|
.then((encryptedString) => { |
|
|
|
this.configManager.setVault(encryptedString) |
|
|
|
this.configManager.setVault(encryptedString) |
|
|
|
return true |
|
|
|
return true |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
unlockKeyrings (key) { |
|
|
|
unlockKeyrings (password) { |
|
|
|
const encryptedVault = this.configManager.getVault() |
|
|
|
const encryptedVault = this.configManager.getVault() |
|
|
|
return this.encryptor.decryptWithKey(key, encryptedVault) |
|
|
|
return this.encryptor.decrypt(this.password, encryptedVault) |
|
|
|
.then((vault) => { |
|
|
|
.then((vault) => { |
|
|
|
vault.forEach(this.restoreKeyring.bind(this)) |
|
|
|
vault.forEach(this.restoreKeyring.bind(this)) |
|
|
|
return this.keyrings |
|
|
|
return this.keyrings |
|
|
@ -402,7 +382,7 @@ module.exports = class KeyringController extends EventEmitter { |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function estimateGas(txData, blockGasLimitHex, cb) { |
|
|
|
function estimateGas (txData, blockGasLimitHex, cb) { |
|
|
|
const txParams = txData.txParams |
|
|
|
const txParams = txData.txParams |
|
|
|
// check if gasLimit is already specified
|
|
|
|
// check if gasLimit is already specified
|
|
|
|
txData.gasLimitSpecified = Boolean(txParams.gas) |
|
|
|
txData.gasLimitSpecified = Boolean(txParams.gas) |
|
|
@ -414,7 +394,7 @@ module.exports = class KeyringController extends EventEmitter { |
|
|
|
query.estimateGas(txParams, cb) |
|
|
|
query.estimateGas(txParams, cb) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function checkForGasError(txData, estimatedGasHex) { |
|
|
|
function checkForGasError (txData, estimatedGasHex) { |
|
|
|
txData.estimatedGas = estimatedGasHex |
|
|
|
txData.estimatedGas = estimatedGasHex |
|
|
|
// all gas used - must be an error
|
|
|
|
// all gas used - must be an error
|
|
|
|
if (estimatedGasHex === txData.txParams.gas) { |
|
|
|
if (estimatedGasHex === txData.txParams.gas) { |
|
|
@ -423,7 +403,7 @@ module.exports = class KeyringController extends EventEmitter { |
|
|
|
cb() |
|
|
|
cb() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function setTxGas(txData, blockGasLimitHex) { |
|
|
|
function setTxGas (txData, blockGasLimitHex) { |
|
|
|
const txParams = txData.txParams |
|
|
|
const txParams = txData.txParams |
|
|
|
// if OOG, nothing more to do
|
|
|
|
// if OOG, nothing more to do
|
|
|
|
if (txData.simulationFails) { |
|
|
|
if (txData.simulationFails) { |
|
|
|