TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.49K subscribers
Post #1183 824
Solidity hints. Часть 18

Фух, ужасный день с удалением зуба прошел... ну, и хрен с ним... Если с обезболивающим не было никаких ощущений во время, то звуки ломающегося зуба будут преследовать меня в кошмарах еще долго... Бррр... Сегодня на лайтах пытаюсь вернуться к рабочему режиму.

К предыдущему 27 пункту из репо вполне можно было добавить и следующий пункт, который я прочитал только сейчас:

28. Functions defined outside a contract are still always executed in the context of a contract. They still can call other contracts, send them Ether and destroy the contract that called them

что в переводе:

Функции, определенные вне контракта, по-прежнему всегда выполняются в контексте контракта. Они по-прежнему могут вызывать другие контракты, отправлять им Эфир и уничтожать вызвавший их контракт

Я об этом и так написал в том посте. Поэтому мы просто перейдем к следующему:

29. the opcode STATICCALL is used when view functions are called, For library view functions DELEGATECALL is used(if interacting with already deployed library). This means library view functions do not have run-time checks that prevent state modifications ?? Omg

и перевод:

при вызове view функций используется опкод STATICCALL, для библиотечных функций представления используется DELEGATECALL (при взаимодействии с уже развернутой библиотекой). Это означает, что библиотечные view функции не имеют проверок во время выполнения, которые предотвращают модификацию состояния ? Омб

Звучит немного запутано. Но как мы уже знаем, что Chinmaya составлял заметки для себя и своего понимания, иногда "выдергивая" информацию из официальной документации. Поэтому смотрим в оригинал.

Как вы можете знать, view функции в Solidity не могут вносить изменения в память контракта, т.е. они не могут, например, изменить значение переменной или массива.

Это происходит из-за того, что на низком уровне опкодов используется STATICCALL - специальный код, который может только читать информацию с памяти, но не изменять ее.

В библиотеках также могут быть view функции, которые читаются контрактом, но уже с помощью другого опкода - DELEGATECALL.

И так как, в некотором роде, это опкоды похожего действия, одновременно они применяться не могут, а значит библиотечные view функции не имеют проверок во время исполнения, которые предотвращают модификацию памяти контракта.

Тем не менее, это не должно как-либо негативно сказаться на безопасности, поскольку библиотечный код обычно известен во время компиляции, а статическая проверка выполняет проверку во время компиляции.

Ну, и для некого подведения итога, вот несколько действий, которые могут изменять память:

1. Порождение событий;
2. Создание новых контрактов;
3. Использование selfdestruct;
4. Трансфер Эфира;
5. Вызов функций (не view / pure);
6. Использование низкоуровневых вызовов;
7. Использование assembly с некоторыми опкодами;

Будьте аккуратны при работе с библиотеками и памятью контракта!

#library #solidity #storage
  • 👍 3
  • ❤ 1
More from @solidityset
  1. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  2. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  3. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  4. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
  5. Sep 9, 2026Работа с чистой энергией Дисклеймер Сегодня ава и название канала, наконец, поменялись. Я…
  6. Sep 9, 2026Channel name was changed to «Из Solidity в AI и дальше»
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →