我试图创建一个只能转移到白名单地址列表的ERC20令牌。这就是我提出的......出于某种原因,当我试图在雾上发起合同时,交易失败了......说在花掉所有气体后它会失败。有没有人看到任何明显的问题?谢谢!
pragma solidity ^0.4.21;
contract WHITELIST {
mapping(address => bool) public DignityWhitelist;
modifier isWhitelisted() {
require(DignityWhitelist[msg.sender] == true);
_;
}
function WHITELIST (address initialAccount) public {
if(initialAccount == 0x0) {
initialAccount = msg.sender;
}
DignityWhitelist[initialAccount];
}
function enableWhitelist(address whitelistAddress) external {
DignityWhitelist[whitelistAddress] = true;
}
function disableWhitelist(address removeAddress) external {
DignityWhitelist[removeAddress] = false;
}
}
答案 0 :(得分:0)
合同不会失败,但不安全。您允许任何人启用/禁用白名单条目。您需要限制对合同所有者的访问权限。
pragma solidity ^0.4.21;
contract WHITELIST {
address owner;
mapping(address => bool) public DignityWhitelist;
modifier isWhitelisted() {
require(DignityWhitelist[msg.sender] == true);
_;
}
modifier isOwner() {
require(msg.sender == owner);
_;
}
function WHITELIST() public {
owner = msg.sender;
DignityWhitelist[msg.sender] = true;
}
function enableWhitelist(address whitelistAddress) external isOwner {
DignityWhitelist[whitelistAddress] = true;
}
function disableWhitelist(address removeAddress) external isOwner {
require(removeAddress != owner);
DignityWhitelist[removeAddress] = false;
}
}
您需要将isWhitelisted
修饰符添加到要限制访问的函数中。