在solid中更新许多地址的状态是非常昂贵的



我有地址映射,需要在合同部署时以某种方式设置批量数据或能够稍后更新

mapping (address => bool) private accounts;

这是当前设置地址的解决方案

function setAccounts(address[] memory _accounts) public onlyOwner { 
for(uint i=0; i< _accounts.length; i++){
accounts[_accounts[i]] = true;
} 

}

问题是我需要设置大约10,000个地址,并且使用循环需要大量的gas并且太昂贵。也许,直接传递数组是不可能的,但是在一次交易中获得10K地址列表而不循环(或减少gas费)的解决方案是什么呢?

我应该使用数组代替,并保留地址索引,以过滤它以后?请通知提前感谢

您不太可能进一步对其进行气体优化。

您将达到10,000个交易的块大小限制。

对于无法在一个以太坊交易中完成的操作,必须批量完成。

设置第一个0…一次交易中有1000个地址,然后是1000个……2000 .

或者你可以使用某种Merkle树索赔流程来优化以太坊状态大小并将gas成本推给用户。

相关内容