Solidity. Смарт контракты и аудит – Telegram
Solidity. Смарт контракты и аудит
2.62K subscribers
246 photos
7 videos
18 files
547 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
В динамический массив мы можем помещать значения с помощью метода push, а проверить его длину с помощью length.

Эти методы не доступны для фиксированных массивов.

#array #массивы
🔥1
Можно также создавать временные массивы массивы.

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

#array #массивы
🔥1
В текущих укрока bytes будут использоваться редко. Тем не менее нужно запомнить, что информация в переменных bytes хранится именно как последовательность байтов, другими словами различные символы, буквы и цифры будут иметь измененный вид, как в примере на скрине.

#bytes #типыданных
🔥1
Struct используется довольно часто в сложных контрактах, поэтому знать этот тип данных не только нужно, но и важно!

В struct мы можем объявлять специальные поля, как в примере на скрине. При этом struct может хранить другие сложные типы данных, типа массивов и mapping.

#struct #типыданных
🔥1
Обратите внимание на урок с 21 минуты! Здесь рассказывают, как обращаться в функциях к mapping, который содержит struct и т.д. Сложный момент, особенно для новичков!

#struct #типыданных
2🔥1
Всем привет!

Вот и прошла первая неделя обучения! Для кого-то это могло показаться простым делом, для кого-то настоящим вызовом.

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

1) Какое расширение у файлов Solidity?
2) Что обозначают цвета на кнопках развернутого контракта в Solidity?
3) Чем отличаются переменные состояния от временных?
4) Что такое размерность переменных и как можно ее узнать?
5) Что делает функция unchecked()?
6) Почему нельзя проверить длины строки напрямую?
7) Что такое address?
8) Как разрешить функции принимать оплату?
9) Почему нельзя использовать метод push для фиксированных массивов?
10) С какого числа индексируются значения в массиве?


И практические задания:

1) Напишите в новом файле лицензию, версию программы и обозначьте контракт.
2) Запишите в файл все переменные, которые сможете вспомнить.
3) Создайте mapping Balances
4) Создайте вложенный массив, сделайте деплой контракта и попробуйте получить значение одного из значений вложенного массива.
5) Создайте enum и напишите функции, которые будут при выполнении будут менять статус enum. Проверьте правильность в контракте после деплоя.
6) Создайте свой struct.
7) Перепишите код с 4 урока с 21 минуты, и объясните как он работает.


Уверен, если вы сможете выполнить все задания, то с увереннность можно сказать, что вы успешно завершили текущую неделю.

Всем легкого кода и быстрого запоминания!

#практика #задания
2🔥1
Небольшой дневной вопрос участникам

За последнию неделю количество участников стало 23. И мне стало интересно, все ли пришли сюда за обучением или некоторые просто подписались на всякий случай.

Это никого не обяжет, исключительно мое любопытство. Опрос ниже анонимный.
🔥1
Урок 5

Доброе утро всем! Надеюсь вы провели эти выходные не только отдыхая, но и с пользой.

На прошлой неделе мы начали изучение Solidity и прошли все возможные типы данных. На этой неделе мы будем изучать уже функции, модификаторы, события и Древо Меркла, если повезет со временем!

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

Итак, дамы и господа, урок 5 - Функции, транзакции, pure, view

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

Всем приятного дня и легкого обучения!

#урок
🔥1
В Solidity, на данный момент, есть четыре области видимости функций: Public, Private, External и Internal.

Основное, что нужно запомнить о них это:

Public - наиболее часто встречаемая в уроках область, которая позволяет вызывать функцию как извне контракта, так и внутри него.

Private - вызывает функции ТОЛЬКО внутри самого контракта.

External - вызывает функции ТОЛЬКО извне контракта, и не доступны для вызова внутри.

Internal - наоборот, вызывает функции ТОЛЬКО внутри самого контракта, и не доступны для вызова извне.

#областивидимости #функции #function
🔥1
В данном уроке приводятся два модификатора практически одинаковых: view и pure. Так чем же они различаются?

