Я понимаю, что некоторые операции стоят отрицательного газа, потому что они освобождают место в блокчейне, например, самоуничтожение. Какие операции могут иметь отрицательный газ? Это происходит только потому, что операция в конечном итоге освобождает место в блокчейне, или есть другие причины, по которым она имеет отрицательный газ?
Единственными двумя OPCODE с отрицательной стоимостью газа являются STORAGEKILL(-15000) и GSUICIDEREFUND(-24000).
Это происходит, когда значения хранения удаляются или контакты уничтожаются.
Эти OPCODE обеспечивают возврат газа, потому что они освобождают место в блокчейне.
Цены на все OPCODE можно посмотреть здесь
В качестве практического дополнения к ответу Тьядена в Solidity возмещение газа выдается, когда selfdestruct
или delete
на основе существующих данных :
delete a
присваивает начальное значение для типаa
. Т.е. для целых чисел это эквивалентноa
= 0, но его также можно использовать для массивов, где он присваивает динамический массив нулевой длины или статический массив той же длины со сбросом всех элементов. Для структур он назначает структуру со всеми сброшенными элементами.
delete
не влияет на целые отображения (поскольку ключи отображений могут быть произвольными и, как правило, неизвестными). Поэтому, если вы удалите структуру, она сбросит все члены, которые не являются сопоставлениями, а также рекурсивно перейдет к членам, если они не являются сопоставлениями. Однако отдельные ключи и то, на что они сопоставляются, можно удалить.Важно отметить, что на
delete a
самом деле ведет себя как присваиваниеa
, т. е. сохраняет новый объект вa
.
эт
Ник Джонсон
альпер
length_of_the_array
? Пожалуйста, смотрите ( ethereum.stackexchange.com/q/69882/4575 ) для более подробной информации. @этпользователь 2284570