首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Whitelist.sol -获取已被白化的地址数组

Whitelist.sol -获取已被白化的地址数组
EN

Ethereum用户
提问于 2018-08-14 20:55:58
回答 2查看 874关注 0票数 0

我正在编写一个从Whitelist.sol继承的令牌。我想要编写一个函数,它返回一个已被白化的地址数组。

它一定是某种与…有关的东西

代码语言:javascript
复制
function getWhitelistedUsers() public onlyOwner returns (address[]) {

    address[] memory whitelistedUsers = Roles[ROLE_WHITELISTED].bearer.keys();
    return whitelistedUsers;
}

但我不确定我走上了正确的道路。有人能帮忙吗?

EN

回答 2

Ethereum用户

发布于 2018-08-15 03:57:50

只是为了详细说明伊斯梅尔的答案。

它们为契约提供了一种检查特定地址/角色(hasRole() ... returns(bool))的方法,但无法枚举来自状态的角色成员列表。这些列表不能被其他合同发现。作者不认为这是必要的。

RBAC (基于角色的访问控制)契约在添加或删除地址/角色时发出事件。在RBAC.sol的第20行:

代码语言:javascript
复制
event RoleAdded(address indexed operator, string role);
event RoleRemoved(address indexed operator, string role);

软件客户端可以侦听这些事件日志,并根据需要组装自己的重构角色列表。当我写这个答案时,我突然意识到这些日志混淆了operator,因为在这两种情况下它都是indexed

为了实现您想要的结果,我很想删除indexed,这样侦听器就可以在不事先知道地址的情况下清楚地观察它们。这将给一个感兴趣的观察者所需的一切,以方便地构建他们自己的链外副本上的事实。然后,他们可以数数,分类,搜索,等等,而不需要合同的进一步帮助。

可以为“完全可发现”的状态制作一个案例。您可以通过创建(和维护)列表来完成这一任务。您需要具有删除功能的索引,如这里所述。是否有妥善解决的和简单的存储模式的坚固性?和这里

https://medium.com/@robhitchens/solidity-crud-part-2-ed8d8b4f74ec

希望能帮上忙。

票数 1
EN

Ethereum用户

发布于 2018-08-14 23:53:15

不,这是不可能的,持票人是一个映射,键不被存储。

代码语言:javascript
复制
struct Role {
  mapping (address => bool) bearer;
}

如果您需要访问映射的键,则需要将它们明确地存储在一个单独的结构中。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/56537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档