ethers.js常用的操作方法

这篇具有很好参考价值的文章主要介绍了ethers.js常用的操作方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

安装:npm install --save@5.7.2 ethers

--ethers比web3来说使用方式相对简洁很多,主要就操作三个大对象

        1. Provider,(提供者)是一个用于连接以太坊网络的抽象类,提供了只读形式来访问区块链网络和获取链上状态;

        2. Signer,(签名器)通常是以某种方式直接或间接访问私钥,可以签名消息和在已授权网络中管理你账户中的以太币来进行交易。

        3. Contract(合约)是一个运行在以太坊网络上表示现实中特定合约的抽象,应用可以像使用JavaScript对象一样使用它。

1.创建一个Provider

import { ethers } from "ethers";
let provider = new ethers.providers.Web3Provider(window.ethereum)

1.1 判断用户的浏览器是否安装了metamask钱包

const isWallet = () => {
    if (window.ethereum) {
      console.log('安装了钱包')
    } else {
      console.log('未安装钱包')
    }
}
isWallet()

1.2 监听用户切换了当前连接的钱包账户

// 监听账户切换事件
window.ethereum.on("accountsChanged", function (accounts) {
  if (accounts.length > 0) {
    // 执行账户切换后的逻辑
    console.log('当前链接的账户地址是:'+accounts[0])
    //accounts里的是钱包链接的所有账户地址
  } else {
    // 处理没有连接账户的情况
    console.log('没有账户链接')
  }
})

 1.3 根据交易hash获取交易信息

// 获取交易收据
const receipt = await provider.getTransactionReceipt(txHash);
// 获取交易信息
const tranction = await provider.getTransaction(txHash)

2.创建一个Signer,在此之前要确保先链接用户钱包,获取地址

//参数有两个,第一个固定字符串,第二个数组,该方法会启动metask插件,并链接账户,返回结果是账户地址
const go = async () => {
  //地址,account是钱包里所有的账户地址
  let account = await provider.send("eth_requestAccounts", []);
  console,log(account)
  //signer
  let signer = provider.getSigner(account[0]);
  console,log(signer)
};
go();

2.1获取余额

let balance = await signer.getBalance()
console.log(balance)

2. 2格式化余额

//格式化后以eth为单位
let balance = ethers.utils.formatEther(balance)
console.log(balance)

3. 创建Contract(智能合约)

// 有三个参数  
const proxyContract = new ethers.Contract(
    address,//合约地址
    abi,//合约abi
    signer
 );
// 下面解释三个参数的含义

        --参数有三个,第一个是合约地址,第二个是合约abi,第三个是签名者,合约abi是solidity语言编写代码之后,编译成的json文件,需要文件里的abi字段作为第二个参数,json文件结构大概长这样:

ethers.js常用的操作方法

        --几万行的json文件,只需要其中的 abi 和 bytecode 生成地址作为第一个参数,其他的我们不care~

import { ContractFactory } from "ethers";//用于生成地址
import abi from "./UsufructNFT.json"; //引入json文件

// 参数有三个,1.abi   2. bytecode   3. signer;如果有合约文件的话都可以获取到
let factory = new ContractFactory(abi.abi, abi.bytecode, signer); 
let factoryRes = await factory.deploy();
console.log("合约地址: " + factoryRes.address);

        --参数都获取到就可以创建合约并调用合约上的属性及方法啦

  const proxyContract = new ethers.Contract(
    factoryRes.address,//合约地址
    abi.abi,//合约abi
    signer
  );
  console.log(proxyContract)

        --proxyContract 就是实例化的合约,可以使用proxyContract. 点合约上的方法

4. 监听区块变化的事件,可以捕获到交易、发布合约等动作

//监听区块变化触发
provider.on("block", async (blockNumber) => {
    console.log('当前变化的区块号码是:'+blockNumber);
      // 根据区块号获取交易信息获取
      const block = await provider.getBlock(blockNumber);
      // 获取区块中的交易列表
      const transactions = block.transactions;
      // 获取每笔交易的详细信息
      const transactionPromises = transactions.map((txHash) =>
        provider.getTransaction(txHash)
      );
      const transactionDetails = await Promise.all(transactionPromises);
      // 打印交易信息
      transactionDetails.forEach((tx) => {
        console.log(tx);
        console.log("Transaction Hash:", tx.hash);
        console.log("From:", tx.from);
        console.log("To:", tx.to);
        console.log("Value:", ethers.utils.formatEther(tx.value));
        console.log("--------------------------");
      });
});

        ethers官网:https://learnblockchain.cn/ethers_v5/文章来源地址https://www.toymoban.com/news/detail-496668.html

