ethers.jsV5.4文档
安装ethers
npm install ethers@5.4.0
// 引入
import { ethers } from 'ethers'
Providers
/*
* Provider类
* Provider类是对以太坊网络连接的抽象,为标准以太坊节点功能提供简洁、一致的接口。
*/
const provider = new ethers.providers.Web3Provider(window.ethereum);
console.log(provider);
getNetwork(),查询provider连接到了哪条链,homestead代表ETH主网
let network = await provider.getNetwork();
console.log('network:',network);
getBalance(),查询主链ETH余额
let getBalance = await provider.getBalance("myAddress");
console.log('余额:',ethers.utils.formatEther(getBalance));
getGasPrice(),查询gasPrice最准预测
getFeeData(),返回一个更详细的maxFeePerGas/maxPriorityFeePerGas/gasPrice
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"));
交易查询
查询交易是否成功
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);
})
监听行为
/*
* 监听行为
* 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)
*
*
*/