我最近在重新学ethers.js
,巩固一下细节,也写一个WTF Ethers极简入门
,供小白们使用。
WTF Academy社群: 官网 wtf.academy | WTF Solidity教程 | discord | 微信群申请
所有代码和教程开源在github: github.com/WTFAcademy/WTFEthers
这一讲,我们将介绍如何通过 ethers.js
在网页上连接小狐狸钱包,读取账户地址,chainID,以及 ETH
余额。
Metamask(小狐狸)钱包是以太坊最受欢迎的开源钱包,它可以作为PC端的浏览器插件或移动端(安卓和苹果)的APP使用。
在使用Metamask开发前,你需要先下载它。记住:
一定要在官网上下载: https://metamask.io/download/
一定要在官网上下载: https://metamask.io/download/
一定要在官网上下载: https://metamask.io/download/
重要的事情说三遍。很多多用户钱包被盗,就是下载了盗版的小狐狸钱包之后输入了助记词/私钥。
在安装好metamask钱包后,浏览器会给每个页面注入一个window.ethereum
对象,用于和钱包交互。ethers.js
提供的 BrowserProvider
封装了一个标准的浏览器 Provider,直接在程序中生成一个provider对象,方便使用:
// 获得provider
const provider = new ethers.BrowserProvider(window.ethereum)
之后就像 ethers.js
中的 provider
一样使用就好,下面举几个例子。
首先,我们先写一个简单的HTML页面,因为小狐狸钱包是浏览器插件,必须在浏览器中使用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1 id="header">Connect to Metamask</h1>
<button class="connect"> Connect</button>
<h2>钱包地址: <span class="showAccount"></span></h2>
<h2>ChainID: <span class="showChainID"></span></h2>
<h2>ETH 余额: <span class="showETHBalance"></span></h2>
</body>
</html>
然后我们写一些javascript
脚本嵌入进去。
-
引入
ethers.js
包,获取页面中的按钮和文本变量,给按钮加一个监听器,被点击时会触发onClickHandler()
函数。import { ethers } from "https://cdnjs.cloudflare.com/ajax/libs/ethers/6.2.3/ethers.js"; const ethereumButton = document.querySelector('.connect'); const showAccount = document.querySelector('.showAccount'); const showChainID = document.querySelector('.showChainID'); const showETHBalance = document.querySelector('.showETHBalance'); ethereumButton.addEventListener(`click`, onClickHandler)
-
接下来我们写
onClickHandler()
函数的内容,首先连接metamask,创建provider
变量。// 获得provider const provider = new ethers.BrowserProvider(window.ethereum)
-
获取并打印钱包地址:
// 读取钱包地址 const accounts = await provider.send("eth_requestAccounts", []); const account = accounts[0] console.log(`钱包地址: ${account}`) showAccount.innerHTML = account;
-
获取并打印ChainID:
// 读取chainid const { chainId } = await provider.getNetwork() console.log(`chainid: ${chainId}`) showChainID.innerHTML = chainId;
-
读取并打印钱包的
ETH
余额:// 读取ETH余额 const signer = await provider.getSigner() const balance = await provider.getBalance(signer.getAddress()); console.log(`以太坊余额: ${ethers.formatUnits(balance)}`) showETHBalance.innerHTML = ethers.formatUnits(balance);
-
在本地运行时,你需要安装
http-server
包,你可以用下面这个命令通过npm
它。npm install --global http-server
然后切换到相应的文件夹,输入下面命令来运行这个网页。注意,直接点击
.html
文件是不能运行的。http-server .
如果你看到下面的输出,说明运行成功,打开下面给出的网址就可以打开网页了。
Starting up http-server, serving . Available on: http://127.0.0.1:8080 http://10.6.8.162:8080
这一讲,我们介绍了如何利用ethers.js
在网页中连接metamask钱包,读取账户地址,chainID,以及 ETH
余额。这是构建 DAPP 的基础。