solidity学习笔记(8)—— 函数修饰符及自定义修饰符

本文介绍了Solidity编程语言中的函数修饰符,包括public、private、external、internal、payable、view等,以及状态变量储存位置的storage和memory。此外,还详细讲解了自定义修饰符的实现方式,如在OpenZeppelin库的Ownable合约中应用的onlyOwner修饰符,展示了如何通过继承和调用来控制函数访问权限。同时,提到了带有参数的函数修饰符,以防止重入攻击为例进行了说明。

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

在Solidity中,函数修饰符规定了函数的行为、调用规则。在Solidity语言中预置的修饰符有如下一些:

1、函数和状态变量可见性修饰符
public:在外部和内部均可见(创建存储/状态变量的访问者函数)
private:仅在当前合约中可见
external: 只有外部可见(仅对函数)- 仅仅在消息调用中(通过this.fun)
internal: 只有内部可见

2、状态变量储存位置修饰符
storage:变量储存在区块链中,状态变量默认是storage类型;
memory:变量储临时存在内存中,局部变量默认是memory类型;

3、接受Ether修饰符
payable:允许函数在调用同时接收Ether

4、函数读取状态变量修饰符
pure:不允许修改或访问状态变量-这还没有强制执行
view:不允许修改状态变量-这还没有强制执行
constant(for function):等同于view
constant(for state variables):除了初始化之外,不允许赋值操作,类似JavaScript中的常量

自定义修饰符

函数修改器(Function Modifiers)

修改器(Modifiers)可以用来轻易的改变一个函数的行为。比如用于在函数执行前检查某种前置条件。
修改器是一种合约属性,可被继承,同时还可被派生的合约重写(override)。

OpenZeppelin库的Ownable 合约

下面是一个 Ownable 合约的例子: 来自 OpenZeppelin Solidity 库的 Ownable 合约。 OpenZeppelin 是主打安保和社区审查的智能合约库,你可以在自己的 DApps中引用。

所以Ownable 合约基本都会这么

Solidity 中,函数访问修饰符用于限制函数的访问权限,以确保只有满足特定条件的地址或账户才能调用该函数。以下是 Solidity 中常用的访问修饰符及其用法: 1. public:公共函数,任何地址都可以调用。 2. private:私有函数,只能在当前合约内部调用。 3. internal:内部函数,只能在当前合约内部或继承该合约的合约中访问。 4. external:外部函数,只能通过外部交互(如消息调用)方式调用,不能在合约内部直接调用。 以下是一个简单示例,演示如何使用访问修饰符限制函数的访问权限: ``` pragma solidity ^0.8.0; contract AccessControl { address public owner; constructor() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner, "Only owner can call this function"); _; } function changeOwner(address _newOwner) public onlyOwner { owner = _newOwner; } function publicFunction() public { // 可以被任何地址调用 } function privateFunction() private { // 只能在当前合约内部调用 } function internalFunction() internal { // 只能在当前合约内部或继承该合约的合约中访问。 } function externalFunction() external { // 只能通过外部交互(如消息调用)方式调用,不能在合约内部直接调用。 } } ``` 在上述示例中,我们定义了一个 onlyOwner 修饰符,用于限制只有合约所有者才能调用 changeOwner 函数。而 publicFunction 可以被任何地址调用,而 privateFunction 只能在当前合约内部调用,internalFunction 只能在当前合约内部或继承该合约的合约中访问,externalFunction 只能通过外部交互方式调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值