1、使用struct结构体

使用struct结构体会结构存储空间,编译器会自动优化struct的存储。比如uint类型,不管是uint32还是uint256,默认都会使用256存储。两个uint32也占用2个256的存储单元。但如果是在struct内部的两个uint32,则只会占用一个256存储单元。

2、对于不需要修改链上内容的函数,加上view关键词。

当玩家从外部调用一个view函数,是不需要支付一分 gas 的。

这是因为 view 函数不会真正改变区块链上的任何数据 - 它们只是读取。因此用 view 标记一个函数,意味着告诉 web3.js,运行这个函数只需要查询你的本地以太坊节点,而不需要在区块链上创建一个事务(事务需要运行在每个节点上,因此花费 gas)。

稍后我们将介绍如何在自己的节点上设置 web3.js。但现在,你关键是要记住,在所能只读的函数上标记上表示“只读”的“external view 声明,就能为你的玩家减少在 DApp 中 gas 用量。

注意:如果一个 view 函数在另一个函数的内部被调用,而调用函数与 view 函数的不属于同一个合约,也会产生调用成本。这是因为如果主调函数在以太坊创建了一个事务,它仍然需要逐个节点去验证。所以标记为 view 的函数只有在外部调用时才是免费的。

Solidity节省GAS的方法相关推荐

  1. solidity修饰符、节省gas技巧

    目录 一.智能合约的永固性 二.OpenZeppelin库的Ownable合约 三.函数修饰符modifier 四.Gas - 驱动以太坊DApps的能源 五.省 gas :结构封装 (Struct ...

  2. 死磕solidity之如何有效的节省gas.md

    为什么要强调优化gas的重要性 DAPP中收取的费用取决于功能逻辑的复杂程度,越复杂消耗的计算资源越多.并且需要用户承担一部分gas,所以solidity 的优化显得非常的重要.同时注重优化gas的合 ...

  3. android 获取hdmi数据格式,一种基于Android系统HDMI同显时节省带宽的方法与流程

    本发明涉及一种基于Android系统HDMI同显时节省带宽的方法,属于计算机领域. 背景技术: 通常很多移动设备都配备了小尺寸的LCD屏幕,有些使用场景为了能提供更好的交互控制操作,需要移动设备在大尺 ...

  4. 【MCU】一种单片机节省内存的方法(补充)

    1.聊一聊 以前听这首曲子内心会变得格外平静,然而现在却五味陈杂! 今天主要跟大家分享一个MCU省内存的办法,同时也欢迎大家在文末问答留言讨论. 2.读前必备 对于MCU节省内存办法大合集bug菌在很 ...

  5. 反思开发新需求节省时间的方法

    1.需求不清楚就开做,南辕北辙,开发方向完全相反,做很多无用功: 方法:理解清楚需求,完全的理解明白,自己先读一遍需求,然后听一遍需求,再问一遍需求,及时沟通疑惑点,再进行开发 2.墨迹!碰到问题不沟 ...

  6. 【CryptoZombies - 2 Solidity 进阶】004 使用view和内存中的数组来节约Gas

    目录 一.前言 二.View函数节省Gas 1.讲解 2.实战 1.要求 2.代码 三.在内存中声明数组 1.讲解 2.实战 1.要求 2.代码 一.前言 看了一些区块链的教程,论文,在网上刚刚找到了 ...

  7. Solidity优化 - 减少智能合约gas消耗

    1. 首选数据类型 尽量使用 256 位的变量,例如 uint256 和 bytes32!乍一看,这似乎有点违反直觉,但是当你更仔细地考虑以太坊虚拟机(EVM)的运行方式时,这完全有意义.每个存储插槽 ...

  8. Kubernetes:通过自动化节省IT预算的4种方法

    导语 大多数CIO和IT领导者都熟悉反复执行的任务"事半功倍".在许多组织中,这都是现实,在各种其他因素(例如宏观经济状况)的影响下,这种趋势往往会起伏不定. 正文 有时,&quo ...

  9. 对比了上百个python程序员的开发习惯,这10个方法最节省时间!

    前言 观察了100个python的开发习惯,从中做出对比,精选初10个最节省时间的方法,在此送上: 为以后不管是学习还是工作中提高效率 Python 是一个美丽的语言,可以激发用户对它的爱.所以如果你 ...

  10. [区块链笔记1] 入坑区块链 智能合约solidity基础

    以太坊是一个分布式计算网络,提供了运行智能合约的分布式平台. 智能合约是在以太坊虚拟机上运行的应用程序. 以太坊拥有多种高级语言可以用来编写智能合约,最流行的是solidity,基于javascrip ...

最新文章

  1. 你值得拥有!更省钱地完成数据监听
  2. 3、Swing布局管理器
  3. 数据库系统(五)——数据库设计
  4. 用tomcat 发布mule 服务 (转)
  5. 万特电能表接线仿真系统 软件_【学习软件】嘘!此3款10万级专业解锁版神器全网已绝迹!(物理实验室)...
  6. linux 统计端口链接,linux netstat 统计链接数查看外部(转)
  7. oracle添加序列器,Oracle 建表,添加主外键,序列,触发器
  8. python `__str__`
  9. PAT甲级1007 最大连续子序列
  10. hibernate整合openGauss
  11. 武汉理工大学计算机学院转专业细则,计算机学院武汉理工大学2009年各学院转专业工作实施细则.doc...
  12. 程序员是一群什么样的人,1024程序员节调查报告」这群IT人有点东西哟
  13. Grafana dashboard 定时报表(Grafana-reporter)
  14. 程序语言翻译: 2.1在以阶段划分的编译器中,贯穿于编译器工作始终的是( )。2.2 对高级语言程序进行翻译时,源程序中的变量不可能映射到( )
  15. 远程服务器用户多开,服务器安全之修改远程桌面限制同一用户使用同一个会话。一个用户只开一个会话禁止多开。...
  16. 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
  17. android测试speaker,Android关于蓝牙mic和speaker的输入输出
  18. Java多种读写文件文件方法之对比分析
  19. [c++]一个简单的NEAT机器学习寻路实验
  20. android蘑菇街架构,蘑菇街Android单元测试框架 – natasha

热门文章

  1. 用C语言将中文文本和英文文本合并为一段中文一段英文(翻译排版)
  2. 推荐几款基于 Markdown 在线制作简历的网站
  3. JSHOP2学习1:环境配置(超详细教程)
  4. 离散-如何确定哈斯图极大极小元、最大最小元、最大最小上下界
  5. 计算机学生的理想定位范文,我理想中的学校作文范文(通用3篇)
  6. 微信h5支付 php sdk_TP5专用微信支付SDK使用简介
  7. Lua二进制chunk
  8. Arduino使用人体红外传感器
  9. Excel文本自动换行
  10. excel表格打印每页都有表头_Excel怎么能让每一页都打印上相同的顶端和底端标题?...