当前位置: 首页 > news >正文

Solidity-learning(5)

前面的部分已经学完了基础知识,成功部署了一个智能合约,使用一个库和chainlink合约创建了一些功能强大的去中心化应用。

接下来的内容,是在前面的基础上,学习更高阶的solidity,如果你忘记点赞关注收藏,麻烦动动小手,感谢你的支持~

1-Advanced Solidity

1.1-Immutable & Constant

源码中owner和minimunUsd在合约中被设定一次之后就不会再改变了,可以使用solidity中的一些工具让他更节省gas。

现在重新编译运行一下代码,在虚拟机上面可以运行,但是因为没有chainlink网络,所以fund和withdraw函数都无法正常工作,但是在虚拟机上运行方便很多,现在只需要观察消耗的gas数量。

打开底下的终端,可以看到创建合约实际消耗了 757471 gas,现在需要学习一些技巧,把这个数字降下来。

这两个技巧就是constant关键字和immutable关键字。

这两个关键字可以保证变量不能被改变,具体细节可以了解solidity文档中的信息。

Constants | Solidity by Example | 0.8.26

Immutable | Solidity by Example | 0.8.26

如果只是在函数外分配一次变量,然后永远不再改变,就可以使用constant关键字。

当添加一个constant关键字时,这个变量minimumUsd就不再占用一个存储空间,也更容易被读取。

uint256 public constant minimumUsd = 50 * 1e18;

现在添加这个关键字之后重新编译运行,发现创建合约消耗的gas从变成了 757471 gas 变成了737532 gas,节省了约20000 gas。

通常情况下,常量变量有不同的命名规则,常量规定全部用大写字母和下划线表示

(顺便把代码中原有的所有小写minimun也换成这个样式)

uint256 public constant MINIMUM_USD = 50 * 1e18;

然后再继续编译运行,点击蓝色按钮发现消耗了 374 gas,这时MINIMUM_USD的执行成本。

如果此时删除这个常量变量关键字,重新编译运行,再次点击蓝色按钮,就会发现执行成本变成了2446 gas。调用前后的差距是很大的,花费也差了很多。

代码中另外一个只需要设置一次的变量就是owner。

owner在构造函数变量中设置过一次,这些被一次性设置的变量,但是没有和声明写在同一行的,可以直接在声明的时候将他标记为immutable。

immutable变量命名规定:i + 下划线 + 变

http://www.cnnetsun.cn/news/27722.html

相关文章:

  • 基于Spring Boot框架和vue的的诗词鉴赏与交流网站的设计与实现_96fdvu1s
  • 基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
  • 三极管:电子信息时代的核心“控制单元”,藏于设备中的关键器件
  • 1小时打造专属右键菜单工具:快马平台实战
  • 零基础用AI制作第一个Macyy风格网页
  • GG3M业务核心:需求满足与问题解决 | GG3M Business Core: Demand Satisfaction and Problem Solving
  • 零基础玩转Vulhub:从安装到第一个漏洞复现
  • AI如何帮你快速解决Unexpected End of File错误
  • 企业级实战:用Vulhub构建内部攻防演练平台
  • 小白也能懂:Maven 3.6.1图文安装指南
  • 2025年Top5软件外包平台实战评测
  • React小白也能懂:useEffect入门图解指南
  • 电商网站遇到Internal Server Error的应急处理方案
  • 基于微信小程序+node.js的校园餐饮系统设计与实现
  • springboot基于vue的大学生公益活动志愿服务系统的设计与实现_nahamqu8
  • 操作系统 李治军 4 设备驱动与文件系统
  • 深度学习入门:图像分类的实战应用
  • kafka
  • 刘洋洋新歌《梁祝之三世约》上线,唱尽轮回绝恋
  • 一个完全本地运行的视频转文字工具:Vid2X
  • Java 开发最容易犯的 10 个错误
  • 用 Reader 建个私人图书馆,加上cpolar随时随地畅快阅读
  • 下一代盲盒系统核心架构解析:JAVA-S1如何打造极致公平与全球化体验
  • LangGraph深度解析:从图基础到人机交互的AI工作流框架实践
  • C++--
  • 算法练习4--数组:长度最小的子数组
  • Spring Cloud Gateway为什么要推出 WebMVC 版本?深度解析两大版本的差异与选型
  • git和github的区别
  • 小白从零开始勇闯人工智能Linux初级篇(MySQL库)
  • Bootstrap 模态框详解