获取 ERC20 代币持有者的可靠列表



是否可以从另一个 solidity 合约中获取给定 ERC20 代币的代币持有者列表?

由于"余额"存储在大多数 ERC20 合约中的映射中,我认为这是不可能的,因为您无法获得用于 solidity 映射的键列表。

我错过了什么吗? 还是这是不可能的?

谢谢!

不可能直接从合约中获取ERC20代币持有者的列表。

您是正确的,因为您无法在 Solidity 中获取映射的键列表,因此如果没有外部干预,这是不可能的。

话虽如此,有很多人需要此功能并执行任务来实现此目的。我能想到的最大的例子是根据他们持有的另一个代币向各种账户空投代币。大多数人这样做的方法是从区块链中读取所有代币持有者并将其存储在本地数据库中。从那里,他们将实现一个节能功能,该功能将地址作为参数并以这种方式对其执行操作。

仅使用区块链不可能实现您想要的目标,但使用链上/链下逻辑的组合可以实现您的目标。

也许有可能。 如果你创建一个函数,可以在调用传递函数时选择发送方和接收方,这是可能的。

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

最新更新