以太坊开发中ethers库的使用
eip-155定义的eth 的chainID
CHAIN_ID | Chain(s) |
---|---|
1 | Ethereum mainnet |
2 | Morden (disused), Expanse mainnet |
3 | Ropsten |
4 | Rinkeby |
5 | Goerli |
42 | Kovan |
1337 | Geth private chains (default) |
ethers.utils.HDNode.isValidMnemonic(): 验证助记词是否有效
ethers.utils.getAddress():转换为checkSum地址
1. send方法后面可写入rpc调用方法名(eth标准方法),后面跟参数
personal_importRawKey
let lockStatus = await rpcProvider.send(“personal_lockAccount”, address)
2.查询token余额
const getBalance_USDT = async () => {const contract = new ethers.Contract(USDTaddress, USDTabi, rpcProvider);const balance = await contract.balanceOf(address);return balance.toString();};
//6为token有效小数位。查到的余额除以有效小数位才是实际余额
let actuBalUSDT = ethers.utils.formatUnits(queryBalUSDT, 6)
3.查询eth余额
let pendingBal = await rpcProvider.getBalance(address, "pending")
查询不同状态的余额”latest”(已经确认了的), “earliest”(创世区块的) , “pending”(包含未确认的交易的余额)
4.utils
//去除地址前面的0位
let address = ethers.utils.hexStripZeros(addressQuery)
// 相当于从wei到ether
let numberOfDecimals = 18;
let BNBbal = ethers.utils.parseUnits(queryBalBNB, numberOfDecimals);
5.发送eth交易
let wallet = new ethers.Wallet(privateKey, provider);
let amount = ethers.utils.parseEther(amount);
//let nonce = await rpcProvider.getTransactionCount(address, "pending")
let nonce = await wallet.getTransactionCount();
let gasPrice=await provider.getGasPrice();let tx = {nonce: nonce,gasLimit: 21000,gasPrice: ethers.utils.bigNumberify(gasPrice),to: toAddress,chainId: chainId,value: amount,data: ""};// let signTx = await wallet.sign(tx)// let resp = await rpcProvider.sendTransaction(signTx)
或
let resp = await wallet.sendTransaction(tx);
6.发送token交易
let numberOfTokens = ethers.utils.parseUnits(amount, decims);// 先计算transfer 需要的gas 消耗量,这一步有默认值,非必须。let gas = await contract.estimate.transfer(toAddress, numberOfTokens)let gasP = await rpcProvider.getGasPrice()// 必须关联一个有过签名钱包对象let contractWithSigner = contract.connect(wallet);// 发起交易,前面2个参数是函数的参数,第3个是交易参数let tx = await contractWithSigner.transfer(toAddress, numberOfTokens, {nonce: nonce,gasLimit: gas,gasPrice: ethers.utils.bigNumberify(gasP) ,chainId: chainId})
7.获取节点所有账户的余额
async function checkAllBalances() {let e = await rpcProvider.listAccounts()for (let i = 0; i < e.length; i++) {let bal = await rpcProvider.getBalance(e[i])let balance = ethers.utils.formatEther(bal)console.log(`${e[i]}: `+balance)}
}
checkAllBalances();
8. 单位转换
// 转换cost为 wei单位的BigNumber类型const costWei = ethers.utils.bigNumberify(21000).mul('0x3b9aca00')console.log(costWei);// 转换cost为ether单位的一般表示(可读的10进制)const costEther = ethers.utils.formatEther(costWei)console.log(costEther);// 转换cost为ether单位的BigNumber类型const costBigNumber = ethers.utils.parseEther(costEther);console.log(costBigNumber);// 余额减去花费作为 新的转入余额,const amount = pendingBal.sub(costBigNumber)console.log(ethers.utils.formatEther(amount));
以太坊开发中ethers库的使用相关推荐
- python 节点_python在以太坊开发中节点和网络如何选择?
以太坊节点 为什么我需要连接到一个节点? 以太坊协议定义了一种方法,用于人们通过网络与智能合约相互作用.为了获得关于合约.账户余额和新交易状态等最新的信息,协议需要与网络上的节点进行连接.这些节点不断 ...
- [区域链]以太开发中ethers库的使用
eip-155定义的eth 的chainID CHAIN_ID Chain(s) 1 Ethereum mainnet 2 Morden (disused), Expanse mainnet 3 Ro ...
- 以太坊是什么 - 以太坊开发入门指南
本文首发于深入浅出区块链社区 原文链接:以太坊是什么 - 以太坊开发入门指南 很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗的方式介绍以太坊开发中涉及 ...
- 以太坊java开发指南_java以太坊开发库ethereumj
EthereumJ是以太坊协议的纯Java实现.有关以太坊及其目标的高级信息,请访问ethereum.org,其 白皮书 提供了一个完整的概念的概述,和 黄皮书 一起提供了协议的正式定义. 我们尽可能 ...
- 以太坊开发实战:通过truffle-contract与智能合约交互
以太坊开发实战:通过truffle-contract与智能合约交互 与以太坊的智能合约交互,除了使用web3.js,还可以使用另外一个Javascript库,就是truffle-contract.tr ...
- 以太坊开发入门,如何搭建一个区块链DApp投票系统
点击关注异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 第一节 概述 对于初学者,需要了解以太坊开发相关的基本概念,另外就是如何构建一个基于以太坊的完整去中心化应用例如一个区块链投票 ...
- Web程序员如何入门以太坊开发
我经常构建使用以太坊的Web应用程序,我理所当然地认为每天都使用的是神奇的工具集.我们的生态系统正在迅速发展,我认为很多新人都感到不知所措.以太坊是一项了不起的技术,但它也是新生的,而且根本没有足够的 ...
- 在MacOS上构建以太坊开发环境
以太坊是流行的区块链去中心化平台.作为本文的一部分,你将了解如何在MacOS平台上设置以太坊. 首先需要对区块链和以太坊有基本理解,即什么是以太坊之类的? 工具集 以太坊开发生态系统包括以下工具列表. ...
- Ubuntu安装以太坊开发环境
Ubuntu安装以太坊开发环境 摘要 版本说明 介绍 开发环境的搭建 搭建以太坊 安装Nodejs 安装Solidity 安装Truffle 示例程序的运行 以太坊运行 Truffle框架的使用 Tr ...
最新文章
- HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenCV和OpenCL区别
- 关于IAR的一些总结 -- ARM调试和Flash调试的区别
- 生成对抗网络(GAN)相比传统训练方法有什么优势?(一)
- Mac下Virtual Box Host-Only网络配置
- 清华等高校自评称“已建成世界一流大学”?教育部回应
- Mac OS使用技巧之三:发射无线网络信号的方法
- 95-36-220-ChannelHandler-RejectedExecutionHandlers
- 使用jquery第三方插件(生成曲线图)
- 面试题 MySQL的慢查询、如何监控、如何排查?
- DDA算法、中点Bresenam算法,圆或椭圆的绘制
- CenterOs git安装
- 散度和旋度的物理意义是什么?
- 双引号后面要加句号吗_双引号该怎么加?是加在句号或者分号后面还是前面
- 实现虚拟机与板卡/树莓派网络互联,并通过笔记本wifi共享上网
- Android音视频 - 学习路线概览
- 2.Collection、Iterator迭代器、泛型、斗地主案例
- 荣耀Magic2:用最简单的方法解决最复杂的问题
- 计算机领域前沿技术总结
- 退出计算机二级培训的申请书,退社团申请书范文3000
- 使用友盟快速分享与第三方登录注意事项