
Solidity常见修饰符
在 Solidity 中,有一些内置修饰符可以直接用于合约的 事件、函数和状态变量。这些内置修饰符用来调整访问控制、函数行为、存储管理等。以下是 Solidity 中常见的内置修饰符及其作用:
1. 针对函数的内置修饰符
1.1 payable
- 作用: 表示函数可以接收以太币(Ether)。
- 应用场景: 通常用于支持资金转账的函数。
- 示例:
1.2 view
- 作用: 表示函数不会修改合约的状态(例如写入存储)。
- 应用场景: 用于只读取链上数据的函数。
- 示例:
1.3 pure
- 作用: 表示函数既不读取也不修改合约的状态。
- 应用场景: 用于执行纯逻辑运算、不涉及任何存储或链上状态的函数。
- 示例:
1.4 virtual
- 作用: 表示函数可以在子合约中被重写(override)。
- 应用场景: 定义可扩展的基础合约。
- 示例:
1.5 override
- 作用: 表示重写父合约中的
virtual
函数。 - 应用场景: 用于在子合约中实现多态行为。
- 示例:
1.6 external
, public
, internal
, private
- 作用: 控制函数的可见性。
- 作用范围:
external
: 只能从合约外部调用(通过this
也可以)。public
: 内外部均可调用。internal
: 只能从合约内或继承的合约中调用。private
: 仅能从当前合约内部调用。
- 示例:
1.7 nonReentrant
- 作用: 防止重入攻击。
- 应用场景: 用于保护可能受到重入攻击的函数(通过 OpenZeppelin 的
ReentrancyGuard
实现)。 - 示例:
1.8 returns
- 作用: 指定函数的返回值类型。
- 示例:
2. 针对状态变量的内置修饰符
2.1 constant
- 作用: 定义一个常量状态变量,其值在部署时确定,无法修改。
- 示例:
2.2 immutable
- 作用: 定义一个不可变的变量,其值只能在构造函数中赋值,一旦赋值后无法更改。
- 示例:
2.3 private
, internal
, public
- 作用: 控制状态变量的访问权限。
- 作用范围:
private
: 仅当前合约内可访问。internal
: 当前合约和继承的子合约中可访问。public
: 内外部均可访问(会自动生成 getter 函数)。
- 示例:
2.4 storage
, memory
, calldata
- 作用: 指定数据的存储位置。
storage
: 持久化存储在链上的状态变量。memory
: 临时存储在函数执行期间。calldata
: 特殊存储位置,仅用于外部函数参数,数据不可修改。
- 示例:
3. 针对事件的内置修饰符
3.1 indexed
- 作用: 在事件参数中添加
indexed
标记,用于方便在链上日志中过滤和查询相关事件。 - 示例:
3.2 anonymous
- 作用: 表示事件在日志中不会包含事件名称(通常用于简化日志存储)。
- 示例:
通过这些内置修饰符,Solidity 提供了强大的工具来控制合约的访问权限、逻辑行为和存储管理,使得合约更加安全、高效和易于维护。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 时光·李记
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果