当前位置: 首页 > news >正文

OpenZeppelin Ownable合约 怎么使用

文章目录

  • 智能合约的访问控制
    • Ownable合约
    • 使用方法

智能合约的访问控制

熟悉OpenZeppelin的智能合约库的开发者都知道这个库已经提供了根据访问等级进行访问限制的选项,其中最常见的就是Ownable合约管理的onlyOwner模式,另一个是OpenZeppelin的Roles库,它允许合约在部署前定义多种角色并为每个函数设置规则,以确保msg.sender具有正确的角色。在OpenZeppelin 3.0中又引入了更强大的AccessControl合约,其定位是一站式访问控制解决方案。

OpenZeppelin提供了智能合约的三种访问控制模式:Ownable合约、Roles库和3.0新增的AccessControl合约。

Ownable合约

源码地址: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.3/contracts/access/Ownable.sol

onlyOwner模式是最常见也最容易实现的访问控制方法,它虽然基础但非常有效。该模式假设智能合约存在单一管理员,支持管理员将全新转移给另一个账号。

通过扩展Ownable合约,子合约就可以在定义方法时使用onlyOwner修饰符,这些被修饰的方法就要求交易发起账号必须是合约的管理员。

继承 Ownable 后拥有的方法

  • owner() : 合约合约的 owner
  • transferOwnership(newOwner): 转让新的 owner 地址。
  • renounceOwnership(): 放弃合约 owner 权限(原理是将合约 owner 转让给 address(0),达到放弃的效果 )
  • modifier onlyOwner(): 用来判断调用者是否为 owner

使用方法

  1. 引用 Ownable import “@openzeppelin/contracts/access/Ownable.sol”;
  2. 设置某个函数仅 owner 可以调用,在函数上直接添加名字叫 onlyOwner 的 modifier 即可。

使用举例:
继承Ownable ,在构造器中通过 Ownable(msg.sender) 来调用了 Ownable 合约的构造函数。

在调用 Ownable(msg.sender) 时,已经完成了对合约所有者的转移!

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";contract LighthouseNft is ERC721, Ownable {using Strings for uint256;// 元数据URI的基本URLstring private _baseTokenURI;// 用于跟踪tokenId是否已经被使用mapping(uint256 => bool) private _tokenIdExists;// 构造函数,接收NFT的名称、符号和元数据URI作为参数constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) Ownable(msg.sender) {// _baseTokenURI = ""; // 初始化_baseTokenURI为空字符串或其他默认值}
http://www.lryc.cn/news/371675.html

相关文章:

  • vue3框架基本使用(基础指令)
  • ubuntu20.04设置共享文件夹
  • 三十五、 欧盟是如何对法律政策环境进行评估的?
  • 项目实战--文档搜索引擎
  • 计算机视觉基础课程知识点总结
  • 编译原理:语法分析
  • React 中的 Lanes
  • 【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】线性分类模型损失函数对比
  • 数组(C语言)(详细过程!!!)
  • 视频生成模型 Dream Machine 开放试用;微软将停止 Copilot GPTs丨 RTE 开发者日报 Vol.224
  • Vue30-自定义指令:对象式
  • 2024/06/13--代码随想录算法(贪心)3/6|134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列
  • 机器学习的分类
  • 【Linux】进程控制3——进程程序替换
  • PFC旁路二极管、继电器驱动电路以及PFC主功率
  • CrossOver 2024软件下载-CrossOver 2024详细安装教程
  • Spark MLlib机器学习
  • React Native将 ipad 端软件设置为横屏显示后关闭 Modal 弹窗报错
  • JavaEE大作业之班级通讯录系统(前端HTML+后端JavaEE实现)PS:也可选网络留言板、图书借阅系统、寝室管理系统
  • 代码随想录算法训练营第37天|● 56.合并区间● 738.单调递增的数字
  • SQL Server中的CTE和临时表优化
  • CCRC信息安全服务资质认证是什么
  • 第五十一天 | 1143.最长公共子序列
  • 未来的5-10年,哪些行业可能会被AI代替?
  • 据报道,FTC 和 DOJ 对微软、OpenAI 和 Nvidia 展开反垄断调查
  • 人工智能发展历程和工具搭建学习
  • Dijkstra算法的原理
  • maven引入依赖时莫名报错
  • graalvm编译springboot3 native应用
  • 代码随想录Day58