【问题标题】:Solidity: looping within contract or just calling for all values?Solidity:在合约中循环还是只调用所有值?
【发布时间】:2021-06-08 12:51:58
【问题描述】:

我有一个在以太坊网络上运行的 Solidity 智能合约,它有一个公共映射,用于存储一个具有多个属性的结构。我必须遍历所有这些存储的结构,以查找可能是或可能不是唯一的特定属性值(即 users['Joe'].age == "30")。这些可能会增加 1000 多个结构,每个结构大约有 6 个属性。

在成本与性能方面,我应该怎么做?在合约内部运行一个内部循环,只得到我想要的结果,或者创建一个循环来单独调用所有结构,然后在区块链外部运行一个循环来找到它们?

在这里,我有点迷路了。谢谢。

【问题讨论】:

  • 请编辑您的问题并显示当前代码,以及循环的原因。使用代码会更容易理解。

标签: loops ethereum solidity smartcontracts cost-management


【解决方案1】:

由于我还不能发表评论,我想我能做的就是回答......

由于您的情况信息有限,我想我会首先确保您决定使用映射是最好的方法。我假设您已经确定它是比数组更好的存储结构解决方案。

循环浏览智能合约中的项目是一种快速消耗 Gas 的方法,并且可能会很快使您进入区块 Gas 限制。这基本上使得即使您没有找到您要查找的内容,仅对某项进行检查的成本也非常高。

仅从给出的信息来看,将这些数据存储在链下可能是最好的解决方案——只选择关键数据存储在链上。如果将其全部存储在链上至关重要,我相信您在链下运行循环是正确的。

我是新手,所以请相信我之前的任何其他人。只是想把我的2 Wei扔进去。

【讨论】:

  • 感谢您提供的信息。这正是我一直在寻找的那种洞察力。我的这个测试项目是区块链上的彩票。所以我猜想在区块链上运行所有这些系统是不可能的。也许我会只保留伪随机来绘制结果,为了透明起见+获取所有票并进行所有链下处理。感谢您的意见。
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2017-08-19
相关资源
最近更新 更多