开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
正文开始
从这篇文章开始,我们开始正式的接触合约,本篇文章中,我们需要了解合约交互
创建合约
合约交互的第一步便是从创建合约开始,创建合约前,我们需要先知道两个东西,一个是合约地址,一个是合约abi。
我们以以太坊主网络上USDT为例,我们能在浏览器中获取到合约地址还有ABI信息
框出位置为合约地址,往下滑可以看到Abi信息
拿到这两个信息后,我们便可以创建合约。
/**
* 创建合约 需要传参 ABI 合约地址 当前用户钱包地址
* @param abi
* @param address
*/
let contract = new Web3.eth.Contract('ABI', '合约地址', {
from: '用户钱包地址'
})
//contract 便是我们创建出来的合约,所有操作都离不开创建出来的合约
获取钱包余额
我们在这之前已经创建出来合约了,有了合约我们便可以调用合约里面的接口去获取数据,最有代表的就是获取余额
contract.methods.balanceOf('用户钱包地址').call().then(res => {
//这里res返回的便是 你传递的钱包地址中所含有的usdt数量 不过这里返回的数量是usdt合约18位精度的
//啥意思那 就是咱们所理解的1个 在合约中是1000000000000000000个
//也就是说在usdt合约中 1000000000000000000 = 1
// 注意,wei是最小的以太单位,应当总是使用wei进行计算,仅在需要显示 时进行转换
//那么我们现在就需要进行进度转换了
Web3.utils.fromWei(res, "ether")
// 这里我们使用的是web3 utils下的fromWei('数值','精度')
//精度单位 看最下方表格
})
到此为止我们已经拿合约做了个最基础的交互,那么问题同样也来了 我们在以太坊链环境下 如何获取ETH的余额那,这里就有点不一样了
Web3.eth.getBalance('地址').then(res =>{
//同样精度我们也需要处理一下
Web3.utils.fromWei(res, "ether")
})
那么有同学可能就会出现疑问,同样都是获取余额 为什么会有两种方式来获取 有什么不同吗?
小知识
主链币
这里就有一个小知识需要说一下,我不知道其他人怎么称呼,我一般会把主链手续费使用的货币叫做主链币 在链上创建合约创建出来的代币叫做合约代币
像这样 在以太坊主链环境中 默认货币为ETH 我个人习惯性给他叫做主链币。
除主链币使用第二种方式获取余额外,其余代币全部通过第一种方式获取余额
call()
有同学可能通过上方获取余额与合约交互中发现了一个call()
在web3中call() 代表的是查询 在合约中查询数据 查询不需要gas费用(gas费用等用到了再说)
send()
留坑 等遇到了再说
常用精度
- noether: ‘0’
- wei: ‘1’
- kwei: ‘1000’
- Kwei: ‘1000’
- babbage: ‘1000’
- femtoether: ‘1000’
- mwei: ‘1000000’
- Mwei: ‘1000000’
- lovelace: ‘1000000’
- picoether: ‘1000000’
- gwei: ‘1000000000’
- Gwei: ‘1000000000’
- shannon: ‘1000000000’
- nanoether: ‘1000000000’
- nano: ‘1000000000’
- szabo: ‘1000000000000’
- microether: ‘1000000000000’
- micro: ‘1000000000000’
- finney: ‘1000000000000000’
- milliether: ‘1000000000000000’
- milli: ‘1000000000000000’
- ether: ‘1000000000000000000’
- kether: ‘1000000000000000000000’
- grand: ‘1000000000000000000000’
- mether: ‘1000000000000000000000000’
- gether: ‘1000000000000000000000000000’
- tether: ‘1000000000000000000000000000000’