我们知道,在以太坊上的交易gas是有上限的,因此也是比较昂贵的,特别是针对一些复杂业务的处理,随着业务数据的增长,有可能会导致gas超高,甚至业务无法进行操作。

之前专门写过文章来描述如何减少gas的细节内容,这里再为大家讲解一种通过代码中memory来大幅度减少gas使用。

首先先看下面示例代码:

pragma solidity ^0.5.10;contract Test{struct User{uint age;uint balance;uint num;}User user;function initUser() public{user = User({age:20,balance:1000,num:1});}function setUser1() public {user.age = 30;user.balance = 20000;user.num = 2;}function setUser2() public {User memory temp = user;temp.age = 40;temp.age = 20001;user.num = 3;user = temp;}
}

在上述代码中,我们首先通过initUser方法来初始化一个User对象的数据,然后分别调用setUser1和setUser2两个方法。

你会发现,setUser1需要消耗36476gas,而setUser2只需要效果31595gas,它们的效果相同,消耗的gas却差了5000gas,如果User的字段增多,那么此差距会越来越大。

那么这两种写法的区别是什么呢?我们知道,区块链上的写操作是比较昂贵的,而setUser1进行了多次的写操作,而setUser2只进行了一次整体的写操作。因此,节省了相当大一部分的gas。

SpringBoot技术视频

CSDN学院:《SpringBoot 视频教程全家桶》


程序新视界
公众号“程序新视界”,一个让你软实力、硬技术同步提升的平台

Solidity如何通过代码减少gas消耗相关推荐

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

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

  2. c++ 数组引用_在 Solidity中使用值数组以降低 gas 消耗

    背景 我们Datona Labs在开发和测试Solidity数据访问合约(S-DAC:Smart-Data-Access-Contract)模板过程中,经常需要使用只有很小数值的小数组(数组元素个数少 ...

  3. Solidity Gas消耗

    1.常量和变量读取GAS消耗 pragma solidity ^0.8.7; // 21420 gas contract demo1{address public constant admin = 0 ...

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

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

  5. Python高级技巧:用一行代码减少一半内存占用!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 内存不足是项目开发过程中经常碰到的问题,我和我的团队在之前的一个项目中也遇到了这个问题 ...

  6. spark减少内存消耗_将内存消耗减少20倍

    spark减少内存消耗 这将是另一个故事,与我们分享有关内存相关问题的最新经验. 该案例是从最近的客户支持案例中提取的,在该案例中,我们遇到了一个行为异常严重的应用程序,该应用程序因生产中的OutOf ...

  7. 算法性能分析(6):代码的内存消耗

    理解代码的内存消耗,最关键是要知道自己所用编程语言的内存管理. 一.不同语言的内存管理 不同的编程语言各自的内存管理方式. C/C++这种内存堆空间的申请和释放完全靠自己管理 Java 依赖JVM来做 ...

  8. 基于solidity的抢红包代码

    基于solidity的抢红包代码 目录 基于solidity的抢红包代码 1.实现功能 2.原文链接 3.solidity代码 4.总结 1.实现功能 发红包人可以设置红包的口令,类型,最多抢红包人数 ...

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

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

最新文章

  1. spark streaming 消费 kafka入门采坑解决过程
  2. 【数据结构与算法】二叉树遍历
  3. Android根据URL下载文件保存到SD卡
  4. 如何处理OData错误消息Property XX at offset XX is invalid
  5. Spring框架知识复习之二
  6. android callmanager.java,如何使用Mobile-SDK-Android正确注销DJISDKManager和SDKManagerCallback应用程序?...
  7. html静态化和动态页面,web动态页面静态化,伪静态
  8. 总结 15/4/23
  9. [洛谷P1156][codevs1684]垃圾陷阱
  10. 计算机应用技术在医院的应用,计算机管理技术在医院的应用
  11. java封装继承多态实验总结_java封装继承多态理解3000字论文
  12. 43. Pandas查询数据的简便方法df.query
  13. AUTOSAR基础篇之CanTsyn
  14. echarts的用法
  15. Genlovy_Hoo大神的杰作
  16. 云队友丨任正非内部演讲:星光不问赶路人
  17. H5+在浏览器中打开相机扫描二维码
  18. Effie:手机创作新革命
  19. Git与GitHub说明分析
  20. MATLAB算法实战应用案例精讲-【人工智能】Grover量子搜索算法

热门文章

  1. gradle编译错误:Unfortunately you can't have non-Gradle Java modules and Android-Gradle modules in one
  2. flex 教程_完整的flex教程
  3. Mybatis概念以及源码分析
  4. C 语言 宏定义 :字符串化 stringify 的应用
  5. python怎么改字体大小_如何使用python在excel中更改字体大小
  6. 关于eclipse中没有js代码提示的解决
  7. 关于eclipse中js文件没有提示代码的解决
  8. 基于Highcharts箱线图实现k线图
  9. (二)Spring自动装配
  10. 阿里面试官的 说一下从url输入到返回请求的过程 问的难度就是不一样!