因为动态数组的push很耗gas的,比如uint[] storage arr里要加1到1000 for(uint i;i<1000;i++){ arr.push(i); } 这样会死人的。有没有更好的办法
没有很好的省gas操作,如果是统计 那么就是每次的时候进行更新 ,如果是计数的只能for,如果是返回查询的 那么修改数据方面可以根据mapping和数组结合的方式进行操作
opcode里的push本身不耗费gas,你这代码里的push实际上是要修改存储(storage),数组的存储是按照其声明的槽位idx 散列(sha3)得到的一个新槽位,从该槽位开始依次+0 +1 +2 存储数组元素的。
也就是你要读写1000次链上的存储。成本肯定小不了。
有两条路: