solidity中modifier(函数修改器)中 _;的作用(下划线加分号)以及防止被重入攻击

Solidity的modifier用于声明函数修改器,例如onlyOwner限制只有合约所有者执行。modifier中的下划线_标识函数执行点,常用于控制流和安全性检查,如noReentrancy防止重入攻击。modifier简化了代码复用,提高合约安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 在本图片中可以看到,在这个示例中,onlyOwner修饰器用于限制只有合约所有者可以调用该函数。如果条件满足就继续往下走,不满足返回字符串“Not  owner”。“_;” 表示在执行修饰器之后将控制流交给被修饰函数的实际执行代码块。

通俗的可以理解为先直接require判断判断完成之后再让函数运行。
总之,下划线加分号(“_;”)在Solidity中表示一个空的代码块或匿名函数体,并在某些上下文中用于控制流的传递。

  modifier的作用,在本图片中可以看到 使用modifier定义了两个方法onlyOwener和validAddress 在使用时可以直接写上名字来调用,相当于两个方法的内容被调用。

modifier noReentrancy() {
        require(!locked,"No reentrancy");
        locked = true;
        _;
        locked = false;
    }

    function decrement(uint i) public  noReentrancy{
        x -= i;
        if (i >1) {
            decrement( i- 1);
        }
    }

上图所示,由于modifier的使用先判断locked是不是为true,在进行其他函数代码运行,在函数decrement加上noReentrancy可以防止这次代码块还没有运行结束再次调用该函数,来防止重入攻击

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值