Просто предположение, но довольно вероятное:
Функция transfer
выполняет две записи в хранилище:
- Обновление баланса по адресу
from
.
- Обновление баланса по адресу
to
.
Запись в хранилище имеет разные затраты на газ в зависимости от предыдущего значения и нового значения.
Я предполагаю, что в первой транзакции у адреса to
начальный баланс равен нулю, а у адреса from
после транзакции остаются некоторые токены. Изменение нуля в хранилище на ненулевое значение стоит 20 000 газа, так что это стоимость обновления адреса to
. При изменении ненулевого значения на другое ненулевое значение стоимость газа составляет 5000, то есть стоимость обновления адреса from
. Общая стоимость двух инструкций магазина: 25 000
Я предполагаю, что во второй транзакции адрес to
имеет положительное начальное сальдо, которое увеличивается, и остаток на адресе from
полностью истощается транзакцией. Обновление адреса to
стоит 5000 газов (изменение ненулевого значения на другое ненулевое значение). Обновление адреса from
включает изменение ненулевого значения на ноль, за которое вы получаете газ возврат . Стоимость составляет 5000 газов, но в конце сделки предоставляется возврат газа в размере 15000. Это чистая стоимость -10 000, поэтому общая сумма для двух инструкций магазина составляет -5 000.
Разница между 25 000 и -5 000 составляет 30 000, что является именно газовой разницей между двумя транзакциями.