尝试" onlyWhitelist"稳定性的修饰语

时间:2018-05-21 02:37:10

标签: solidity

我试图创建一个只能转移到白名单地址列表的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;
    }
}

1 个答案:

答案 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修饰符添加到要限制访问的函数中。