Metamask-extension: `window.ethereum.request({method: 'eth_requestAccounts'})` hangs indifinitely on some sites after installing the `8.0.7` update

Created on 14 Aug 2020  路  4Comments  路  Source: MetaMask/metamask-extension

Hi.
Continuing my thread from https://github.com/MetaMask/metamask-extension/issues/8077#issuecomment-674127803

I found the stack trace that seems to be coming from your extension.

inpage.js:15 Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'Window': Symbol(Symbol.toStringTag) could not be cloned.
    at o._write (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:15:7404)
    at b (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:15:27879)
    at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:15:30995
    at o.v.write (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:15:31022)
    at t.exports.y (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:15:20323)
    at h (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:8:21103)
    at t.exports.s.emit (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:8:24089)
    at _ (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:15:15164)
    at w (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:15:14979)
    at t.exports.b.push (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/inpage.js:15:15790)

This does not seem to happen in all sites, I'm still searching for what of our actions cause pageScript to yield this error.

Checked on few pcs of my colleagues, they all had metamask working ok with our dapp in 8.0.6, but in 8.0.7 this issue appeared.

Not sure how, but this seems to be related to when we call jQuery $.ajax() to fetch our server data. It seems to somehow get into your _runMiddleware() function...

And the curious thing is that issue only happens when I set this.web3 = window.web3 in a Vue component, even without doing anything with it. Could there be some mutation observer or proxy magic happening with window.web3 object that conflicts with Vue reactive properties?

