如何确保Solidity智能合约函数安全性?请求部署者权限控制示例
仅允许合约部署者调用updateState函数的实现方案
要限制updateState函数仅能被合约部署者调用,你可以通过以下步骤实现:
- 声明一个地址变量存储合约部署者(owner)的地址
- 编写一个
onlyOwner修饰器(Modifier),用于校验调用者是否为部署者 - 将该修饰器添加到
updateState函数上
以下是完整的修正代码:
pragma solidity ^0.8.0; contract MyContract { uint public state; address public owner; // 构造函数:合约部署时初始化owner为部署者地址 constructor() { owner = msg.sender; } // 仅允许owner调用的修饰器 modifier onlyOwner() { require(msg.sender == owner, "Only contract owner can call this function"); _; // 执行被修饰函数的逻辑 } // 使用onlyOwner修饰器限制调用权限 function updateState(uint _state) public onlyOwner { state = _state; } }
代码说明:
owner变量:在合约部署时通过构造函数赋值为部署者的地址(msg.sender)onlyOwner修饰器:通过require校验调用者地址是否等于owner,若不满足则抛出错误并回滚交易;_表示继续执行被修饰函数的代码逻辑updateState函数:添加onlyOwner修饰器后,仅合约部署者能调用此函数修改状态
内容的提问来源于stack exchange,提问作者JGervas
相关产品推荐
相关产品推荐

