首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有可能在“出气”返回之前控制“气体离开()”和一个回路的出口?

是否有可能在“出气”返回之前控制“气体离开()”和一个回路的出口?
EN

Ethereum用户
提问于 2022-09-04 13:50:47
回答 3查看 1.5K关注 0票数 5

已部署的智能契约具有公共视图功能,可以搜索到使用for循环映射结构。

问题是,在数据的500圈内(有10,000个索引,而且还在增长.)区块链返回:

代码语言:javascript
运行
复制
{
  "code": -32000,
  "message": "out of gas"
}

那么,合同现在是无用的。知道如何控制气体排放和出气前的回路出口吗?

谢谢!

EN

回答 3

Ethereum用户

发布于 2022-09-04 16:35:27

让我补充一点现有的伟大答案。

是的,你可以在你的合同中实施这种技巧。但我强烈建议不要。主要是因为:

  1. 合同绝不应依赖天然气的运营成本。因此,你不应该估计,你需要多少汽油,为一些剩余的操作。天然气成本可能会随着不同的分叉而发生巨大的变化。
  2. 你应该避免开放的循环,或者至少使它们可分页。因此,如果您有10000个条目,并且100%确定您必须遍历所有这些条目,则循环应该允许批量检索数据:首先您获取第一个X项,然后是下一个X项等等。如果可以自由选择页面/批处理大小,则可以避免任何气体问题。唯一的缺点是复杂性在增加,理论上,数据可能会在页面之间发生变化。
票数 8
EN

Ethereum用户

发布于 2022-09-04 16:13:17

当然,只要做这样的事情:

代码语言:javascript
运行
复制
do{
// Your stuff
}while(gasleft() > whateverYouNeed)

(其中whateverYouNeed将是运行循环一次迭代所需的气体量+后面的气体量(可能*1.5,以防万一)

票数 6
EN

Ethereum用户

发布于 2022-09-04 17:01:25

我同意劳里的看法。

此外,检查您正在保存的数据是否“过期”,并在一段时间后删除。

如果您知道某些数据可以在一段时间后被删除,那么您可以添加逻辑来处理数据删除,这样您的智能契约数据就不会增长到浪费资源和无法使用的地步。

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

https://ethereum.stackexchange.com/questions/134968

复制
相关文章

相似问题

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