Solidity

智能合約功能的gas調整

  • September 21, 2022

我有在 calldata 數組上使用 for 循環的函式,如下所示:

mapping (address => bool) public userRegistered;
function registerUsers(address[] calldata users) external {
 for (uint256 i; i < users.length; ++i) {
   userRegistered[users_[i]] = true;
 }
}

函式的上下文無關緊要,我只是縮短了實際函式來給出這個想法。所以我知道乙太坊的區塊氣體限制是 15M,但最大可以是 30M。我想對users_數組的長度進行限制,這樣它就不會達到塊氣體限制,從而造成如此多的金錢損失。

我計劃選擇這樣一個最大長度,即 gas 成本將非常接近塊 gas 限制。但我的困惑是,我應該按照15M還是30M的限制來安排?例如,當此時網路相當空,並且生成的塊主要由 15M 的 gas 限制組成,而我送出的 tx 需要 29.9M 的 gas,它會不會被執行或者執行會慢得多?

您絕對可以在任何時候送出帶有 29.9M 氣體的交易,並放心,它可以包含在一個區塊中,而不管目前的擁塞情況如何。您確實需要注意,購買這樣的區塊基本上意味著您需要支付比記憶體池中的任何其他交易更高的礦工小費汽油價格,因此您最終可能會為一個完整的區塊交易支付更多的平均費用如果你追求下限

引用自:https://ethereum.stackexchange.com/questions/136102