TGViewer
DEV: Рубиновые тона DEV: Рубиновые тона @dev_in_ruby_colors · 3.28K subscribers
Post #644 1.27K
Прислал Лео (наш гость на последнем семинаре про работу). Имеется функция external, в которой есть буквально вот такая проверка:

require(msg.sender == address(this), "...")


Казалось бы, странно. Как может быть вызывающим сам контракт, если такую функцию можно вызвать извне, но никак не изнутри кода? В простом случае, действительно, никак, но если очень хочется, то можно. В принципе, постоянные зрители канала знают в чём дело.

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

address(this).call()


И тогда даже функция external вполне себе вызывается. 😄 Ну, в Ruby мы бы использовали send, чтобы вызвать закрытый метод - аналогичная история.

Впрочем, таким "хаком" пользоваться постоянно не стоит, так как раз уж вы пометили функцию как external, то, видимо, имели какие-то намерения. Если уж она нужна внутри контракта, то проще написать public
  • 👍 13
  • 🙏 1
More from @dev_in_ruby_colors
  1. Oct 4, 2026В этом уроке по абстрактной алгебре говорим про ideals (идеалы), factor (quotient) rings и…
  2. Sep 28, 2026Github буйствует
  3. Sep 26, 2026В этом уроке по абстрактной алгебре говорим про области целостности, делители нуля, характ…
  4. Sep 22, 2026А тем временем сказ о ведьмаке, потерявшем память, уже доступен в виде аудиокниги. Целых 1…
  5. Sep 20, 2026В этом уроке по абстрактной алгебре продолжаем говорить о кольцах: в частности о subrings…
  6. Sep 17, 2026Сделал обзор актуальных библиотек JS для сбора данных, 10 штук бодрых решений на все случа…
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 →