Пока, не зная всей картины, видится:
1. Переменная balance используется еще в 5 местах и автор, чтобы не париться, сделал переменную
2. Насколько я понимаю, если переменная объявлена и используется только внутри метода (не пишется в блокчейн), то газ она не тратит. Где 40 газа уходит? При деплое контракта или при вызове?
3. Контракт в тестнете? Там много разного кода деплоят люди разного уровня квалификации...
4. Может, разраб затупил...?) Багу нашли)
Как итог, ваш второй вариант верный.
Меня подвело то что на Remix VM переменные внутри методов, видимо, всё же тратят газ, НО в реальной сети нет.
// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;
contract Test0 {
mapping(address => uint256) private _addressToBalance;
uint8 a; // используется для того чтоб метод был не view
function test() external {
a = 0; // ничего не пишем по факту, т.к. "а" проинициализирован нулём (т.е. минимальные затраты на газ)
}
}
contract Test1 {
mapping(address => uint256) private _addressToBalance;
uint8 a; // используется для того чтоб метод был не view
function test() external {
a = 0; // ничего не пишем по факту, т.к. "а" проинициализирован нулём (т.е. минимальные затраты на газ)
uint256 balance = _addressToBalance[msg.sender];
require(balance >= 0);
}
}
contract Test2 {
mapping(address => uint256) private _addressToBalance;
uint8 a; // используется для того чтоб метод был не view
function test() external {
a = 0; // ничего не пишем по факту, т.к. "а" проинициализирован нулём (т.е. минимальные затраты на газ)
require(_addressToBalance[msg.sender] >= 0);
}
}
// | Remix VM | BSC Testnet |
// test 0 26971 26971 24343 24343
// test 1 29534 29534 24343 24343
// test 2 29519 29519 24343 24343
// Test0 BSCt: 0x33f153BA423ec0489f6ff5f80528D5cb100bf3ab
// Test1 BSCt: 0x7744FFe9C35250B580eF4118d75AF2280D6c1afD
// Test2 BSCt: 0x38e6Bc1a10aFE6fbeD413e77282F615D56761ec5
P.s.
И с 40 газа я ошибся, имя и расположение метода, тоже незначительно но влияет на количество газа. Для Remix VM. На реале не проверял. По факту разница вышла в 15 газа.