火星链 火星链
Ctrl+D收藏火星链

BOOL:Solidity 技巧:如何减少字节码大小及节省 gas

作者:

时间:1900/1/1 0:00:00

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

Solidity是一种特殊的语言,有许多的奇怪巧。由于Solidity被创建为可在EVM上使用其有限的函数集,因此许多函数在Solidity中的行为与大多数其他语言不同。几个月前我写了一篇博客文章,通过有十个技巧来节省Solidity中的gas消耗,但是收到了很大的反响。

10个技巧是:

合并打包变量

uint8不总是比uint256便宜

Mappings大部分时候比Arrays便宜

Solana去中心化交易平台Serum正在考虑创建新的社区代币:金色财经报道,Solana和Serum开发商TDM Blockchain制定提案,并在周四向Serum DAO论坛提交了其建议。如果通过,这将导致为Serum DAO创建一个新的社区代币。Serum已经有一个名为SRM的本地代币。这个新的社区代币将是SRM的一个锁定版本,称为gSRM。这两种代币将有1比1的关系,这意味着用户每锁定一个SRM代币,就可以获得同等数量的gSRM。

根据提案,锁定或解锁代币将需要七天时间,但TDM表示,如果DAO愿意,可以选择调整这个时间框架。主要的区别是,不是所有的代币持有者在投票过程中都有发言权,而只是那些为此锁定了他们的代币的人。(the block)[2022/10/29 11:53:55]

不是所有的元素可以被打包

跨链DEX zkLink宣布在Solana上成功实现Groth16zk-SNARK证明系统:3月25日消息,跨链DEX zkLink宣布在Solana上成功实现了Groth16zk-SNARK证明系统。zkLink是一个基于ZK-Rollup技术的跨链交易平台,旨在链接多链,聚合不同生态的流动性。现订单簿模式的DEX Demo已上线测试网进行测试。[2022/3/25 14:17:51]

用bytes32而不是string/bytes

少使用外部调用

使用外部函数修改器

删除不需要的变量

?数据:Solana上DeFi协议总锁仓量为97.4亿美元:金色财经报道,DeFiLlama数据显示,Solana上DeFi协议总锁仓量为97.4亿美元。其中,锁仓量排名前三的协议分别是Raydium(11.5亿美元)、Marinade Finance(11.4亿美元)、Serum(8.67亿美元)。[2022/1/13 8:45:28]

使用短电路规则

尽量避免修改存储变量

在我的专栏:智能合约开发-打通Solidity任督二脉,有更多的文章深入介绍如何介绍GAS,订阅超值。

从那篇文章起,我又收集了更多的技巧与大家分享,再次分享给大家:

Huobi Global已恢复SOL充提业务:火币官方刚刚发布公告称,Huobi Global现已恢复SOL (Solana) 的充币和提币业务。[2021/1/19 16:30:02]

函数修饰器可能效率低下

添加函数修饰器时,将提取修饰器的代码并替换函数内出现的_符号。这也可以理解为函数修饰器是内联的。在普通的编程语言中,内联小代码更高效,并且不有任何实际的缺点,但Solidity不同。在Solidity中,EIP170将合约的最大大小限制为24KB,如果同一代码多次内联,则加起来就会很容易达到24KB大小限制。

另一方面,内部函数不是内联的,而是称为独立函数。这意味着它们在运行时gas要稍微贵一点,但是在部署中可以节省很多冗余字节码。内部函数还可以帮助避免可怕的“堆栈太深错误”,因为在内部函数中创建的变量与原始函数不会共享相同的堆栈,但是在修饰器中创建的变量共享相同的堆栈。

通过这种技巧,我将一份合约的大小从23

要设置或清除布尔值,可使用:

functionsetBoolean(uint256_packedBools,uint256_boolNumber,bool_value)publicviewreturns(uint256){if(_value)return_packedBools|uint256(1)<<_boolNumber;elsereturn_packedBools&~(uint256(1)<<_boolNumber);}

使用这种技术,你可以在一个存储槽中存储256个布尔值。如果你尝试正常打包bool(如在结构体中)变量,一个插槽中则只能在装入32个布尔型。

注意:仅当你要存储32个以上的布尔值时才使用此技巧。

使用库节省字节码

当你调用库的公共函数时,该函数的字节码不会包含在合约内,因此可以把一些复杂的逻辑放在库中,这样减小合约的大小。不过你得清楚,调用库会花费一些gas和使用一些字节码。对库的调用是通过委托调用的方式进行的,这意味着库可以访问合约拥有的数据,并且具有相同的权限。因此对于简单任务不值得这样做。

另外,你还需要知道,库的内部函数,solc编译器则把器内联到了合约内。内联有其自身的优点,但是需要字节码空间。

本文收录于专栏《智能合约开发-打通Solidity任督二脉》扫码进入专栏获取智能合约大师秘籍

无需使用默认值初始化变量

如果未设置/初始化变量,则变量具有默认值(0,false,0x0等,取决于数据类型)。如果你使用默认值对其进行显式初始化,那只会浪费gas。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/9558545.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

币安为何推出第三条链?这对BNB意味着什么?

标签:SOLBOOBOOLSOLIDSolDogeBOOKSHIBBooleancoinSolidblock

比特币交易热门资讯
ASH:HashKey Capital:一文说透联盟链落地与激励机制

联盟链具有效率及可扩展性高的优势,但需要建立良好的利益分配机制才能吸引企业加入。原文标题:《联盟链落地与激励机制》撰文:钱柏均、邹传伟,前者为HashKeyCapitalResearch研究员,

1900/1/1 0:00:00
ALP:比特傻观点:alpha 失效

二级市场有没有持续不断的Alpha?这是很难的。那二级市场有没有阶段性的alpha?有的。比特傻7月份以来,不停抓到alpha,一直持续到现在吧。但是呢,这些不同的alpha,也有亏损的时候.

1900/1/1 0:00:00
TOM:关于Hotbit于12月21日恢复TRTL充提功能的公告

尊敬的用户:Hotbit现已完成TRTL节点升级并恢复其充提功能。注:本次升级完成后,TRTL充值地址已变为“地址PaymentID“,请用户充提时务必复制”地址PaymentID“,缺一不可.

1900/1/1 0:00:00
区块链:小安论币:炒币市场里境界最高的是短线

炒币市场里境界最高是短线!其次,中线!最笨,长线!做中线是不明白短线的趋势,做长线是摸不清中线的趋势!打个比方:长线客在春天就在桃子树下等待,他知道在当年桃子总有一天会从树下掉下来.

1900/1/1 0:00:00
SDT:楚汉财金:12.21大饼再破历史新高24288牛市还未结束?

大饼今早凌晨转点后迅速跳水三百点,之后逐步上涨再次带动多头情绪,直至再破历史新高达到24288,日线走势图来看,MACD快慢线呈金叉线但开始有缩口的趋势,KDJ三线平缓突破100轴.

1900/1/1 0:00:00
PLA:Placeholder:试试用 NVTV 指标为智能合约平台估值,以太坊或被低估

知名区块链投资机构Placeholder打算推出一个新指标NVTV比率,专门用于智能合约平台估值。作者:ChrisBurniske编译:LeftOfCenter为区块链协议估值永远是个难题.

1900/1/1 0:00:00