到了这里,关于ethers.js常用的操作方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ethers js监听合约事件

    监听合约事件 contract.on 在ethersjs中,合约对象有一个contract.on的监听方法,让我们持续监听合约的事件: contract.on有两个参数,一个是要监听的事件名称\\\"eventName\\\",需要包含在合约abi中;另一个是我们在事件发生时调用的函数。 contract.once 合约对象有一个contract.once的监听方法

    2024年02月13日
    浏览(72)
  • 以太坊标准JS API库——浅谈Web3.js与Ethers.js

    版本号: Web3.js v1.7.3 Ethers.js v.5.6 web3.js是一个标准的以太坊JavaScript API库,该JS库由以太坊基金会开发维护,同时它也是最早且使用最广泛的一个ETH API库。由于Moonbeam完全兼容以太坊EVM,因此web3.js可以在Moonbeam上进行正常交互 web3.js(v1.7.3)库官方使用文档:https://web3js.readthedoc

    2024年01月23日
    浏览(31)
  • ethers.js Metamask和CoinbaseWallet,TronLink钱包连接方式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 完成,年轻的程序员,大佬勿喷,希望对大家有用,有问题可以留言。

    2024年02月13日
    浏览(75)
  • 0001__安装electron失败 postinstall: `node install.js`

    不一样的 npm 快速安装electron的方案 - 简书 打开浏览器输入 下述网址, 找到你要的版本号, 点击后找到你的平台点击即可下载了。 https://registry.npmmirror.com/binary.html?path=electron/ 作者:一颗人心 链接:https://www.jianshu.com/p/d892132b56af 来源:简书 著作权归作者所有。商业转载请联

    2024年02月11日
    浏览(38)
  • 【Web3 系列开发教程——创建你的第一个 NFT(5)】使用 Ethers.js 铸造 NFT | 测试用例

    本节文章将描述如何通过 ethers.js 库使用以太币在以太坊区块链上 铸造 NFT ,以及我们还会讨论如何对创建的 NFT 进行基础的 测试 。 在本文中,我们将实践一种可替代的方法:即使用 OpenZeppelin V4 库 以及 Ethers.js 以太坊库实现。 除此之前,还将介绍使用 Hardhat 和 Waffle 测试合

    2024年01月18日
    浏览(65)
  • 安装Electron时报错command sh -c node install.js

    在安装Electron报如下错误 在指令后面添加 --ignore-scripts,意思是npm 将不会运行在package.json中指定的scripts

    2024年02月16日
    浏览(41)
  • pip install requirements.txt 的安装方法

    首先,我们要cd到包含requirements.txt的文件夹中,然后使用pip install -r 命令 第一步 cd到文件夹 第二步 输入以下命令

    2024年02月11日
    浏览(28)
  • js 数组的常用方法

    数组关注是否改变原数组 操作 增   会影响原数组 push() unshift() splice() 不会影响 concat() 删 会影响原数组 pop() shift() splice() 不会影响 slice() 改 splice() 查 indexOf() includes() find() 排序 reserve() sort() 转换 join() 迭代方法 some() every() forEach() filter() map() push() 接收任意数量的参数,将

    2024年04月27日
    浏览(21)
  • JS常用数组方法

    📝个人主页:爱吃炫迈 💌系列专栏:数据结构与算法 🧑‍💻座右铭:道阻且长,行则将至💗 无参构造 带参构造 如果传入一个非数值的参数或者参数个数大于 1,则表示创建一个包含指定元素的数组。 Array.of()方法总会创建一个包含所有传入参数的数组,而不管参数的数

    2023年04月23日
    浏览(24)
  • js常用功能方法

    去掉前后空格 2.去掉中间空格

    2024年02月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包