Модификаторы по солидности

Итак, как часть курса bitdegree по прочности, я собираюсь создать модификатор с именем onlyOwner и назначить его для функции changePrice. Я должен убедиться, что модификатор позволяет выполнять функцию только в том случае, если адрес отправителя совпадает с адресом владельца. Адрес отправителя может быть получен с помощью msg.sender.

Я попытался ввести это, чтобы создать модификатор, но он не работает для меня, и я не уверен, почему. Любая помощь / рекомендуемый код будет принята с благодарностью!

pragma solidity ^0.4.17;

contract ModifiersTutorial {

address public owner;
uint256 public price = 0;
address public sender=msg.sender;

//
modifier onlyOwner(sender){
if (owner==sender);
}
//

// Use your modifier on the function below
function changePrice(uint256 _price) public onlyOwner {
    price = _price;
}

function ModifiersTutorial () {
    owner = msg.sender; // msg.sender in constructor equals to the address that created the contract
}

}

2 ответа

Решение

Ваш код модификатора неверен. Вам нужно подчеркнуть, чтобы продолжить.

modifier onlyOwner(sender){
  if (owner==sender) _; // Note the underscore
}

Кроме того, по соображениям безопасности, вы действительно должны просто использовать msg.sender вместо того, чтобы передать это.

modifier onlyOwner() {
  if (owner == msg.sender) _;
}

Не уверен, что это противоречит спецификации, которую вам дали, но альтернативной практикой было бы require(owner == msg.sender) вместо использования ifзаявление - первое сообщает пользователю, что произошло, а второе просто терпит неудачу. Вот как это могло бы выглядеть:

modifier onlyOwner(){
  require(owner == msg.sender, "error-only-owner");
  _;
}
pragma solidity ^0.4.17;

contract ModifiersTutorial {

    address public owner;
    uint256 public price = 0;

    modifier onlyOwner(){
    if( owner == msg.sender ) _;
    }

    function changePrice(uint256 _price) public onlyOwner{
        price = _price;
    }

    function ModifiersTutorial () {
        owner = msg.sender; 
    }
}
Другие вопросы по тегам