2

そのため、堅牢性に関する 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
}

}

4

3 に答える 3

1

与えられた仕様と競合するかどうかはわかりませんが、別の方法として、ステートメントrequire(owner == msg.sender)を使用するのではなく、if何が起こったかをユーザーに伝えますが、後者は単に黙って失敗します。これは次のようになります。

modifier onlyOwner(){
  require(owner == msg.sender, "error-only-owner");
  _;
}
于 2019-11-14T08:02:48.473 に答える