我正在为一些用例开发智能合约,目前我正在努力优化智能合约.我对Hitchiker指南中有趣的东西感到困惑.在第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;
}
Run Code Online (Sandbox Code Playgroud)
对于上面的代码,他表示"请注意,每次我们要检查文档是否经过公证时,我们都需要遍历所有现有的证据.这使得合同在每次检查时花费越来越多的气体,因为添加了更多文档. "
毫无疑问,实现它的正确方法是使用映射而不是数组结构.这一点让我感到困惑.它是只读函数,它不是影响区块链的事务.当我观察我的netstats时,调用此函数时它不显示任何事务(实际上,这是我在调用此函数之前所期望的).
我不认为他误解了这个机制,有人可以清楚我对这个评论的看法吗?