前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >web3与ethers调用对比

web3与ethers调用对比

作者头像
Tiny熊
发布2022-04-08 14:15:55
9470
发布2022-04-08 14:15:55
举报
文章被收录于专栏:深入浅出区块链技术

本文作者:webkubor[1]

web3 与 ethers 对比

合约对象返回

web3

代码语言:javascript
复制
const web3 = new Web3(window.ethereum);
  const contractObj = new web3.eth.Contract(constractAbi, ontractAddress);
  const contract = await contractObj(tokenJson, contractAddress.IPISTR);

ether

可读权限
代码语言:javascript
复制
import { ethers } from "ethers";
const provider = new ethers.providers.JsonRpcProvider(
    contractAddress.baseURL
  );
  const Contract = new ethers.Contract(
    contractAddress.IPISTR,
    tokenJson,
    provider
  )
  console.log(Contract, "ether");
可读可写权限
代码语言:javascript
复制
import { ethers } from "ethers";
/**
 * @description: 基于ether.js返回的合约对象
 * @param {*} tokenJson ABI文件
 * @param {*} contractAddress 合约地址
 * @return {*}
 */
export async function outContract(tokenJson, contractAddress) {
  let ethersProvider = new ethers.providers.Web3Provider(
    window.ethereum,
    "any"
  );
  const Contract = new ethers.Contract(
    contractAddress,
    tokenJson,
    ethersProvider.getSigner()
  );
  return Contract;
}

合约方法调用

查看

左侧 web3,右侧 ether

metamsk 交互

关于 web3 的数字类型返回

ether.js 返回 bignumber 类型

bignumber => ether.js

代码语言:javascript
复制
const { ethers } require("ethers")

var a = "0x03"

var b = ethers.BigNumber.from(a)

var c = b.toNumber()

console.log(c)

关于返回合约对象

代码语言:javascript
复制
export function getContract(address: string, ABI: any, library: Web3Provider, account?: string): Contract {
  if (!isAddress(address) || address === AddressZero) {
    throw Error(`Invalid 'address' parameter '${address}'.`)
  }

  return new Contract(address, ABI, getProviderOrSigner(library, account) as any)
}

// account is optional
export function getProviderOrSigner(library: Web3Provider, account?: string): Web3Provider | JsonRpcSigner {
  return account ? getSigner(library, account) : library
}

链接跳转功能

代码语言:javascript
复制
export function getEtherscanLink(
  chainId: ChainId,
  data: string,
  type: 'transaction' | 'token' | 'address' | 'block'
): string {
  const prefix = `https://${ETHERSCAN_PREFIXES[chainId] || ETHERSCAN_PREFIXES[1]}etherscan.io`

  switch (type) {
    case 'transaction': {
      return `${prefix}/tx/${data}`
    }
    case 'token': {
      return `${prefix}/token/${data}`
    }
    case 'block': {
      return `${prefix}/block/${data}`
    }
    case 'address':
    default: {
      return `${prefix}/address/${data}`
    }
  }
}

参考资料

[1]

webkubor: https://learnblockchain.cn/people/2871

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深入浅出区块链技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 合约对象返回
    • web3
      • ether
        • 可读权限
        • 可读可写权限
      • 合约方法调用
        • 查看
        • metamsk 交互
      • 关于 web3 的数字类型返回
        • 关于返回合约对象
          • 参考资料
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档