稳固性修饰符
Modifiers on solidity
因此,作为关于 solidity 的 bitdegree 课程的一部分,我希望创建一个名为 onlyOwner 的修饰符并将其分配给 changePrice 函数。我必须确保仅当发件人的地址与所有者的地址匹配时,修饰符才允许执行函数。可以使用msg.sender.
获取发件人地址
我试过输入这个来创建修改器,但它对我不起作用,我不确定为什么。任何 help/recommended 代码将不胜感激!
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
}
}
您的修饰符代码不正确。您需要一个下划线才能继续。
modifier onlyOwner(sender){
if (owner==sender) _; // Note the underscore
}
此外,出于安全原因,您真的应该只使用 msg.sender
而不是传入它。
modifier onlyOwner() {
if (owner == msg.sender) _;
}
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;
}
}
不确定它是否与给定的规范冲突,但另一种做法是 require(owner == msg.sender)
而不是使用 if
语句——前者告诉用户发生了什么,而后者只是默默地失败了。这就是它的样子:
modifier onlyOwner(){
require(owner == msg.sender, "error-only-owner");
_;
}
因此,作为关于 solidity 的 bitdegree 课程的一部分,我希望创建一个名为 onlyOwner 的修饰符并将其分配给 changePrice 函数。我必须确保仅当发件人的地址与所有者的地址匹配时,修饰符才允许执行函数。可以使用msg.sender.
获取发件人地址我试过输入这个来创建修改器,但它对我不起作用,我不确定为什么。任何 help/recommended 代码将不胜感激!
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
}
}
您的修饰符代码不正确。您需要一个下划线才能继续。
modifier onlyOwner(sender){
if (owner==sender) _; // Note the underscore
}
此外,出于安全原因,您真的应该只使用 msg.sender
而不是传入它。
modifier onlyOwner() {
if (owner == msg.sender) _;
}
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;
}
}
不确定它是否与给定的规范冲突,但另一种做法是 require(owner == msg.sender)
而不是使用 if
语句——前者告诉用户发生了什么,而后者只是默默地失败了。这就是它的样子:
modifier onlyOwner(){
require(owner == msg.sender, "error-only-owner");
_;
}