获取 ERC20 的所有权数组

Posted

技术标签:

【中文标题】获取 ERC20 的所有权数组【英文标题】:get array of ownership of an ERC20 【发布时间】:2020-12-12 15:34:18 【问题描述】:

我正在尝试构建一个 node.js 服务器,该服务器使用 web3.js 来获取所有具有令牌的帐户的地图以及他们都拥有的该令牌的数量。我试图得到的输出是映射键是地址,映射值是它们拥有的令牌数量。我还想从单个块中获取数据,以避免在读取区块链期间有人将其中的一些代币转移到另一个帐户时出现错误的余额。

我设法在网上找到了有关如何检查帐户并获取所有令牌的 JSON 以及帐户有多少的教程,但似乎没有任何教程可以有效地获取具有目标的所有帐户令牌。

这可以用普通的 ERC20 来完成,还是我需要添加额外的功能来获得一组持有者和他们拥有的数量?

到目前为止,我一直在添加一个返回 _balances 的帐户方法。添加到标准 ERC20 令牌以获取数据。但到目前为止,在获得 [address|amount] 的地图方面还没有运气。

到目前为止我所拥有的。

"use strict";
import http from 'http';
import Web3 from 'web3';
import Tx from 'ethereumjs-tx';
const abi = ["...."];

const web3 = new Web3(process.env.GETH_IPC);
const contractAddress = process.env.TOKEN_ADDRESS;
const myContract = web3.eth.Contract(abi, contractAddress);

//will add an accounts method that returns _balances
const balances = myContract.methods.accounts().encodeABI();

console.log('results:', balances);

ERC20 令牌的添加方法:

function accounts() public view returns (mapping memory) 
    return _balances;

最好我希望能够在不修改标准的情况下使用普通 ERC20 获取这些数据。

【问题讨论】:

您需要遍历特定 ERC-20 令牌的所有 Transfer 事件。请在此处找到一个 Python 示例,然后您可以将其复制到 javascript:docs.tokenmarket.net/… 这听起来非常耗费资源。有没有更有效的获取数据的方法? 不,没有。 【参考方案1】:

你的 ERC20 合约可以有一个返回整个映射的方法,但考虑到包含代币的地址数量最终会变得非常大,这并不是最具成本效益的。

如果您想检索少数账户的余额,则可以多次调用标准 ERC20 函数 balanceOf。您需要为每个帐户提供一个地址。

【讨论】:

以上是关于获取 ERC20 的所有权数组的主要内容,如果未能解决你的问题,请参考以下文章

ERC-721:如何获取所有令牌 ID?

ERC20 代币在没有所有者的情况下成功部署

智能合约开发之ERC

我怎样才能让巧克力蛋糕中的所有 ERC20 地址在前端使用

ERC20与ERC721标准及案例

ERC20与ERC721标准及案例