web3与ethers调用对比

web3 与 ethers 对比

合约对象返回

web3

const web3 = new Web3(window.ethereum);
  const contractObj = new web3.eth.Contract(constractAbi, ontractAddress);
  const contract = await contractObj(tokenJson, contractAddress.IPISTR);

ether

可读权限

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");

可读可写权限

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

const { ethers } require("ethers")

var a = "0x03"

var b = ethers.BigNumber.from(a)

var c = b.toNumber()

console.log(c)

关于返回合约对象

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
}

链接跳转功能

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}`
    }
  }
}

参考资料

猜你喜欢

比特币提现会被银行查吗?

比特币提现会被银行查吗? 首先,根据《中华人民共和国反洗钱法》、《金融机构大额交易和可疑交易报告管理办法》、《金融机构报告涉嫌恐怖融资的可疑交易管理办法》等法律法规的相关规定,银行会对大额资金的流动做监控,主要是审查来源是否合法,是否涉嫌洗钱。

2022-05-21

比特币暴跌50%!30岁老公玩比特币输了好多钱

比特币暴跌50%!30岁老公玩比特币输了好多钱 过去的一周里,作为一个游曳在币圈边缘的键盘侠,见识了币圈度日如年的跌宕后,仍可以笑看潮起潮落。

2022-05-21

UST爆雷之后,USDT也要爆雷了?

这几天的行情,证明了良心哥的推测非常准确。 首先是5月10日分析luna背后是被人开了黑枪,并且持续看空luna。 次日消息实锤,luna再次跌了个99%。 昨天分析说,luna的死亡螺旋会带崩大盘。

2022-05-21

Luna币7天蒸发2000亿,但更怕的是熊市即将到来!

心哥昨天虽然不知道这里边的细节,但依然非常确定的告诉大家,这是一场狙击战,找的就是这个空档,打出来的子弹是要人命的。 另外排队枪毙这个场景,估计今天很多人也领教了。

2022-05-21

一天蒸发400亿人民币,Luna是如何被狙击的?

你们也都知道良心哥炒币是个渣渣,但良心哥的判断大体还是准确的。 可能这就是从业时间久了的盘感吧。 有人说luna的暴跌,ust抛锚,都他吗赖孙宇晨。 从5月5号孙宇晨宣布进军算法稳定币之后,大盘就崩了

2022-05-21

    上一篇

    21个基于ethers的Dapp常用工具函数

    下一篇

    搞定EVM中的内存数据区

评论