Переменные среды выполнения Iw и Ie

Согласно желтой бумаге, одна из переменных Execution Environment:

Iw, разрешение на внесение изменений в состояние.

Я не могу найти дополнительную информацию об этом, например, как он установлен и какие значения он может получить (я думаю, 1 или 0)


Также я хотел бы убедиться, что переменная

Т. е. глубина текущего вызова-сообщения или создания контракта (т. е. количество вызовов CALL или CREATE, выполняемых в настоящее время).

уменьшается только на единицу для каждого кода операции CALL и CREATE, но никогда для DELEGATECALL или CALLCODE

Ответы (1)

Мой ответ основан на текущей версии желтой бумаги .

I_w

Iw, разрешение на внесение изменений в состояние

Важность этого флага объясняется в параграфе об исключительной остановке:

введите описание изображения здесь

Примите во внимание только последнее условие, оно говорит, что если разрешение на изменение ложно, а текущая инструкция указана W(т. е. инструкции, которые могут изменить состояние), то у нас есть исключение. Для полноты я также сообщаю о функции W:

введите описание изображения здесь

I_w обычно имеет значение T(true) и устанавливается Fтолько при выполнении STATICCALL.


уменьшается только на единицу для каждого кода операции CALL и CREATE, но никогда для DELEGATECALL или CALLCODE

Это не верно. Также DELEGATECALL и CALLCODE увеличивают и уменьшают стек вызовов (это указано в желтой бумаге).