如何在 RSK 上获取诸如 ERC20 代币符号之类的信息?

Posted

技术标签:

【中文标题】如何在 RSK 上获取诸如 ERC20 代币符号之类的信息?【英文标题】:How can I get info such as symbol of an ERC20 token on RSK? 【发布时间】:2021-08-20 16:28:15 【问题描述】:

我想查询RSK网络上的几个ERC20代币,得到以下字段:symbolnamedecimals

如何使用 web3.js 做到这一点?

【问题讨论】:

【参考方案1】:

使用 web3.js 来做到这一点:

web3: 初始化 web3 实例并连接到 web3 提供者 abiOfToken:此特定令牌的 ABI 对象。请注意,如果您没有这个,您可以通过对原始合约代码运行solc 来获取它;或者,您也可以简单地将“标准”ABI 对象用于 ERC-20 令牌 addressOfToken:代币部署的智能合约地址

完成上述操作后,您可以在 async 函数中执行以下操作:

  const tokenContract = new web3.eth.Contract(
    abiOfToken, addressOfToken);
  const symbol = await tokenContract.methods.symbol().call();
  const decimals = await tokenContract.methods.decimals().call();
  const name = await tkenContract.methods.name().call();

上面的代码按顺序运行它们,并提供了清晰的说明。 实际上,由于您正在为多个令牌运行它, 您可能需要考虑并行运行查询, 并将它们提取到单独的函数中,如下所示:

  // run this just once, as part of initialisation
  const tokenContract = new web3.eth.Contract(abiOfToken, addressOfToken);

  // run this multiple times by putting in its own function
  async function getTokenInfo(tokenContract) 
    const [decimals, name, symbol] = await Promise.all([
      tokenContract.methods.symbol().call(),
      tokenContract.methods.decimals().call(),
      tokenContract.methods.name().call(),
    ]);
    return  decimals, name, symbol ;
  

【讨论】:

我按照您的指示,提供了 API,得到“TypeError: tokenContract.methods.symbol is not a function” 对于遇到问题的其他人:我使用的是 IERC20 ABI,而不是 ERC20 ABI,这是问题的根源,现在它可以正常工作了,尝试仔细检查您的 ABI,这是一个来源我使用的 ERC20 ABI:ethereumdev.io/abi-for-erc20-contract-on-ethereum(如果有人知道更官方的来源,最好在此处添加) @JayD。您可以将“标准”ABI 用于您正在使用的合同标准......但是,如果这不起作用,我建议您如上所述“通过对原始合同代码运行 solc 来获得它”,然后要么直接使用它,要么使用它来找出缺少的东西。

以上是关于如何在 RSK 上获取诸如 ERC20 代币符号之类的信息?的主要内容,如果未能解决你的问题,请参考以下文章

获取以太坊 ERC-20 代币信息的正确方法

我们可以在不同的区块链上部署相同的 ERC20 代币吗?

如何在代币合约中区分在 uniswap 上买卖 erc-20 代币

如何查找erc20代币余额

在给定的时间戳获取所有持有 ERC20 代币的地址

如何计算 RSK 上代币的总交易量?