Возвращается ли газ для «освобожденного» хранилища, предоставленного контракту, «распределитель» или «ликвидатор»?
Возвращается газ для «освобожденного» хранилища, указанного в контракте, «распределитель» или «делетер»?
Предположим, что контракт выделяет некоторое хранилище. Это хранилище оплачивается отправителем транзакции, которая выполняет выделение, правильно?
Теперь, когда это хранилище «освобождено» оператором delete
в Solidity, кто получает возмещение и как рассчитывается возврат?
Это контракт, который получает возврат, отправителя («распределитель») распределяющей транзакции или отправителя («deleter») удаляющей транзакции? В частности, какая цена на газ используется для расчета возмещения?
1 ответ
Короче говоря, отправитель транзакции, которая освобождает место для хранения (устанавливается на ноль), будет иметь сумму (чистый 10000 газа на свободное место хранения), вычитаемую из общего количества газа, используемого для транзакции.
В действительности это немного более тонко:
-
Стоимость газа при установке места на ноль составляет 5000 (G_sreset в желтой бумаге).
-
В счетчик возврата (R_sclear в желтой бумаге) добавляется газ 15000.
-
По завершении успешной транзакции количество газа на счетчике возврата (до колпачка вдвое общего используемого газа) добавляется к неиспользованному газу и возвращается абоненту (уравнение 72 в желтом Бумага).
Ниже приведены ссылки на эту версию Желтая бумага , в которой обсуждается счетчик возврата в разделах 6.1 и 6.2.
Цена на газ - это любая цена на газ для всей транзакции, в которой происходит возврат.