10 solidity里有没有动态数组合并的

因为动态数组的push很耗gas的,比如uint[] storage arr里要加1到1000
for(uint i;i<1000;i++){
arr.push(i);
}
这样会死人的。有没有更好的办法

请先 登录 后评论

2 个回答

steel

没有很好的省gas操作,如果是统计 那么就是每次的时候进行更新 ,如果是计数的只能for,如果是返回查询的 那么修改数据方面可以根据mapping和数组结合的方式进行操作

请先 登录 后评论
gasshadow

opcode里的push本身不耗费gas,你这代码里的push实际上是要修改存储(storage),数组的存储是按照其声明的槽位idx 散列(sha3)得到的一个新槽位,从该槽位开始依次+0 +1 +2 存储数组元素的。

也就是你要读写1000次链上的存储。成本肯定小不了。

有两条路:

  1. 用汇编,可以节约一些sha3的计算,治标不治本
  2. 看看使用场景,在业务上做一些妥协或者取巧的办法。
请先 登录 后评论
  • 2 关注
  • 0 收藏,2283 浏览
  • bug? 提出于 2022-10-18 18:42