попытка модификатора "onlyWhitelist" в солидности - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь создать токен 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 голосов
/ 21 мая 2018

Контракт не потерпит неудачу, но он небезопасен.Вы разрешаете кому-либо включать / отключать записи белого списка.Вам необходимо ограничить доступ к владельцу договора.

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 к функциям, к которым вы хотите ограничить доступ.

...