浅析白名单校验原理
ETH 上的GAS 不是欢乐豆 这篇文章来在于一个群中的一次关于一个项目的大讨论。 一个NFT项目 mint 的成本异常的高。售价是 0.01 但是实际上mint 的 gas 在 0.1+@75gwei的情况下。 网络并不繁忙。 项目的合约地址在下面 https://etherscan.io/address/0x99a8e1cc829d6b33dc37851466c360e08757a0ae 在 MonkeyPoly.sol 的69~76段。可以看到一个白名单校验的函数。这里存在着一个循环结构。我们知道ETH上的计算是需要gas的,所以这里的一个对白名单列表的遍历。就是调用高gas的元凶。 function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } 而在另一段代码里面我们看到了写入白名单的地方 function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } 这里项目方直接把地址列表给导入了进去,通过传参的方式。十分的生猛。 这里的gas 消耗,可以参考下文,记录了每个evm操作符消耗的 gas 情况。对上面的来进行一个估算。 以太坊的存储成本_跨链技术践行者-CSDN博客 evm-opcode-gas-costs/opcode-gas-costs_EIP-150_revision-1e18248_2017-04-12.csv at master · djrtwo/evm-opcode-gas-costs...