Я несколько раз читал, что на Эфириуме все стоит газа. Но когда я пишу и использую функцию, которая не меняет состояние контракта (т.е. суммирует два параметра и возвращает сумму), это не стоит никакого газа.
Итак, что на самом деле означает утверждение «в Эфириуме все стоит газа»?
Функции, которые не изменяют состояние, могут быть явно записаны как функции только для чтения с использованием модификаторов view
и pure
(ранее constant
).
view
: будет считывать состояние, но не изменять его.pure
: Не нуждается в доступе к состоянию и не изменит его.Клиент также может вызывать любую функцию, используя .call()
метод Web3.
Во всех трех случаях применяется следующее:
call()
, например. То же самое относится и к ситуациям «без газа». Вместе с запросом должно быть предоставлено достаточное количество газа.Каждый OPCODE уровня ассемблера имеет определенную стоимость. Было бы несколько более точным обобщением сказать, что все операции по изменению состояния стоят газа. Я хотел бы сказать, что чтение бесплатно. В конце концов, они есть, если их правильно реализовать. Надеюсь, приведенные выше детали прояснят ситуацию.
Надеюсь, это поможет.
Ричард Хоррокс