Давайте разберем первый тест, который приводится в уроке.
Для того, чтобы объявить начало теста мы должны написать функцию it().
В кавычках мы пишем сообщение, которое должны будем получить, в случае успешного прохождения данного теста.
Далее, в теле теста, мы пишем, что хотим проверить. И вот тут нам на помощь приходит Waffle.
С помощью функции expect("адрес").to.be.properAddress мы проверяем, является указанная строка в скобках корректным адресом.
Чтобы запустить тест, вам нужно перейти в терминал и прописать "npx hardhat test".
#hardhat #properAddress #адрес
Для того, чтобы объявить начало теста мы должны написать функцию it().
В кавычках мы пишем сообщение, которое должны будем получить, в случае успешного прохождения данного теста.
Далее, в теле теста, мы пишем, что хотим проверить. И вот тут нам на помощь приходит Waffle.
С помощью функции expect("адрес").to.be.properAddress мы проверяем, является указанная строка в скобках корректным адресом.
Чтобы запустить тест, вам нужно перейти в терминал и прописать "npx hardhat test".
#hardhat #properAddress #адрес
Если вы проверяете какую-либо сложную функцию, например, оплаты в смарт-контракте, то в тестах сначала нужно воссоздать ее, или вызвать, с указанием необходимых параметров (как "сообщение" и "сумма" в примере).
Чтобы вызвать эту функцию от имени другого аккаунта, то следует присоединить ее к вызову: connect(acc2).
Далее мы видим новую проверку от Waffle - to.changeEtherBalance() - она проверяет изменение в количестве эфира на каком-либо аккаунте (в примере, на втором аккаунте, на сумму в -100).
Можно также проверить изменения в балансе на нескольких аккаунтах с помощью функции changeEtherBalances([],[]), где в первых квадратных скобках указываются аккаунты, а во вторых баланс изменения. В этом случае порядок аккаунтов и балансов очень важен!
#hardhat #connect #changeEtherBalance #changeEtherBalances
Чтобы вызвать эту функцию от имени другого аккаунта, то следует присоединить ее к вызову: connect(acc2).
Далее мы видим новую проверку от Waffle - to.changeEtherBalance() - она проверяет изменение в количестве эфира на каком-либо аккаунте (в примере, на втором аккаунте, на сумму в -100).
Можно также проверить изменения в балансе на нескольких аккаунтах с помощью функции changeEtherBalances([],[]), где в первых квадратных скобках указываются аккаунты, а во вторых баланс изменения. В этом случае порядок аккаунтов и балансов очень важен!
#hardhat #connect #changeEtherBalance #changeEtherBalances
Я также обещал написать, как я сам понимаю работу с тестами смарт-контрактов, и почему поначалу она казалась мне немного запутанной.
Когда я смотрел видео, то часто у меня не складывался ход написания кода, когда лектор порой "прыгал" с функции на переменные, а потом к тестам и обратно.
Так вот, все оказалось проще, чем я думал.
1) Сначала объявляем начало теста с it(), и пишем, что мы проверяем.
2) После прописываем async function и начинаем писать тело теста.
3) Думаем, что хотим проверить. Если это функция, то создаем переменную и кладем функцию туда. Т.е. нам нужно сначала вызвать эту функцию в теле теста, а потом уже проверять ее.
4) По своей сути, все проверки - это вызовы каких-либо функций из контракта и сверка их результатов с нашими ожиданиями.
Итак, что же можно тестировать:
1) Правильность написания адреса;
2) Владельца контракта;
3) Функции;
4) Require и error
5) Event и emit
6) Кошельки
7) Деплой контракта
8) Изменения в балансе эфира
9) Изменения в балансе токенов
10) Правильность приватного ключа
11) Правильность hex
Это список тех, что я сам пробовал в уроках и тестах. Вероятно, есть еще большее количество проверок.
#hardhat #test #waffle #тесты
Когда я смотрел видео, то часто у меня не складывался ход написания кода, когда лектор порой "прыгал" с функции на переменные, а потом к тестам и обратно.
Так вот, все оказалось проще, чем я думал.
1) Сначала объявляем начало теста с it(), и пишем, что мы проверяем.
2) После прописываем async function и начинаем писать тело теста.
3) Думаем, что хотим проверить. Если это функция, то создаем переменную и кладем функцию туда. Т.е. нам нужно сначала вызвать эту функцию в теле теста, а потом уже проверять ее.
4) По своей сути, все проверки - это вызовы каких-либо функций из контракта и сверка их результатов с нашими ожиданиями.
Итак, что же можно тестировать:
1) Правильность написания адреса;
2) Владельца контракта;
3) Функции;
4) Require и error
5) Event и emit
6) Кошельки
7) Деплой контракта
8) Изменения в балансе эфира
9) Изменения в балансе токенов
10) Правильность приватного ключа
11) Правильность hex
Это список тех, что я сам пробовал в уроках и тестах. Вероятно, есть еще большее количество проверок.
#hardhat #test #waffle #тесты
Урок 9
Надеюсь вы смогли разобраться с последним уроком, настроить рабочую среду и хоть немного понять, как писать тесты.
Согласен, эта тема сложная не только для новичков, но и для бывалых разработчиков. Однако понять и зазубрить ее все же стоит.
Могу предположить, что вам требуется еще немного времени на разбор темы, поэтому возьмем пару дней на самообучение, до пятницы.
Сегодня же, хочу показать вам теоретический урок по оптимизации газа в контрактах. Это достаточно легкая тема, которая объясняет как работает газ в транзакциях, и как нужно писать код, чтобы затратить минимум газа.
Видео - оптимизация смарт-контрактов и газ
Погружаться в урок тут не придется, да и посты-подсказки будут служить шпаргалкой в любой момент.
В общем, слушаем и мотаем на ус. Приятного дня и легкого обучения.
Надеюсь вы смогли разобраться с последним уроком, настроить рабочую среду и хоть немного понять, как писать тесты.
Согласен, эта тема сложная не только для новичков, но и для бывалых разработчиков. Однако понять и зазубрить ее все же стоит.
Могу предположить, что вам требуется еще немного времени на разбор темы, поэтому возьмем пару дней на самообучение, до пятницы.
Сегодня же, хочу показать вам теоретический урок по оптимизации газа в контрактах. Это достаточно легкая тема, которая объясняет как работает газ в транзакциях, и как нужно писать код, чтобы затратить минимум газа.
Видео - оптимизация смарт-контрактов и газ
Погружаться в урок тут не придется, да и посты-подсказки будут служить шпаргалкой в любой момент.
В общем, слушаем и мотаем на ус. Приятного дня и легкого обучения.
YouTube
Solidity и смарт-контракты Ethereum, урок #9 | Оптимизация смарт-контрактов и газ
ХОТИТЕ СТАТЬ РАЗРАБОТЧИКОМ Solidity, узнать об Ethereum, блокчейне и многом другом ещё больше?!
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Рекомендации по оптимизации газа
Так, вышла некоторая заминка с уроком по газу: я думал, что сделаю несколько скринов и под каждым будет описание рекомендации, но это получается слишком дробно.
Поэтому я решил объединить все рекомендации из урока в одном посте.
Итак, вот список:
1. Не нужно создавать лишние переменные. Особенно те, которые нигде не используются.
2. Если создаете переменную uint, не нужно указывать дефолтное значение "0".
3. Следите за размерностью переменных и порядком их объявления.
4. Если есть заранее известное значение для переменной, то лучше использовать его сразу, а не получать, например, через хеширование.
5. Не создавайте не нужные промежуточные переменные в функциях.
6. Не нужно создавать длинные строки в переменных и функциях.
7. Не следует часто модифицировать переменные состояния, как например в цикле.
8. При возможности лучше использовать mapping, а не array.
9. Если нужно использовать array, то лучше создавать его с фиксированной длиной.
10. Создавайте массивы с правильной размерностью, uint8[] будет стоить дешевле, чем просто uint[].
11. Не рекомендуется создавать много маленьких функций.
12. Используйте библиотеки, а не раздувайте свой код. Open Zeppelin поможет сохранить ваш контракт компактным.
13. Не хранить больше объемы данных в контрактах. Для этого есть облачные хранилища и другие базы данных.
Пока что, это все. Если в других видео я буду встречать еще варианты оптимизации газа, то буду выкладывать их.
#gas #газ #оптимизация
Так, вышла некоторая заминка с уроком по газу: я думал, что сделаю несколько скринов и под каждым будет описание рекомендации, но это получается слишком дробно.
Поэтому я решил объединить все рекомендации из урока в одном посте.
Итак, вот список:
1. Не нужно создавать лишние переменные. Особенно те, которые нигде не используются.
2. Если создаете переменную uint, не нужно указывать дефолтное значение "0".
3. Следите за размерностью переменных и порядком их объявления.
4. Если есть заранее известное значение для переменной, то лучше использовать его сразу, а не получать, например, через хеширование.
5. Не создавайте не нужные промежуточные переменные в функциях.
6. Не нужно создавать длинные строки в переменных и функциях.
7. Не следует часто модифицировать переменные состояния, как например в цикле.
8. При возможности лучше использовать mapping, а не array.
9. Если нужно использовать array, то лучше создавать его с фиксированной длиной.
10. Создавайте массивы с правильной размерностью, uint8[] будет стоить дешевле, чем просто uint[].
11. Не рекомендуется создавать много маленьких функций.
12. Используйте библиотеки, а не раздувайте свой код. Open Zeppelin поможет сохранить ваш контракт компактным.
13. Не хранить больше объемы данных в контрактах. Для этого есть облачные хранилища и другие базы данных.
Пока что, это все. Если в других видео я буду встречать еще варианты оптимизации газа, то буду выкладывать их.
#gas #газ #оптимизация
Привет всем!
Ну, как у вас с обучением? Вы хоть маякните, на каком этапе находитесь и все ли понятно.
Сегодня у нас еще один день для самостоятельной практики, и подтягивании знаний по прошлым урокам. Я специально не даю сейчас хардкорные уроки, чтобы вы могли освоиться с текущими знаниями.
Они реально выступят хорошим базисом для дальнейшего обучения, и не поняв что-то сейчас, потом будете путаться еще больше.
На следующей неделе начинаются уже сложные операции со смарт-контрактами, а сама программа с уроками рассчитана еще недели на три.
Легкого запоминания и приятного дня!
Ну, как у вас с обучением? Вы хоть маякните, на каком этапе находитесь и все ли понятно.
Сегодня у нас еще один день для самостоятельной практики, и подтягивании знаний по прошлым урокам. Я специально не даю сейчас хардкорные уроки, чтобы вы могли освоиться с текущими знаниями.
Они реально выступят хорошим базисом для дальнейшего обучения, и не поняв что-то сейчас, потом будете путаться еще больше.
На следующей неделе начинаются уже сложные операции со смарт-контрактами, а сама программа с уроками рассчитана еще недели на три.
Легкого запоминания и приятного дня!
Урок 10. Вопросы для собеседования
Признаться честно, я сам продвигаюсь в обучении чуть быстрее, чем выкладываю уроки. Во-первых, так я могу регулировать сложность уроков и подбирать следующий, так чтобы они не создавали кашу в голове, и, во-вторых, чтобы, в случае необходимости, можно было найти дополнительный материал и расписать функции более понятным языком, чем в уроке на видео. Именно поэтому уроки на канале выходят не в том порядке, что уроки на канале youtube у лектора.
Вот и сейчас, вместо того, чтобы выкладывать урок про Древо Меркла, а это один из уроков объясняющих необходимость хешей в Solidity, я предлагаю вам урок попроще, чтобы вы смогли посвятить свое время настройке и практике с hardhat.
Видео - вопросы для собеседования.
Когда я посмотрел этот урок, то подумал, что это идеальное время, чтобы вы могли понять для себя, насколько хорошо прошли предыдущие темы.
Лектор сам задает вопрос и отвечает на них. Практически все вопросы в первой части затрагивают уроки, которые мы уже прошли.
Если по ходу видео, вы сразу будете отвечать на вопросы, не дожидаясь объяснения лектора, то значит, что темы вы усвоили хорошо и полностью готовы двигаться дальше.
Приятного дня и самопроверки!
#урок
Признаться честно, я сам продвигаюсь в обучении чуть быстрее, чем выкладываю уроки. Во-первых, так я могу регулировать сложность уроков и подбирать следующий, так чтобы они не создавали кашу в голове, и, во-вторых, чтобы, в случае необходимости, можно было найти дополнительный материал и расписать функции более понятным языком, чем в уроке на видео. Именно поэтому уроки на канале выходят не в том порядке, что уроки на канале youtube у лектора.
Вот и сейчас, вместо того, чтобы выкладывать урок про Древо Меркла, а это один из уроков объясняющих необходимость хешей в Solidity, я предлагаю вам урок попроще, чтобы вы смогли посвятить свое время настройке и практике с hardhat.
Видео - вопросы для собеседования.
Когда я посмотрел этот урок, то подумал, что это идеальное время, чтобы вы могли понять для себя, насколько хорошо прошли предыдущие темы.
Лектор сам задает вопрос и отвечает на них. Практически все вопросы в первой части затрагивают уроки, которые мы уже прошли.
Если по ходу видео, вы сразу будете отвечать на вопросы, не дожидаясь объяснения лектора, то значит, что темы вы усвоили хорошо и полностью готовы двигаться дальше.
Приятного дня и самопроверки!
#урок
YouTube
Solidity и смарт-контракты Ethereum, урок #19 | 50 вопросов на собеседовании (часть 1, попроще)
ХОТИТЕ СТАТЬ РАЗРАБОТЧИКОМ Solidity, узнать об Ethereum, блокчейне и многом другом ещё больше?!
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Сегодня я хотел бы провести два опроса. И первый, чтобы узнать, как у вас с английским языком. Вопрос обучения, на определённом этапе, будет зависеть именно от этого.
К сожалению, к Solidity еще не так много годной документации нанадо русском. И я хочу узнать, будет ли норм, если позже будут посты на английском языке.
Итак, опрос:
К сожалению, к Solidity еще не так много годной документации нанадо русском. И я хочу узнать, будет ли норм, если позже будут посты на английском языке.
Итак, опрос:
Как у вас с английским языком?
Anonymous Poll
42%
Хорошо понимаю и могу читать документацию
26%
Понимаю и могу слушать уроки на английском языке
32%
Плохо знаю и мне нужен будет перевод
Ну и второй вопрос, как и говорил.
Нужно ли будет через неделю-две попробовать создать скайп-созвон? Можем познакомиться, поотвечать на вопросы по Solidity, и тд.
Что думаете?
Нужно ли будет через неделю-две попробовать создать скайп-созвон? Можем познакомиться, поотвечать на вопросы по Solidity, и тд.
Что думаете?
Урок 11
Я был в дороге последние три дня, потому постов на канале не было совсем. Думал, что успею доехать еще утром в место, где будет связь, но увы.
Тем не менее, по предыдущим опросам я рад, что большинство понимает английскую речь и могут без перевода добирать знания из уроков позже. Для остальных, я попытаюсь делать небольшие выдержки из иностранных уроков, на которые нужно будет обращать внимание.
На этой неделе мы приступаем уже к серьезной работе со смарт-контрактами, и в текущем уроке попробуем разобрать, что такое Наследование в смарт-контрактах.
Видео урок - Наследование.
Этот урок довольно простой, но нужно точно следовать в написании кода за лектором. Так будет намного понятнее.
Я же, как и обычно, но по мере нахождения точек связи, постараюсь выкладывать сюда короткие сниппеты из урока, чтобы можно было быстро находить подсказки в будущем.
Всем приятного просмотра и легких знаний!
#урок #наследование
Я был в дороге последние три дня, потому постов на канале не было совсем. Думал, что успею доехать еще утром в место, где будет связь, но увы.
Тем не менее, по предыдущим опросам я рад, что большинство понимает английскую речь и могут без перевода добирать знания из уроков позже. Для остальных, я попытаюсь делать небольшие выдержки из иностранных уроков, на которые нужно будет обращать внимание.
На этой неделе мы приступаем уже к серьезной работе со смарт-контрактами, и в текущем уроке попробуем разобрать, что такое Наследование в смарт-контрактах.
Видео урок - Наследование.
Этот урок довольно простой, но нужно точно следовать в написании кода за лектором. Так будет намного понятнее.
Я же, как и обычно, но по мере нахождения точек связи, постараюсь выкладывать сюда короткие сниппеты из урока, чтобы можно было быстро находить подсказки в будущем.
Всем приятного просмотра и легких знаний!
#урок #наследование
YouTube
Solidity и смарт-контракты Ethereum, урок #11 | Наследование, конструкторы, super, override, virtual
ХОТИТЕ СТАТЬ РАЗРАБОТЧИКОМ Solidity, узнать об Ethereum, блокчейне и многом другом ещё больше?!
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
🔥1
Чтобы создать наследование в контрактах, нужно получить или написать контракт родителя, а затем сослаться на его в дочернем контракте через "is".
Один контракт может наследовать функции из нескольких других. Однако в этом случае важен их порядок определения в дочернем контракте.
Также в наследовании контрактов важно следить за областями видимости функций.
#наследование
Один контракт может наследовать функции из нескольких других. Однако в этом случае важен их порядок определения в дочернем контракте.
Также в наследовании контрактов важно следить за областями видимости функций.
#наследование
🔥1
В некоторых случаях контракты могут становиться Абстрактными. Они не разворачиваются самостоятельно, но при этом могут наследовать или передовать функции в другие контракты.
Чаще всего контракты становятся абстрактными, когда не могут передавать значения в constructor родителя.
Я редко пока что встречал abstract на практике, поэтому буду дополнять инфо по ходу обучения.
#abstract #наследование
Чаще всего контракты становятся абстрактными, когда не могут передавать значения в constructor родителя.
Я редко пока что встречал abstract на практике, поэтому буду дополнять инфо по ходу обучения.
#abstract #наследование
🔥1
А вот так можно передавать значения в контруктор родителя, от которого будем получать функции.
#наследование
#наследование
🔥1
Чтобы переопредилить функцию в дочернем контракте, в родительском контракте необходимо указать параметр virtual, а в первом - override.
#наследование #virtual #override
#наследование #virtual #override
🔥1
Чтобы не писать дважды функцию и в родителе, и в дочернем контракте, можно писать функцию сразу от имени родителя или использовать super (если родитель на одном уровне выше).
#наследование #super
#наследование #super
🔥1
Урок 12. Интерфейсы и библиотеки
Привет всем! Полагаю, за два дня вам удалось разобраться с наследованием в смарт-контрактах. Там, по сути, ничего сложно, однако это вы будете применять достаточно часто, в особенности, составляя сложные контракты, например, для создания токенов или nft, их продажи через магазины и т.д.
В общем штука полезная и с ней надо научиться работать.
В сегодняшнем уроке мы пойдем чуть дальше и поговорим об интерфейсах и библиотеках, которые помогаю сокращать смарт-контракты и подключать функции из сторонних файлов.
Видео урок - Интерфейсы и библиотеки.
Я сам не с первого раза освоил эту тему и приходилось пересматривать урок вновь и вновь. И это только потому, что в одном из следующих видео, лектор начинает свой стрим с подключения библиотеки без особых разъяснений.
Забегая вперед, скажу, что нам осталось еще пара обучающих уроков, и мы перейдем к работе со смарт-контрактами, как "взрослые разработчики".
Поэтому желательно закрепить все знания в течение последующей недели, чтобы с комфортом обучаться дальше!
Всем легких знаний и хорошей памяти!
#интерфейсы #библиотка
Привет всем! Полагаю, за два дня вам удалось разобраться с наследованием в смарт-контрактах. Там, по сути, ничего сложно, однако это вы будете применять достаточно часто, в особенности, составляя сложные контракты, например, для создания токенов или nft, их продажи через магазины и т.д.
В общем штука полезная и с ней надо научиться работать.
В сегодняшнем уроке мы пойдем чуть дальше и поговорим об интерфейсах и библиотеках, которые помогаю сокращать смарт-контракты и подключать функции из сторонних файлов.
Видео урок - Интерфейсы и библиотеки.
Я сам не с первого раза освоил эту тему и приходилось пересматривать урок вновь и вновь. И это только потому, что в одном из следующих видео, лектор начинает свой стрим с подключения библиотеки без особых разъяснений.
Забегая вперед, скажу, что нам осталось еще пара обучающих уроков, и мы перейдем к работе со смарт-контрактами, как "взрослые разработчики".
Поэтому желательно закрепить все знания в течение последующей недели, чтобы с комфортом обучаться дальше!
Всем легких знаний и хорошей памяти!
#интерфейсы #библиотка
YouTube
Solidity и смарт-контракты Ethereum, урок #12 | Интерфейсы, библиотеки, тесты
ХОТИТЕ СТАТЬ РАЗРАБОТЧИКОМ Solidity, узнать об Ethereum, блокчейне и многом другом ещё больше?!
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
👍1🔥1
Чтобы адрес трансформировать в специальный объект, который может отчевать на привильные функции, нам необходимо имортировать исходный код нужного контракта в свой, и затем инициализировать объект, как в примере на скрине. и тогда уже, относительно этого объекта, мы можем вызывать функции из подключенного контракта.
#подключениеконтракта #import
#подключениеконтракта #import
🔥1
Для того, чтобы создать интерфейс вам необходимо создать новый файл с расширением sol, также прописать тип лицензии и версию Solidity, а затем начать процесс создания с написания interface.
После этого можно копировать функции без их "тела", как показано в примере.
При этом не забудьте подключить интерфейс через import в оригинальном контракте, если сами написали его, и в своем.
По свеой сути интерфейс это описание смарт-контракта, от которого можно наследовать и принимать функции.
#interface
После этого можно копировать функции без их "тела", как показано в примере.
При этом не забудьте подключить интерфейс через import в оригинальном контракте, если сами написали его, и в своем.
По свеой сути интерфейс это описание смарт-контракта, от которого можно наследовать и принимать функции.
#interface
🔥1
Библиотека - это фактически некий набор функций, который мы можем подключать к определенным типам данных, чтобы их расширять.
Библиотеки открываются ключевым словом library, внитри чего прописывается функция.
Подключается она также через import, а используется через "using "func name" for "тип данных".
#библиотека #library
Библиотеки открываются ключевым словом library, внитри чего прописывается функция.
Подключается она также через import, а используется через "using "func name" for "тип данных".
#библиотека #library
🔥1