From cdd7e40545af8e62fc586f8da120e8d05ca90653 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 20 Jul 2016 14:54:07 -0700 Subject: [PATCH] Make injected web3 fail hard on sync methods (#471) Make injected web3 fail hard on sync methods --- CHANGELOG.md | 2 ++ app/scripts/lib/inpage-provider.js | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c06da79e5..d1939570c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Current Master +- MetaMask now throws descriptive errors when apps try to use synchronous web3 methods. + ## 2.6.2 2016-07-20 - Fixed bug that would prevent the plugin from reopening on the first try after receiving a new transaction while locked. diff --git a/app/scripts/lib/inpage-provider.js b/app/scripts/lib/inpage-provider.js index 3b6ec154f..e387be895 100644 --- a/app/scripts/lib/inpage-provider.js +++ b/app/scripts/lib/inpage-provider.js @@ -107,7 +107,15 @@ function createSyncProvider (providerConfig) { syncProviderUrl = MetamaskConfig.network.default } } - return new HttpProvider(syncProviderUrl) + + const provider = new HttpProvider(syncProviderUrl) + // Stubbing out the send method to throw on sync methods: + provider.send = function() { + var message = 'The MetaMask Web3 object does not support synchronous methods. See https://github.com/MetaMask/faq#all-async---think-of-metamask-as-a-light-client for details.' + throw new Error(message) + } + + return provider } function remoteStoreWithLocalStorageCache (storageKey) {