是否可以从另一个可靠合约中获取给定ERC20令牌的令牌持有者列表?
由于"balances“在大多数ERC20合约中都存储在映射中,我认为这是不可能的,因为您无法在solidity中获得映射的键的列表。
有什么我漏掉的吗?或者这是不可能的?
谢谢!
发布于 2018-10-02 10:43:55
无法直接从合同中获取ERC20令牌持有者的列表。
您是正确的,因为您不能这样做,因为您不能获得可靠的映射的键列表,因此如果没有外部干预是不可能的。
也就是说,有很多人需要这个功能并执行任务来实现这一点。我能想到的最大的例子是根据他们持有的另一个令牌向不同的账户空投令牌。大多数人这样做的方式是从区块链中读取所有令牌持有者,并将其存储在本地数据库中。在那里,他们将实现一个省油的函数,该函数接受地址作为参数,并以这种方式对它们执行操作。
仅使用区块链不可能实现您想要的目标,但使用链上/链外逻辑的组合可以实现您的目标。
发布于 2021-12-02 03:33:28
这也许是可能的。如果你做了一个函数,可以在调用传输函数时选择发送者和接收者,这是可能的。
mapping(address => bool) _holderList;
function transferFrom(address from, address to, uint256 amount) {
checkHolderList(from);
checkHolderList(to);
_transfer(from, to, amount);
}
function checkHolderList(address _address) {
require(balanceOf(_address) > 0, "this address can't be holder");
require(_holderList[address] != true, "this address is already in holder list");
_holderList[_address] = true;
}https://stackoverflow.com/questions/52601289
复制相似问题