从实战开始了解Web3(二)

830 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

正文开始

从这篇文章开始,我们开始正式的接触合约,本篇文章中,我们需要了解合约交互

创建合约

合约交互的第一步便是从创建合约开始,创建合约前,我们需要先知道两个东西,一个是合约地址,一个是合约abi。

我们以以太坊主网络上USDT为例,我们能在浏览器中获取到合约地址还有ABI信息

image.png 框出位置为合约地址,往下滑可以看到Abi信息

image.png

拿到这两个信息后,我们便可以创建合约。

  /**
  * 创建合约 需要传参 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")
})

那么有同学可能就会出现疑问,同样都是获取余额 为什么会有两种方式来获取 有什么不同吗?

小知识

主链币

这里就有一个小知识需要说一下,我不知道其他人怎么称呼,我一般会把主链手续费使用的货币叫做主链币 在链上创建合约创建出来的代币叫做合约代币

image.png

像这样 在以太坊主链环境中 默认货币为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’

历史文章

# 从实战开始了解Web3(一)