refactor/move signMessage to their own providers

pull/1/head
Iuri Matias 5 years ago
parent 4947489fa9
commit 71b6590bee
  1. 38
      src/blockchain/blockchain.js
  2. 11
      src/blockchain/providers/injected.js
  3. 13
      src/blockchain/providers/node.js
  4. 13
      src/blockchain/providers/vm.js

@ -7,7 +7,6 @@ const Txlistener = remixLib.execution.txListener
const EventManager = remixLib.EventManager const EventManager = remixLib.EventManager
const executionContext = remixLib.execution.executionContext const executionContext = remixLib.execution.executionContext
const ethJSUtil = require('ethereumjs-util') const ethJSUtil = require('ethereumjs-util')
const Personal = require('web3-eth-personal')
const Web3 = require('web3') const Web3 = require('web3')
const async = require('async') const async = require('async')
@ -233,42 +232,7 @@ class Blockchain {
} }
signMessage (message, account, passphrase, cb) { signMessage (message, account, passphrase, cb) {
const isVM = this.executionContext.isVM() this.getCurrentProvider().signMessage(message, account, passphrase, cb)
const isInjected = this.executionContext.getProvider() === 'injected'
if (isVM) {
const personalMsg = ethJSUtil.hashPersonalMessage(Buffer.from(message))
const privKey = this.providers.vm.accounts[account].privateKey
try {
const rsv = ethJSUtil.ecsign(personalMsg, privKey)
const signedData = ethJSUtil.toRpcSig(rsv.v, rsv.r, rsv.s)
cb(null, '0x' + personalMsg.toString('hex'), signedData)
} catch (e) {
cb(e.message)
}
return
}
if (isInjected) {
const hashedMsg = Web3.utils.sha3(message)
try {
this.executionContext.web3().eth.sign(account, hashedMsg, (error, signedData) => {
cb(error.message, hashedMsg, signedData)
})
} catch (e) {
cb(e.message)
}
return
}
const hashedMsg = Web3.utils.sha3(message)
try {
const personal = new Personal(this.executionContext.web3().currentProvider)
personal.sign(hashedMsg, account, passphrase, (error, signedData) => {
cb(error.message, hashedMsg, signedData)
})
} catch (e) {
cb(e.message)
}
} }
web3 () { web3 () {

@ -29,6 +29,17 @@ class InjectedProvider {
cb(null, Web3.utils.fromWei(res.toString(10), 'ether')) cb(null, Web3.utils.fromWei(res.toString(10), 'ether'))
}) })
} }
signMessage (message, account, _passphrase, cb) {
const hashedMsg = Web3.utils.sha3(message)
try {
this.executionContext.web3().eth.sign(account, hashedMsg, (error, signedData) => {
cb(error.message, hashedMsg, signedData)
})
} catch (e) {
cb(e.message)
}
}
} }
module.exports = InjectedProvider module.exports = InjectedProvider

@ -1,5 +1,6 @@
const Web3 = require('web3') const Web3 = require('web3')
const { stripHexPrefix } = require('ethereumjs-util') const { stripHexPrefix } = require('ethereumjs-util')
const Personal = require('web3-eth-personal')
class NodeProvider { class NodeProvider {
@ -36,6 +37,18 @@ class NodeProvider {
cb(null, Web3.utils.fromWei(res.toString(10), 'ether')) cb(null, Web3.utils.fromWei(res.toString(10), 'ether'))
}) })
} }
signMessage (message, account, passphrase, cb) {
const hashedMsg = Web3.utils.sha3(message)
try {
const personal = new Personal(this.executionContext.web3().currentProvider)
personal.sign(hashedMsg, account, passphrase, (error, signedData) => {
cb(error.message, hashedMsg, signedData)
})
} catch (e) {
cb(e.message)
}
}
} }
module.exports = NodeProvider module.exports = NodeProvider

@ -1,6 +1,7 @@
const Web3 = require('web3') const Web3 = require('web3')
const { BN, privateToAddress, toChecksumAddress, isValidPrivate, stripHexPrefix } = require('ethereumjs-util') const { BN, privateToAddress, toChecksumAddress, isValidPrivate, stripHexPrefix } = require('ethereumjs-util')
const crypto = require('crypto') const crypto = require('crypto')
const ethJSUtil = require('ethereumjs-util')
class VMProvider { class VMProvider {
@ -70,6 +71,18 @@ class VMProvider {
cb(null, Web3.utils.fromWei(new BN(res.balance).toString(10), 'ether')) cb(null, Web3.utils.fromWei(new BN(res.balance).toString(10), 'ether'))
}) })
} }
signMessage (message, account, _passphrase, cb) {
const personalMsg = ethJSUtil.hashPersonalMessage(Buffer.from(message))
const privKey = this.providers.vm.accounts[account].privateKey
try {
const rsv = ethJSUtil.ecsign(personalMsg, privKey)
const signedData = ethJSUtil.toRpcSig(rsv.v, rsv.r, rsv.s)
cb(null, '0x' + personalMsg.toString('hex'), signedData)
} catch (e) {
cb(e.message)
}
}
} }
module.exports = VMProvider module.exports = VMProvider

Loading…
Cancel
Save