solidity智能合约字节数最大值及缩减字节数
智能合约最大字节数
在Solidity中,EIP 170将contract的最大大小限制为24 KB 。因此,如果智能合约内容过多,会导致无法进行发布操作。
减少压缩字节数方法
方法及变量命名
在一定程度上,方法或变量的长短会影响字节数的多少,因此可通过减少方法名或变量名来对内容进行压缩,但一般情况下效果很小,毕竟方法和变量名本身所占空间有限。
减少成员变量定义
如果某个值只使用一次或两次,那么就尽量减少再独立创建一个变量,变量越多,编译后所占字节数越多,此项能减少不少编译后的大小。
变量初始化
变量显式的初始化不仅会消耗gas,还会增加编译后的字节码,因此能使用默认值即使用默认值。
避免重复检查
有些值在业务前后以及做相应的检查了,就没有必要重复检查,减少此类代码,有效缩减编译后的字节数。
定义常量
比如像1e18这样的数值,多处使用,一定要定义常量,直接写会导致编译后的字节码变长,通过此方式可有效减少字节码数量。
减少public属性
默认public的属性编译之后会提供对应的调用方法,因此将不必要的public属性设置为内部的,则可减少对应的方法字节。
使用简短的原因字符串
require或revert等原因字符串描述简单化。
单线交换
Solidity可以在单个语句中交换变量值。从而避免定义临时的中间变量。
(result[i], result[j]) = (result[j], result[i])
以上的写法典型的应用场景就是冒泡排序,当需要交换数组中两个值的位置时,可通过上面的写法,减少定义中间变量。
使用事件带提存储
有些数据没必要存储在区块链上,浪费资源,可通过事件将信息记录在日志中。
使用库来保存一些字节码
公共库的函数不会成为智能合约的一部分,因此可以将一些计算操作写入公共库里面,然后通过授权进行相应的访问。
原文链接:https://www.choupangxia.com/2019/08/06/solidity智能合约字节数最大值及缩减字节数/
solidity智能合约字节数最大值及缩减字节数的更多相关文章
- solidity智能合约如何判断地址为0或空
智能合约地址判断 在旧版本中可使用以下代码来进行比较: owner != 0x0 但如果在新版本中使用,则会提示错误信息. 那么,如何正确使用来比较地址是否为空呢. 解决方案 可以使用address( ...
- solidity智能合约中tx.origin的正确使用场景
简介 tx.origin是Solidity的一个全局变量,它遍历整个调用栈并返回最初发送调用(或事务)的帐户的地址.在智能合约中使用此变量进行身份验证会使合约容易受到类似网络钓鱼的攻击. 但针对tx. ...
- 以太坊solidity智能合约-生成随机数
Solidity随机数生成 在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法.其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数. 对于solidity来 ...
- solidity智能合约implicit conversion异常
问题场景 在使用^0.5.10版本的solidity时,如果使用this关键字会出现以下问题. 代码: require(tokenContract.balanceOf(this) >= _num ...
- Solidity 智能合约开发
需要专用浏览器或部署节点支持. Solidity (中文:固态,固体)是一种语法与Javascript相似的高级语言,它为Ethereum虚拟机(EVM)编译代码而设计. Solidity是静态类型的 ...
- solidity 智能合约之间的调用
智能合约之间的调用 在区块链上,有些功能往往无法通过一个智能合约完成,此时便会用到智能合约之间的调用.本篇文章带大家通过具体示例来了解一下智能合约之间的调用. 在智能合约的编译过程中,有两种情况:调用 ...
- 以太坊solidity智能合约语言学习资源整理
暂时看到篇文章写的不错,先收集下来,后面有机会自己也整理一个 Solidity语言学习(一)Solidity语言学习(二)——Solidity的安装与编译Solidity语言学习(三)——智能合约编程 ...
- Solidity智能合约面向对象编程(一、类的创建)
Solidity编写智能合约 1 pragma solidity ^0.4.4;//版本声明 ^代表向上兼容 pragma代表版本声明 solidity 代表开发语言 2 //定义类 3 contra ...
- Solidity智能合约调用智能合约
来源:https://medium.com/@blockchain101/calling-the-function-of-another-contract-in-solidity-f9edfa921f ...
随机推荐
- Java并发框架:Executor
介绍 随着当今处理器中可用的核心数量的增加, 随着对实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行. Java 提供了自己的多线程框架,称为 Executor 框架. 1. Execut ...
- 源码阅读 - java.util.concurrent (三)ConcurrentHashMap
在java.util.concurrent包中提供了一个线程安全版本的Map类型数据结构:ConcurrentMap.本篇文章主要关注ConcurrentMap接口以及它的Hash版本的实现Concu ...
- 前端从零开始学习Graphql
学习本姿势需要电脑装有node,vue-cli相关环境,以及要有node,express,koa,vue相关基础 本文相关demo的github地址: node服务:https://github.co ...
- 包教包会之Open Live Writer设置代码样式
Open Live Writer(以下简称OLW),作为一个在本地写博文,然后发布到各个博客网站的客户端,在使用上个人觉得还是比较好用的.但是其对IT博文中代码部分的内容样式支持不是很友好.下面是本人 ...
- Linux soft lockup 和 hard lockup
一. 整体介绍 soft lockup:检测调度异常, 一般是驱动禁止调度或者阻塞比如while(1), 导致无法调度其他线程, 需要注意的是, 应用程序while(1)不会影响其调度, 只要有更高的 ...
- 学习4:内容# 1.列表 # 2.元祖 # 3.range
1.列表 列表 -- list -- 容器 有序,可变,支持索引 列表: 存储数据,支持的数据类型很多 字符串,数字,布尔值,列表,集合,元祖,字典, 定义一个列表 lst = ["dsb& ...
- [原创]SSH Tunnel for UDP
SSH Tunnel for UDP UDP port forwarding is a bit more complicated. We will need to convert the packet ...
- re模块:模式匹配与正则表达式
一.用正则表达式查找文本模式 正则表达式,简称regex,是文本模式的描述方法.比如\d是一个正则表达式,用于表示一位0~9的数字.在一个模式后面加上花括号包围的数字n(如{n}),表示匹配这个模式n ...
- 通过代数,数字,欧几里得平面和分形讨论JavaScript中的函数式编程
本文是对函数式编程范式的系列文章从而拉开了与以下延续一个. 介绍 在JavaScript中,函数只是对象.因此,可以构造函数,作为参数传递,从函数返回或分配给变量.因此,JavaScript具有一流的 ...
- ForkJoinPool分支/合并框架工程使用的工作窃取
ForkJoinPool分支/合并框架 在必要的情况下,讲一个大任务,进行拆分(fork)成若干个小任务(拆到不可拆为止),再将一个个小的任务运算的结果进行join汇总. 工作窃取的背景 分支/合并框 ...