我有一个Solidity智能合约要在以太坊网络上运行,它有一个公共映射,存储一个具有多个属性的结构。我必须遍历所有存储的结构,寻找一个可能是唯一的也可能不是唯一的特定属性值(即users['Joe'].age=="30">(。这可能会增加1000多个structs,每个structs大约有6个属性。
就成本与性能而言,我应该怎么做?在合约内部运行一个内部循环,只得到我想要的结果,或者单独调用所有结构,然后在区块链外部运行一个循环来找到它们?
我有点迷路了,在这里。非常感谢。
由于我还不能发表评论,我想我所能做的就是回答。。。
由于你的情况信息有限,我想我会首先确保你使用地图的决定是最好的方法。我认为您已经确保它是比阵列更好的存储结构解决方案。
循环浏览智能合约中的项目是一种快速消耗天然气的方法,可能会很快使你达到区块天然气限额。这基本上使得即使你没有找到你想要的东西,仅仅对某个东西进行检查的成本也非常高。
从给出的信息来看,也许链下存储这些数据是最好的解决方案——只选择关键数据存储在链上。如果把所有的东西都储存在链上是至关重要的,我相信你们把循环从链上运行是正确的。
我很新,所以相信我之前的其他人。我只是想加入我的2威。