Друзья, ЭТОТ УРОК УСТАРЕЛ! Новая версия тут ruclips.net/video/GD6fz56-cEQ/видео.html Если у вас ЧТО-ТО НЕ РАБОТАЕТ, то FAQ ПО КУРСУ ЛЕЖИТ ВОТ ТУТ bodrovis.tech/en/categories/solidityethereum/posts/faq-po-kursu-solidity Не исключено, что ваша проблема там уже описана. Дело в том, что недавно Hardhat перешёл на ethers 6 и пару изменений там присутствует. Также хотел отметить, что блокчейн будет очищаться МЕЖДУ РАЗНЫМИ ПРОГОНАМИ тестов. В рамках одного прогона если вы хотите, чтобы шла очистка, то в beforeEach можно засунуть await network.provider.send("hardhat_reset"). Просто некоторые спрашивают, как сделать так, чтобы после "увеличения" времени в одном тесте, это не влияло на другой. Вот именно так. Увы, по дефолту такой очистики нет (если вдруг я где-то в видео оговорился и сказал, что есть между тестами, а не между прогонами, то прошу прощения). Но коль скоро в beforeEach мы делаем деплой заново, то контракт будет в любом случае свежим. В более новом hardhat появилась функция loadFixture, она будет фигурировать далее
Ух ты, класс уроки! Я не новичок в программировании, но много новой информации по blockchain много понятно, но сложновато! Материал изложен очень круто и понятно
Доброго времени суток, Илья. Благодарю за качественный стиль изложения и полезный урок по Solidity. Резюмировал урок для себя следующим образом: Single responsibility - наше все)
Отличный урок мало кто задевает тему тестов спасибо большое, очень жду если такая будет тему оракулов про это очень мало информации а если есть то теория в основном спасибо за этот курс !!
Про тесты нельзя забывать, поэтому полезное видео. Только конечно для новичков в программировании этот урок после первых 4 может сбить столку. А для тех кто с других языков программирования зашел - видео должно залетать на ура
@@IlyaBodrovKrukowskiвернулся к 5-му уроку спустя пару дней как и прежде темный лес)по вашему это не слишком сложно для начинающих? или это только для меня.
а у вас есть видео где вы работаете с файлом "deploy"? Просто мне нужном в другом теснете затестить, а там запускается по такой строке " run script/deploy.js"
По прошлым урокам куда больше. Но вообще я боюсь, что это связано со всем известными событиями - многие люди просто сейчас не могут ничего смотреть, другие же пребывают не в самом лучшем состоянии просто. Прямо явно видно, как в конце февраля упали просмотры. Увы...
@@IlyaBodrovKrukowski Большое и огромное Вам спасибо за то что вы делайте, для многих Ваши выпуски как глоток свежего воздуха, как маленькая таблетка от всех этих плохих событий. Я из Ашхабад и желаю всем мира и продолжения этих интересных уроков !
Огромное спасибо за крутые уроки! Вроде было все понятно до 5 урока и потом как будто на китайском все, уже пересмотрел ролик раза 3-4, но картина все рано не целая. Но автору респект! Подскажите такой вопрос, использую данную систему через hardhat что бы тестировать контракт, не проще ли делать это в Ремиксе? Спасибо!
Спасибо за урок, тема очень интересная!!! Подскажите пожалуйста тестировать смарт контракты можно только через Hardhat предварительно создав на нем специальное окружение с помощью Mocha, Chai, Waffle, Ethers? Например в ремиксе также тестировать смарт контракты невозможно?
Ну, есть совсем рудиментарные штуки, кажется, но что-то сложное сделать вряд ли выйдет. Но есть ещё другое решение Foundry, про него в плейлисте есть видео, на нём тесты пишутся на самом Solidity, без JS
Илья спасибо за урок, но спустя два года произошли некоторые изменения в hardhat. Для тех у кого будет ошибка с таким стеком "TypeError: invalid address (argument="address", value=null, code=INVALID_ARGUMENT, version=6.11.1)" то вместо payments.deployed используйте payments.waitForDeployment(). deployed уже устарела.
А это устаревший урок в принципе, я уже сильно не советую ему следовать. В закрепе ссылка на актуальный ruclips.net/video/GD6fz56-cEQ/видео.html Если что, остальные ответы на типичные вопросы тут bodrovis.tech/posts/faq-po-kursu-solidity/
Здравствуйте. Спасибо за уроки. Можна услышать ваше мнение об автоматичесских анализаторах (slither, mithril ...)? Интересует ефективность в поиске багов.
Добрый вечер, не получается реализовать отправку токена всем пользователям(идея заключается в отправке 2% от транзакции всем пользователям токена), как лучше ее реализовать, не могу найти в интеренете.
Ну, перенести - особенно никак, просто обычным копированием ctrl+c ctrl+v. Это если у вас онлайн версия ремикса, конечно. Если локально, то просто файлы перетащить можно
@@IlyaBodrovKrukowski добрый день. Большое спасибо за уроки!!! Подскажите пожалуйста где могут находиться файлы созданные через ремикс? Уже все перерыл в локальной памяти, ничего не нашел
@@MaiborodaAndrii Насколько мне известно, они хранятся в local storage, если говорить об онлайн-версии (про десктоп не скажу, но где-то на диске). Там есть вариант сделать бэкап всех файлов. Но если в онлайн-версии использовать другой браузер, то старые файлы отображаться не будут
на 5ом уроке я поплыл :)) не очень понятно зачем все делается и очень много новых языковых конструкций Если я хочу научиться "в ручную" управлять смарт-контрактом, уже развернутым в блокчене, мне нужно изучать hardhat?
Спасибо большое за урок. У меня такая проблема: когда ввожу -npx hardhat test- нечего не тестируется -0 passing (0ms)-. Может подскажите что я делаю не так?
Возможно, у вас тесты не в той папке? Проверьте, что все пути такие же, как в проекте в видео - обычно такая проблема появляется, когда он тестов не видит. Вот тут папки и имена файлов имеет смысл проверить github.com/bodrovis-learning/Solidity-YT-Series/tree/master/lesson_5_tests
Кстати. Небольшой лайфхак. В большинстве случаев нет необходимости применять npx hardhat clean, npx hardhat compile, так как при npx hardhat test программа автоматически находит измененные файлы, компилирует их и запускает тест. Вместо трёх команд можно использовать одну.
Илья, для меня тема тестов сложная. Не понимаю что Вы пишете. Хочу Вас попросить, объясните пожалуйста подроднее синтаксис написания тестов. До этого видео лично мне было понятно, большую часть точно. Спасибо Вам за старания!!!
это общие знания, которые для разработки нужно понимать в любом случае. я пересмартиваю уроки по несколько раз, пытаюсь понять логику тестов, пока тоже дается с трудом, ну а как иначе)
Проще говоря, ты написал программу - Велосипед Теперь тебе нужно его протестировать прежде чем продать покупателю, то что показано было в видео, это по сути "робот-тестировщик" для велосипедов, ты можешь запрограммировать его протестировать педали, сиденье или проехать 5 метров со скоростью 500 км/час, в общем это обвязка для того что бы проверять нормально ли работает твой код автоматически, иначе бы пришлось тыкать все в ручную.
У меня такой вопрос: Вы упомянули GUIDE DAO!Насколько им можно доверять в качестве даваемых ими знаний?Стоит ли объективно это тех денег?Не инфо ли цыгане, как большинство курсов?Спасибо!
Ну, я работаю с этой платформой уже много лет и случаев обмана на моей памяти не было. Объём знаний очень приличный, плюс онлайн-события фактически каждый день. Вы можете попробовать, в случае чего можно просто возврат запросить. Я не знаю деталей этих процессов, тк финансами не занимаюсь, но а том, что это приличные ребята, я уверен. Вот тут мы проводили стрим "день открытых дверей", можно глянуть - на многие вопросы есть ответы ruclips.net/video/EkqlnS6JtWc/видео.html
У меня вопрос есть, когда мы с одного аккаунта отправляем деньги на другой 100 wei, мы же платим газ и в итоге должно прийти не 100 wei, а меньше. Почему там 100 wei приходит?
@@IlyaBodrovKrukowski Понял, спасибо, просто у меня почему-то меньше приходит. Но у меня в контракте только функция receive. Есть ли смысл заменить её на вашу "pay"?
@@БекзодОлимов-я4ц Смотрите, receive - это функция, которая вызовется всегда, если в контракт просто придут деньги, без указания на функцию вообще. Но в Remix IDE мы это потестить никаким простым способом не можем, поэтому приходится делать "демо" функции для оплаты. Но написать тест для receive можно легко: просто отправляете транзакцию с деньгами из своих тестов. Поэтому для обучения пока можно создавать свои функции для приёма денежных средств, не receive, а самые обычные типа pay. Я скоро сделаю урок про функции и расскажу, в чём тут суть.
Добрый день. Спасибо большой за урок. Есть вопрос. В функцию pay передаются 2 аргумента (строка и сумма), хотя в декларации функции указан 1 аргумент. Это такая особенность функции помеченной как payable, т.е. всегда надо передавать сумму?
Спасибо за урок! К сожалению, уровень сложности резко вырос и если до этого занятия было понятно 80-90% материала, то здесь уже не более 20-30%. Было бы неплохо останавливаться более подробно на: 1) Той вещи, о которой мы говорим сейчас. Например "Эта программа нужна для тестов, ставите ее. А еще вот эта нужна, а еще вот эта. А теперь пишем команду". Из-за обилия новых терминов, программ, синтаксиса - просто теряешься. И второе это сам синтаксис, например на 12:00 мы стали неожиданно писать на JS (Если я правильно понял). Но далеко не все писали на JS или вообще имели бекграунд программирования.. Если уроки будут более подробными и уровень сложности будет нарастать плавно, а не скачками, то 90% обучающихся дойдут до конца :) Даже если посмотреть на кол-во просмотров, то от урока к уроку чуть ли не половина смотрящих отваливается )
Это верно. Но надо понимать простую вещь: у меня просто нет возможности делать такое количество уроков и объяснять основы того же JS - это остаётся на откуп зрителю. В этой серии мне хотелось бы сфокусироваться на ethereum, а уж на чём будут писаться тесты - это дело другое, решения есть и другие, кстати говоря. Да писать-то их не обязательно, для понимания Solidity этого не требуется и к этому вопросу можно вернуться позже, в принципе
Надо понимать, что Solidity - язык специализированный. Ну а какие проблемы с JS? Документирована вдоль и поперек, материалов по ней на любой уровень подготовки масса. Ну и особо сложной ее не назвать :) За неделю - две, на мой взгляд, любой более-менее разберется. Тут человек выложил солюшен с редко кем разбираемой темой, за что ему низкий поклон. Прочитаете по JS & Solidity доки и разберетесь что и зачем он написал. От такого упражнения только польза. Когда лет 25 тому назад моя старшая дочь спросила меня: «Что в первую очередь должен уметь программист?», она меня здорово озадачила. А потом я, когда понял, озадачил ее - «Уметь читать». И с тех пор ничего не поменялось :) Уметь читать - по прежнему главный навык программиста. Читать доки и читать то, что наваяли коллеги. Причем, нередко читать творчество коллег приходится больше, чем писать что-то самому. Так что, если хотите заниматься сим делом, привыкайте читать, читать и врубаться в прочитанное.
С этим есть некая сложность. Можно запускать тесты с ключом --slow но он тогда будет писать время для тестов, которые сам считает "медленными". Но предлагается вот такое решение stackoverflow.com/questions/39259620/how-to-configure-mocha-in-html-to-print-execution-time-of-each-test
Пожалуйста, добавьте в видео информацию о том, что для получения возвращаемого значения функции в рамках теста необходим модификатор view-в противном же случае будет возвращена транзакция. Я на этом ОЧЕНЬ больно споткнулся
Добрый день! В первую очередь спасибо большое за ту информацию, которую вы даете! Очень интересно, уникально и , естественно дико полезно. По этому уроку появился вопрос : после повторного compile, когда компилируется один файл, папка artifacts становится пустой. В чем может быть ошибка?
Не встречал такого (точнее были похожие вопросы, но там вообще ничего не компилировалось). Можно попробовать для начала обновить все зависимости через npm update
@@IlyaBodrovKrukowski к сожалению, не помогло. Могу отметить, что у вас при компилировании отображается версия 0.8.4, хотя прописана 0.8.0. У меня версию не отображает совсем, скорее всего дело в solidity непосредственно. Но вариантов фикса пока не нашел
@@pashqa272 Должно всё компилироваться, настройки компилятора делаются в hardhat.config.js. У меня стоит в файле .sol "любая версия 0.8.x", а в конфиге - соответственно, 0.8.4. Попробуйте посрашивать в нашем чате, обычно народ помогает
@@pphotic подождите, но деплоить != компилировать Деплой в HH, конечно, происходит не всех контрактов сразу, а только тех, что указаны в скриптах или тестах. А вот компиляция - всех сразу, но в общем это обычно не проблема
Спасибо за видео! Подскажите, пожалуйста , после установки hart had , написан я контракта и теста при запуске в терминале в папке с проектом npx hardhat test ничего не происходит, после выполнения Команды пишет «0 passing”, в чем может быть проблема?
@@IlyaBodrovKrukowski у меня та же ошибка, все файлы назвал верно D:\HZ\урок 5>npx hardhat test npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. 0 passing (3ms)
какой классный контент, все с нуля, мой любимик traversy media он тоже с нуля все делает, но по солидити к сожалению нету у него ((( так что этот курс просто находка, дружище я еще не посмотрел все полностью не знаю что там будет, но я тебе советую сделать полноценный курс, с фронтом бэком и этими контрактами что бы люди видели конченый результат продукта который нужен на реальной работе
после установки HardHat через консоль нет варианта Create a basic sample project (сейчас версия HardHat 2.12.5, а в вашем видео 2.8.4 - может в новой версии урезали функционал?)
Ну, если тесты проходят, то установилось. На самом деле, теперь там достаточно поставить только hardhat-toolbox, он в себя всё нужное включает. Когда вы сделали проект HH, он должен предложить сам правильную команду для установки. Если не получается, напишите в наш чат
@@IlyaBodrovKrukowski Спасибо за ответ. Не могу получить информацию по второму платежу. Создаю третий аккаунт, шлю wei с него на контракт, средства до контракта доходят и баланс контракта становится равным 200, но данные по платежу получить не могу. Запрашиваю по аналогии - const newPayment2 = await payments.getPayment(accaunt3.address, 1). В консоли при запросе логов получаю нули и пустые строки. В чем беда?
Если у кого-то будет ошибка invalid chai property: changeetherbalances в третьем тесте для await expect(tx).to.changeEtherBalances([acc2, payments], [-100, 100]); просто напишите npm outdate и обновите версии библиотек в package.json, затем npm install и тест отработает :)
Правильно ли я понимаю, что команды `npm init` и `npm install --save-dev hardhat` нужно вводить при создании каждого конейнера так же как и `npx hardhat`?
Я думаю, что вам стоит почитать подробнее про проекты npm, чтобы закрепить изученное - это несложно, но довольно важно. Но в целом да - каждый новый проект подразумевает запуск npm init. Потом туда забрасываются нужные библиотеки через npm install. В одном проекте может быть множество контрактов и тестов
@@IlyaBodrovKrukowski Просто страно видеть, что для каждого проекта мне нужно отдельно подкачивать все библиотеки, которые нужны в проекте через npm install
@@КириллКузнецов-е9о Это так работает абсолютно для любого проекта npm, а также для немалого количества проектов на других языках: хотя бы Ruby или Elixir. Каждый проект - вещь в себе, которая не зависит от глобально установленных библиотек (в идеале). Мы даём проекту имя, ставим нужные зависимости и делаем там, что хотим. В другом проекте могут быть совершенно другие зависимости с другими версиями и они никак не конфликтуют
Папку - какую именно? Там ведь много разного есть. Что-то можно в конфиге менять, видимо, а если мы говорим о typechain файлах для frontend, то как-то так npx typechain --out-dir front/src/typechain --target ethers-v5 "artifacts/contracts/**/*[!dbg].json"
@@IlyaBodrovKrukowski У меня просто в conemu стоит папка Users и в visual studio через нее нужно заходить, чтобы видеть все тесты, скрипты и т.д, хотелось бы отдельную папку для этого сделать и чтобы в conemu от ее имени писать
@@ОстапБобрис-г1п Надо просто сделать команду cd в нужную директорию в терминале learn.microsoft.com/en-us/windows-server/administration/windows-commands/cd В духе cd c:\projects\my_project
Илья, спасибо за урок! Подскажите, какую операционную систему Вы используете? У меня Windows. Думаю Ubuntu поставить для программирования. Выполнял команды как в видео, возникли ошибки, не помню какие. Решил попробовать повторно, всё заработало. Вы говорили в видео что могут быть проблемы с установкой...
Windows 10. Но за мной лучше не повторять в этом плане, просто я знаю эту ОС очень хорошо - раньше по ней вёл занятия. А вообще nix-системы поудобнее будут. Проблемы на винде могут быть с node-gyp, это да. Там если не иметь опыта, то можно конкретно застрять, но, боюсь, других вариантов тут нет просто
Доброго времени суток, на протяжение недели пытаюсь установить hardhat но всё безуспешно, можно как-то подробнее сделать видео о том, как с ним работать?
@@elsancho4356 Ну там вроде всё просто должно быть. Если проблемы какие-то, можно в наш чат написать (ссылка в описании). Просто я даже не знаю, что показывать в видео - он ведь одной командой ставится
Я думаю, что это классика, это знать нужно. Вообще-то я очень надеюсь, что рано или поздно сделаю уроки по этой теме, пока просто руки не доходят. Серьёзно, если есть возможность - учите Rust
Это видео интересное, но при этом почему-то слишком много ошибок на квадратный метр. Error: Invalid Chai property: changeEtherBalances. Did you mean "changeEtherBalance"? Сначала была ошибка с changeEtherBalance , нашёл в инете решение и там было сказано, что нужно дописать 2 строки в файл waffle-chai.js. Но потом появилась эта ошибка и решения пока что не смог найти. Помогите пожалуйста)
Всё должно работать. changeEtherBalances - это matcher из waffle. Возможно, не подрублен сам waffle. В принципе, с такими ошибками лучше к нам в чат обратиться, ссылка есть в описании
Если у кого-то возникает ошибка на await ethers.getSigners(); - Cannot read properties of undefined (reading 'JsonRpcProvider') Попробуйте использовать "ethers": "5.7.2",
Илья, не могу разобраться в чем проблема... Есть функция function pay(address payable _to, uint _amount) external payable { _to.transfer(_amount); } Пишу тест it("contract receive ether", async function(){ const tx = await ico.connect(acc1).pay(ico.address, { value : 100}) }) Ошибка Error: invalid BigNumber value (argument="value", value={"value":100}, code=INVALID_ARGUMENT, version=bignumber/5.6.2) Я уже как только не пробовал значение менять... В чем может быть проблема?
@@IlyaBodrovKrukowski Спасибо за ответ! Но появилась новая проблема.. Error: Transaction reverted: contract call run out of gas and made the transaction revert JS it("contract receive ether", async function(){ const tx = await ico.connect(acc1).pay(ico.address, { value : 100}) await tx.wait() }) solidity function pay(address payable _to) external payable { _to.transfer(msg.value); } При этом я проверяю баланс аккаунта-отправителя и там BigNumber { value: "9999991720038881217780" }
@@IlyaBodrovKrukowski В общем... магия какая-то.. Я выяснил, что проблема заключалась в том, что в receive() я изменял кое какие данные в блокчейне, из-за этого не хватало газа (ведь на контракте изначально 0). Я удалил всё из receive() и оставил чистой функцию. Всё сработало. При этом я развернул такой же контракт в Remix, где receive() уже изменяет данные в блокчейне. И я спокойно отправлял на нее эфир, никаких ошибок. Тоже самое в Rinkeby testnet. Всё работает, только в hardhat не работает.. И как после этого тестировать..
@@IlyaBodrovKrukowski Илья, если будет возможность, помогите пожалуйста.. Я уже не знаю что делать. Я даже попытался сделать вот такую строчку const tx = await ico.connect(acc1).pay(ico.address, { value : 1000, gasLimit: 40000000 }) Но выдает ошибку InvalidInputError: Transaction gas limit is 40000000 and exceeds block gas limit of 30000000 Если вставить число меньше, то выдается старая ошибка, мол газа не хватило..
Error HH12: Trying to use a non-local installation of Hardhat, which is not supported. Please install Hardhat locally using npm or Yarn, and try again. Такая ошибка, попытался удалить и заново установить, как рекомендует сама консоль, но не помогает. В чём может быть проблема?
stackoverflow.com/questions/69959650/error-hh12-trying-to-use-a-non-local-installation-of-hardhat-which-is-not-supp hardhat.org/errors/#HH606= - как-то так
@@IlyaBodrovKrukowski Да, я как раз и делал по инструкции на stackoverflow, но у меня почему-то всё ещё пишет эту ошибку. Полностью удалил своей проект, удалил все файлы, которые качались с помощью npm install и заново всё поставил. Но ошибка всё ещё осталась, не знаю если честно в чём проблема, потому что в интернете только говорят удалить и установить снова...
@@игорьговтвян-я5ж Удалить нужно также node_modules и package.json не только в самом проекте, но и в родительских папках, если они там есть. Честно говоря, что тут ещё подсказать - даже не знаю
Классные уроки. Но есть пара вещей, которые режут слух. Это "Яваскрипт" Х-D, и то, что await для того, что выполняется не мгновенно. Правильно будет говорить асинхронно, это не совсем о времени выполнения
А что плохого в слове "Яваскрипт"? Этот язык был назван по образу Java (там долгая история, но в целом это было сделано с маркетинговыми целями), который, в свою очередь, назван по сорту кофе coffeefan.info/kofe-java-arabika.html Что касается await - нам нужно в данном случае ждать, пока пройдёт транзакция. Иначе там будет возвращён promise и мы не сможем проверить корректность выполнение. Короче, вы меня простите, я несколько на взводе из-за происходящих сейчас событий, которые частично коснулись и меня, но в общем и целом это придирки.
Я согласен, что дело в общем и целом не во времени выполнения, но чтобы зрителю было понятнее, я говорю, что обработка транзакции делается довольно долго. И да, нужно её дождаться. Время выполнения важно с той точки зрения, что если бы всё выполнялось мгновенно, то нам вообще был бы не нужен никакой promise. А так все эти отправки функций всегда возвращают promise именно из-за длительности этой операции. В общем, спасибо за комментарий, это в любом случае полезно
Я не буду отвечать на этот вопрос. Кто такие "все" - я не знаю, но обо мне вы не знаете ничего, включая и то, молчал я или нет. Давайте не будем развивать эту тему.
Здравствуйте! Я впервые написал тесты для своего контракта благодаря вам, спасибо большое! Сейчас я пишу таски через web3.js для взаимодействия с контрактом через hardhat, не могу понять как с этой библиотекой работать. У меня вопрос: Если писать таски с помощью того же ethers, то перед каждым выполнением таска нужно каждый раз деплоить контракт как в тестах (beforeEach)? И в принципе будут ли большие отличия tasks.js от tests.js если оба просто вызывают функции из контракта, только второй сравнивает результат с ожидаемым?
Ethers.js мне кажется получше, чем web3. Деплой делать нужно вообще один раз, если это не тесты. Это просто в тестах нам всегда нужен свежий контракт, а в реальном блокчейне - конечно, нет. 1 раз развернули контракт и с ним работаем
Что за метод сurrentBalance? В моем случае у deployed контракта нет такого метода и баланс контракта узнаю через provider.getBalance(contract.address). И упоминаний метода currentBalance нигде не вижу в документациях.
А мы же добавили эту функцию в контракт github.com/bodrovis-learning/Solidity-YT-Series/commit/e03c969299449ae6cbc1824f40dfa07f2f8d7de3#diff-7cff68d828791d88522eb91f7751fe53e4a0cff32859ef5a7a166a7dabe1d360R20 Конечно, изначально метода такого нет, но благодаря функции можно вызывать без пролем
Здравствуйте! Выдает эту ошибку, не получается решить ее 1) Payments "before each" hook for "should": TypeError: no matching function (argument="key", value="deployed", code=INVALID_ARGUMENT, version=6.6.0) at makeError (node_modules\ethers\src.ts\utils\errors.ts:670:21) at assert (node_modules\ethers\src.ts\utils\errors.ts:694:25) at assertArgument (node_modules\ethers\src.ts\utils\errors.ts:706:5)
@@IlyaBodrovKrukowski Я искренне прошу прощения, за вопрос Возможно это покажется наглым, но у уже почти восемь часов пытаюсь решить проблему в коде из 5-го видео, в чатике ребята не смогли помочь, использовал чат GPT, но и он не смог мне помочь с ошибкой этой Если у вас получится уделить мне некоторое время, глянуть мой код и помочь с данной ошибкой, я буду вам очень благодарен Я очень хочу дальше изучать курс, но сильно застопорился на этой ошибке
При запуске первого теста была ошибка следующая: "before each" hook for "should be deployed": TypeError: no matching function (argument="key", value="deployed", code=INVALID_ARGUMENT, version=6.6.2) Она возникает из-за того что версия hardhat обновилась, решается так: Вместо кода в BeforeEach из урока можно вставить такой код: beforeEach(async function() { [acc1,acc2] = await ethers.getSigners() const Payments = await ethers.getContractFactory("Payments",acc1) payments = await ethers.deployContract("Payments") const contractAddress = await payments.getAddress() console.log(contractAddress) })
В закреплённом комментарии есть ссылка на faq, который описывает, в том числе, и эту проблему bodrovis.tech/en/categories/solidityethereum/posts/faq-po-kursu-solidity Решается она несколько иначе, советую почитать (там ничего сложного)
вот такая ошибка выходит в терминале , как можно ее решить? An unexpected error occurred: C:\Users\filal\sol\test\Payments.js:6 const acc1 ^^^^ SyntaxError: Missing initializer in const declaration at Object.compileFunction (node:vm:352:18) at wrapSafe (node:internal/modules/cjs/loader:1031:15) at Module._compile (node:internal/modules/cjs/loader:1065:27) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:102:18) at C:\Users\filal\sol ode_modules\mocha\lib\mocha.js:349:36 at Array.forEach ()
@@IlyaBodrovKrukowski я дописал помимо трех let "const Payments" только после этого заработало, но при тесте чтоб узнать адрес кошелька он не выводится как быть в этом случае Payments √ should be deployed 1 passing (662ms) адрес не вышел
@@IlyaBodrovKrukowski should be possible to send funds: Error: Invalid Chai property: changeEtherBalance should be possible to send funds: TypeError: tx.wait is not a function
Ошибка в строке: expect(payments.address).to.be.properAddress Текст ошибки: AssertionError: Expected "undefined" to be a proper address Решение: исправить строку на: expect(payments.runner.address).to.be.properAddress
Друзья, ЭТОТ УРОК УСТАРЕЛ! Новая версия тут ruclips.net/video/GD6fz56-cEQ/видео.html
Если у вас ЧТО-ТО НЕ РАБОТАЕТ, то FAQ ПО КУРСУ ЛЕЖИТ ВОТ ТУТ bodrovis.tech/en/categories/solidityethereum/posts/faq-po-kursu-solidity Не исключено, что ваша проблема там уже описана. Дело в том, что недавно Hardhat перешёл на ethers 6 и пару изменений там присутствует.
Также хотел отметить, что блокчейн будет очищаться МЕЖДУ РАЗНЫМИ ПРОГОНАМИ тестов. В рамках одного прогона если вы хотите, чтобы шла очистка, то в beforeEach можно засунуть await network.provider.send("hardhat_reset"). Просто некоторые спрашивают, как сделать так, чтобы после "увеличения" времени в одном тесте, это не влияло на другой. Вот именно так. Увы, по дефолту такой очистики нет (если вдруг я где-то в видео оговорился и сказал, что есть между тестами, а не между прогонами, то прошу прощения). Но коль скоро в beforeEach мы делаем деплой заново, то контракт будет в любом случае свежим. В более новом hardhat появилась функция loadFixture, она будет фигурировать далее
Ты закрепить комментарий забыл.
Это просто великолепно! Даже не знаю можно ли объяснить более доступно!! Благодарю!🙏🙌🚀
На здоровье
Cпасибо Вам за то, что высказали своё мнение касательно войны
Да что тут сказать... Это просто катастрофа, а что самое страшное, конца и края этому не видно...
Спасибо больше за Ваши труды! Даже не знаю, что без Вас бы делал))!
Ух ты, класс уроки! Я не новичок в программировании, но много новой информации по blockchain много понятно, но сложновато! Материал изложен очень круто и понятно
Доброго времени суток, Илья. Благодарю за качественный стиль изложения и полезный урок по Solidity.
Резюмировал урок для себя следующим образом: Single responsibility - наше все)
ruclips.net/video/GD6fz56-cEQ/видео.html - кстати, тут свежая версия этого урока
@@IlyaBodrovKrukowski спасибо за ссылку) даль что не увидел раньше, но зато пришлось по документации разобраться)) да, и за контент спасибо!
@@НикитаШевченко-ы8я на здоровье
Отличный урок мало кто задевает тему тестов спасибо большое, очень жду если такая будет тему оракулов про это очень мало информации а если есть то теория в основном спасибо за этот курс !!
Илья, большая Вам благодарность!
На здоровье!
Спасибо большое за то, что делаете!
Илья, Спасибо за видео! Очень полезные Уроки!
Спасибо большое, очень ждал тему тестов
Про тесты нельзя забывать, поэтому полезное видео. Только конечно для новичков в программировании этот урок после первых 4 может сбить столку. А для тех кто с других языков программирования зашел - видео должно залетать на ура
Это да, но к нему можно вернуться позднее
отличный курс! надеюсь будет продолжение)
Отличный контент, спасибо!
Огромное спасибо за урок
Спасибо за ваш труд
На здоровье!
5 урок пропускаю покв это просто джунгли какие-то)
@@IlyaBodrovKrukowskiвернулся к 5-му уроку спустя пару дней как и прежде темный лес)по вашему это не слишком сложно для начинающих? или это только для меня.
@@Bekcoin Не знаю, зависит от опыта, я думаю. Можно попробовать просто про JS что-нибудь почитать
жиза жиза
Ух ты, я ждал этого, спасибо
спасибо за ваш труд! если можно пожалуйста побольше видео про хардхат и тестирование смарт контрактов
а у вас есть видео где вы работаете с файлом "deploy"? Просто мне нужном в другом теснете затестить, а там запускается по такой строке " run script/deploy.js"
Вероятно, npx hardhat run script/deploy.js --network sepolia или как-то так. Кажется что-то такое было в конце 13 урока, где деплоим токен
Почему так мало просмотров ! ведь за этим будущее
По прошлым урокам куда больше. Но вообще я боюсь, что это связано со всем известными событиями - многие люди просто сейчас не могут ничего смотреть, другие же пребывают не в самом лучшем состоянии просто. Прямо явно видно, как в конце февраля упали просмотры. Увы...
@@IlyaBodrovKrukowski Большое и огромное Вам спасибо за то что вы делайте, для многих Ваши выпуски как глоток свежего воздуха, как маленькая таблетка от всех этих плохих событий. Я из Ашхабад и желаю всем мира и продолжения этих интересных уроков !
@@h-arti5305 Спасибо!
Спасибо большое!
На здоровье!
Когда уже появится фреймворк "Пиво". Жду-недождусь. Спасибо за видео кстати.
Да наверняка есть что-нибудь такое
Спасибо!
Спасибо за отличный урок. Вы действительно помогли мне отвлечься от этого ужаса войны хоть ненадолго.
Я рад, держитесь
Огромное спасибо за крутые уроки!
Вроде было все понятно до 5 урока и потом как будто на китайском все, уже пересмотрел ролик раза 3-4, но картина все рано не целая. Но автору респект!
Подскажите такой вопрос, использую данную систему через hardhat что бы тестировать контракт, не проще ли делать это в Ремиксе? Спасибо!
Имееь смысл подтянуть JS, значит. А так нет - не проще, особенно, когда большой контракт
Спасибо. Реально очень полезно!
Спасибо за урок, тема очень интересная!!! Подскажите пожалуйста тестировать смарт контракты можно только через Hardhat предварительно создав на нем специальное окружение с помощью Mocha, Chai, Waffle, Ethers? Например в ремиксе также тестировать смарт контракты невозможно?
Ну, есть совсем рудиментарные штуки, кажется, но что-то сложное сделать вряд ли выйдет. Но есть ещё другое решение Foundry, про него в плейлисте есть видео, на нём тесты пишутся на самом Solidity, без JS
Для тех кто в будующем будет инициализировать проект, надо вместо "npx hardhat" команды, использовать "npx hardhat init"
Илья спасибо за урок, но спустя два года произошли некоторые изменения в hardhat. Для тех у кого будет ошибка с таким стеком "TypeError: invalid address (argument="address", value=null, code=INVALID_ARGUMENT, version=6.11.1)" то вместо payments.deployed используйте payments.waitForDeployment(). deployed уже устарела.
А это устаревший урок в принципе, я уже сильно не советую ему следовать. В закрепе ссылка на актуальный ruclips.net/video/GD6fz56-cEQ/видео.html Если что, остальные ответы на типичные вопросы тут bodrovis.tech/posts/faq-po-kursu-solidity/
Спасибо за подсказку!
@@IlyaBodrovKrukowski👍
Здравствуйте. Спасибо за уроки. Можна услышать ваше мнение об автоматичесских анализаторах (slither, mithril ...)? Интересует ефективность в поиске багов.
Насколько я знаю, это неплохие штуки, хотя полагаться только на них не стоит. Любой инструмент - это помощник, а не штука, которая сделает всё за нас
@@IlyaBodrovKrukowski Спасибо, что ответили.
Добрый вечер, не получается реализовать отправку токена всем пользователям(идея заключается в отправке 2% от транзакции всем пользователям токена), как лучше ее реализовать, не могу найти в интеренете.
Не скажу с ходу, если честно
спасибо вас огромное за такую проделанную работу! и сразу хочу у вас спросить, как перенести инфу с ремикса на вижуал код?
Ну, перенести - особенно никак, просто обычным копированием ctrl+c ctrl+v. Это если у вас онлайн версия ремикса, конечно. Если локально, то просто файлы перетащить можно
@@IlyaBodrovKrukowski добрый день. Большое спасибо за уроки!!! Подскажите пожалуйста где могут находиться файлы созданные через ремикс? Уже все перерыл в локальной памяти, ничего не нашел
@@MaiborodaAndrii Насколько мне известно, они хранятся в local storage, если говорить об онлайн-версии (про десктоп не скажу, но где-то на диске). Там есть вариант сделать бэкап всех файлов. Но если в онлайн-версии использовать другой браузер, то старые файлы отображаться не будут
на 5ом уроке я поплыл :)) не очень понятно зачем все делается и очень много новых языковых конструкций
Если я хочу научиться "в ручную" управлять смарт-контрактом, уже развернутым в блокчене, мне нужно изучать hardhat?
Ну, тут в любом случае это рано или поздно придётся изучить. Нужен либо hardhat, либо подобная платформа - какого-то простого пути нет
Спасибо большое за урок. У меня такая проблема: когда ввожу -npx hardhat test- нечего не тестируется -0 passing (0ms)-. Может подскажите что я делаю не так?
Возможно, у вас тесты не в той папке? Проверьте, что все пути такие же, как в проекте в видео - обычно такая проблема появляется, когда он тестов не видит. Вот тут папки и имена файлов имеет смысл проверить github.com/bodrovis-learning/Solidity-YT-Series/tree/master/lesson_5_tests
thnx a lot for good content!
Кстати. Небольшой лайфхак.
В большинстве случаев нет необходимости применять npx hardhat clean, npx hardhat compile, так как при npx hardhat test программа автоматически находит измененные файлы, компилирует их и запускает тест. Вместо трёх команд можно использовать одну.
Это да. Но иногда он начинает тупить и использовать старую версию кода, у меня такое бывало. Но каждый раз - нет, не нужно, конечно
thank you!
Лучший
Илья, для меня тема тестов сложная. Не понимаю что Вы пишете. Хочу Вас попросить, объясните пожалуйста подроднее синтаксис написания тестов. До этого видео лично мне было понятно, большую часть точно. Спасибо Вам за старания!!!
Ну, просто к Ethereum как таковому это не относится - эта тема более общая, скажем так. Буду стараться подробнее объяснять
это общие знания, которые для разработки нужно понимать в любом случае. я пересмартиваю уроки по несколько раз, пытаюсь понять логику тестов, пока тоже дается с трудом, ну а как иначе)
Проще говоря, ты написал программу - Велосипед
Теперь тебе нужно его протестировать прежде чем продать покупателю, то что показано было в видео, это по сути "робот-тестировщик" для велосипедов, ты можешь запрограммировать его протестировать педали, сиденье или проехать 5 метров со скоростью 500 км/час, в общем это обвязка для того что бы проверять нормально ли работает твой код автоматически, иначе бы пришлось тыкать все в ручную.
У меня такой вопрос: Вы упомянули GUIDE DAO!Насколько им можно доверять в качестве даваемых ими знаний?Стоит ли объективно это тех денег?Не инфо ли цыгане, как большинство курсов?Спасибо!
Ну, я работаю с этой платформой уже много лет и случаев обмана на моей памяти не было. Объём знаний очень приличный, плюс онлайн-события фактически каждый день. Вы можете попробовать, в случае чего можно просто возврат запросить. Я не знаю деталей этих процессов, тк финансами не занимаюсь, но а том, что это приличные ребята, я уверен. Вот тут мы проводили стрим "день открытых дверей", можно глянуть - на многие вопросы есть ответы ruclips.net/video/EkqlnS6JtWc/видео.html
Если пишешь тесты на python, можно же использовать brownie вместо waffle?
Да, само собой
Продолжай🥺🤙
У меня вопрос есть, когда мы с одного аккаунта отправляем деньги на другой 100 wei, мы же платим газ и в итоге должно прийти не 100 wei, а меньше. Почему там 100 wei приходит?
Газ отдельно ещё списывается поверх суммы
Совершенно верно, как указано выше, за газ платим отдельно
@@IlyaBodrovKrukowski Понял, спасибо, просто у меня почему-то меньше приходит. Но у меня в контракте только функция receive. Есть ли смысл заменить её на вашу "pay"?
@@БекзодОлимов-я4ц Смотрите, receive - это функция, которая вызовется всегда, если в контракт просто придут деньги, без указания на функцию вообще. Но в Remix IDE мы это потестить никаким простым способом не можем, поэтому приходится делать "демо" функции для оплаты. Но написать тест для receive можно легко: просто отправляете транзакцию с деньгами из своих тестов. Поэтому для обучения пока можно создавать свои функции для приёма денежных средств, не receive, а самые обычные типа pay. Я скоро сделаю урок про функции и расскажу, в чём тут суть.
@@IlyaBodrovKrukowski окей, понял
Я уже хотел закрывать видео, но спасение пришло в 14:50 :)
Truffle vs HardHat ? И пару слов почему. Спасибо
Hardhat, он мне кажется удобнее и просто более популярным. Более того, теперь уже народ начал переходить на Foundry
Добрый день. Спасибо большой за урок. Есть вопрос. В функцию pay передаются 2 аргумента (строка и сумма), хотя в декларации функции указан 1 аргумент. Это такая особенность функции помеченной как payable, т.е. всегда надо передавать сумму?
Если функция payable, то она по умолчанию принимает деньги в поле value, да
Спасибо за урок! К сожалению, уровень сложности резко вырос и если до этого занятия было понятно 80-90% материала, то здесь уже не более 20-30%. Было бы неплохо останавливаться более подробно на: 1) Той вещи, о которой мы говорим сейчас. Например "Эта программа нужна для тестов, ставите ее. А еще вот эта нужна, а еще вот эта. А теперь пишем команду". Из-за обилия новых терминов, программ, синтаксиса - просто теряешься. И второе это сам синтаксис, например на 12:00 мы стали неожиданно писать на JS (Если я правильно понял). Но далеко не все писали на JS или вообще имели бекграунд программирования.. Если уроки будут более подробными и уровень сложности будет нарастать плавно, а не скачками, то 90% обучающихся дойдут до конца :) Даже если посмотреть на кол-во просмотров, то от урока к уроку чуть ли не половина смотрящих отваливается )
Это верно. Но надо понимать простую вещь: у меня просто нет возможности делать такое количество уроков и объяснять основы того же JS - это остаётся на откуп зрителю. В этой серии мне хотелось бы сфокусироваться на ethereum, а уж на чём будут писаться тесты - это дело другое, решения есть и другие, кстати говоря. Да писать-то их не обязательно, для понимания Solidity этого не требуется и к этому вопросу можно вернуться позже, в принципе
@@IlyaBodrovKrukowski Все верно, идти в блокчейн разработку без базовых знаний разработки это как пытаться учиться плавать без умения ходить)
@@ГалинаИноземцева-ф9я сравнение не вполне подходящее :)
Надо понимать, что Solidity - язык специализированный. Ну а какие проблемы с JS? Документирована вдоль и поперек, материалов по ней на любой уровень подготовки масса. Ну и особо сложной ее не назвать :) За неделю - две, на мой взгляд, любой более-менее разберется.
Тут человек выложил солюшен с редко кем разбираемой темой, за что ему низкий поклон. Прочитаете по JS & Solidity доки и разберетесь что и зачем он написал. От такого упражнения только польза. Когда лет 25 тому назад моя старшая дочь спросила меня: «Что в первую очередь должен уметь программист?», она меня здорово озадачила. А потом я, когда понял, озадачил ее - «Уметь читать». И с тех пор ничего не поменялось :) Уметь читать - по прежнему главный навык программиста. Читать доки и читать то, что наваяли коллеги. Причем, нередко читать творчество коллег приходится больше, чем писать что-то самому. Так что, если хотите заниматься сим делом, привыкайте читать, читать и врубаться в прочитанное.
@@SerKuzmichArt Всё так, хорошо сказано
Спасибо за отличный урок. А есть ли способ замерять время на работу одного теста?
С этим есть некая сложность. Можно запускать тесты с ключом --slow но он тогда будет писать время для тестов, которые сам считает "медленными". Но предлагается вот такое решение stackoverflow.com/questions/39259620/how-to-configure-mocha-in-html-to-print-execution-time-of-each-test
@@IlyaBodrovKrukowski В видео говорилось, что для развертывания используется локальный блокчейн Hardhat. Как можно изменить используемый блокчейн?
@@АдаСимонова-ж5щ Опцией --network Там можно прописать любое значение, настроенное ранее hardhat.org/tutorial/deploying-to-a-live-network.html
Почему ве используете именно Ethers, а не web3?
Более современное решение, скажем так. Мне нравится больше, чем web3. Но в целом можно и то, и то использовать
Пожалуйста, добавьте в видео информацию о том, что для получения возвращаемого значения функции в рамках теста необходим модификатор view-в противном же случае будет возвращена транзакция. Я на этом ОЧЕНЬ больно споткнулся
Да про это в общем-то говорилось уже ранее
Добрый день! В первую очередь спасибо большое за ту информацию, которую вы даете! Очень интересно, уникально и , естественно дико полезно. По этому уроку появился вопрос : после повторного compile, когда компилируется один файл, папка artifacts становится пустой. В чем может быть ошибка?
Не встречал такого (точнее были похожие вопросы, но там вообще ничего не компилировалось). Можно попробовать для начала обновить все зависимости через npm update
@@IlyaBodrovKrukowski к сожалению, не помогло. Могу отметить, что у вас при компилировании отображается версия 0.8.4, хотя прописана 0.8.0. У меня версию не отображает совсем, скорее всего дело в solidity непосредственно. Но вариантов фикса пока не нашел
@@pashqa272 Должно всё компилироваться, настройки компилятора делаются в hardhat.config.js. У меня стоит в файле .sol "любая версия 0.8.x", а в конфиге - соответственно, 0.8.4. Попробуйте посрашивать в нашем чате, обычно народ помогает
hardhat может компилировать один конкретный контракт? Можем мы задать путь по нужного файла?
По умолчанию нет, тк compile работает со всем проектом сразу. Разве что писать какой-то свой таск, но я, честно говоря, именно такое не пробовал
@@IlyaBodrovKrukowski Спасибо.
Если использовать ide remix - то там можно конкретно один контракт деплоить.
@@pphotic подождите, но деплоить != компилировать Деплой в HH, конечно, происходит не всех контрактов сразу, а только тех, что указаны в скриптах или тестах. А вот компиляция - всех сразу, но в общем это обычно не проблема
Спасибо за видео! Подскажите, пожалуйста , после установки hart had , написан я контракта и теста при запуске в терминале в папке с проектом npx hardhat test ничего не происходит, после выполнения Команды пишет «0 passing”, в чем может быть проблема?
Может быть, файлов тестов назвали не так?.. там правильное имя должно быть, по типу как я в видео показываю
@@IlyaBodrovKrukowski у меня та же ошибка, все файлы назвал верно
D:\HZ\урок 5>npx hardhat test
npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.
0 passing (3ms)
какой классный контент, все с нуля, мой любимик traversy media он тоже с нуля все делает, но по солидити к сожалению нету у него ((( так что этот курс просто находка, дружище я еще не посмотрел все полностью не знаю что там будет, но я тебе советую сделать полноценный курс, с фронтом бэком и этими контрактами что бы люди видели конченый результат продукта который нужен на реальной работе
Это бесплатная версия. Куда более объёмную версию можно найти на сайте MCS. Но и фронт-энд здесь тоже есть, в последних уроках (Next.js)
@@IlyaBodrovKrukowski что это за сайт MCS?
@@Palianycia это школа программирования, где я работаю
какая у тебя программа для cmd?
ConEmu
привет, можно ли все это добро развернуть в docker?
Привет, естественно
после установки HardHat через консоль нет варианта Create a basic sample project (сейчас версия HardHat 2.12.5, а в вашем видео 2.8.4 - может в новой версии урезали функционал?)
Нет, конечно, просто они процесс создания упростили. Там всё то же самое.
@@IlyaBodrovKrukowski А выбирать то теперь какой вариант если не basic sample project?
@@karliam_v Ну basic, если вам нужен JS. Если TS, там отдельная опция
До этого всё-всё было понятно, тут ничего вообще не понятно. Что посоветуете почитать, что бы разобраться, что вы писали в коде?)))
Ну, тут просто нужно JS знать, если честно. Ну, можно ещё примеры прямо на сайте Chai посмотреть, там есть разные сценарии и показано, как тестировать
@@IlyaBodrovKrukowski можно ли научится писать смарт-контракты не зная JS?
@@arsen1usRS Да. Тестировать - маловероятно
ничего не получается.Как проверить установились ли нужные библиотеки ethers,web,chay,mocha во время установки hardhat ?
Ну, если тесты проходят, то установилось. На самом деле, теперь там достаточно поставить только hardhat-toolbox, он в себя всё нужное включает. Когда вы сделали проект HH, он должен предложить сам правильную команду для установки. Если не получается, напишите в наш чат
есть ли такие же библиотеки, но под python?
Да, называется brownie
изучаешь python?
@@Bekcoin да
@@rucat284 давно?
Зачем в 31 строке - .to.changeEtherBalances([accaunt2, payments], [-sum, sum]) точка с запятой? Будут уроки по брауни?
Точка с запятой? Не знаю, может затесалась случайно, не помню уже. По брауни - может быть
@@IlyaBodrovKrukowski Спасибо за ответ. Не могу получить информацию по второму платежу. Создаю третий аккаунт, шлю wei с него на контракт, средства до контракта доходят и баланс контракта становится равным 200, но данные по платежу получить не могу. Запрашиваю по аналогии - const newPayment2 = await payments.getPayment(accaunt3.address, 1). В консоли при запросе логов получаю нули и пустые строки. В чем беда?
@@Receive_ Так сложно сказать, лучше в чате спросить и скинуть сразу кусок кода
Если у кого-то будет ошибка invalid chai property: changeetherbalances в третьем тесте для await expect(tx).to.changeEtherBalances([acc2, payments], [-100, 100]); просто напишите npm outdate и обновите версии библиотек в package.json, затем npm install и тест отработает :)
Да, такое может быть, если старые версии стоят
Правильно ли я понимаю, что команды `npm init` и `npm install --save-dev hardhat` нужно вводить при создании каждого конейнера так же как и `npx hardhat`?
Я думаю, что вам стоит почитать подробнее про проекты npm, чтобы закрепить изученное - это несложно, но довольно важно. Но в целом да - каждый новый проект подразумевает запуск npm init. Потом туда забрасываются нужные библиотеки через npm install. В одном проекте может быть множество контрактов и тестов
@@IlyaBodrovKrukowski Хорошо. Спасибо
@@IlyaBodrovKrukowski Просто страно видеть, что для каждого проекта мне нужно отдельно подкачивать все библиотеки, которые нужны в проекте через npm install
@@КириллКузнецов-е9о Это так работает абсолютно для любого проекта npm, а также для немалого количества проектов на других языках: хотя бы Ruby или Elixir. Каждый проект - вещь в себе, которая не зависит от глобально установленных библиотек (в идеале). Мы даём проекту имя, ставим нужные зависимости и делаем там, что хотим. В другом проекте могут быть совершенно другие зависимости с другими версиями и они никак не конфликтуют
@@IlyaBodrovKrukowski Хорошо, буду знать) Спасибо
Здравствуйте, а как изменить папку куда все с хардхета кидается?
Папку - какую именно? Там ведь много разного есть. Что-то можно в конфиге менять, видимо, а если мы говорим о typechain файлах для frontend, то как-то так
npx typechain --out-dir front/src/typechain --target ethers-v5 "artifacts/contracts/**/*[!dbg].json"
@@IlyaBodrovKrukowski У меня просто в conemu стоит папка Users и в visual studio через нее нужно заходить, чтобы видеть все тесты, скрипты и т.д, хотелось бы отдельную папку для этого сделать и чтобы в conemu от ее имени писать
@@ОстапБобрис-г1п Надо просто сделать команду cd в нужную директорию в терминале learn.microsoft.com/en-us/windows-server/administration/windows-commands/cd
В духе cd c:\projects\my_project
Илья, спасибо за урок! Подскажите, какую операционную систему Вы используете? У меня Windows. Думаю Ubuntu поставить для программирования. Выполнял команды как в видео, возникли ошибки, не помню какие. Решил попробовать повторно, всё заработало. Вы говорили в видео что могут быть проблемы с установкой...
Windows 10. Но за мной лучше не повторять в этом плане, просто я знаю эту ОС очень хорошо - раньше по ней вёл занятия. А вообще nix-системы поудобнее будут. Проблемы на винде могут быть с node-gyp, это да. Там если не иметь опыта, то можно конкретно застрять, но, боюсь, других вариантов тут нет просто
можно на win использовать подсистему wsl, почти убунта только внутри винды, а так да, убунта самая удобная
Доброго времени суток, на протяжение недели пытаюсь установить hardhat но всё безуспешно, можно как-то подробнее сделать видео о том, как с ним работать?
Как запустить его и смарт контракты в нём, просто не в ремих, нигде ничего не появилось
@@elsancho4356 Ну там вроде всё просто должно быть. Если проблемы какие-то, можно в наш чат написать (ссылка в описании). Просто я даже не знаю, что показывать в видео - он ведь одной командой ставится
Когда запсутил тест то выскочила ошибка:"TypeError: payments.deployed is not a function"
А вы ссылку в закрепе посмотрите ruclips.net/video/GD6fz56-cEQ/видео.html
Спасибо за полезные видео! Что ты думаешь по поводу изучения Rust?
Я думаю, что это классика, это знать нужно. Вообще-то я очень надеюсь, что рано или поздно сделаю уроки по этой теме, пока просто руки не доходят. Серьёзно, если есть возможность - учите Rust
@@IlyaBodrovKrukowski Он имеет отношение к работе со смарт-контрактами?
@@Nevybralnick Да, если вы хотите разрабатывать для Solana
@@IlyaBodrovKrukowski а востребованней сейчас разработчики на эфире?
@@Nevybralnick Да, хотя во многих случаях требуется какой-никакой опыт, скажем так. Но с уровнем миддл найти работу не просто, а очень просто
А что значит "Корректный адрес смарт контракта"? Мне не понятно как он может быть не корректным..
Может состоять не из 20 байт
Это видео интересное, но при этом почему-то слишком много ошибок на квадратный метр. Error: Invalid Chai property: changeEtherBalances. Did you mean "changeEtherBalance"?
Сначала была ошибка с changeEtherBalance
, нашёл в инете решение и там было сказано, что нужно дописать 2 строки в файл waffle-chai.js. Но потом появилась эта ошибка и решения пока что не смог найти. Помогите пожалуйста)
Всё должно работать. changeEtherBalances - это matcher из waffle. Возможно, не подрублен сам waffle. В принципе, с такими ошибками лучше к нам в чат обратиться, ссылка есть в описании
Вы в итоге разобрались с ошибкой? у меня сейчас такая же, а решений всё ещё нигде нет :(
@@vvv35724 Таких ошибок быть не должно. Можно поспрашивать в чате нашем, только исходный код потребуется
Если у кого-то возникает ошибка на await ethers.getSigners();
- Cannot read properties of undefined (reading 'JsonRpcProvider')
Попробуйте использовать "ethers": "5.7.2",
Вафли зефир моча чай)) лол
Илья, не могу разобраться в чем проблема... Есть функция
function pay(address payable _to, uint _amount) external payable {
_to.transfer(_amount);
}
Пишу тест
it("contract receive ether", async function(){
const tx = await ico.connect(acc1).pay(ico.address, { value : 100})
})
Ошибка Error: invalid BigNumber value (argument="value", value={"value":100}, code=INVALID_ARGUMENT, version=bignumber/5.6.2)
Я уже как только не пробовал значение менять... В чем может быть проблема?
Там 2 аргумента: ещё amount, а у вас выходит, что вы передаёте 1 аргумент и просто деньги
@@IlyaBodrovKrukowski Спасибо за ответ! Но появилась новая проблема.. Error: Transaction reverted: contract call run out of gas and made the transaction revert
JS
it("contract receive ether", async function(){
const tx = await ico.connect(acc1).pay(ico.address, { value : 100})
await tx.wait()
})
solidity
function pay(address payable _to) external payable {
_to.transfer(msg.value);
}
При этом я проверяю баланс аккаунта-отправителя и там BigNumber { value: "9999991720038881217780" }
@@IlyaBodrovKrukowski При этом я успешно отправил транзакцию с одного адреса на другой, но появляется ошибка если отправлять на адрес смарт контракта
@@IlyaBodrovKrukowski В общем... магия какая-то.. Я выяснил, что проблема заключалась в том, что в receive() я изменял кое какие данные в блокчейне, из-за этого не хватало газа (ведь на контракте изначально 0). Я удалил всё из receive() и оставил чистой функцию. Всё сработало. При этом я развернул такой же контракт в Remix, где receive() уже изменяет данные в блокчейне. И я спокойно отправлял на нее эфир, никаких ошибок. Тоже самое в Rinkeby testnet. Всё работает, только в hardhat не работает.. И как после этого тестировать..
@@IlyaBodrovKrukowski Илья, если будет возможность, помогите пожалуйста.. Я уже не знаю что делать. Я даже попытался сделать вот такую строчку
const tx = await ico.connect(acc1).pay(ico.address, { value : 1000, gasLimit: 40000000 })
Но выдает ошибку
InvalidInputError: Transaction gas limit is 40000000 and exceeds block gas limit of 30000000
Если вставить число меньше, то выдается старая ошибка, мол газа не хватило..
!
Обратите внимание, что сегодня выйдет обновлённый урок про тесты
Error HH12: Trying to use a non-local installation of Hardhat, which is not supported.
Please install Hardhat locally using npm or Yarn, and try again.
Такая ошибка, попытался удалить и заново установить, как рекомендует сама консоль, но не помогает. В чём может быть проблема?
stackoverflow.com/questions/69959650/error-hh12-trying-to-use-a-non-local-installation-of-hardhat-which-is-not-supp
hardhat.org/errors/#HH606= - как-то так
@@IlyaBodrovKrukowski Да, я как раз и делал по инструкции на stackoverflow, но у меня почему-то всё ещё пишет эту ошибку. Полностью удалил своей проект, удалил все файлы, которые качались с помощью npm install и заново всё поставил. Но ошибка всё ещё осталась, не знаю если честно в чём проблема, потому что в интернете только говорят удалить и установить снова...
@@игорьговтвян-я5ж Удалить нужно также node_modules и package.json не только в самом проекте, но и в родительских папках, если они там есть. Честно говоря, что тут ещё подсказать - даже не знаю
@@IlyaBodrovKrukowski Честно сказать не знаю, какой из методов помог, но проблема решилась. Благодарю за ваш быстрый ответ и спасибо за эти видео)
@@игорьговтвян-я5ж Отлично
так, на 5 уроке уже тяжко..
Пока тесты можно пропустить, в принципе
Классные уроки. Но есть пара вещей, которые режут слух. Это "Яваскрипт" Х-D, и то, что await для того, что выполняется не мгновенно. Правильно будет говорить асинхронно, это не совсем о времени выполнения
А что плохого в слове "Яваскрипт"? Этот язык был назван по образу Java (там долгая история, но в целом это было сделано с маркетинговыми целями), который, в свою очередь, назван по сорту кофе coffeefan.info/kofe-java-arabika.html Что касается await - нам нужно в данном случае ждать, пока пройдёт транзакция. Иначе там будет возвращён promise и мы не сможем проверить корректность выполнение. Короче, вы меня простите, я несколько на взводе из-за происходящих сейчас событий, которые частично коснулись и меня, но в общем и целом это придирки.
Я согласен, что дело в общем и целом не во времени выполнения, но чтобы зрителю было понятнее, я говорю, что обработка транзакции делается довольно долго. И да, нужно её дождаться. Время выполнения важно с той точки зрения, что если бы всё выполнялось мгновенно, то нам вообще был бы не нужен никакой promise. А так все эти отправки функций всегда возвращают promise именно из-за длительности этой операции. В общем, спасибо за комментарий, это в любом случае полезно
зачем политику приплетать? на Донбасе с 2014г. военные действия, все молчали, что началось то? а за уроки спасибо!
Я не буду отвечать на этот вопрос. Кто такие "все" - я не знаю, но обо мне вы не знаете ничего, включая и то, молчал я или нет. Давайте не будем развивать эту тему.
@@IlyaBodrovKrukowski извините если задел чем то, но я в общем
@@maksym8808 Ничего, всё ок
Здравствуйте!
Я впервые написал тесты для своего контракта благодаря вам, спасибо большое!
Сейчас я пишу таски через web3.js для взаимодействия с контрактом через hardhat, не могу понять как с этой библиотекой работать.
У меня вопрос: Если писать таски с помощью того же ethers, то перед каждым выполнением таска нужно каждый раз деплоить контракт как в тестах (beforeEach)?
И в принципе будут ли большие отличия tasks.js от tests.js если оба просто вызывают функции из контракта, только второй сравнивает результат с ожидаемым?
Ethers.js мне кажется получше, чем web3. Деплой делать нужно вообще один раз, если это не тесты. Это просто в тестах нам всегда нужен свежий контракт, а в реальном блокчейне - конечно, нет. 1 раз развернули контракт и с ним работаем
Что за метод сurrentBalance? В моем случае у deployed контракта нет такого метода и баланс контракта узнаю через provider.getBalance(contract.address). И упоминаний метода currentBalance нигде не вижу в документациях.
А мы же добавили эту функцию в контракт github.com/bodrovis-learning/Solidity-YT-Series/commit/e03c969299449ae6cbc1824f40dfa07f2f8d7de3#diff-7cff68d828791d88522eb91f7751fe53e4a0cff32859ef5a7a166a7dabe1d360R20 Конечно, изначально метода такого нет, но благодаря функции можно вызывать без пролем
@@IlyaBodrovKrukowski действительно, забыл про это. Благодарю.
Здравствуйте!
Выдает эту ошибку, не получается решить ее
1) Payments
"before each" hook for "should":
TypeError: no matching function (argument="key", value="deployed", code=INVALID_ARGUMENT, version=6.6.0)
at makeError (node_modules\ethers\src.ts\utils\errors.ts:670:21)
at assert (node_modules\ethers\src.ts\utils\errors.ts:694:25)
at assertArgument (node_modules\ethers\src.ts\utils\errors.ts:706:5)
Попробуйте, пожалуйста, в наш чат написать с этим вопросом
@@IlyaBodrovKrukowski Спасибо вам большое за очень быстрый ответ!!!
@@IlyaBodrovKrukowski Я искренне прошу прощения, за вопрос
Возможно это покажется наглым, но у уже почти восемь часов пытаюсь решить проблему в коде из 5-го видео, в чатике ребята не смогли помочь, использовал чат GPT, но и он не смог мне помочь с ошибкой этой
Если у вас получится уделить мне некоторое время, глянуть мой код и помочь с данной ошибкой, я буду вам очень благодарен
Я очень хочу дальше изучать курс, но сильно застопорился на этой ошибке
@@andreymarkich1532 Хорошо, в описании канала есть почта, пришлите мне весь проект и шаги, чтобы эту ошибку воспроизвести. Постараюсь глянуть
@@IlyaBodrovKrukowski Спасибо Вам огромное, что согласились, вы очень отзывчивый человек
Я вам все отправил
При запуске первого теста была ошибка следующая:
"before each" hook for "should be deployed":
TypeError: no matching function (argument="key", value="deployed", code=INVALID_ARGUMENT, version=6.6.2)
Она возникает из-за того что версия hardhat обновилась, решается так:
Вместо кода в BeforeEach из урока можно вставить такой код:
beforeEach(async function() {
[acc1,acc2] = await ethers.getSigners()
const Payments = await ethers.getContractFactory("Payments",acc1)
payments = await ethers.deployContract("Payments")
const contractAddress = await payments.getAddress()
console.log(contractAddress)
})
В закреплённом комментарии есть ссылка на faq, который описывает, в том числе, и эту проблему bodrovis.tech/en/categories/solidityethereum/posts/faq-po-kursu-solidity Решается она несколько иначе, советую почитать (там ничего сложного)
вот такая ошибка выходит в терминале , как можно ее решить?
An unexpected error occurred:
C:\Users\filal\sol\test\Payments.js:6
const acc1
^^^^
SyntaxError: Missing initializer in const declaration
at Object.compileFunction (node:vm:352:18)
at wrapSafe (node:internal/modules/cjs/loader:1031:15)
at Module._compile (node:internal/modules/cjs/loader:1065:27)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at C:\Users\filal\sol
ode_modules\mocha\lib\mocha.js:349:36
at Array.forEach ()
Поставьте let а не const во всех случаях
@@IlyaBodrovKrukowski я дописал помимо трех let "const Payments" только после этого заработало, но при тесте чтоб узнать адрес кошелька он не выводится как быть в этом случае
Payments
√ should be deployed
1 passing (662ms)
адрес не вышел
@@renichigava4183 А вы точно до конца видео досмотрели и код как в финальной версии? Я там просто посреди видео как раз кое-что исправил ещё
@@IlyaBodrovKrukowski should be possible to send funds:
Error: Invalid Chai property: changeEtherBalance
should be possible to send funds:
TypeError: tx.wait is not a function
@@renichigava4183 А вы waffle точно подключили? Или может версии старые? Тк это должно работать 100%, я это показывал уже на 2 стримах и вот в видео
Ошибка в строке:
expect(payments.address).to.be.properAddress
Текст ошибки:
AssertionError: Expected "undefined" to be a proper address
Решение:
исправить строку на:
expect(payments.runner.address).to.be.properAddress
Обратите внимание, что этот урок устарел, обновлённый вот тут ruclips.net/video/GD6fz56-cEQ/видео.html