Uncaught Error: Invalid Address web3.currentProvider MetaMask
Uncaught Error: Invalid Address web3.currentProvider MetaMask
我已经将我的 ERC721 合约部署到 Rinkeby 测试网。合约已成功部署。我无法使用 MetaMask 调用交易。花了一整天的时间来解决这个问题。找到了一些说明本地托管文件问题或 web3.js 不适用于 MetaMask 的答案。
<script>
if (typeof web3 != 'undefined') {
web3 = new Web3(web3.currentProvider) // what Metamask injected
console.log("existing web3: provider " + typeof web3);
} else {
// Instantiate and set Ganache as your provider
web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/v3/api-key"));
console.log("new provider " + web3);
web3.eth.defaultAccount = web3.eth.accounts[0]
}
// The interface definition for your smart contract (the ABI)
var StarNotary = web3.eth.contract(
[contract-abi]
)
const starNotary = StarNotary.at('0x7cfAD6E80D992599d989166aABf536b21215544C')
function claimStar() {
web3.eth.getAccounts(function(error, accounts) {
if (error) {
hotsnackbar(false, error);
return
}
Uncaught Error: invalid address
at u (web3.min.js:1)
at inputTransactionFormatter (web3.min.js:1)
at web3.min.js:1
at Array.map ()
at i.formatInput (web3.min.js:1)
at i.toPayload (web3.min.js:1)
at _.e [as sendTransaction] (web3.min.js:1)
at c.sendTransaction (web3.min.js:1)
at index.html:589
at web3.min.js:1
这是一个完整的演示,其中包括授权 MetaMask 合约等介绍性步骤。
https://fulldecent.github.io/spend-ERC20-create-ERC721/
这是我认为您会感兴趣的特定代码:
https://github.com/fulldecent/spend-ERC20-create-ERC721/blob/master/docs/index.html#L102-L114
if (window.ethereum) {
window.web3 = new Web3(ethereum);
$('#need-metamask').hide();
} else {
console.log('Non-Ethereum browser detected. Install MetaMask.');
return;
}
window.web3.version.getNetwork((err, netId) => {
if (netId == "3") {
$('#need-ropsten').hide();
}
});
https://github.com/fulldecent/spend-ERC20-create-ERC721/blob/master/docs/index.html#L121-L127
try {
await ethereum.enable();
$('#need-enable').hide();
} catch (error) {
console.log("ERROR: Enable account access and reload.");
return;
}
我在使用 Rinkeby testnet 和 Metamask 开发 DApp 时也遇到了同样的问题。
当我的 web3.js
文件如下时
import Web3 from 'web3';
let web3;
if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
// We are in the browser and metamask is running.
web3 = new Web3(window.web3.currentProvider);
} else {
// We are on the server *OR* the user is not running metamask
const provider = new Web3.providers.HttpProvider(
'Infura API key'
);
web3 = new Web3(provider);
//window.web3.currentProvider.enable();
}
export default web3;
当我 运行
npm start
或 npm run dev
(取决于您的启动脚本)
浏览器抛出错误 "uncaught error: No 'from' address specified "
当我打开浏览器控制台并执行 web.currentProvider
时,它抛出了同样的错误。
所以有一件事很清楚,Metamask 没有与浏览器联系。
我做的是
我在 Metamask 登录的情况下保持浏览器打开。
并在命令提示符下将 web3.js 更改为服务器 运行ning 并保存文件。
import Web3 from 'web3';
let web3;
if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
// We are in the browser and metamask is running.
//Note: change to window.web3.currentProvider.enable()
web3 = new Web3(window.web3.currentProvider.enable());
} else {
// We are on the server *OR* the user is not running metamask
const provider = new Web3.providers.HttpProvider(
'Infura API'
);
web3 = new Web3(provider);
//window.web3.currentProvider.enable();
}
export default web3;
保存文件后
Metamask 会提示您它想从您的帐户建立连接。
点击是。
并从上面的代码中删除 .enable() 并保存您的代码。
这可能是一个临时解决方案,但确实有效!
web3.js 文件
import Web3 from 'web3';
let provider;
// if on server or browser
if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
// we are in browser and metamask present
provider = window.web3.currentProvider;
}
else {
// we are on server OR metamask not present
provider = new Web3.providers.HttpProvider(
'https://rinkeby.infura.io/v3/API_KEY'
);
}
const web3 = new Web3(provider);
export default web3;
不要将 new Web3() 放在 if 块本身中。托管(本地或服务器上)后,打开 metamask 设置 -> 连接并添加您的站点以授予对 metamask 的访问权限。
在 metamask 和 web3 错误之后花了几天时间,对我来说效果很好!
我已经将我的 ERC721 合约部署到 Rinkeby 测试网。合约已成功部署。我无法使用 MetaMask 调用交易。花了一整天的时间来解决这个问题。找到了一些说明本地托管文件问题或 web3.js 不适用于 MetaMask 的答案。
<script>
if (typeof web3 != 'undefined') {
web3 = new Web3(web3.currentProvider) // what Metamask injected
console.log("existing web3: provider " + typeof web3);
} else {
// Instantiate and set Ganache as your provider
web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/v3/api-key"));
console.log("new provider " + web3);
web3.eth.defaultAccount = web3.eth.accounts[0]
}
// The interface definition for your smart contract (the ABI)
var StarNotary = web3.eth.contract(
[contract-abi]
)
const starNotary = StarNotary.at('0x7cfAD6E80D992599d989166aABf536b21215544C')
function claimStar() {
web3.eth.getAccounts(function(error, accounts) {
if (error) {
hotsnackbar(false, error);
return
}
Uncaught Error: invalid address at u (web3.min.js:1) at inputTransactionFormatter (web3.min.js:1) at web3.min.js:1 at Array.map () at i.formatInput (web3.min.js:1) at i.toPayload (web3.min.js:1) at _.e [as sendTransaction] (web3.min.js:1) at c.sendTransaction (web3.min.js:1) at index.html:589 at web3.min.js:1
这是一个完整的演示,其中包括授权 MetaMask 合约等介绍性步骤。
https://fulldecent.github.io/spend-ERC20-create-ERC721/
这是我认为您会感兴趣的特定代码:
https://github.com/fulldecent/spend-ERC20-create-ERC721/blob/master/docs/index.html#L102-L114
if (window.ethereum) {
window.web3 = new Web3(ethereum);
$('#need-metamask').hide();
} else {
console.log('Non-Ethereum browser detected. Install MetaMask.');
return;
}
window.web3.version.getNetwork((err, netId) => {
if (netId == "3") {
$('#need-ropsten').hide();
}
});
https://github.com/fulldecent/spend-ERC20-create-ERC721/blob/master/docs/index.html#L121-L127
try {
await ethereum.enable();
$('#need-enable').hide();
} catch (error) {
console.log("ERROR: Enable account access and reload.");
return;
}
我在使用 Rinkeby testnet 和 Metamask 开发 DApp 时也遇到了同样的问题。
当我的 web3.js
文件如下时
import Web3 from 'web3';
let web3;
if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
// We are in the browser and metamask is running.
web3 = new Web3(window.web3.currentProvider);
} else {
// We are on the server *OR* the user is not running metamask
const provider = new Web3.providers.HttpProvider(
'Infura API key'
);
web3 = new Web3(provider);
//window.web3.currentProvider.enable();
}
export default web3;
当我 运行
npm start
或 npm run dev
(取决于您的启动脚本)
浏览器抛出错误 "uncaught error: No 'from' address specified "
当我打开浏览器控制台并执行 web.currentProvider
时,它抛出了同样的错误。
所以有一件事很清楚,Metamask 没有与浏览器联系。
我做的是
我在 Metamask 登录的情况下保持浏览器打开。 并在命令提示符下将 web3.js 更改为服务器 运行ning 并保存文件。
import Web3 from 'web3';
let web3;
if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
// We are in the browser and metamask is running.
//Note: change to window.web3.currentProvider.enable()
web3 = new Web3(window.web3.currentProvider.enable());
} else {
// We are on the server *OR* the user is not running metamask
const provider = new Web3.providers.HttpProvider(
'Infura API'
);
web3 = new Web3(provider);
//window.web3.currentProvider.enable();
}
export default web3;
保存文件后 Metamask 会提示您它想从您的帐户建立连接。
点击是。
并从上面的代码中删除 .enable() 并保存您的代码。
这可能是一个临时解决方案,但确实有效!
web3.js 文件
import Web3 from 'web3';
let provider;
// if on server or browser
if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
// we are in browser and metamask present
provider = window.web3.currentProvider;
}
else {
// we are on server OR metamask not present
provider = new Web3.providers.HttpProvider(
'https://rinkeby.infura.io/v3/API_KEY'
);
}
const web3 = new Web3(provider);
export default web3;
不要将 new Web3() 放在 if 块本身中。托管(本地或服务器上)后,打开 metamask 设置 -> 连接并添加您的站点以授予对 metamask 的访问权限。 在 metamask 和 web3 错误之后花了几天时间,对我来说效果很好!