当前位置:   article > 正文

ehters.js:provider

ehters

ethers.jsV5.4文档

安装ethers

npm install ethers@5.4.0
  • 1
// 引入
import { ethers } from 'ethers'
  • 1
  • 2

Providers

/*
 * Provider类
 * Provider类是对以太坊网络连接的抽象,为标准以太坊节点功能提供简洁、一致的接口。
*/
const provider = new ethers.providers.Web3Provider(window.ethereum);
console.log(provider);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

getNetwork(),查询provider连接到了哪条链,homestead代表ETH主网

let network = await provider.getNetwork();
console.log('network:',network);
  • 1
  • 2

在这里插入图片描述

getBalance(),查询主链ETH余额

let getBalance = await provider.getBalance("myAddress");
console.log('余额:',ethers.utils.formatEther(getBalance));
  • 1
  • 2

getGasPrice(),查询gasPrice最准预测
getFeeData(),返回一个更详细的maxFeePerGas/maxPriorityFeePerGas/gasPrice
estimateGas(),返回向网络提交交易所需的预估gas值。

let gasPrice = await provider.getGasPrice(); // 燃料价格 (单位: wei)
let gasPrice2 = ethers.utils.formatUnits(gasPrice, "gwei"); // 通常来说燃料的价格用 gwei 会更好理解
console.log('gasPrice:',gasPrice2);
let feeData = await provider.getFeeData();
console.log('maxFeePerGas',ethers.utils.formatUnits(feeData.maxFeePerGas, "gwei"));
console.log('maxPriorityFeePerGas',ethers.utils.formatUnits(feeData.maxPriorityFeePerGas, "gwei"));
console.log('gasPrice',ethers.utils.formatUnits(feeData.gasPrice, "gwei"));
let gasLimit = await provider.estimateGas({
from: this.$store.state.address,
	to: '0xFd9B45dbF5*****35afC49ef3e',
	value: ethers.utils.parseEther('1').toString(),
});
console.log("gasLimit: " + gasLimit);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

交易查询
查询交易是否成功
transactionHash:拿的之前转账的哈希值过来查询测试,查询该交易是否成功。
getTransaction 和 getTransactionReceipt 返回交易的详细数据,如果交易未知,则返回null。
getTransaction() 可以理解为为该笔交易发送的参数。
getTransactionReceipt() 理解为该笔交易返回的结果,如果res.status == 1 说明交易成功了(通常需要使用轮询查询这笔交易状态)

provider.getTransaction("0x958e0340e49f80e67703245fd82b556491dcbbbf6f059cadf853f577d12d70fb").then(res=>{
	console.log('getTransaction_res',res);
}).catch(err=>{
	console.log('getTransaction_err',err);
})

provider.getTransactionReceipt("0x958e0340e49f80e67703245fd82b556491dcbbbf6f059cadf853f577d12d70fb").then(res=>{
	console.log('getTransactionReceipt_res',res);
}).catch(err=>{
	console.log('getTransactionReceipt_err',err);
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

监听行为

/*
 * 监听行为
 * EventEmitter API允许注册  各种事件  发生时的回调函数。
 * provider.on(eventName,listener)			为每一个参数为eventName的 事件添加监听器。
 * provider.once(eventName,listener)		为参数为eventName的 事件添加监听器,监听使用过后将会被移除。
 * provider.emit( eventName , ...args )		通知所有的eventName event监听器,并把参数传递给它们。这通常只在内部使用。
 * provider.off( eventName [ , listener ] )	移除一个参数为eventName的事件监听器,如果没有提供listener参数,则移除所有关于eventName的监听器。
 * provider.removeAllListeners( [ eventName ] )移除所有参数为eventName的事件监听器,如果没有提供eventName参数,则移除所有事件
 * provider.listenerCount( [ eventName ] )	返回所有参数为eventName事件的监听器数量。如果没有提供eventName参数,返回所有监听器的数量。
 * provider.listeners( eventName )			返回参数为eventName事件监听器的list集合。
 * 
 * 
 * eventName参数包括以下:
 * "block"		blockNumber		当一个区块被挖出时触发	 
 * "error"		error			只要有错误就触发	 
 * "pending"	pendingTransaction	当一个新交易进入内存池时触发;只有特定的providers提供此事件,从而在运行在自己的节点上获得可靠的数据	 
 * "willPoll"	pollId			在一个polling loop开始之前触发;(大多数开发者很少使用)	 
 * "poll"		pollId, 		blockNumber	在每个poll cycle中,`blockNumber`更新之后(如果改变了),以及与在poll loop中任何其他的事件(如果有)之前触发; (大多数开发者很少使用)	 
 * "didPoll"	pollId			在polling loop中的所有事件被触发后触发;(大多数开发者很少使用)	 
 * "debug"		provider 		dependent	每个Provider可以使用它来发出有用的调试信息,格式由开发者决定;(大多数开发者很少使用) (very rarely used by most developers)
 * 
 * 
*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号