Ethers.js v6踩坑日记


官方文档:ethers,小白新手上路,记录下v6版本的坑,现在v5的教程挺多的,v6真的是挺难找的,只能靠自己慢慢翻译了。


一、前期准备

1.本地区块链Ganache,文件下载后是appx,用cmd命令行安装,安装完后打开Ganache就选quickstar,就在本地生成了一个简单的区块链了。(想保存就点右上角的save)。在这里插入图片描述
2.钱包,这里用的metamask谷歌浏览器的插件。在这里插入图片描述
在这里插入图片描述
然后在钱包里导入Ganache里某个账户的私钥就生成账户了。

  1. 部署智能合约
    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提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值