solidity的modifier修饰符

文章目录

solidity的modifier修饰符

什么是modifier修饰符

修饰器(modifier)是solidity特有的语法,类似于面向对象编程中的decorator,声明函数拥有的特性,并减少代码冗余。

Solidity 中关键字 modifier 用于声明一个函数修改器。当它作用于一个函数上,可以在函数执行前或后(依赖于具体实现)预先执行modifier中的逻辑。

结合现实场景中的应用。在一些敏感操作中,我们需要设定特定的权限才允许执行相关操作;再者我们可以利用函数修改器进行数据的校验;

常用于如:检查输入条件、权限控制、重入控制、防止重复初始化等场景。

定义修饰符

函数修改器的定义语法如下:

javascript 复制代码
modifier 修改器名 {
    条件体..
    _;
}

function a() 修改器名 {
    函数体..
}

函数修改器中有一行代码只有下划线 _ ,在实际执行中,我们可以将被修饰函数的代码视为下划线处的代码。即,下划线实际上帮我们标记了被modifier修饰函数的执行位置。

onlyOwner示例

javascript 复制代码
pragma solidity >=0.8.0;


contract owned {
    function owned() public { owner = msg.sender; }
    address owner;

    modifier onlyOwner {
        require(msg.sender == owner, "Only owner can call this function.");
        _;
    }


   function transferOwner(address _newO) public onlyOwner {
        owner = _newO;
    }
}

在这个示例中,onlyOwner修饰器用于限制只有合约所有者可以调用该函数。如果条件满足就继续往下走,不满足返回字符串"Not owner"。

"_;" 表示在执行修饰器之后将控制流交给被修饰函数的实际执行代码块。

定义isOwner,确保只有 NFT 的所有者才能执行相应的操作

javascript 复制代码
modifier isOwner(
    address nftAddress,
    uint256 tokenId,
    address spender
) {
    IERC721 nft = IERC721(nftAddress);
    address owner = nft.ownerOf(tokenId);
    if (spender != owner) {
        revert NotOwner();
    }
    _;
}

它接受三个参数:NFT 地址、NFT 的标识符和调用者地址,并在调用者不是 NFT 的所有者时回滚事务。这个修饰器的逻辑清晰简洁,可以有效地确保只有 NFT 的所有者才能执行相应的操作。

参考

推荐,视频讲解清晰\]【20】Solidity的modifier函数修改器 参考URL: https://www.bilibili.com/video/BV1am411k7VW/

相关推荐
木西17 小时前
深度实战:用 Solidity 0.8.24 + OpenZeppelin V5 还原 STEPN 核心机制
web3·智能合约·solidity
听麟1 天前
HarmonyOS 6.0+ 跨端会议助手APP开发实战:多设备接续与智能纪要全流程落地
分布式·深度学习·华为·区块链·wpf·harmonyos
TechubNews2 天前
燦谷(Cango Inc)入局AI 資本重組彰顯決心
大数据·网络·人工智能·区块链
每次学一点3 天前
【ZeroTier自研之路】用ZeroNet在ZeroTier中建去中心化网站
网络·经验分享·去中心化·区块链
链上日记3 天前
WEEX 2025年度报告
大数据·人工智能·区块链
木西4 天前
实战|DeLinkedIn 全栈开发:Web3 身份验证 + 数字资产确权,搭建职场社交新生态
web3·智能合约·solidity
Web3VentureView5 天前
X Space AMA回顾|预测熊市底部:当市场寻找价格,SYNBO正在构建未来
人工智能·物联网·金融·web3·区块链
devmoon6 天前
使用 Zombienet 运行平行链网络
web3·区块链·sdk·polkadot·测试网·跨链
qyresearch_7 天前
移动感应健身:全球市场扩张下的中国机遇与破局之道
大数据·人工智能·区块链
软件工程小施同学7 天前
区块链论文速读 CCF A--VLDB 2025 (2) 附pdf下载
pdf·区块链