А тем, что view - может читать внешние переменные и модифицировать их, а pure - работает только с переменными внутри самой функции.

#функции #function #pure #view
🔥1
Обратите внимание, что в заголовке функции мы пишем "returns" с буквой "S" на конце, а в теле функции просто "return". У меня, с непривычки, были пара проблем из-за этого.

#функции #function
🔥1
Модификатор "payable" служит для обозначения, что данная функция может принимать или отправлять денежные средства.

#payable #функции #function
🔥1
Функция "receive()" появилась в одной из последних версий языка, как я понял из видео, и служит, чтобы просто принимать деньги без вызова каких-либо функци.

Обратите внимание, что слово "function" тут писать не надо.

#payable #функции #function
🔥1
Функция "fallback()" вызывается в том случае, если относительно смарт-контракта бала вызвана транзакция с неизвеным именем функции.

Это нужно для того чтобы, например, в случае, если на смарт-контракт придет транзакция с вызовом функции, которой нет, она не откатится, а покажет ошибку, которая была описана в "fallback".

Проще говоря, если к нам придет транзакция, которая запросит функцию возврата денег, а она не прописана у нас, то в "fallback" можно отловить этот момент и показать ошибку.

#fallback #функции #function
🔥1
Как сегодня по сложности, выпускаем новый урок завтра или ждем еще день?
Anonymous Poll
69%
Все ок, завтра можно новый урок
31%
Мне нужен еще один день
Урок 6, сокращенный!

Да, я видел в опросе, что несколько человек попросили еще один день для разбора уроков, но я решил поступить немного иначе. И сейчас объясню в чем дело.

Я просмотрел пару уроков вперед, чтобы понять, куда мы движемся и что потребуется дальше. А дальше, идет уже заканчивается базис и начинается тестирование смарт-контрактов. И для этого нам потребуется вернуться к пятому видео уроку лектора и настроить среду разработки. Поэтому поступим так...

Сегодня мы смотрим сокращенное видео, до 17 минуты, до начала тестирования.

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

Со следующей недели пойдет уже боевой режим, где будем писать полноценный код и вникать в нюансы смарт-контрактов.

Также хотел бы понять вопрос активности канала и обучающихся.

Да, я понимаю, что некоторые подписались просто так, и, возможно, подключатся к активности на более поздних стадиях обучения или какого-то движа.

Но эта группа была создана для СОВМЕСТНОГО обучения, а выходит, что я просто делаю заметки для себя на канале, и вообще не понимаю, заходит ли вам такой формат, учитесь ли вместе со мной или что вообще происходит.

Если участникам вопрос обучение уже не интересен и вы хотите просто наблюдать, то это абсолютно ок. В этом случаем я просто буду двигаться в своем удобном темпе и выкладывать уроки и заметки так, как я сам прохожу обучение.

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

Я бы хотел от каждого участника в комментариях услышать мнение по этому поводу. Я вкладываю много сил в это, и не хочу чтобы все было напрасно.

#урок
🔥1
В Solidity существует несколько инструкций для выполнения функций смарт-контракта. Говоря проще, они проверяют какое-то условие и, если оно не выполнено, то транзакция откачивается, т.е. отменяется.

Существует три параметра Require, Revert, Assert.

Require - принимает два параметра: условие и сообщение об ошибке.

Revert - практически тоже самое, что и require, за исключением того, что принимается только сообщение об ошибке, а условие нужно писать самому.

Assert - используется реже, чем два предыдущих параметра, и принимает только один аргумент - условие.

#require #revert #assert
🔥1
Также в Solidity можно писать свои собственные модификаторы для функций. Это может быть полезно, если одно и тоже условие используется в нескольких функциях.

Тут обратите внимание, что нужно обязательно прописывать "_;", иначе функция, к которой прикреплен модификатор, не сработает.


#modifier #модификатор
🔥1
События служат для того, чтобы сказать внешнему миру, что у нас что-то произошло и выполнилось какое-то условие. Чаще всего события используются для фронтенд разработки.

На скрине вы можете видеть, как они создаются и порождаются.

#event #события
🔥1