我正在 Solidity 中开发智能合约,并且我有一个可以更新合约状态的函数。
这是我的代码的简化版本:
pragma solidity ^0.8.0;
contract MyContract {
uint public state;
function updateState(uint _state) public {
state = _state;
}
}
我担心 updateState 函数的安全性。就目前而言,任何地址都可以调用此函数并更改合约的状态。
我读过 Solidity 中的修饰符,我认为它们可能是这个问题的解决方案。但是,我不确定如何正确实施它们。
有人可以提供一个如何使用修饰符来限制对 updateState 函数的访问的示例吗?具体来说,我想限制访问,以便只有特定地址(例如,部署合约的地址)可以调用此函数。
任何帮助将不胜感激!
我建议你使用一个库来实现这一点。最常见的是 Openzeppelin 的 Ownable,您可以在这里找到一些文档 https://docs.openzeppelin.com/contracts/5.x/access-control.
因此合同将如下所示:
pragma solidity ^0.8.0;
import '@openzeppelin/contracts/access/Ownable.sol';
contract MyContract is Ownable {
uint public state;
constructor() Ownable(msg.sender) {}
function updateState(uint _state) public onlyOwner {
state = _state;
}
}