首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化是如何在固态编译器上工作的?

优化是如何在固态编译器上工作的?
EN

Stack Overflow用户
提问于 2021-12-01 15:43:25
回答 2查看 295关注 0票数 0

我真的不知道优化器是什么,特别是'runs‘参数。我在truffle-config.js中设置了optimizer:true,并保留了默认值(200)。这是我用来在eth mainnet上部署的设置。我部署了一个erc20治理令牌,一个将在项目生命周期中使用的令牌。拥有runs:200会如何影响存活数年的令牌的函数调用的燃气费?我应该给它一个更高的值吗?但在我看来,对于一个长期存在的智能合约来说,任何价值都太低了。那么我在200岁时的选择权意味着什么呢?谢谢

EN

回答 2

Stack Overflow用户

发布于 2021-12-01 23:43:27

runs of runs (--optimize-runs)指定了在契约的整个生命周期中,执行已部署代码的每个操作码的大致频率。(

of runs of runs)

来源:https://docs.soliditylang.org/en/v0.8.10/internals/optimizer.html#optimizer-parameter-runs

因此,如果您计划在过去几年中调用该合约超过200次,那么您可能希望放入更多的运行次数。但也有一个权衡--为更多(更便宜)的运行进行优化的合同部署起来更昂贵。

票数 0
EN

Stack Overflow用户

发布于 2021-12-24 03:20:49

优化器的目标是以一种在运行时减少气体成本的方式,从高级编程构造中生成汇编操作码,并随后生成机器码。

固态优化器基本上将指令序列拆分成位于JUMP s和JUMPDEST s操作码的原子指令块。它对程序集进行操作,因此它也可以被其他语言使用。“原子”操作总是被观察到完成或未完成,但永远不会中途完成。

因此,对这些块进行分析,并将对内存、堆栈或存储的每次修改都记录为表达式。这些表达式由一条指令和一个参数列表组成,这些参数基本上是指向另一个表达式的指针。主要目标是找到等价的表达式,并将它们分组到一个表达式类中。

基本上,每个块中的代码都是完全重新生成的,并且从这些表达式中开发出依赖图。然后将这些表达式放在块末尾的堆栈上。任何不属于这个依赖关系图的操作本质上都会被“移除”。代码现在按照它们在原始固化度代码中出现的顺序生成。这也适用于对内存和存储的修改。最后,生成的所有这些值都需要放在堆栈上的正确位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70187150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档