【发布时间】:2018-02-12 21:11:27
【问题描述】:
我正在为一些用例开发智能合约,目前我正在优化智能合约。我对在Hitchiker's Guide 上发现的有趣的东西感到困惑。在第 4 节 - 迭代合约代码
// returns true if proof is stored
// *read-only function*
function hasProof(bytes32 proof) constant returns (bool) {
for (uint256 i = 0; i < proofs.length; i++) {
if (proofs[i] == proof) {
return true;
}
}
return false;
}
对于上面的这段代码,他说:“请注意,每次我们要检查文件是否经过公证时,我们都需要遍历所有现有的证明。这使得合约在每次检查上花费越来越多的气体作为更多的文件已添加。”
毫无疑问,实现它的正确方法是使用映射而不是数组结构。这是让我感到困惑的一点。它是只读功能,不是影响区块链的交易。当我观察我的 netstats 时,调用此函数时它没有显示任何事务(实际上,这是我在调用此函数之前所期望的)。
我不认为他误解了机制,有人可以清理我的这个评论吗?
【问题讨论】: