如何保证Solidity智能合约中某个功能的安全性?

问题描述 投票:0回答:1

我正在 Solidity 中开发智能合约,并且我有一个可以更新合约状态的函数。

这是我的代码的简化版本:

pragma solidity ^0.8.0;

contract MyContract {
    uint public state;

    function updateState(uint _state) public {
        state = _state;
    }
}

我担心 updateState 函数的安全性。就目前而言,任何地址都可以调用此函数并更改合约的状态。

我读过 Solidity 中的修饰符,我认为它们可能是这个问题的解决方案。但是,我不确定如何正确实施它们。

有人可以提供一个如何使用修饰符来限制对 updateState 函数的访问的示例吗?具体来说,我想限制访问,以便只有特定地址(例如,部署合约的地址)可以调用此函数。

任何帮助将不胜感激!

ethereum blockchain solidity web3js hardhat
1个回答
0
投票

我建议你使用一个库来实现这一点。最常见的是 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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.