假设一个函数接受一个地址数组,看起来像这样:
function setVoters(address[] _inputAddresses) public ownerOnly {
// [...]
}
使用上述功能的协定具有定义为映射的变量:
mapping(address => bool) voter;
在涉及气体消耗/费用时,是否遍历数组并将其推送到映射被认为是最佳选择,或者该函数接受一个地址并通过某些JavaScript功能从给定UI进行迭代会更好吗?
选项a :
function setVoters(address[] _inputAddresses) public ownerOnly {
// [...]
for (uint index = 0; index < _inputAddresses.length; index++) {
voter[_inputAddresses[index]] = true;
}
}
vs
选项b :
function setVoter(address _inputAddress) public ownerOnly {
// [...]
voter[_inputAddress] = true;
}
JavaScript看起来像这样
// loop condition starts here
await task.methods.setVoter(address[key]).send({
from: accounts[0]
});
// loop condition ends here
答案 0 :(得分:2)
就气体效率而言,最好的方法是选择a,调用一个函数会消耗大量的气体,因此,如果您一次完成一个大笔交易而不是多次进行一次小笔交易,您将付出的代价更少。