前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Solidity如何通过代码减少gas消耗

Solidity如何通过代码减少gas消耗

作者头像
程序新视界
发布2020-02-23 17:27:14
5350
发布2020-02-23 17:27:14
举报
文章被收录于专栏:丑胖侠丑胖侠

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

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

首先先看下面示例代码:

代码语言:javascript
复制
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 视频教程全家桶》


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot技术视频
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档