aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrendan Chou <brendanchou@msn.com>2019-08-21 03:52:59 +0800
committerWhymarrh Whitby <whymarrh.whitby@gmail.com>2019-08-21 03:52:59 +0800
commitcc71b4f52b861fda6620874dd8c9ae30c0c0ede9 (patch)
tree2c9732784d913764a4b1d5b3181ab075af6a6725
parent6e081eb17c8052dc626e1d113784ee8e1f9f96f2 (diff)
downloadtangerine-wallet-browser-cc71b4f52b861fda6620874dd8c9ae30c0c0ede9.tar.gz
tangerine-wallet-browser-cc71b4f52b861fda6620874dd8c9ae30c0c0ede9.tar.zst
tangerine-wallet-browser-cc71b4f52b861fda6620874dd8c9ae30c0c0ede9.zip
Add support for eth_signTypedData_v4 (#6930)
-rw-r--r--app/scripts/controllers/network/createMetamaskMiddleware.js2
-rw-r--r--app/scripts/lib/typed-message-manager.js1
-rw-r--r--app/scripts/metamask-controller.js5
-rw-r--r--ui/app/components/app/signature-request.js7
4 files changed, 11 insertions, 4 deletions
diff --git a/app/scripts/controllers/network/createMetamaskMiddleware.js b/app/scripts/controllers/network/createMetamaskMiddleware.js
index 319c5bf3e..5dcd3a895 100644
--- a/app/scripts/controllers/network/createMetamaskMiddleware.js
+++ b/app/scripts/controllers/network/createMetamaskMiddleware.js
@@ -12,6 +12,7 @@ function createMetamaskMiddleware ({
processEthSignMessage,
processTypedMessage,
processTypedMessageV3,
+ processTypedMessageV4,
processPersonalMessage,
getPendingNonce,
}) {
@@ -27,6 +28,7 @@ function createMetamaskMiddleware ({
processEthSignMessage,
processTypedMessage,
processTypedMessageV3,
+ processTypedMessageV4,
processPersonalMessage,
}),
createPendingNonceMiddleware({ getPendingNonce }),
diff --git a/app/scripts/lib/typed-message-manager.js b/app/scripts/lib/typed-message-manager.js
index b10145f3b..5e2a4cd0a 100644
--- a/app/scripts/lib/typed-message-manager.js
+++ b/app/scripts/lib/typed-message-manager.js
@@ -141,6 +141,7 @@ module.exports = class TypedMessageManager extends EventEmitter {
}, 'Expected EIP712 typed data')
break
case 'V3':
+ case 'V4':
let data
assert.equal(typeof params, 'object', 'Params should be an object.')
assert.ok('data' in params, 'Params must include a data field.')
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 1007412c6..1bf34a074 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -341,6 +341,7 @@ module.exports = class MetamaskController extends EventEmitter {
processEthSignMessage: this.newUnsignedMessage.bind(this),
processTypedMessage: this.newUnsignedTypedMessage.bind(this),
processTypedMessageV3: this.newUnsignedTypedMessage.bind(this),
+ processTypedMessageV4: this.newUnsignedTypedMessage.bind(this),
processPersonalMessage: this.newUnsignedPersonalMessage.bind(this),
getPendingNonce: this.getPendingNonce.bind(this),
}
@@ -1141,6 +1142,9 @@ module.exports = class MetamaskController extends EventEmitter {
case 'V3':
signature = sigUtil.signTypedData(privKey, { data: JSON.parse(cleanMsgParams.data) })
break
+ case 'V4':
+ signature = sigUtil.signTypedData_v4(privKey, { data: JSON.parse(cleanMsgParams.data) })
+ break
}
} else {
signature = await keyring.signTypedData(address, cleanMsgParams.data)
@@ -1797,4 +1801,3 @@ module.exports = class MetamaskController extends EventEmitter {
return this.keyringController.setLocked()
}
}
-
diff --git a/ui/app/components/app/signature-request.js b/ui/app/components/app/signature-request.js
index 9c0f53f57..039485f88 100644
--- a/ui/app/components/app/signature-request.js
+++ b/ui/app/components/app/signature-request.js
@@ -215,7 +215,7 @@ SignatureRequest.prototype.msgHexToText = function (hex) {
}
// eslint-disable-next-line react/display-name
-SignatureRequest.prototype.renderTypedDataV3 = function (data) {
+SignatureRequest.prototype.renderTypedData = function (data) {
const { domain, message } = JSON.parse(data)
return [
h('div.request-signature__typed-container', [
@@ -267,8 +267,9 @@ SignatureRequest.prototype.renderBody = function () {
}),
}, [notice]),
- h('div.request-signature__rows', type === 'eth_signTypedData' && version === 'V3' ?
- this.renderTypedDataV3(data) :
+ h('div.request-signature__rows',
+ type === 'eth_signTypedData' && (version === 'V3' || version === 'V4') ?
+ this.renderTypedData(data) :
rows.map(({ name, value }) => {
if (typeof value === 'boolean') {
value = value.toString()