news 2026/2/26 23:55:17

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/2/26 16:05:00

嵌入式-硬件基础:了解三极管

目录 一、三极管的本质:半导体电流控制器 1. 核心定义 2. 结构与材料 3. 两种类型:NPN 型 vs PNP 型 二、工作原理:“以小控大” 的核心逻辑 1. 导通的前提:正确偏置 2. 载流子的运动过程(三步曲) …

作者头像 李华
网站建设 2026/2/26 1:50:50

【Java方法】--让你的代码变成一个独立的“任务”——方法

个人主页 目录前言1. 什么是方法?为什么我们需要它?2. 如何定义一个Java方法?**代码示例:**3. 如何调用方法?**代码示例:**4. 拓展:命令行传递参数**如何使用?**结尾前言 想象一下&a…

作者头像 李华
网站建设 2026/2/26 9:38:35

5分钟用vue.config.js搭建开发环境原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请快速生成一个可用于原型开发的vue.config.js配置,要求:1. 配置热重载 2. 设置/api代理到本地3000端口 3. 允许跨域 4. 配置ESLint自动修复 5. 添加vue-rou…

作者头像 李华
网站建设 2026/2/26 16:31:50

小白必看:什么是WiFi密码字典及其基本用法

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式WiFi密码字典学习应用,通过简单示例演示密码字典的工作原理。要求包含基础知识讲解、简单字典生成演示和实际应用场景说明。使用HTMLJavaScript实现可视化…

作者头像 李华
网站建设 2026/2/24 12:55:56

传统调试 vs AI辅助:解决Internal Server Error的效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个对比工具,左侧展示传统调试步骤(查看日志、手动排查等),右侧展示AI辅助调试流程(自动分析、建议修复&#xff09…

作者头像 李华