1

我正在尝试构建一个 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 获得这些数据。

4

1 回答 1

0

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

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

于 2021-08-13T21:34:20.840 回答