From 722e2b546c97a0d310173e0ee0847af09dabba63 Mon Sep 17 00:00:00 2001 From: yqrashawn Date: Tue, 24 Mar 2020 10:28:48 +0800 Subject: [PATCH] new sign logic (#62) * Add: sign logic * Add: disable eth-contract-registry * Fix: e2e test --- app/scripts/lib/seed-phrase-verifier.js | 2 +- app/scripts/metamask-controller.js | 12 +-- package.json | 7 +- test/e2e/contract-test/contract.js | 9 +- test/e2e/contract-test/index.html | 18 ++-- test/e2e/signature-request.spec.js | 2 +- .../controllers/metamask-controller-test.js | 4 +- .../recipient-blacklist-checker-test.js | 2 +- test/unit/app/seed-phrase-verifier-test.js | 2 +- test/unit/ui/app/actions.spec.js | 8 +- .../signature-request-original.container.js | 4 +- ui/app/helpers/utils/transactions.util.js | 99 ++++++++++--------- ui/app/pages/confirm-transaction/conf-tx.js | 2 +- ui/app/store/actions.js | 88 +++++++++-------- yarn.lock | 74 +++++++++----- 15 files changed, 181 insertions(+), 152 deletions(-) diff --git a/app/scripts/lib/seed-phrase-verifier.js b/app/scripts/lib/seed-phrase-verifier.js index b402278a48e7..3f465b575cbe 100644 --- a/app/scripts/lib/seed-phrase-verifier.js +++ b/app/scripts/lib/seed-phrase-verifier.js @@ -1,4 +1,4 @@ -import KeyringController from 'eth-keyring-controller' +import KeyringController from 'cfx-keyring-controller' import log from 'loglevel' const seedPhraseVerifier = { diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 5b0b26b24629..1532c71f8747 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -23,7 +23,7 @@ import createOriginMiddleware from './lib/createOriginMiddleware' import createOnboardingMiddleware from './lib/createOnboardingMiddleware' import providerAsMiddleware from '@yqrashawn/cfx-json-rpc-middleware/providerAsMiddleware' import { setupMultiplex } from './lib/stream-utils.js' -import KeyringController from 'eth-keyring-controller' +import KeyringController from 'cfx-keyring-controller' import EnsController from './controllers/ens' import NetworkController from './controllers/network' import PreferencesController from './controllers/preferences' @@ -34,7 +34,7 @@ import OnboardingController from './controllers/onboarding' // import ThreeBoxController from './controllers/threebox' import RecentBlocksController from './controllers/recent-blocks' import IncomingTransactionsController from './controllers/incoming-transactions' -import MessageManager from './lib/message-manager' +// import MessageManager from './lib/message-manager' import DecryptMessageManager from './lib/decrypt-message-manager' import EncryptionPublicKeyManager from './lib/encryption-public-key-manager' import PersonalMessageManager from './lib/personal-message-manager' @@ -312,8 +312,8 @@ export default class MetamaskController extends EventEmitter { ) this.networkController.lookupNetwork() - this.messageManager = new MessageManager() this.personalMessageManager = new PersonalMessageManager() + this.messageManager = this.personalMessageManager this.decryptMessageManager = new DecryptMessageManager() this.encryptionPublicKeyManager = new EncryptionPublicKeyManager() this.typedMessageManager = new TypedMessageManager({ @@ -398,7 +398,7 @@ export default class MetamaskController extends EventEmitter { // tx signing processTransaction: this.newUnapprovedTransaction.bind(this), // msg signing - processEthSignMessage: this.newUnsignedMessage.bind(this), + processEthSignMessage: this.newUnsignedPersonalMessage.bind(this), processTypedMessage: this.newUnsignedTypedMessage.bind(this), processTypedMessageV3: this.newUnsignedTypedMessage.bind(this), processTypedMessageV4: this.newUnsignedTypedMessage.bind(this), @@ -636,8 +636,8 @@ export default class MetamaskController extends EventEmitter { getNextNonce: nodeify(this.getNextNonce, this), // messageManager - signMessage: nodeify(this.signMessage, this), - cancelMessage: this.cancelMessage.bind(this), + signMessage: nodeify(this.signPersonalMessage, this), + cancelMessage: this.cancelPersonalMessage.bind(this), // personalMessageManager signPersonalMessage: nodeify(this.signPersonalMessage, this), diff --git a/package.json b/package.json index 89ee96407a26..1352f8ea71df 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "bip39": "^2.2.0", "bn.js": "^4.11.7", "c3": "^0.7.10", + "cfx-keyring-controller": "^5.6.1", "classnames": "^2.2.6", "content-hash": "^2.5.0", "copy-to-clipboard": "^3.0.8", @@ -105,9 +106,7 @@ "eth-json-rpc-errors": "^2.0.2", "eth-json-rpc-filters": "^4.1.1", "eth-json-rpc-infura": "^4.0.2", - "eth-keyring-controller": "^5.5.0", "eth-ledger-bridge-keyring": "^0.2.0", - "eth-method-registry": "^1.2.0", "eth-phishing-detect": "^1.1.4", "eth-query": "^2.1.2", "eth-sig-util": "^2.3.0", @@ -127,7 +126,7 @@ "extensionizer": "^1.0.1", "fast-json-patch": "^2.0.4", "fuse.js": "^3.2.0", - "gaba": "^1.9.3", + "gaba": "^1.10.0", "human-standard-token-abi": "^2.0.0", "jazzicon": "^2.0.0", "js-conflux-sdk": "^0.8.0-alpha", @@ -198,7 +197,7 @@ "@storybook/addon-knobs": "^5.2.8", "@storybook/react": "^5.2.8", "@storybook/storybook-deployer": "^2.8.1", - "@yqrashawn/conflux-local-network-lite": "^2.0.0-beta", + "@yqrashawn/conflux-local-network-lite": "^2.0.1", "@yqrashawn/conflux-portal-onboarding": "^0.2.0-alpha", "addons-linter": "1.14.0", "babel-eslint": "^10.0.2", diff --git a/test/e2e/contract-test/contract.js b/test/e2e/contract-test/contract.js index 2d16370a5331..4941698cf548 100644 --- a/test/e2e/contract-test/contract.js +++ b/test/e2e/contract-test/contract.js @@ -507,7 +507,7 @@ const initialize = () => { } personalSignData.addEventListener('click', () => { - const typedData = { + const personalSignData = { types: { EIP712Domain: [ { name: 'name', type: 'string' }, @@ -548,7 +548,7 @@ const initialize = () => { confluxJS.provider.sendAsync( { method: 'personal_sign', - params: [JSON.stringify(typedData), conflux.selectedAddress], + params: [JSON.stringify(personalSignData), conflux.selectedAddress], from: conflux.selectedAddress, }, (err, result) => { @@ -669,13 +669,16 @@ const initialize = () => { confluxJS.provider.sendAsync( { - method: 'eth_signTypedData_v3', + method: 'cfx_signTypedData_v3', params: [conflux.selectedAddress, JSON.stringify(typedData)], from: conflux.selectedAddress, }, (err, result) => { if (err) { console.log(err) + if (!chainId) { + console.log('chainId is not defined') + } } else { signTypedDataResults.innerHTML = JSON.stringify(result) sendSignedTypedData.disabled = false diff --git a/test/e2e/contract-test/index.html b/test/e2e/contract-test/index.html index 4ebe14c75c90..ca53cd5f3ce7 100644 --- a/test/e2e/contract-test/index.html +++ b/test/e2e/contract-test/index.html @@ -67,28 +67,28 @@

Status

Accounts: +
+

+ CFX Sign Data (same as Metamask's personal_sign) +

+ +
CFX Sign Data Result:
+

Sign Typed Data V3

- +
Sign Typed Data Result:

Send Signed Typed Data Result:
-
+

Personal Sign Data (Prefered)

Personal Sign Data Result:
-
-

- CFX Sign Data (Deprecated) -

- -
CFX Sign Data Result:
-
diff --git a/test/e2e/signature-request.spec.js b/test/e2e/signature-request.spec.js index 8a336ff8bba9..0eae81955b10 100644 --- a/test/e2e/signature-request.spec.js +++ b/test/e2e/signature-request.spec.js @@ -106,7 +106,7 @@ describe('MetaMask', function () { it('creates a sign typed data signature request', async function () { await driver.clickElement( - By.xpath(`//button[contains(text(), 'Sign')]`), + By.xpath(`//button[contains(text(), 'Typed Sign')]`), 10000 ) await driver.delay(largeDelayMs) diff --git a/test/unit/app/controllers/metamask-controller-test.js b/test/unit/app/controllers/metamask-controller-test.js index 6b717fdc3083..d5087fc2fdc7 100644 --- a/test/unit/app/controllers/metamask-controller-test.js +++ b/test/unit/app/controllers/metamask-controller-test.js @@ -766,7 +766,7 @@ describe('MetaMaskController', function () { }) }) - describe('#newUnsignedMessage', function () { + describe.skip('#newUnsignedMessage', function () { let msgParams, metamaskMsgs, messages, msgId const address = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' @@ -905,7 +905,7 @@ describe('MetaMaskController', function () { assert.equal(metamaskPersonalMsgs[msgId].status, 'signed') assert.equal( metamaskPersonalMsgs[msgId].rawSig, - '0x6a1b65e2b8ed53cf398a769fad24738f9fbe29841fe6854e226953542c4b6a173473cb152b6b1ae5f06d601d45dd699a129b0a8ca84e78b423031db5baa734741b' + '0x42aa75cb4f4991a9e4b84645896b6a2a402f38de45a3f522dd7f1f0aa99205237bf8f9693a435438ad9d37e536552ecdc407ba41f54f57bc2e182c3bd5470eb801' ) }) }) diff --git a/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js b/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js index 24879ca4618e..9cd17aeaef73 100644 --- a/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js +++ b/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js @@ -6,7 +6,7 @@ import { KOVAN_CODE, GOERLI_CODE, } from '../../../../../app/scripts/controllers/network/enums' -import KeyringController from 'eth-keyring-controller' +import KeyringController from 'cfx-keyring-controller' describe('Recipient Blacklist Checker', function () { describe('#checkAccount', function () { diff --git a/test/unit/app/seed-phrase-verifier-test.js b/test/unit/app/seed-phrase-verifier-test.js index 95592592689a..e1da84622345 100644 --- a/test/unit/app/seed-phrase-verifier-test.js +++ b/test/unit/app/seed-phrase-verifier-test.js @@ -1,6 +1,6 @@ import assert from 'assert' import { cloneDeep } from 'lodash' -import KeyringController from 'eth-keyring-controller' +import KeyringController from 'cfx-keyring-controller' import firstTimeState from '../../../app/scripts/first-time-state' import seedPhraseVerifier from '../../../app/scripts/lib/seed-phrase-verifier' import mockEncryptor from '../../lib/mock-encryptor' diff --git a/test/unit/ui/app/actions.spec.js b/test/unit/ui/app/actions.spec.js index aa49ca9b7919..49acf51e890c 100644 --- a/test/unit/ui/app/actions.spec.js +++ b/test/unit/ui/app/actions.spec.js @@ -7,7 +7,7 @@ import configureStore from 'redux-mock-store' import thunk from 'redux-thunk' import EthQuery from '../../../../app/scripts/eth-query' import Eth from 'ethjs' -import KeyringController from 'eth-keyring-controller' +import KeyringController from 'cfx-keyring-controller' import { createTestProviderTools } from '../../../stub/provider' import enLocale from '../../../../app/_locales/en/messages.json' @@ -644,12 +644,12 @@ describe('Actions', function () { signMessageSpy.restore() }) - it('calls signMsg in background', function () { + it('calls signPerMsg in background', function () { const store = mockStore({ metamask: {}, }) - signMessageSpy = sinon.spy(background, 'signMessage') + signMessageSpy = sinon.spy(background, 'signPersonalMessage') store.dispatch(actions.signMsg(msgParams)) assert(signMessageSpy.calledOnce) }) @@ -665,7 +665,7 @@ describe('Actions', function () { { type: 'DISPLAY_WARNING', value: 'error' }, ] - signMessageSpy = sinon.stub(background, 'signMessage') + signMessageSpy = sinon.stub(background, 'signPersonalMessage') signMessageSpy.callsFake((_, callback) => { callback(new Error('error')) }) diff --git a/ui/app/components/app/signature-request-original/signature-request-original.container.js b/ui/app/components/app/signature-request-original/signature-request-original.container.js index 625993e3254a..15ec4e5b5112 100644 --- a/ui/app/components/app/signature-request-original/signature-request-original.container.js +++ b/ui/app/components/app/signature-request-original/signature-request-original.container.js @@ -48,10 +48,10 @@ function mergeProps (stateProps, dispatchProps, ownProps) { if (type === 'personal_sign') { cancel = cancelPersonalMessage sign = signPersonalMessage - } else if (type === 'eth_signTypedData') { + } else if (type === 'cfx_signTypedData' || type === 'eth_signTypedData') { cancel = cancelTypedMessage sign = signTypedMessage - } else if (type === 'eth_sign') { + } else if (type === 'cfx_sign' || type === 'eth_sign') { cancel = cancelMessage sign = signMessage } diff --git a/ui/app/helpers/utils/transactions.util.js b/ui/app/helpers/utils/transactions.util.js index f09d93114c57..de58ffa6e941 100644 --- a/ui/app/helpers/utils/transactions.util.js +++ b/ui/app/helpers/utils/transactions.util.js @@ -1,5 +1,5 @@ import ethUtil from 'ethereumjs-util' -import MethodRegistry from 'eth-method-registry' +// import MethodRegistry from 'eth-method-registry' import abi from 'human-standard-token-abi' import abiDecoder from 'abi-decoder' import { @@ -7,7 +7,7 @@ import { TRANSACTION_STATUS_CONFIRMED, } from '../../../../app/scripts/controllers/transactions/enums' import prefixForNetwork from '../../../lib/etherscan-prefix-for-network' -import fetchWithCache from './fetch-with-cache' +// import fetchWithCache from './fetch-with-cache' import { TOKEN_METHOD_TRANSFER, @@ -26,7 +26,7 @@ import { DEPOSIT_TRANSACTION_KEY, } from '../constants/transactions' -import log from 'loglevel' +// import log from 'loglevel' import { addCurrencies } from './conversion-util' abiDecoder.addABI(abi) @@ -35,58 +35,59 @@ export function getTokenData (data = '') { return abiDecoder.decodeMethod(data) } -async function getMethodFrom4Byte (fourBytePrefix) { - const fourByteResponse = await fetchWithCache( - `https://www.4byte.directory/api/v1/signatures/?hex_signature=${fourBytePrefix}`, - { - referrerPolicy: 'no-referrer-when-downgrade', - body: null, - method: 'GET', - mode: 'cors', - } - ) - - if (fourByteResponse.count === 1) { - return fourByteResponse.results[0].text_signature - } else { - return null - } -} - -const registry = new MethodRegistry({ provider: global.ethereumProvider }) +// async function getMethodFrom4Byte (fourBytePrefix) { +// const fourByteResponse = await fetchWithCache( +// `https://www.4byte.directory/api/v1/signatures/?hex_signature=${fourBytePrefix}`, +// { +// referrerPolicy: 'no-referrer-when-downgrade', +// body: null, +// method: 'GET', +// mode: 'cors', +// } +// ) + +// if (fourByteResponse.count === 1) { +// return fourByteResponse.results[0].text_signature +// } else { +// return null +// } +// } + +// const registry = new MethodRegistry({ provider: global.ethereumProvider }) /** * Attempts to return the method data from the MethodRegistry library, the message registry library and the token abi, in that order of preference * @param {string} fourBytePrefix - The prefix from the method code associated with the data * @returns {Object} */ -export async function getMethodDataAsync (fourBytePrefix) { - try { - const fourByteSig = getMethodFrom4Byte(fourBytePrefix).catch((e) => { - log.error(e) - return null - }) - - let sig = await registry.lookup(fourBytePrefix) - - if (!sig) { - sig = await fourByteSig - } - - if (!sig) { - return {} - } - - const parsedResult = registry.parse(sig) - - return { - name: parsedResult.name, - params: parsedResult.args, - } - } catch (error) { - log.error(error) - return {} - } +export async function getMethodDataAsync (/* fourBytePrefix */) { + return {} + // try { + // const fourByteSig = getMethodFrom4Byte(fourBytePrefix).catch((e) => { + // log.error(e) + // return null + // }) + + // let sig = await registry.lookup(fourBytePrefix) + + // if (!sig) { + // sig = await fourByteSig + // } + + // if (!sig) { + // return {} + // } + + // const parsedResult = registry.parse(sig) + + // return { + // name: parsedResult.name, + // params: parsedResult.args, + // } + // } catch (error) { + // log.error(error) + // return {} + // } } export function isConfirmDeployContract (txData = {}) { diff --git a/ui/app/pages/confirm-transaction/conf-tx.js b/ui/app/pages/confirm-transaction/conf-tx.js index 50acb9246464..f95f397f504e 100644 --- a/ui/app/pages/confirm-transaction/conf-tx.js +++ b/ui/app/pages/confirm-transaction/conf-tx.js @@ -112,7 +112,7 @@ class ConfirmTxScreen extends Component { signatureSelect (type, version) { // Temporarily direct only v3 and v4 requests to new code. if ( - type === 'eth_signTypedData' && + (type === 'cfx_signTypedData' || type === 'eth_signTypedData') && (version === 'V3' || version === 'V4') ) { return SignatureRequest diff --git a/ui/app/store/actions.js b/ui/app/store/actions.js index 0e62d28e28ab..dc50b4fde576 100644 --- a/ui/app/store/actions.js +++ b/ui/app/store/actions.js @@ -591,31 +591,31 @@ export function setCurrentCurrency (currencyCode) { } } -export function signMsg (msgData) { - log.debug('action - signMsg') - return (dispatch) => { - dispatch(showLoadingIndication()) - return new Promise((resolve, reject) => { - log.debug(`actions calling background.signMessage`) - background.signMessage(msgData, (err, newState) => { - log.debug('signMessage called back') - dispatch(updateMetamaskState(newState)) - dispatch(hideLoadingIndication()) - - if (err) { - log.error(err) - dispatch(displayWarning(err.message)) - return reject(err) - } - - dispatch(completedTx(msgData.metamaskId)) - dispatch(closeCurrentNotificationWindow()) - - return resolve(msgData) - }) - }) - } -} +// export function signMsg (msgData) { +// log.debug('action - signMsg') +// return (dispatch) => { +// dispatch(showLoadingIndication()) +// return new Promise((resolve, reject) => { +// log.debug(`actions calling background.signMessage`) +// background.signMessage(msgData, (err, newState) => { +// log.debug('signMessage called back') +// dispatch(updateMetamaskState(newState)) +// dispatch(hideLoadingIndication()) + +// if (err) { +// log.error(err) +// dispatch(displayWarning(err.message)) +// return reject(err) +// } + +// dispatch(completedTx(msgData.metamaskId)) +// dispatch(closeCurrentNotificationWindow()) + +// return resolve(msgData) +// }) +// }) +// } +// } export function signPersonalMsg (msgData) { log.debug('action - signPersonalMsg') @@ -643,6 +643,8 @@ export function signPersonalMsg (msgData) { } } +export const signMsg = signPersonalMsg + export function decryptMsgInline (decryptedMsgData) { log.debug('action - decryptMsgInline') return (dispatch) => { @@ -1061,26 +1063,26 @@ export function txError (err) { } } -export function cancelMsg (msgData) { - return (dispatch) => { - dispatch(showLoadingIndication()) - return new Promise((resolve, reject) => { - background.cancelMessage(msgData.id, (err, newState) => { - dispatch(updateMetamaskState(newState)) - dispatch(hideLoadingIndication()) +// export function cancelMsg (msgData) { +// return (dispatch) => { +// dispatch(showLoadingIndication()) +// return new Promise((resolve, reject) => { +// background.cancelMessage(msgData.id, (err, newState) => { +// dispatch(updateMetamaskState(newState)) +// dispatch(hideLoadingIndication()) - if (err) { - return reject(err) - } +// if (err) { +// return reject(err) +// } - dispatch(completedTx(msgData.id)) - dispatch(closeCurrentNotificationWindow()) +// dispatch(completedTx(msgData.id)) +// dispatch(closeCurrentNotificationWindow()) - return resolve(msgData) - }) - }) - } -} +// return resolve(msgData) +// }) +// }) +// } +// } export function cancelPersonalMsg (msgData) { return (dispatch) => { @@ -1104,6 +1106,8 @@ export function cancelPersonalMsg (msgData) { } } +export const cancelMsg = cancelPersonalMsg + export function cancelDecryptMsg (msgData) { return (dispatch) => { dispatch(showLoadingIndication()) diff --git a/yarn.lock b/yarn.lock index 3693f89cd5af..b1c56a33edbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2731,10 +2731,10 @@ pify "^3.0.0" safe-event-emitter "^1.0.1" -"@yqrashawn/conflux-local-network-lite@^2.0.0-beta": - version "2.0.0-beta" - resolved "https://registry.yarnpkg.com/@yqrashawn/conflux-local-network-lite/-/conflux-local-network-lite-2.0.0-beta.tgz#c00e449b62726eaed768bfa2123086ec228a6458" - integrity sha512-b6qa3HTNRoIWocwIKz9ey2UvHnH+4JshCChkdGm1MSPcyp08WY+QcvDgwJfZ4C0Mr7qLzfSEFnfnOxm+jYxd9w== +"@yqrashawn/conflux-local-network-lite@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@yqrashawn/conflux-local-network-lite/-/conflux-local-network-lite-2.0.1.tgz#b4e10b927ece3495d820f704140eb7de2297165c" + integrity sha512-BFckbt8tZC+7F8/js75icjYzR1WchlgY8gst7AY8SjxFEx83PvA2ZLxskAOLP9r72FgtAy5fSIG+/X/O2nPSkA== dependencies: ethereumjs-util "^6.2.0" express "^4.17.1" @@ -6041,6 +6041,22 @@ cephes@^1.1.2: resolved "https://registry.yarnpkg.com/cephes/-/cephes-1.2.0.tgz#4d246b622bc488ab8c982a1f702f0c9f49705d96" integrity sha512-twuUuJRrIrsELHz6foJtZlqrz6FC36zoHZJvvThsrM1UWPKxyoilw1Rka6Hk0AmPFKHKUoGwGfAtvNZNtNZu0g== +cfx-keyring-controller@^5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/cfx-keyring-controller/-/cfx-keyring-controller-5.6.1.tgz#bf1fa02bc5ad242625f528a19efc030d1a8f1e4a" + integrity sha512-IyPpQ9E9KfHYpI3Prj/bbklfATN2MF42hA3IfJaUIeSdrlNUxnfPNqpuGuRZ9Xu/I1R30YpQoDujRx8H0n75rg== + dependencies: + bip39 "^2.4.0" + bluebird "^3.5.0" + browser-passworder "^2.0.3" + eth-hd-keyring "^3.5.0" + eth-sig-util "^1.4.0" + eth-simple-keyring "^3.5.0" + ethereumjs-util "^5.1.2" + js-conflux-sdk "^0.8.0-alpha" + loglevel "^1.5.0" + obs-store "^4.0.3" + "chai@>=1.9.2 <4.0.0": version "3.5.0" resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" @@ -9844,21 +9860,6 @@ eth-keyring-controller@^5.3.0: loglevel "^1.5.0" obs-store "^4.0.3" -eth-keyring-controller@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/eth-keyring-controller/-/eth-keyring-controller-5.5.0.tgz#f8b78f69a0b0005873af2d1a6b2c655d6de51351" - integrity sha512-kWaukiHLMYNYtB/1vZyj1r1G6wU8u+DIYVMq8QUyFAxwcBnemsKISVPIXgltgXkuUiB/t9oXsA54bWBredgrVg== - dependencies: - bip39 "^2.4.0" - bluebird "^3.5.0" - browser-passworder "^2.0.3" - eth-hd-keyring "^3.5.0" - eth-sig-util "^1.4.0" - eth-simple-keyring "^3.5.0" - ethereumjs-util "^5.1.2" - loglevel "^1.5.0" - obs-store "^4.0.3" - eth-ledger-bridge-keyring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eth-ledger-bridge-keyring/-/eth-ledger-bridge-keyring-0.2.0.tgz#715de14da24496c35cdb433022a20bd21b984f7e" @@ -9899,13 +9900,6 @@ eth-method-registry@1.1.0: dependencies: ethjs "^0.3.0" -eth-method-registry@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eth-method-registry/-/eth-method-registry-1.2.0.tgz#2160592d7938ef0b850c9267bc40b3470c2700c9" - integrity sha512-m+nphH4kOxz5KTvQ+BeIKVggxAul1sp4Ev09lfxRXIEHM1t/6NQEtaErL5ddTDFXXFVtTiW8uC9edTVUTnBZNg== - dependencies: - ethjs "^0.3.0" - eth-phishing-detect@^1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/eth-phishing-detect/-/eth-phishing-detect-1.1.13.tgz#ed718b933c8a69fef0cefa6604538824b472dbea" @@ -11868,6 +11862,34 @@ fuse.js@^3.4.6: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.4.6.tgz#545c3411fed88bf2e27c457cab6e73e7af697a45" integrity sha512-H6aJY4UpLFwxj1+5nAvufom5b2BT2v45P1MkPvdGIK8fWjQx/7o6tTT1+ALV0yawQvbmvCF0ufl2et8eJ7v7Cg== +gaba@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/gaba/-/gaba-1.10.0.tgz#f01e4462f8b7e72a02d9558977ea411d8f7a9a09" + integrity sha512-2WEN3YgBh9kP7xow5K579bWsvCaH8c+HE75N9VZHQtGFZmK41q/U9MfRuRx4PREfUgP0S/O9GzQz+Uu0HvA19g== + dependencies: + await-semaphore "^0.1.3" + eth-contract-metadata "^1.11.0" + eth-ens-namehash "^2.0.8" + eth-json-rpc-errors "^2.0.2" + eth-json-rpc-infura "^4.0.1" + eth-keyring-controller "^5.3.0" + eth-method-registry "1.1.0" + eth-phishing-detect "^1.1.13" + eth-query "^2.1.2" + eth-sig-util "^2.3.0" + ethereumjs-util "^6.1.0" + ethereumjs-wallet "0.6.0" + ethjs-query "^0.3.8" + human-standard-collectible-abi "^1.0.2" + human-standard-token-abi "^2.0.0" + isomorphic-fetch "^2.2.1" + jsonschema "^1.2.4" + percentile "^1.2.1" + single-call-balance-checker-abi "^1.0.0" + uuid "^3.3.2" + web3 "^0.20.7" + web3-provider-engine "^15.0.4" + gaba@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/gaba/-/gaba-1.9.3.tgz#4e0e106f3640930f1f06ffe72546903b4c51813e"