Согласно желтой бумаге, одна из переменных Execution Environment:
Iw, разрешение на внесение изменений в состояние.
Я не могу найти дополнительную информацию об этом, например, как он установлен и какие значения он может получить (я думаю, 1 или 0)
Также я хотел бы убедиться, что переменная
Т. е. глубина текущего вызова-сообщения или создания контракта (т. е. количество вызовов CALL или CREATE, выполняемых в настоящее время).
уменьшается только на единицу для каждого кода операции CALL и CREATE, но никогда для DELEGATECALL или CALLCODE
Мой ответ основан на текущей версии желтой бумаги .
Iw, разрешение на внесение изменений в состояние
Важность этого флага объясняется в параграфе об исключительной остановке:
Примите во внимание только последнее условие, оно говорит, что если разрешение на изменение ложно, а текущая инструкция указана W
(т. е. инструкции, которые могут изменить состояние), то у нас есть исключение. Для полноты я также сообщаю о функции W
:
I_w обычно имеет значение T
(true) и устанавливается F
только при выполнении STATICCALL.
уменьшается только на единицу для каждого кода операции CALL и CREATE, но никогда для DELEGATECALL или CALLCODE
Это не верно. Также DELEGATECALL и CALLCODE увеличивают и уменьшают стек вызовов (это указано в желтой бумаге).