官方文档:ethers,小白新手上路,记录下v6版本的坑,现在v5的教程挺多的,v6真的是挺难找的,只能靠自己慢慢翻译了。
一、前期准备
1.本地区块链Ganache,文件下载后是appx,用cmd命令行安装,安装完后打开Ganache就选quickstar,就在本地生成了一个简单的区块链了。(想保存就点右上角的save)。
2.钱包,这里用的metamask谷歌浏览器的插件。
然后在钱包里导入Ganache里某个账户的私钥就生成账户了。
- 部署智能合约
在 remix 上部署,编译环境选择LONDON
,部署环境选择本地的Ganache
二、Ethers.js
1.npm下载库
代码如下(示例):
npm install ethers
导入库
// Import everything
import { ethers } from "ethers";
// Import just a few select items
import { BrowserProvider, parseUnits } from "ethers";
// Import from a specific export
import { HDNodeWallet } from "ethers/wallet";
2.Provider
provider用来链接 区块链,只能进行读的操作:
let provider;
if (window.ethereum == null) {
console.log("MetaMask not installed; using read-only defaults");
provider = ethers.getDefaultProvider();
} else {
provider = new ethers.BrowserProvider(window.ethereum);
console.log(provider);
}
3.Singer
Singer 能进行读和写的操作:
const signer = await provider.getSigner(); //用await是因为读取区块链都是异步的。
4.Contract合约
contract是用来调用合约里的方法的。
const contract = new ethers.Contract(
contractAddress, //部署的地址
contractABI, //编译合约时生成的API
signer //上面得到的signer
);
// 通过contract.funName()来调用合约里的方法
const tx = await contract.addProposal(args);
//等待合约交易成功,因为发布交易需要连接钱包去签名,所以打开钱包需要等待1-2分钟(看你的网络)。
await tx.wait();
5.wallet 钱包
钱包是用来处理转账的。
const wallet2 = new ethers.Wallet(PRIVATEKEY, provider);
const value = Number(this.curETH) - 0;
// 创建交易请求,参数:to为接收地址,value为ETH数额
const tx = {
to: contractAddress,
value: ethers.parseEther(value.toString()),
};
//发送交易,获得收据
const txRes = await wallet2.sendTransaction(tx);
const receipt = await txRes.wait(); // 等待链上确认交易
console.log(receipt); // 打印交易的收据
监听事件
可以用contract.on(‘funcitonName’,(args)=>{})来监听,但监听方法名依赖网络,不稳定
//改用filters监听事件,好用,稳定触发,GetProposals()为合约里的方法
const myEventFilter = contract.filters.GetProposals();
// 订阅事件
const myEventListener = contract.on(myEventFilter, (event) => {
console.log(
"MyEvent fired!", //事件返回的参数
event.args[0], //from
event.args[1], //proposal_name
event.args[2], //voteCount
event.args[3] //id
);
总结
本文仅仅简单介绍了ethers.js v6的使用,而thers.js v6提供了大量能使我们快速便捷地处理数据的函数和方法。