news 2026/4/20 4:38:18

Solidity-learning(5)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 + 下划线 + 变

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 7:51:22

蓝桥杯软件赛模拟练习三(C++ Python)

蓝桥杯软件赛模拟练习二(C++ & Python) 104418. 学院交流【算法赛】 问题描述 蓝桥学院计划派遣 N 名同学前往 A 学院和 B 学院进行程序设计交流活动。每位同学必须且仅能被分配到其中一所学院,且每所学院至少需分配一名同学。 对于任意两位同学 i 和 j(i≠j),如果…

作者头像 李华
网站建设 2026/4/18 7:25:10

上位机状态机开发之运动控制

上位机状态机开发之运动控制/// <summary>/// 运动控制/// </summary>/// <param name"sender"></param>/// <param name"e"></param>private void materialButton4_Click(object sender, EventArgs e){CommunicateSe…

作者头像 李华
网站建设 2026/4/19 3:40:28

AI如何优化计数排序?智能代码生成实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用快马平台生成一个优化的计数排序算法实现&#xff0c;要求&#xff1a;1.支持整数数组输入 2.自动检测数据范围 3.可视化排序过程 4.包含时间复杂度分析 5.提供测试用例。使用K…

作者头像 李华
网站建设 2026/4/17 8:15:19

零基础入门:Java Base64原理与简单实现

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个面向Java初学者的Base64教学代码&#xff0c;要求&#xff1a;1.分步骤实现Base64编码过程 2.每个步骤都有详细的注释说明 3.提供可视化演示的main方法 4.包含常见错误的示…

作者头像 李华