Solidity 修饰参数

发布于 2024-11-04 11:10:17 字数 1250 浏览 5 评论 0

constant

  • constant 用于变量: 表明当前变量不可修改。如果修改,编辑器会报错。
  • constant 用于函数: 表明当前函数中,不应该修改状态。即便修改了,编译器也不会报错。
  • solc 0.4.17 之后,被废弃。取而代之的是 view 和 pure。

view 和 pure

二者相同之处在于不可修改变量。

view 是用在没有对状态(storage) 进行修改的函数上。加了 view 的函数,调用时所做的修改不会对合约的状态产生影响,只是起一个查看状态的作用。和 constant 用于函数时功能一样。另外使用 Remix 时,可以方便查看函数返回值。使用 view 时,Remix 会把调用函数的输出值放在函数右边显示,而不是在 details 里。

用途在于:

  • 告诉你的同伴:这块 storage 不能乱改。或者告诉其他引用做 library 的人:这块 storage 不能乱改。
  • 触发 events
  • 创建其他合约
  • 使用 selfdestruct
  • 通过 call 方法发送 ether
  • 通过 call 方法调用其他没有 view 修饰的方法
  • 使用包含某些操作码的内联汇编。

pure 更加严格,表明它甚至不会读取和存储 stroage 状态,只能操作方法中本地变量。

用途在于:

  • 调用 this.balance 或者 <address>.balance
  • 访问其他 block , tx, msg 的成员变量
  • 通过 call 方法调用其他没有 pure 修饰的方法
  • 使用包含某些操作码的内联汇编。

注意:

阻止函数读取 EVM 级别的状态是不可能的,只能防止它们写入状态(只能在 EVM 级别执行 view,pure 不能)。

payable

表明调用该函数可以接受以太币。当别人向你的合约地址转账时就会触发。

如果合约中不声明 payable 方法,也会有个匿名方法:fallback function 被触发。

这个方法想要正常工作最少需要 2300 gas。

下列操作会花费大于 2300gas:

  • 存储 storage
  • 创建合约
  • 调用外部方法
  • 发送 ether

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

命比纸薄

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

lee_heart

文章 0 评论 0

往事如风

文章 0 评论 0

春风十里

文章 0 评论 0

纸短情长

文章 0 评论 0

qq_pdEUFz

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文