Here is a more complete stack trace if that helps:
(source of the stack trace: https://drive.google.com/file/d/1n39-kkRIRi0hDtvSvYrmrFcyazwn84eb/view?usp=sharing)


o._write | @ | inpage.js:formatted:5385
-- | -- | --
聽 | b | @ | inpage.js:formatted:6447
聽 | (anonymous) | @ | inpage.js:formatted:6599
聽 | v.write | @ | inpage.js:formatted:6601
聽 | y | @ | inpage.js:formatted:6071
聽 | h | @ | inpage.js:formatted:3752
聽 | s.emit | @ | inpage.js:formatted:3905
聽 | _ | @ | inpage.js:formatted:5817
聽 | w | @ | inpage.js:formatted:5811
聽 | b.push | @ | inpage.js:formatted:5843
聽 | _write | @ | inpage.js:formatted:5144
聽 | b | @ | inpage.js:formatted:6447
聽 | (anonymous) | @ | inpage.js:formatted:6599
聽 | v.write | @ | inpage.js:formatted:6601
聽 | y | @ | inpage.js:formatted:6071
聽 | h | @ | inpage.js:formatted:3752
聽 | s.emit | @ | inpage.js:formatted:3905
聽 | _ | @ | inpage.js:formatted:5817
聽 | w | @ | inpage.js:formatted:5811
聽 | b.push | @ | inpage.js:formatted:5843
聽 | middleware | @ | inpage.js:formatted:4977
聽 | (anonymous) | @ | inpage.js:formatted:1915
聽 | (anonymous) | @ | inpage.js:formatted:513
聽 | c | @ | inpage.js:formatted:470
聽 | (anonymous) | @ | inpage.js:formatted:474
聽 | _e | @ | inpage.js:formatted:511
聽 | (anonymous) | @ | inpage.js:formatted:528
聽 | (anonymous) | @ | inpage.js:formatted:482
聽 | _runMiddlewareDown | @ | inpage.js:formatted:1905
聽 | (anonymous) | @ | inpage.js:formatted:1889
聽 | n | @ | inpage.js:formatted:1590
聽 | Ir | @ | inpage.js:formatted:1597
聽 | _runMiddleware | @ | inpage.js:formatted:1889
聽 | _handle | @ | inpage.js:formatted:1878
聽 | handle | @ | inpage.js:formatted:1854
聽 | _rpcRequest | @ | inpage.js:formatted:2268
聽 | (anonymous) | @ | inpage.js:formatted:2230
聽 | request | @ | inpage.js:formatted:2229
聽 | get | @ | inpage.js:formatted:102
聽 | isPlainObject | @ | vue.runtime.esm.js?2b0e:64
聽 | observe | @ | vue.runtime.esm.js?2b0e:984
聽 | reactiveSetter | @ | vue.runtime.esm.js?2b0e:1054
聽 | proxySetter | @ | vue.runtime.esm.js?2b0e:4631
聽 | loaded | @ | LoginManagerEmail.vue?1dd4:230
聽 | created | @ | LoginManagerEmail.vue?1dd4:223
聽 | invokeWithErrorHandling | @ | vue.runtime.esm.js?2b0e:1854
聽 | callHook | @ | vue.runtime.esm.js?2b0e:4219
聽 | Vue._init | @ | vue.runtime.esm.js?2b0e:5008
聽 | LoginManagerEmail | @ | vue.runtime.esm.js?2b0e:5154
聽 | createComponentInstanceForVnode | @ | vue.runtime.esm.js?2b0e:3283
聽 | init | @ | vue.runtime.esm.js?2b0e:3114
聽 | createComponent | @ | vue.runtime.esm.js?2b0e:5978
聽 | createElm | @ | vue.runtime.esm.js?2b0e:5925
聽 | createChildren | @ | vue.runtime.esm.js?2b0e:6053
聽 | createElm | @ | vue.runtime.esm.js?2b0e:5954
聽 | patch | @ | vue.runtime.esm.js?2b0e:6477
聽 | Vue._update | @ | vue.runtime.esm.js?2b0e:3945
聽 | updateComponent | @ | vue.runtime.esm.js?2b0e:4066
聽 | get | @ | vue.runtime.esm.js?2b0e:4479
聽 | Watcher | @ | vue.runtime.esm.js?2b0e:4468
聽 | mountComponent | @ | vue.runtime.esm.js?2b0e:4073
聽 | Vue.$mount | @ | vue.runtime.esm.js?2b0e:8415
聽 | init | @ | vue.runtime.esm.js?2b0e:3118
聽 | createComponent | @ | vue.runtime.esm.js?2b0e:5978
聽 | createElm | @ | vue.runtime.esm.js?2b0e:5925
聽 | patch | @ | vue.runtime.esm.js?2b0e:6516
聽 | Vue._update | @ | vue.runtime.esm.js?2b0e:3945
聽 | updateComponent | @ | vue.runtime.esm.js?2b0e:4066
聽 | get | @ | vue.runtime.esm.js?2b0e:4479
聽 | Watcher | @ | vue.runtime.esm.js?2b0e:4468
聽 | mountComponent | @ | vue.runtime.esm.js?2b0e:4073
聽 | Vue.$mount | @ | vue.runtime.esm.js?2b0e:8415
聽 | eval | @ | LoginManager.ts?00fa:108
聽 | eval | @ | PopupManager.ts?0b08:18
聽 | _show | @ | TemplateManager.ts?9433:410
聽 | eval | @ | TemplateManager.ts?9433:267
聽 | success | @ | TemplateManager.ts?9433:304
聽 | i | @ | jquery-3.2.1.min.js:2
聽 | fireWith | @ | jquery-3.2.1.min.js:2
聽 | A | @ | jquery-3.2.1.min.js:4
聽 | (anonymous) | @ | jquery-3.2.1.min.js:4
聽 | load (async) | 聽 | 聽
聽 | send | @ | jquery-3.2.1.min.js:4
聽 | ajax | @ | jquery-3.2.1.min.js:4
聽 | load_pack | @ | TemplateManager.ts?9433:291
聽 | load_pack_and_show_default_template | @ | TemplateManager.ts?9433:262
聽 | show | @ | TemplateManager.ts?9433:255
聽 | show | @ | PopupManager.ts?0b08:9
聽 | runLogIn | @ | LoginManager.ts?00fa:83
聽 | eval | @ | login.ts?2d00:12
聽 | _show | @ | TemplateManager.ts?9433:410
聽 | eval | @ | TemplateManager.ts?9433:267
聽 | success | @ | TemplateManager.ts?9433:304
聽 | i | @ | jquery-3.2.1.min.js:2
聽 | fireWith | @ | jquery-3.2.1.min.js:2
聽 | A | @ | jquery-3.2.1.min.js:4
聽 | (anonymous) | @ | jquery-3.2.1.min.js:4
聽 | load (async) | 聽 | 聽
聽 | send | @ | jquery-3.2.1.min.js:4
聽 | ajax | @ | jquery-3.2.1.min.js:4
聽 | load_pack | @ | TemplateManager.ts?9433:291
聽 | load_pack_and_show_default_template | @ | TemplateManager.ts?9433:262
聽 | show | @ | TemplateManager.ts?9433:255
聽 | process | @ | login.ts?2d00:9


S1-high T00-bug

Most helpful comment

I was able to reproduce this issue by creating a Symbol, and using it as a property of window.web3 on a site where our web3 library is injected.

All 4 comments

I'm going to fix this asap, but until I do you can experience the issue in your browser by visiting:
https://blockchaincuties.com/login

Thank you for creating an issue, @klesun. We will investigate and follow up!

I was able to reproduce this issue by creating a Symbol, and using it as a property of window.web3 on a site where our web3 library is injected.

Was this page helpful?
0 / 5 - 0 ratings