TGViewer
Semolina Code Solidity Semolina Code Solidity @semolina_code · 497 subscribers
Post #36 2.93K
Семнадцатый урок (Решение задач Ethernaut)
Урок посвящен практике
Так что решаем её тут
Несколько дней точно уйдёт на это

Во время решения задач пришлось подтянуть эти темы:
1) tx.origin
2) self.destruct()
3) Работа со слотами ethers.provider.getStorageAt(...)
4) Байт код (посмотреть длину байт кода можно с помощью
msg.sender.code.length
Если в контракте есть переменные и функции, то длина будет > 0
Но если все действия делаются в конструкторе, то длина байт кода будет = 0
5) Битовые операции (&, |, ^, ~)
6) Фунция abi.encodePacked() для преобразования address->bytes
7) Оказывается, что преобразование типов
uint64->uint32 работает не самым очевидным способом (uint64 переводятся в 16-ую систему счисления и для того, чтобы перевести в uint32, просто обрезается половина битов СЛЕВА и то, что получилось, преобразуется в 10-ую систему счисления. Но когда преобразуем байты bytes2->bytes1 происходит наоборот: обрезаются байты СПРАВА)
8) Следующий момент по поводу преобразования байтов (нашел тут в одном из ответов):
"Thereby if you have something bytes32 and want it to be uint128, you first have to explicitly convert it to bytes16, and therafter can convert it to uint128, via regular solidity. Of course, you'll wish to debug/test to see which parts of that bytes32 may get truncated yourself before proceeding with this, as there's converse cases where it may make more sense to convert it to uint256 first and then cut it down to uint128."
Если коротко: то когда мы хотим преобразовать bytes->uint мы должны это сделать так, чтобы размерность uint была в 8 раз больше или в 8 раз меньше размерности байт
9) All about Bytes

Решение задач, которые не были разобраны на уроке:
Elevator
Gatekeeper One до этого я тут писал, что нихрена не понял. Но в итоге с байтами разобрался (в пунктах 5-9 сверху можно найти всю информацию). В итоге получился вот такой код с решением (решение, которое по ссылке тут - не работает). Ну и еще я не понял пока что как пройти gateTwo (проверка газа)
  • 👍 1
More from @semolina_code
  1. Sep 8, 2022Как я уже говорил, я сейчас немного отошел от солидити так как появились проекты, требующи…
  2. Aug 23, 2022Вижу тут новые лица и всех рад приветствовать) Изучение солидити на некоторое время постав…
  3. Aug 2, 2022Шестнадцатый урок (Безопасность: Reentrancy, DoS) Полезный линк из урока: openzeppelin Код…
  4. Aug 2, 2022Семнадцатый урок (Низкоуровненые вызовы и безопасность) Сразу скажу, что 16 урок я не проп…
  5. Jul 28, 2022Оказывается, если текст в телеге преобразовать в моноширинный, он станет синим 😳
  6. Jul 28, 2022Пятнадцатый урок (Фронт-энд на Next.js, часть 2) Устанавливаем set-interval-async в наш пр…
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 →