TGViewer
Web3 School Web3 School @web3_school · 176 subscribers
Post #200 875
Web3 School Хотите пример кода чтения приватной переменной любого смарт контракта любого EVM совместимого блокчейна? 👍 -- конечно ❤️ -- мне и так хорошо живётся 😀 -- а кнопку бабло можно, пожалуйста
Первое что важно понимать что приватными переменные являются только для других смарт контрактов. Сам по себе блокчейн это полностью публичные данные и утаить там что либо невозможно. Просто существует правило что к некоторым переменным нет доступа из других смарт контрактов.

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

Итак процесс получения приватной переменной любого смарт контракта можно разбить на два этапа:

1⃣ Выяснение расположения этой переменной в storage (номера слота и место в слоте)

2⃣ Считывание нужного слота данных и декодирование

Начнём с первого. Сначала нужно разобраться как данные хранятся в памяти смарт контракта, это называется storage layout. Вот вам аналогия:

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

Переменные -- это наши разноцветные конфеты, которые мы хотим сохранить. Мы располагаем их на полках (слотах) комнаты (хранилище контракта, storage).

Одна полка может вмещать до 32 конфетных ячеек (байт), поэтому более крупные сладости могут занимать несколько полок.

Когда мы считаем слоты, мы на самом деле считаем, сколько полок занимают наши конфеты.
Маленькие конфеты, такие как целые числа и булевы значения, занимают всего одну ячейку полки.

Но если у нас есть большая шоколадная плитка (массив или структура данных), она может занимать несколько полок в комнате.

Организация конфетной фабрики:

Чтобы оптимизировать нашу конфетную фабрику, мы стараемся упаковывать маленькие конфеты на одной полке и размещать их рядом для более эффективного доступа.
Когда у нас есть большие сладости, мы занимаем несколько полок и стараемся разместить их рядом друг с другом. Это называется packing.

Вот в принципе и все базовые концепции. Вообще про storage layout можно говорить ещё очень много. Вот материал с деталями и картинками:

https://programtheblockchain.com/posts/2018/03/09/understanding-ethereum-smart-contract-storage

Посмотреть storage любого контракта
https://evm.storage

В следующем посте расскажу как этот самый сторадж считывать.

@web3_shool
  • 👍 2
  • 🔥 1
  • 🤨 1
More from @web3_school
  1. Jun 21, 2024Пример чтения приватных переменных с любого контракта https://gist.githubusercontent.com/g…
  2. Dec 15, 2023💙Бесплатный курс по безопасности от Патрика Коллинса Внутри вы будете учить безопасность…
  3. Aug 12, 2023Оказывается большинство свапалок это копии юнисвапа. Знание кода юнисвапа является обязате…
  4. Jun 20, 2023Посмотреть storage layout также можно в Remix'е в Compilation Details @web3_school
  5. Jun 1, 2023Хотите пример кода чтения приватной переменной любого смарт контракта любого EVM совместим…
  6. May 26, 2023Crypto 101 — это вводный курс по криптографии, доступный бесплатно для программистов всех…
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 →