Entonces, como parte del curso bitdegree sobre solidez, estoy buscando crear un modificador llamado onlyOwner y asignarlo a la función changePrice. Debo asegurarme de que el modificador permita que la función se ejecute solo si la dirección del remitente coincide con la dirección del propietario. La dirección del remitente se puede obtener usando msg.sender.

Intenté ingresar esto para crear el modificador, pero no funciona para mí y no estoy seguro de por qué. Cualquier ayuda / código recomendado sería muy apreciado!

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
}

}

1
GG123GG 23 ene. 2018 a las 22:08

3 respuestas

La mejor respuesta

Su código modificador es incorrecto. Necesita un guión bajo para continuar.

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

Además, por razones de seguridad, realmente debería usar msg.sender en lugar de pasarlo.

modifier onlyOwner() {
  if (owner == msg.sender) _;
}
0
Adam Kipnis 23 ene. 2018 a las 19:32

No estoy seguro de si entra en conflicto con la especificación que se le ha dado, pero una práctica alternativa sería require(owner == msg.sender) en lugar de usar una declaración if: la primera le dice al usuario lo que sucedió, mientras que la segunda simplemente falla en silencio Así es como podría verse:

modifier onlyOwner(){
  require(owner == msg.sender, "error-only-owner");
  _;
}
0
kronosapiens 14 nov. 2019 a las 08:02
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; 
    }
}
-1
pushkin 16 jul. 2018 a las 17:10