Jes*_*sie 6 javascript reactjs ethereum web3-donotuse
我尝试后得到了空数组,web3.eth.getAccounts().then(console.log);并且还收到了一个警告,即./node_modules/web3-eth-accounts/src/scrypt.js Critical dependency: the request of a dependency is an expression. 在这个项目中,我首先命令create-react-app lottery_react,然后我在lottery_react文件夹中更改App.js的所有内容都只修改一行web3.eth.getAccounts().then(console.log);并创建web3.js文件。我找不到这些文件有什么问题。请帮忙!
这是我的 App.js
import React, {Component} from 'react';
import logo from './logo.svg';
import './App.css';
import web3 from './web3';
class App extends Component {
render(){
web3.eth.getAccounts().then(console.log);
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
这是我的 web3.js 文件
import Web3 from 'web3';
const web3 = new Web3(window.web3.currentProvider);
export default web3;
Run Code Online (Sandbox Code Playgroud)
很简单,你只需要在浏览器中启用以太坊,你可以这样做:只需添加“ await window.ethereum.enable();”
const getData = async () => {
const web3 = new Web3(Web3.givenProvider);
const network = await web3.eth.net.getNetworkType();
await window.ethereum.enable();
const accounts = await web3.eth.getAccounts();
setAccount(accounts[0]);
console.log("TCL: getData -> network", network);
console.log("TCL: getData -> accounts", accounts);
};
Run Code Online (Sandbox Code Playgroud)
小智 7
默认情况下,Metamask 似乎不再公开帐户,因此如果您想访问它们,您需要征求用户的许可。详细内容您可以在本公告中查看
长话短说,将您的 web3.js 文件更新为:
import Web3 from 'web3';
const web3 = new Web3(window.web3.currentProvider);
window.addEventListener("load", async () => {
// Modern dapp browsers...
if (window.ethereum) {
window.web3 = new Web3(window.ethereum);
try {
// Request account access if needed
await window.ethereum.enable();
} catch (error) {
// User denied account access...
}
}
// Legacy dapp browsers...
else if (window.web3) {
window.web3 = new Web3(web3.currentProvider);
}
// Non-dapp browsers...
else {
console.log("Non-Ethereum browser detected. You should consider trying MetaMask!");
}
});
export default web3;
Run Code Online (Sandbox Code Playgroud)
您现在需要请求用户的许可才能获取他们的帐户。所以代替
web3.eth.getAccounts().then(console.log);
Run Code Online (Sandbox Code Playgroud)
做
web3.eth.requestAccounts().then(console.log);
Run Code Online (Sandbox Code Playgroud)
小智 3
相反const web3 = new Web3(window.web3.currentProvider);,你可以尝试
const web3 = new Web3(new Web3.providers.HttpProvider(`http://127.0.0.1:7545`));
Run Code Online (Sandbox Code Playgroud)
我假设您正在端口上本地运行以太坊7545
| 归档时间: |
|
| 查看次数: |
3746 次 |
| 最近记录: |