{"id":"ijs691mlEfk","title":"Тестирование и миграция смарт-контрактов (Курс Rust на NEAR)","description":"Все видео курса    • Курс Rust на NEAR (RU)  \nСовместный курс NEAR & 4ire Labs\n\nСлайды четвертого урока https://docs.google.com/presentation/...\nNEAR REST API server https://github.com/near-examples/near...\nПримеры тестов https://github.com/zavodil/tipbot/blo...\n\nFollow the latest from NEAR Protocol on:\nWebsite: https://near.org/\nDiscord: https://near.chat/\nBlog: https://near.org/blog/\nTwitter:   / nearprotocol  \nGitHub: https://github.com/near  https://github.com/nearprotocol\n#Blockchain #FutureIsNEAR #NEAR #nearprotocol #rust #wasm #assemblyscript #раст","channel_name":"NEAR Protocol","published_at":"2021-08-21T00:00:00.000Z","thumbnail_url":"https://img.youtube.com/vi/ijs691mlEfk/hqdefault.jpg","transcript_text":"всем привет друзья меня зовут вадим ильин сегодня мы продолжаем наш курс по изучению программирования на языке раст для блокчейна мир мы с вами на трех уроках уже делали приложение на через того что в принципе изучали на первом уроке что можно сделать на блокчейне зачем это делать какие там возможности и добились что мы коротко за пять минут уже запустили наше первое приложение на втором уроке мы разбирали более подробно как работать с ю а м как делать кита front-end и приложения вызывать конкретные методы отправлять деньги разобрались с аккаунтами и прочим таким вроде структур данных на третьем уроке мы разбирали уже более глубоко все предыдущие подробностях скажем что что касается выгрузки контрактов более подробно то что касается например использование переменных окружения и дошли до того состоянии что мы уже сами можем теперь писать код я надеюсь что вы в состоянии это делать но перед тем как комфортно себя чувствовать конечно хочется писать тесты и понимать как контракт нужно будет обновлять в случае если вы будете выпускать новую версию вашего приложения старая версия должна при этом сохранять все свои предыдущие состояния скажем баланс и юзеров и какие-то вещи должны работать бесшумно относительно прошлых версий это всего будем разбирать сегодня тема очень большая важное начнём с тестирования разберем всевозможные разные способы тестирования блокчейна и в конце поговорим про обновлению но для начала давайте в целом поговорим про тестирование конечно этого такое общее место и все всегда призывают писать тесты и по моему большинство людей все-таки эти тесты практически и никогда я не пишет за исключением только если начальник очень жестко за это требует как правило многие люди на это клюют потому что ну как бы это такая лишняя работа которая не очень понятно окупится ли обще в принципе и начальники не всегда дают такие задания хотя этот курс у нас все-таки для новичков но мы обязательно рассматриваем целый урок тестирования потому что в блокчейне и тестирование это жизненно важный жизнь важная составляющая и без тестирование контракта в принципе вообще программе как таковое здесь невозможно я поясню на примере допустим вы делаете какой-то код и вы в целом написали какую-то логику прошли какой то весь процесс весь сценарий пока описали код и делали для него frontend но потом для при малейшем изменении вам придется в процессе еще разработки по сути опять все прощал кивать заново да потому что любая даже маленькая оплошность там к эта ошибка например если условно минус на плюс нечайно заменили или кто-нибудь строчку кода закомментировали вам далеко не всегда раз про это скажешь под такую ошибку как он скажет что если вы там типы типа неправильный переводите ли где-то нельзя возвращаете значения во всех ветках кода мы скажем если вы возьмете и какую-нибудь строчку случайность за комментируете то от этого может по сути полностью умереть ваше приложение потому что злоумышленник или даже просто как у любой пользователь который случайно обнаружить какую-то уязвимость exploit называемый он может им воспользоваться многократно скажем вывести в сиденье с вашего контракта по сути ограбили всех пользователей и пользователи эти закономерно придут с проблемами к вам потому что ну а кто виноват в как бы вас если будет известный автор приложение пользователю придут к нему скорее всего за возмещением и возможно даже напишут какие-то там жалобы в соответствующие органы и тут по сути чтобы этого не допустить есть два выхода либо не обновлять приложение оставить его в таком стояние котором она была этапа самом деле очень плохой путь потому что ну гораздо лучше иметь приложений в том в виде которые может быть легко изменено соответствует с рыночными условиями второй путь это писать тесты тесты писатель на блокчейне сложно это в принципе довольно тривиальная задача она даже где-то упрощает вам понимание того что вы на самом деле делать например где то вы запускает тесты можете понять что какие-то методы при можно объединить два метода в один потому что вы всегда и запускаете вместе что-то подобное вы сможете обнаружить в процессе написания тестов но и самое главное конечно вы будете совершенно не боясь и не не переживая будет спокойно спать ночами и сможете легко делать обновление кода в меру вас скажем не знаю в приложении 20 разных методов вы дописали 21 вы дописали тесты на 21 метод и вы полностью вируса все работать там что все остальные между вас справа показывает что вас нет там двойной траты до называем добыл стенд шкафчик не может лишь не вывести все баланс и правильно считаются все там цифры переходят и все у вас хорошо соответственно люди смогут больше у вас функции простить вы будете обновлять приложение оно будет развиваться развиваться и развиваться и по сути все что от этого останавливает это просто написание своевременные тестов очень по днепру со тестов и конечно бог честь programmer не тесты очень важны надеюсь этот пункт уже мы обсудили и все вы будете писать без тесты в будущем хотя бы какие-то базовые вещи как только продолжение выходит уже примерно нет конечно надо покрыть себя почти все состояния и подумать ещё об избыточности примерно сил пишете тест скажем на депозит то вы должны проверить а что будет если этот депозит пример делать два раза подряд друга просто перезаписывать и состояния а не используйте не прибавляется и начальное состояние к предыдущей депозита это можно сделать только несколько итераций проверить как на самом деле несколько раз изменяется состояние либо например если вы имитируете админские методы надо проверять и что будет если вы запустите их обычным юзерам они админом вдруг что-то вы где-то и попортить икоты эта проверка не будет срабатывать в общем надо не просто делать пролога приятный сценарий всегда еще писать и неблагоприятный сценарий можно заполнить стать вашего контракта нам огромным количеством данных проверить как они будут работать там оставить на ночь например знаете чтобы скрепить молотил какие-то данные и посмотреть как все это работает в общем сегодня мы с вами поговорим основной сценарий примерно будет выглядеть так я взял эту картинку из инструкции а то я оставлю ссылку описание очень большой подробный текст про то как работает тесты на обучение мир для языка раз посмотрим на эту картинку давайте значит в начале мы берем какуе-то код но проще он сейчас примеров да ты так запасочка не точка орг или нет . дев мы берем готовое приложение и начинаем менять о постепенно например мы можем изменить smart attracts переименовать его и называть новые методы потом мы можем изменить frontend исходя из того что мы сделали летом в делать вывод этих данных которые мы добавили и прочее прочее адам и изменить функционал мы дописываем тесты мы пишем какие-то коды которые нас проверяются то что мы написали наш функциональность и проверяют какие-то промежуточные результаты с образован результатами скажем если мы отправили на депозит 1 токен а там и до этого депозита берем баланс аккаунт и смотрим его потом отправляем 1 . и смотрим следующий баланс изменился лена один если изменился на один все правильно сонета будет какой-то паника и мы сможем понять что у нас что-то работает не правильно после этого мы запускаем тесты используются совсем улиц симуляционной контекст тут есть разные подходы мы про чуть позже поговорим и вот это по сути с 2 по 4 шагов если нарисована стрелочка выправилось проходим много-много раз мы написали функционал протестировали абсолютном протестировали какого-то момента моего пишем пишем пишем какой-то момент когда мы уже считаем что все можно отправлять в большое плавание наше приложение мы его уже строим делаем озон файл отправляемого блокчейн и смотрим в блокчейне и как у нас работает приложение потому что если мы перезаписывать существующий уже контракт там не исключена ситуация когда наша на состояние state перестанет читаться потому что будет перезаписан с неправильным со структурой даты с новой структурой и старый структура будет как бы испорчены мы это будем говорить про миграцию контракта если же у нас испорченную структура мы работаем в теснить это нет ничего проще вы просто делаем новый аккаунт в случае если мы используем утилиту командующие явно не ртв диплом то мы запишем на минус f это создает новый аккаунт и отправляет наш контракт соответственно мы на чистом аккаунт можно проверять как она что работает вот эти методы по тестирование видите здесь будут спать довольно часто и тест который вы напишете в начале сэкономит вам кучу времени он многократно в будущем потому что вы можете запустить его там сотни раз в процессе использования каких-то новых функциональных возможностей быть спокойным что какие-то базы и вещего всегда контрольно под контролем работают в предсказуемом предсказуемым образом мы разберем три типа тестов юнит-тесты симуляционные тесты и сквозные test and in test unit тесты еще называют модульными тестами они покрывают своими тестирования какие-то конкретные методы смарт-контракты если вы откроете тот пример который мы используем много gras наш этот раз каунтер это счетчик на обучение каждый раз когда нажимай кнопочку прибавляется добавляется единичка и мы видим наше значению мы можем понять кто когда нажимал и сколько в доке разными кликнули этот плюс соответственно если мы посмотрим внизу этого контракта там увидим вот с таким макросом конфигурационный тест да мы видим что здесь есть тесты здесь используется ведь тестировать тестировать тестировать на январь окружение для тестирования и мы все что здесь выполняем и выполняем так называемую виртуальном контексте то есть у нас есть специальные функции которые нас это контекст создает можете искать разные вещи в данном случае вот видим указаны только процессор то есть мы создаем котекс и мы указываем что нашего подписывающим юзерам будет в данном случае аккаунт flyer соответственно если вдруг нам нужны другие тесты то мы можем здесь посмотреть на мы можем указать разные вещи в контексте скажем пока текущей аккаунт до что они с польскую мы использовали старриджа и прочие сколько мы использовали газа то есть какие-то вещи котором можно нужно протестировать это нетривиальные вещи наверное вам на таком базам уровне здесь возможно это не не заполнять если вы не хотите но если вам нужно вы можете указать в целом более продвинутых тестах это делается через симуляции и вам не нужно вручную все указывать но здесь видите можно указывать там и все вплоть до по байта в последовательности для подписи на публичный код подписью значит вот мы с вами здесь в создаем какой-то контекст и дальше в нем выполняем тест и если вот взять какой-то тест который у нас ведь опять же описывается через диез тест и функцией климент это тест для функции прибавления единицы инкремента мы здесь указываем что мы создаём некий контекст для данного аккаунта который будет у нас подписывающим аккаунт то есть мы сможем заполучить любую ерунду потому что это не идет в блокчейне это просто работает на нашей библиотеке хоть этот важный момент получается ссылкам и каждый раз пишем по сути библиотеки мы не пишем исполняемые файлы нас там ни точки входа можно просто создать контекст и дергать из наших братики любые методы которые нам хочется и проверять как изменился наш наше приложение наш контракт дальше мы создаем для нашего контекста эмуляцию от этого окружения для тестирования создаем контракт из того кода который мы выше написали довольно эта структура здесь создает в нашей эмуляции мы ее здесь видите в конструкторе указать течение которого нам нужны вот здесь в илью 0 тыс если мы допишем здесь какое-то новые переменные в состоянии нашего контракта так много писали вспомните users мы добавляли сюда то она будет еще и теста переписать добавлять там при инициализации еще и новые элементы дальше мы выполняем внутри нашего контракта метод который лишь указал конкретно этот клиент здесь выполнится этот метод который мы писали в контракте мы будем выполнять через тест мы выполняем его метод и мы проверяем является ли теперь значение нам но этого номера 1 да потому что по умолчанию оному задали как 0 аналогично то же самое для декремента есть видите мы создаем с нулем проверяем и проверяем является ли у нас минус один значение и то же самое для ресета мы прибавляем потом сбрасываем проверяем является она у нас в нём то есть acer тыкал проверяется эти значения чтобы зайти в эти тесты у нас есть два пути то есть мы должны из корневой папки перейти в папку контракты среди контракт и там запустить карга тест сейчас это делать через гид под потому что конкретно сейчас есть какие-то проблемы с процессором снова версии mac os о роста это я думаю скоро будет поправлено и в принципе симуляционные cs который и выполнять проблему не всем вообще нужны то есть просто я это делаю сейчас через браузер но вы можете сделать это через свой компьютер тоже эти тесты работают и на mac os конкретно эти тест и так ведь у нас все три тест сработали сейчас и далее ok потому что ну собственно наш код работает правильно если мы сейчас не примем изменением как-то функцию и будем проверять ни с чем чем нужно например давайте попробуем что мы будем проверять ну например мы какую-нибудь ерунду проверим чтобы увидеть что у нас будет ошибка да вот я сейчас например шум 10 место 1 мы проверяем что у нас при запуске прибавлять прибавления от единички будет ли 10 или нет очевидно на должно быть не десять здесь очень важный момент ведь мы всегда вначале сдаем 0 то есть мы не знаем что в этом контракте есть сейчас то есть дам ответе закономерно наш упал тест на инкремент потому что наша единичка не может быть равно десятки так вот вы можете проверять свои контракты то есть если например я могу также сделать пример который мы с которой мы начинали если мы будем прибавлять не один опять то автоматически наши давайте убавлять тоже буду 5 то автоматически наши тесты тоже перестанут работа потому что у нас логика работает из другого теста работы по другому так вот что я начинал значит мы здесь не за не владеем контекстом контракта то есть мы не знаем что там есть мы создаем его в вакууме до полностью в окружении который ничего не знает про то что она сейчас есть ответственно мы не можем на реальных данных проверять наш контракт это является таким больше bensons данного типа тестов они могут позволить просто пробежаться диск просто вот как бы очень так поверхностно потому как работа отдельный метод но они не могут погрузиться и проверить какие то более глубинные перехода внутри состояния контрактов и даже извините у нас тоже 1 ошибка должно было быть 15 тут ошибка но и прочее короче ошибки у нас срабатывают тесты тесты не проходят что нам теперь еще может потребоваться давайте посмотрим мы работаем значит в виртуальном контекст и запускаем мы я вам показал как через скорби тест вы можете также запускать его не заходя в эту папку вы можете запускать эти же самые тесты через yarn тест это специальная стали метод в файле пикать джейсон которые запускают те же самый тест вот получается одной строкой он создает опере перестраивать контракт и запускает тест карга который в свою очередь первым запускает карга теста 2 запускает guest то есть здесь еще симуляционные тесты симуляционные тесты вот как раз они на одной версии mac os не работают там по какой-то накатили библиотека из них ранее не поддерживает обновления через роста извиняюсь не из мира вот и соответственно если мы запускаем этот самый ярый тест у нас запускаются два типа тестов и мы можем также увидеть что у нас обычные тесты не прошли и потом про запускается симуляционные теста давайте я исправлю наши основные то есть чтобы у нас они проходили все исправлю как было и заново запишу сейчас ярно тест то есть у нас здесь видите запускается помимо обычных тестов который только что он делал еще вот эти sim тесты они находятся нас папки тест sim файл main rs конкретно в этом примере и они уже работы несколько иначе ведь они работают дольше здесь есть уже состоянии контракт используется то есть если мы посмотрим как это работает симуляционные тесты они ведь уже запускают какие-то более сложные методы они занимают время они просто памяти срабатывать они срабатывают уже в неком окружении в этом контексте здесь можно запускать более сложные тесты которые например будут касаться разных контрактов мы можем использовать кросс контракт на взаимодействия загружать несколько контрактов мы можем смотреть как меняется состояние в этих контрактах можем подгружать стальные контракта можем учитывать к потраченный газ они используют не рсд кейси вот мы обычно используем не не раз так дикие то есть не раз детей сим еще соответственно видеть как это все здесь загружается в симуляции simulate симуляционных тестах мы здесь вначале подгружаем бинарный файл нашего контракта который мы его собственно компилировали мы грузим расстояние прямо в память вот через набор байтов мы его инициализируем и потом на этом жилом контракте мы вызываем какие-то методы вот смотрите наш метод который мы simul симуляции инкремента мы здесь соответственно создаем этот контракт инициализируем его мы берем текущее значение из него прямо читаем из памяти какое значение у этого метода get намбер потом мы выводим его соответственно потом мы делаем это дам кол вызов функций клемент проверяем прошла ли она до не упал ли сам метод дальше берем новое значение и сверяем изменилось ли она на единицу то есть такой достаточно простой синтаксис роста мы уже проверять непосредственно на таком более низком уровне непосредственно дергай метода готового контракт который вас виде бинарного файла находится дальше мы делаем это еще раз или там делает еще другие вещи можем уже посмотреть то есть преимущество здесь в том что мы можем смотреть как у на старайтесь газ как у нас меняет состояние привести вдруг он сколько происходит при пополнении допустимы ли они знают по газа вываливается марта здесь можем отловить и понять что она действительно какой-то метод не сработал примет вылетел да то есть он не вот мне возвращает успех например этот это более продвинутыми этот мед механика тестированием она на нас тем не менее видите все равно не выполняет транзакции в живом блокчейне и да она позволяет делать более сложные вещи чем вот эти простые unit тесты и работать с разными контрактами погружая их вот например вы можете здесь наряду с нашим контрактом подгрузить еще один контракт и для него тоже запускать все что нам потребуется просто здесь указывать мы будем разный последователи байтов принесли зации контракта но если например мы хотим посмотреть как мы отправляем какой-то реальный токен скажем talkin' мир и посмотреть потом изменился наш баланс поставок номер один такин прислали назад здесь уже это не сможем потому что нам надо брать ни в симуляция это в живом каком состоянии и если вы хотите делать какое-то прямо такое более мне кажется продвинутые тестирование более приближенный к реальности то фирмы точнее до то для нам здесь может помочь сети или тестирование этого так называемые and test они используют just этот фрейм на ней ранен описывать помощью guest этом мэр можно спать по разному довольно популярный фреймворк для тестирования на языке java script он работает с разными типами языков и соответственно вот по-моему на бабу нам нам побили 0 там где угодно можно подключить его через в этих универ опять же с и уже запускается как бы в живом окружении то что одна то что мы хотим проверять то есть мы можем прям отправлять реальные транзакции в то снег и смотреть как они срабатывают используя вызывать говорите кемер опять же тут является преимуществом то что мы как бы в своей стороны менее зависим от каких-то богов той библиотеке симуляции которые написаны то потому что выпустим если предположить что к это вскроется баг в этой симуляции который мы по ошибке нам дает неправильные значения i am a мы думаем что неправильный наш контакт работать правильно там и про этого слова вряд ли узнаем а предполагается что все-таки мане и дега редактора сети air они проверяют какое обновление ставят там все то состояние кода который на на на на нотах работает в смете она совпадает людям большинством свою функции совпадают с война этом с тесно мы тут уже в более предсказуемым работаем окружение и можем быть уверены что когда мы кайтов код прогонять он так же будет работать в майн эти симуляции эта стружка это допущение там что это некий такой совсем рафинированный случай и исследования вот получается если мы запускаем intent с то можем прямо прогнать вот полностью подключить какие-то через javascript методы подключить прем аккаунт с как вот мы с вами сделали на уровне приложения только мы здесь делаем эти советы запускаем уже контрактом и мы проходим их все и допусти например весь процесс делаем и скажем делаем депозит потом garden к этой операции нашим транзак нашим блокчейне но наши в контракте одну операцию вторую потом делаем здорово проверяем баланс и все ли совпадает как нужны если это у нас работы в правильном и получаем правильные цифры и принципе спокойно начать мой кот не поломали как работал так работ ты если уже что-то идет не так мы можем прямо пойти в explorer explorer the smiths например посмотреть какие аргументы передают наш код если вдруг он отправлять не того типа нам прямо там быть ошибкой мы и увидим если например и какие-то калмыки собак с неправильными увидим какие-то mysql бейки и как мне кажется это более простой способ для тестирования и он по итогу легче пишутся и больше дает надежности если на него минусы что он будет дольше срабатывать потому что как бы каждый вызов будет занимать какое-то время и если вы захотите запускать вам огромное количество за ним сотни тестов то вполне можно будет успеть за это время сходитесь поставить щек и вернуться так же преимущества этого теста что вы можете с какой-то мере иметь такой последователь состоянии контракт может один раз его заполнить данный автомобиль долго что протестировать вам не придется каждый раз пересоздавать его с нуля вот значит здесь как такового примера у меня нет который показать как работает эти тесты по сути это просто методы javascript от просто вы запускаете не с фронтэнда ут11 за одним в вашем javascript файлы я лично для этих методов могу вам приказывать посмотреть мне rstp сервер это по сути тоже самое только здесь еще некоторые помогать il n'y и методы то есть например вы можете прямо с помощью отвара стопе сервера создать себе юзеров можете с ним als die плоть код если вам потребуется можете с него посмотреть баланс а аккаунта нир например что проверить сработал ли вывод сработал депозит или нет можете также генерировать всякие ключевые фразы по мнемоническую фразу ключи не за этого вряд ли вам потребуется в тестировании тем не менее и можете даже из него выбрать забирать данные из яндексе ра то есть это с баз данных которая покрывает все транзакции которые происходят в облегчении вы можете взять например посмотреть какие им юзеры выполняли какие методы как бы не м ч лимит не очень следствие как вы из из такой вот архивный словно баз данных резанова тебя покажу как это может работать вот для того же самого нашего инкремента я ставлю этот код в описании ссылки в описании к видео значит мы используем здесь жертву для этого передаем но один вариант на передаем какой-то контракт который мы хотим проверять и запускаем какое-то к тестам запускаем какой-то javascript который я взгляд файл который мы хотим использовать значит мы его здесь видите это стандартные практики которые я оставлю можете просто их использовать и особо разбираюсь как там все это работает то есть мы инициализируем контракт по таким-то именем это человек который подписывать наши нашей транзакции условно элис да потом инициализируем контракт мы проверяем за данный контракт вдруг у нас нет переменная инициализируем кошельки скажем если у аккаунт какое то необходимо качество покинув чтобы вообще работать с тестами дать вдруг там нет токи на вкус и снова у нас поломать все депозиты лучше вначале узнать когда мы это проверим и мы можем уже делать непосредственно механики вот как эта работа да там есть у этого я растопи метод view по сути get да где мы отправляем метод аниматоры какие-то параметры но у нас для get no money от параметров потом мы сначала называемый метод кол это не он . колда изменения отправляем опять же метод параметры и кто подписывает аккаунта едем мы можем также здесь прибавить если нам нужно talking кажется talking закончишь я проверил все можно добавить добавить токена еще как его нужно добавить к нашему вызову проверяя начни упал и наш операции по сток она выполнилась проверяем следующее значение для этого числа и сравниваем изменилось ли она на единичку то же самое для декремента вычитаем проверяешь чтобы ты был у кого образовав но уже вычитаем и для рср проверяем чтобы после ресета у нас был нолик если мы сейчас запустим вот примерно таким методом да то есть мы указываем здесь дживс 305 if u файл мы можем также указать там через параметр t какой конкретный теста мы хотим запускать если нам нужен приток один из всех сами хотим все ждать столько один проверяем можем так сделать вот так запускаем этой штукой и он на сайте прогоняет быстренько все вызовы это реально это все транзакции и мы можем давайте посмотрим не оставаться по этому контракту пока щас посмотрим что у нас происходит explorer нет мы посмотрим сейчас наш контракт увидим что наша тестирующая эта программка быстрым кого давить и запустила много много чего разного reset декремент инкремент и соответственно мы это запускаем и проверяем как у нас срабатывает ведь все пять теста у нас прошли успешно потому что он достаточно легкий функции давайте я покажу какое-то более сложные еще тест этот вариант для тестирования подобного кода значит вот какой из какого-то проекта который может быть работать вот елизово довольно много тестов у меня написано это тоже все гитхабе я оставлю после вам будет интересно посмотреть то есть мы например ну допустим да у нас есть разные видите здесь элис баб там кэрол мы отправляем кита депозит но давайте на этом при этом есть метод junior баланс овна автоматически проверяет число обратно и сразу конвертирует его в мир то есть нота переводит эффекта nerve ниже вот есть функция депозита которая а вот так tokens вы можете сразу же отправить какой такой штуки в которой вы хотите отправить приложу при приложить в данной транзакции вы можете также здесь делать разные сравнения там тубе но тубе клаус ту чтобы там посмотреть скажешь как меняется баланс в случае с какой-то газ вы тратите есть здесь метод для просмотра баланса аккаунты junior баланса нет это view аккаунт баланс по-моему сейчас на иной ну где-нибудь он здесь ни у кого не указывается сам метод для контракта мы просто должны будем посмотреть баланс давайте так нашу баланс вот в аккаунт аккаунт мир bounce да мы просто смотрим сколько у бога сейчас денег потом мы делаем какой-то вывод ему день денег и проверяем как у него изменился баланс но по большому счету такой может быть не самый изящный способ программирования потому что просто немного пишите такого не очень просил угодно тем не менее они прекрасные работы да вы можете проверять какие то конкретный эксепшен да вот здесь я проверяю что ведь у меня должна быть конкретная ошибка что не хватает токенах чтобы выплатить сделать вывод там что надо еще заплатить за комиссию а за комиссию мы заплатить не может вот так же у меня здесь есть контракт который еще работает с другим контрактом телитесь инициализирую новый контракт который у меня работает с санджи был токенами вот этот в те конфликта кого-то иди соответственно мы запускаем его здесь методы не рад и наше сам основы контракт указаны здесь идти другой контракт дальше появляется ходе трети контрактом я еще через кросс взаимодействие указываю и какие-то санс внутренней механики проверяй как работать трети контракт с моим контрактом соответственно много разного кода и написав этот код я более менее уверен что моя мощь мой контракт работает правильно и нигде не происходит от двойной траты и прочее прочее ну теоретически конечно может это и катера поможет посмотреть что же там я не проверял но как бы это я не рассчитываю подразумевается что хакеры так найдете ваши уязвимости и выключить все с вас деньги в общем плюсы этого метода для меня что вы можете прям смотреть в облегчении все результаты если у вас какой-то метод упадет вы можете прям здесь увидеть что он вас файлов например на если он вас нет не требуется он у вас падает он сам не должен падать связано вы можете здесь это увидеть плюс например если вы хотите более сделать какие-то такие изящные этом как про искать более нетривиальный тест чтобы вы выпускаете миллион-биллион раз метод инкремент вы можете например скажем где-то указать какую-то подсказку для себя до что например вот я я световыми я с этого места метод а хочу отдельно например его понять как он у меня конкретно этот метод работает все могу написать ему какие-то такие левые параметры которые нас реально функциями не используются но потом вы можете это увидеть у вас в облако спор или что такая конкретная функция как сработал как она потратила газ и прочее в общем разные методы от простого непосредственно тестирования каких-то отдельных функций smart контракта до таких глобальных функций которые проверяют прям полностью дерево состояние и проходит много разных своих операций доставляем какие-то комментарии в коде если вам потребуется это конечно не забудьте удалить потому что чем лишние лишними данными засорять транзакции от тем не менее это все у вас работать будет и если воспользуетесь люблю такого типа мир опять же с тобой не 305 сервер то вы сможете делать киты готовы методы вроде примерно нам если вам нужно сразу deposits контракта можете его деплоить отправив возм файл и он вас за за создаст мир сразу потянув ти контракт мне раз такая сервер вообще предназначен для таких в пту девелоперов которые захотят работать с ней блокчейном как бы как веб-сервиса они могут поднять такой сервер на сервер у себя во внутреннем окружении дайте ну какие то ключи которые могут оперировать и просто управляется могу эту запросы там через пост методы скажем ментоны в thedao или трансфера нефти и используя ключ и которая есть на этом rest api сервере этот сервис будет делать такой достаточно простой вход для игр то есть можно взять готовый backend игры и просто заставить его очень по простыне тогда поменяю меня и по сути просто and point научить его научить эту игру сохранять все свои транзакции в блокчейн ввести аккаунты блок чень это мы потом дописать ввод-вывод денег по сути все у вас готова игра но главное чтобы конечно ее этом как-то с франко не не хакнули не научившись не научились вызывать сразу платящие методы нарушая механику игры вот поэтому если вам вдруг захочется начать не песни использовать этот непосредственно прямой взимать с контрактом через не нее опять же с или написать супер делая какие-то вызова через консоль через не версия лай вы можете по сути ограничиться какими такими раз тебя сервер с вами и катя тоже есть как применения от верстака сервисы есть у него веб-интерфейс по адресу web . нет . вы тут можете вызывать какие-то методы прям вот по будто бы из командной строки только через сайт очень можно вызвать скажем посмотреть аккаунты которые провели своей talkin' of speaking на какой-то конкретный пул это как бы как конкретные бог через вызов вы можете загрузить залогиниться работать только в тест эти логин чтобы вдруг никак не скомпрометирую свой ключ и вы можете даже подписались какой-то нерка здесь написать и от вашим ключом подпишется транзакция уйдет букчин сейчас начну отмечу что если вы захотите этот сервер использовать в мае нити то вам конечно рекомендуется поставить всего у себя на сервере потому что в противном случае вы будете как бы компрометировать ключи этому серверу нужны данные подписывать транзакции на изменение блокчейна в то знаете это не проблема отправлять ему ключи и собственно в данном случае когда я использую через вот такие вещи на отправляю конкретные ключи которые есть в моем аккаунте они уходят просто в открытом виде по сути на сервер потому что они никого не интересуют если же вы хотите использовать этот сервер боевом режиме то лучше поставьте свой все кучи все код в открытом доступе и делайте как бы такое в стиле web 2 программируете блокчейн ну и теперь тем как переходить к следующей теме давайте немножко по традиции сделаем практике попытаемся сейчас изменить наш контракт счетчика так чтобы он опять же начинал тратить деньги и посчитаем правильно или уходят деньги вдруг мы берём что-то лишнего или например как у нас никак срабатывают средства для этого мы к нашему методу инкремент который мы уже один раз сделали pebble опять добавим макрос paypal то есть это позволит нам забирать деньги у пользователей мы пока никак не обрабатывает просто забираем такой у нас простой пример теперь значит мы нашли этот инкремент изменим так чтобы мы сначала читали баланс пользователи давайте сделаем const баланс один мы будем читать баланс методом венера как-то там мир аккаунт мир баланс и нам нужно будет указать здесь пользователи то есть мы нашей у алисы будем обратил баланс и теперь на что мы должны будем отправлять давайте сделаем еще некую константу депозит которые могут отправлять с возьмем первым отправляем допустим 2 . чтобы у нас это было где-то централизовано записано значит мы отправляем tokens чтобы переделал все кто не мы запускаем метод utils . вот и там конверт конверту не tuner по моему рту мир пишем депозит теперь мы еще раз прочитаем баланс в конце когда мы сделали это самый депозит когда мы уже прочитали наш баланс возьмем 2 баланс и теперь попытаемся сделать значит чтобы мы проверим опять же у нас там есть метод utils конверт конверты флота нам надо взять вот по моему как то так раундов у дага мы должны округлить до некого дробного значения быть весь вычитанием значит у нас должен быть баланс один бой больше чем баланс 2 на собственно размер труби депозит до как то так то есть мы должны мы сделали операцию и должны быть посмотреть у нас баланс реальная уменьшился но баланс вашего пользователя давайте мы сейчас перестроим наше приложение и запустим опять тест наше приложение от кончается 904 у нас вышла ошибка что мы не можем взять аккаунт баланс потому что мы написали не ешь да окей я ищу поторопился так теперь запускаем еще раз мы отправили депозита проверяем изменилось ли баланс по идее конечно мы должны сочетать какие-то обратно действия что пришло ли к нам ведь у нас здесь в тест не прошел потому что мы ожидали что будет разница 2 на самом деле была разница чуть больше это произошло потому что мы с этого аккаунта запустили данный вызов и помимо двух токенов мы также потратили что-то на газ до если мы будем запускать тесты для кого 3 аккаунта мы такого тиснения должны увидеть но здесь в данном случае мы должны не сделать ту би ту би клаус ту это один из методов геста и мы сделаем что например нас не интересует разница меньше чем 1 100 соответственно если вот эти эти погрешности у нас должны пропасть таким образом то есть мы не будем обращать внимание если какие-то мелочи вам что примерно округлённо до 1 бывает снег включит это как раз тот случай sharpies она наверно какой то мусор поэтому по запускаем еще раз и должны увидеть результат вашу плети прошел тест то есть мы можем сейчас посмотреть у нас в облачении отразилось то есть вот если мы сейчас перейдем по этому контракту полон да кстати вот он и есть у нас здесь вы видите наш контракт прибавляет постепенно токенов потому что мы отправляем к моему с другого сейчас контракта вот мы отправили в данном случае только что только что один токен на 2 токина и собственно изменился баланс мы посмотрели что он у нас работает правильно окей с тестированием я думаю мы закончили показали много чего разного давайте переходим теперь к вопросам которые связаны с обновлением контрактом опять же давайте начнем с примеров и будет понятно какие у нас есть сложности и как их решать и начала значит если часто стран присмотреться то в нашем контракте счетчика я сделал небольшие изменения во первых я убрал у него здесь инструкцию дефолт то есть он спер нет дефолтного значения для контракта мы создаем конструктором методом вот таким макросом и нет методом нею мы создаем текущее значение нашего контракта соответственно посылку нас нет дефолта чтобы наш контракт не не требовал дефолта я добавил чтобы у нас не было паника паника по дефолту мы убрали это и теперь мы можем начать сделать new build и я рубил точнее и вызвать например у текущее значение посмотреть какой у нас есть здесь где тамбур видеть вас текущее значение это четыре теперь вот предположим что у нас есть какой-то контракт счетчику от время работал целых четыре человека в этом нажала кнопочку допустим и теперь мы пришли к выводу что мы хотим поменять контракт например мы хотим добавить какие-то новые поля в наш наш контракт или поменять тип и у текущих полей давайте например я возьму для примера в наше жилье который у нас в данный момент является а и 8 то есть это число целый который может быть его куплю лет отрицательным так и положительным с размером 8 бит я его поменяю на you 128 то есть она будет теперь гораздо длиннее и только on-site понятно но совсем по-другому хранится в памяти у нас теперь здесь потребует контракт на написать еще чтобы мыло в отделе да тоже пишу 28 и не противимся вот мы решили теперь работать что у нас на счетчик будет большим и только положительным но какая-то логика поменялось на так хочется пункт о нам по времени уменьшает как сделать мы давать билды наши приложения ведь она компилируется нормально делаем ему где в диплом загружает блокчейн и попробуем сейчас сделать такой же метод get нам бы get нам бы и ведь ему вас уходит ошибку неопределенный выход не определено длина поле то есть как что произошло у нас есть некий контракт у него есть состояние и набор функций которые мы используем для чтения этого состояния для работы с ним нам на издание было размечена исходя из какой-то сетки дамы знаешь там есть вылью с таким но такое такая переменная вал какое-то никого с таким типом осень теперь вдруг внезапно мы сказали что там находится другой другое значение другой размер но наш контракт с прошлым размером до соответственно мы не понимаем что происходит и у нас просто контракт падает потому что он не может прочитать это значение до это условное приятельского это жесткий диск там в беды в него гость мы не понимаете что там написано как и какие там есть размеры и не можем прочитать то есть если мы добавляем новые функции или меняем а какие то непосредственно функции проблем не будет потому что функции есть функция не отдельно внизу все как бы перри собираются для того чтобы мы могли менять значение внутри состояния какие-то типы или новые добавляются до структуры нам потребуется сделать миграцию давайте кстати ради интереса вопрос а что будет если мы сейчас этот контракт назад переделаем b8 будет ли это работать у меня надежду что должно работать мы можем допустим мы сделали какое-то обновление контракта мы сломали контракт ведь сейчас это не не с но не дееспособны штука они там никаких действий сделать нельзя но мы давайте его пересоберём со старым значением до условно можем хоть откатить просто запустить старый вазом файл перезаписать поверх но может пересобрать как данном случае и сейчас если надеюсь что эти насыпать работает контракт вернулся к прошлой сетки и минуте понимаю теперь как это должно быть на самом деле окей ну допустим а вот если мы не хотим откатываться если нам прям кровь из носа все-таки мы хотим сделать у 128 для этого нам надо сделать некую функцию которую мы назовем функции миграции состояния значит мы будем писать и и таким образом значит мы должны указать там макрос и нет и нет мы ждем такой и нет который игнорирует текущее состояние контракта и к то есть мы должны изучать элинор стоит дальше мы пишем название нашей функции public фанкшн например мы назовем ее мои great играет да и она у нас будет возвращать состояние этого контракты она у нас называется сел как мы это спас получим мы получим в исходя из предыдущего значения данного из предыдущего состояния данного контракта вот так же значит наверное стоит написать чтобы это был приватным методом до чтобы кто угодно не мог запускать ее этот метод только чтобы данный контрактом запускать данный метод ну как бы автоматически мы как владельца на контракты сможем запустить данный метод а кто угодно из может сделать миграцию теперь значит мы должны взять сделать здесь принципе достаточно понятную вещь мы должны взять старое состоянии контракта и трансформирует его в новой сцене контракта как и можем взять старый сцене контракта мы пишем значит мы определяем derive борщ борщ сериал аси the sea реализатор который написали оптимальный стерилизатор который написали ребята из них где сирии одессе real life он работает более эффективно чем стандартные методы так что то меня совсем здесь криво получается так это нам здесь не нужно так теперь мы пишем значит с нашу старую структуру например выпишем struck the old ровня какой-то контракт который раз было раньше и раньше у нас был в или типа и 8 до теперь мы берем и на основании этой структуры читаем берем некой с первое состояние то мы пишем лет state один равняется old а этот тип типа у нас типа old равняется environment этот одна из функций которого проходили в прошлый раз с they tried и мы читаем старые состоянии если вдруг какая-то ошибка то мы пишем здесь что-то пошло не так и на нет старого стояния что-то произошло мы не знаем что произошло но это нас не устраивает теперь значит мы все уже мы готовы возвращать мы делаем теперь неужели you do like new вылью она у нас будет уже формацию 128 и мы его приравняем state ван целью с ю 128 до мы как бы переведем старое значение и сделаем а теперь you 128 теперь мы должны уже возвращать просто сел и здесь вместо в или мы будем возвращать неужели вот такой метод [музыка] тут наверное нам написано что мы должны с большой буквы использовать добра или правильные имена имена вот теперь не жалуется давайте мы теперь перебил дим это все дело ошибок нет диплом так теперь у нас как мы понимаем уже опять не должно читаться наше состояние потому что у нас потеряно стоит у нас был раньше одного типа теренса и другого но если мы теперь возьмем и так какой у нас имя контракт давайте мы запустим watches правильно значит мы запускаем теперь не кол называем адрес контрактов метод майк рейд мы запускаем без параметров и мы запишем что его вызвал аккаунт о еде и контракт она нас срабатывает и давайте попробуйте прочитаем номер у нас опять стал 4 ведь она он нас уже теперь у 128 ну как бы взяли и пили записали его абсолютно такой же метод будет у нас если нам потребуется например дописать какое-то новое значение да например вы сейчас мы давайте у нас было стоит просто с одним вылью а теперь мы хотим например добавить еще целью 22 и например сделать его тоже и у вас 8 мы его тоже при инициализации делаем их мир были едва как 0 да ну теперь наши функции миграции тоже нас потребовать вернуть еще какой то вы едва а мы например его делаем по умолчанию 0 ноликом у нас его не было но мы его теперь делаем и мы теперь сможем с ним работать то есть в данном случае если это будет какой-нибудь слуг абсент look at me up это в принципе никакой ранее не имеет главное чтобы мы это все сделали в том же порядке которому нас был изначально устоять и не надо менять местами потому что мы как бы разметим с наше состояние контракта по новым правилам вы прочитали стали значение по порядку и пишем новое значение в том в правильном порядке то что потом когда мы будем мышц или его тоже мигрировать чтобы мы тоже не сбились с лучше сохранять порядок давайте-ка дело не рубил где в диплом и у нас опять же сейчас должно не работать чтение потому что у нас поменялся поменялась состоянием и сейчас опять сделаем мои great то опять у нас все должно починиться вас просто как бы добавится в состоянии теперь новая переменная так что там он не хочет у нас работать у нас не может уже чтение потому что у нас да теперь когда у нас ведь ошибка у меня в коде у нас теперь состоянии стороне и а и 8-ой у 128 поэтому он не смог сделать миграция не смог прочитать старые состоянии контракт но нас это не касается как бы просто я уже в настройках пишу код да получается по и большому счету должна быть метод мои great например 2 и вообще в идеале конечно нужно делать какую-то версию версия низации то есть я должен написать что версию нас один потом эти два и предварительно что если версии 2 то мы разрешаем делать какие-то методы теперь мы просто перестраиваем делаем где в диплом и запускаем и great и я надеюсь что у нас теперь сработает до похож на сработало и очевидно что теперь мы должны уметь читать наш номер но теперь у нас все появилось новое значение мы увеличили state там его пири-пири записали собственно так это работать миграция состоянии видите ничего сложного повторяясь если вы передадите функции не пережимал не проблема пишете функции менять функции как угодно что хотите делать если же вы хотите менять сама вот это свое состояние пишите методы которые читают то расстояние и нужным образом трансформирует и перезаписывать новое состояние может быть некий здесь такой трюк если допустим выпер записывать и состояния которые очень длинный например у вас есть массив какой-нибудь они за там из из тысячи пользователей и вы хотите всех пользователей например там как-то переформатировать например добавить им новое поле как каждый пользователь например там что-то сгенерировать для них допустим к это хэш специальный и может и хп учиться что вам не хватит газа что по одной транзакции запустить это полный цикл миграции как бы это тоже не является проблемой тут механизм здесь может быть таким вы сначала читаете старое состоянии потом создаете например для 100 пользователя первых 100 пользователей обновленные массив генерировать новые новых пользователей сохраняются новых пользователей и старых пользователей заменяете массивом где вот что убрана до условно было 1000 стала 900 соответственно вам просто нужно будет этот метод запустить энное количество раз до наших лучи 10 раз и вы всех пользователей по очереди перед генерировать и сделать их новым как только вы сделать это 10 таких транзакций ваш контракт опять станет рабочим и вы сможете его сразу сайт рабочим и просто вид как бы данные перенесете последовательно опять же неплохо иметь какой-нибудь ключ какой-то флаг точнее заболевал значением true и false и ставить его скажем куча контракт нам сделать что-нибудь типа как это когда какие-то технические работы проводятся то есть чтобы все действия были недоступны в этот момент был словно обеспечиваете контакт контракт делайте его неспособным приделать об обновлении прогоняете весь свой стоять циклом и опять включает силу и по большому счету никаких проблем не будет все должно работать такой методикой вы можете обновлять свои состояния и делать новые данные новые значения может быть китов пиксель баги и прочее значит вы можете это делать вот повторюсь за тех пор пока данные аккаунт у вас имеет ключи доступа как только вы хотите уже отправить контракт свободное плавание вы удаляете через не ордере ткий не жди [музыка] лит-ра нет нигде лид майн узкий вы можете удалить себе ключ от этого контракта который вас был и доступа после этого вы будете в eg спорили видеть вот здесь что у вас контракт с золоченой где все таким образом больше трюки невозможны дальше вы не можете ничего изменять своим контракту как работа так работа извините если какие-то проблемы но они навсегда уже с пользователями но естественно с контрактом поэтому вот есть как бы некое такое понятийное важное свойство для контрактов какие бы там ни были нефти якобы не изменяем и какие бы не были токены которые где-то прописаны по баланса внутри контракты сих пор пока на контрактный злотин как бы есть техническая возможность человеку владеющему этими ключами взять и полностью пересобрать его но словно хоть и нефти и считается неизменяемым токены мда но если контрактный залочен пример человек может прийти пробежаться по цене курьер сделать так что пирсинг ти будет пролежать ему допустим из него есть доступ к этому поэтому имейте ввиду как бы тут есть вещи которые как бы на уровне этики какой-то находятся есть уровни который находится на техническом карьере то есть для не заочного контракта нет проблемы перезаписать по сути все что угодно может пройти там и всем баланс нолики поставить если захочет сейчас заходит понятно что нет такой мотивацию человека как правило поставить для совы контракта какие-то плохие значения потому что если он владеет ключами он так и так может вывести все что кендо вот эти токи на по сути сюжет на контракте я могу взять и вывести пользователи великий свои внутренние депозита сюда я могу взять их их все вместе неважно что там есть на контрактник нолики и единички но если у контракта самого нет средств то как бы до свидания но можно и поменять что-то вот на уровне таком паук сильно поменять состоянии единственное что как бы вы можете смотреть что был ли какой-то леди поле контракт если вдруг тут идет вредоносная какие были вызовы как что там что там вызывалась но конечно что же может быть по сути такой хитрый человек может назвать как-то не нейтрально а при этом сделать что-то другое а потом предстоит контракты и сделать от функций опять работал как раньше короче по цифр попросту по названием тоже не всегда догадаешься но в целом как бы есть некие механики у пользователей для того чтобы контракты свои изменять даже если они уже за диплоидных сеть и уже работает имеет пользователей тем не менее если того требуют обстоятельства при этом случилось какое-то важное обновление все равно можно изменить и функции и состоянии контракта сделать так называемый миграцию я надеюсь этим были понятны спасибо что посмотрели данное видео давайте не сейчас небольшую я сделаю рекламу умер проходит хакатон он называется me to build он стартует 27 августа и пройдет от 12 сентября там есть формат и онлайн и оффлайн участие для многих городов в сша в европе есть offline методы где можно прийти и как бы в компании худей поработать но везде можно прийти работать и онлайн ответственно от нас требуется зарегистрироваться здесь и призы это миллион долларов виде денег и финансирование тут есть разные призы от разных партнеров и которые достаточно авторитетное жюри вы можете поучаствовать если вдруг вы захотите найти себе партнеров по команде и специальный сайт где можно это сделать можно посмотреть открытые позиции который прямо сейчас есть у людей которые ищут кого-то и есть люди к вы можете посмотреть как бы как бы то есть это позиция от команд который ищут кого-то а это люди которые оставили свои профили которые ищут чтобы они могли подделать и соответственно кто мог их позвали к себе в команду отдельного рассмотреть посмотреть его команды в общем если вдруг вы даже не программисты не хотите например еще сразу писать код на вы например можете сделать фронт-энд или вы можете делать дизайн верил можешь сделать какой-нибудь копирайтинг marketing анис или просто вы художник который хочет нарисовать и лифте для вас есть возможность на этом хакатоне тоже найти свое место свою какую-то к систему найти contributor вместе сделать проект во первых научитесь разумеется многому новому познакомитесь каких-то сессиях с разработчиками мир и с участниками с членами жюри и при этом совсем crushed by призовой фонд не так много сейчас вообще не на разработчиков мире поэтому я всех уверяю что шансы на призы есть января у каждого достаточно желания и по сути какого-то стремления сделать полезный продукт ваши усилия наверняка будут оценены на этом у меня все спасибо за внимание и до новых встреч продолжим наш курс в следующем видео в описании к видео есть ссылки на предыдущие курсы видео который вас очень много смотрите изучайте раз работаете с нею и участие наших которых которые проходят достаточно регулярно спасибо и всем пока","transcript_synced_at":"2026-11-04T04:11:36.768Z","segments":[{"start_seconds":0,"text":"всем привет друзья меня зовут вадим ильин сегодня мы продолжаем наш курс по изучению программирования на языке раст","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=0s"},{"start_seconds":8,"text":"для блокчейна мир мы с вами на трех уроках уже делали приложение на через того что в принципе изучали на первом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=8s"},{"start_seconds":15,"text":"уроке что можно сделать на блокчейне зачем это делать какие там возможности и добились что мы коротко за пять минут","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=15s"},{"start_seconds":22,"text":"уже запустили наше первое приложение на втором уроке мы разбирали более подробно как работать с ю а м как делать кита front-end и приложения вызывать","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=22s"},{"start_seconds":31,"text":"конкретные методы отправлять деньги разобрались с аккаунтами и прочим таким вроде структур данных на третьем уроке","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=31s"},{"start_seconds":38,"text":"мы разбирали уже более глубоко все предыдущие подробностях скажем что что касается выгрузки контрактов более","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=38s"},{"start_seconds":46,"text":"подробно то что касается например использование переменных окружения и дошли до того состоянии что мы уже сами","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=46s"},{"start_seconds":53,"text":"можем теперь писать код я надеюсь что вы в состоянии это делать но перед тем как комфортно себя чувствовать конечно","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=53s"},{"start_seconds":59,"text":"хочется писать тесты и понимать как контракт нужно будет обновлять в случае если вы будете выпускать новую версию вашего приложения","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=59s"},{"start_seconds":67,"text":"старая версия должна при этом сохранять все свои предыдущие состояния скажем баланс и юзеров и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=67s"},{"start_seconds":76,"text":"какие-то вещи должны работать бесшумно относительно прошлых версий это всего будем разбирать сегодня тема очень","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=76s"},{"start_seconds":84,"text":"большая важное начнём с тестирования разберем всевозможные разные способы тестирования блокчейна и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=84s"},{"start_seconds":91,"text":"в конце поговорим про обновлению но для начала давайте в целом поговорим про тестирование конечно этого такое общее место и все","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=91s"},{"start_seconds":100,"text":"всегда призывают писать тесты и по моему большинство людей все-таки эти тесты практически и никогда я не пишет за исключением только если начальник очень","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=100s"},{"start_seconds":109,"text":"жестко за это требует как правило многие люди на это клюют потому что ну как бы это такая лишняя работа которая не очень","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=109s"},{"start_seconds":116,"text":"понятно окупится ли обще в принципе и начальники не всегда дают такие задания хотя этот курс у нас все-таки для новичков но мы обязательно рассматриваем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=116s"},{"start_seconds":125,"text":"целый урок тестирования потому что в блокчейне и тестирование это жизненно важный жизнь важная составляющая и без тестирование контракта в принципе вообще","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=125s"},{"start_seconds":133,"text":"программе как таковое здесь невозможно я поясню на примере допустим вы делаете какой-то код и вы в целом написали","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=133s"},{"start_seconds":143,"text":"какую-то логику прошли какой то весь процесс весь сценарий пока описали код и делали для","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=143s"},{"start_seconds":149,"text":"него frontend но потом для при малейшем изменении вам придется в процессе еще разработки по сути опять","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=149s"},{"start_seconds":158,"text":"все прощал кивать заново да потому что любая даже маленькая оплошность там к эта ошибка например если условно минус на плюс нечайно заменили или кто-нибудь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=158s"},{"start_seconds":165,"text":"строчку кода закомментировали вам далеко не всегда раз про это скажешь под такую ошибку как он скажет что если вы там","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=165s"},{"start_seconds":173,"text":"типы типа неправильный переводите ли где-то нельзя возвращаете значения во всех ветках кода мы скажем если вы возьмете и какую-нибудь строчку","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=173s"},{"start_seconds":181,"text":"случайность за комментируете то от этого может по сути полностью умереть ваше приложение потому что злоумышленник или","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=181s"},{"start_seconds":189,"text":"даже просто как у любой пользователь который случайно обнаружить какую-то уязвимость exploit называемый он может им воспользоваться многократно скажем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=189s"},{"start_seconds":196,"text":"вывести в сиденье с вашего контракта по сути ограбили всех пользователей и пользователи эти закономерно придут с проблемами к вам потому что ну а кто","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=196s"},{"start_seconds":204,"text":"виноват в как бы вас если будет известный автор приложение пользователю придут к нему скорее всего за возмещением и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=204s"},{"start_seconds":212,"text":"возможно даже напишут какие-то там жалобы в соответствующие органы и тут по сути чтобы этого не допустить","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=212s"},{"start_seconds":221,"text":"есть два выхода либо не обновлять приложение оставить его в таком стояние котором она была этапа самом деле очень плохой путь потому что ну","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=221s"},{"start_seconds":229,"text":"гораздо лучше иметь приложений в том в виде которые может быть легко изменено соответствует с рыночными условиями","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=229s"},{"start_seconds":236,"text":"второй путь это писать тесты тесты писатель на блокчейне сложно это в принципе довольно тривиальная задача она","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=236s"},{"start_seconds":244,"text":"даже где-то упрощает вам понимание того что вы на самом деле делать например где то вы запускает тесты можете понять что","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=244s"},{"start_seconds":251,"text":"какие-то методы при можно объединить два метода в один потому что вы всегда и запускаете вместе что-то подобное вы сможете обнаружить в процессе написания тестов но и самое главное конечно вы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=251s"},{"start_seconds":260,"text":"будете совершенно не боясь и не не переживая будет спокойно спать ночами и сможете","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=260s"},{"start_seconds":267,"text":"легко делать обновление кода в меру вас скажем не знаю в приложении 20 разных методов вы дописали 21 вы дописали тесты","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=267s"},{"start_seconds":275,"text":"на 21 метод и вы полностью вируса все работать там что все остальные между вас справа показывает что вас нет там двойной траты до называем добыл стенд","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=275s"},{"start_seconds":283,"text":"шкафчик не может лишь не вывести все баланс и правильно считаются все там цифры переходят и все у вас хорошо","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=283s"},{"start_seconds":290,"text":"соответственно люди смогут больше у вас функции простить вы будете обновлять приложение оно будет развиваться","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=290s"},{"start_seconds":297,"text":"развиваться и развиваться и по сути все что от этого останавливает это просто написание своевременные тестов очень по","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=297s"},{"start_seconds":305,"text":"днепру со тестов и конечно бог честь programmer не тесты очень важны надеюсь этот пункт уже мы обсудили и все вы будете писать без","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=305s"},{"start_seconds":314,"text":"тесты в будущем хотя бы какие-то базовые вещи как только продолжение выходит уже примерно нет конечно надо покрыть себя","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=314s"},{"start_seconds":321,"text":"почти все состояния и подумать ещё об избыточности примерно сил пишете тест скажем на депозит то вы должны проверить","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=321s"},{"start_seconds":330,"text":"а что будет если этот депозит пример делать два раза подряд друга просто перезаписывать и состояния а не используйте не прибавляется и начальное","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=330s"},{"start_seconds":337,"text":"состояние к предыдущей депозита это можно сделать только несколько итераций проверить как на самом деле несколько раз изменяется состояние","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=337s"},{"start_seconds":345,"text":"либо например если вы имитируете админские методы надо проверять и что будет если вы запустите их обычным","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=345s"},{"start_seconds":352,"text":"юзерам они админом вдруг что-то вы где-то и попортить икоты эта проверка не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=352s"},{"start_seconds":358,"text":"будет срабатывать в общем надо не просто делать пролога приятный сценарий всегда еще писать и неблагоприятный сценарий","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=358s"},{"start_seconds":366,"text":"можно заполнить стать вашего контракта нам огромным количеством данных проверить как они будут работать там оставить на ночь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=366s"},{"start_seconds":373,"text":"например знаете чтобы скрепить молотил какие-то данные и посмотреть как все это работает в общем сегодня мы с вами поговорим","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=373s"},{"start_seconds":380,"text":"основной сценарий примерно будет выглядеть так я взял эту картинку из инструкции а то я оставлю ссылку описание очень большой подробный текст","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=380s"},{"start_seconds":388,"text":"про то как работает тесты на обучение мир для языка раз посмотрим на эту картинку давайте значит","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=388s"},{"start_seconds":396,"text":"в начале мы берем какуе-то код но проще он сейчас примеров да ты так запасочка не точка орг или нет . дев мы берем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=396s"},{"start_seconds":405,"text":"готовое приложение и начинаем менять о постепенно например мы можем изменить smart attracts переименовать его и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=405s"},{"start_seconds":412,"text":"называть новые методы потом мы можем изменить frontend исходя из того что мы сделали летом в делать вывод этих данных","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=412s"},{"start_seconds":420,"text":"которые мы добавили и прочее прочее адам и изменить функционал мы дописываем тесты мы пишем какие-то коды которые нас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=420s"},{"start_seconds":430,"text":"проверяются то что мы написали наш функциональность и проверяют какие-то промежуточные результаты с образован результатами","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=430s"},{"start_seconds":437,"text":"скажем если мы отправили на депозит 1 токен а там и до этого депозита берем баланс аккаунт и смотрим его потом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=437s"},{"start_seconds":445,"text":"отправляем 1 . и смотрим следующий баланс изменился лена один если изменился на один все правильно сонета будет какой-то паника и мы сможем понять","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=445s"},{"start_seconds":452,"text":"что у нас что-то работает не правильно после этого мы запускаем тесты используются совсем улиц симуляционной","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=452s"},{"start_seconds":461,"text":"контекст тут есть разные подходы мы про чуть позже поговорим и вот это по сути с 2 по 4 шагов если нарисована стрелочка","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=461s"},{"start_seconds":470,"text":"выправилось проходим много-много раз мы написали функционал протестировали абсолютном протестировали какого-то момента моего пишем пишем пишем какой-то","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=470s"},{"start_seconds":477,"text":"момент когда мы уже считаем что все можно отправлять в большое плавание наше приложение мы его уже строим делаем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=477s"},{"start_seconds":485,"text":"озон файл отправляемого блокчейн и смотрим в блокчейне и как у нас работает приложение потому что если мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=485s"},{"start_seconds":493,"text":"перезаписывать существующий уже контракт там не исключена ситуация когда наша на состояние state","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=493s"},{"start_seconds":501,"text":"перестанет читаться потому что будет перезаписан с неправильным со структурой даты с новой структурой и старый","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=501s"},{"start_seconds":509,"text":"структура будет как бы испорчены мы это будем говорить про миграцию контракта если же у нас испорченную структура мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=509s"},{"start_seconds":516,"text":"работаем в теснить это нет ничего проще вы просто делаем новый аккаунт в случае если мы используем утилиту","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=516s"},{"start_seconds":526,"text":"командующие явно не ртв диплом то мы запишем на минус f это создает новый аккаунт и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=526s"},{"start_seconds":534,"text":"отправляет наш контракт соответственно мы на чистом аккаунт можно проверять как она что работает вот эти методы по тестирование видите","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=534s"},{"start_seconds":543,"text":"здесь будут спать довольно часто и тест который вы напишете в начале сэкономит вам кучу времени он многократно в будущем потому что вы можете запустить его там сотни раз в процессе","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=543s"},{"start_seconds":551,"text":"использования каких-то новых функциональных возможностей быть спокойным что какие-то базы и вещего всегда контрольно под контролем работают","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=551s"},{"start_seconds":559,"text":"в предсказуемом предсказуемым образом мы разберем три типа тестов юнит-тесты","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=559s"},{"start_seconds":567,"text":"симуляционные тесты и сквозные test and in test unit тесты еще","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=567s"},{"start_seconds":574,"text":"называют модульными тестами они покрывают своими тестирования какие-то конкретные","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=574s"},{"start_seconds":581,"text":"методы смарт-контракты если вы откроете тот пример который мы используем много gras наш этот раз каунтер это счетчик на","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=581s"},{"start_seconds":589,"text":"обучение каждый раз когда нажимай кнопочку прибавляется добавляется единичка и мы видим наше значению мы можем понять кто когда нажимал и сколько","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=589s"},{"start_seconds":598,"text":"в доке разными кликнули этот плюс соответственно если мы посмотрим внизу этого контракта там увидим вот с таким","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=598s"},{"start_seconds":606,"text":"макросом конфигурационный тест да мы видим что здесь есть тесты","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=606s"},{"start_seconds":613,"text":"здесь используется ведь тестировать тестировать тестировать на январь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=613s"},{"start_seconds":620,"text":"окружение для тестирования и мы все что здесь выполняем и выполняем так называемую виртуальном контексте то есть","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=620s"},{"start_seconds":628,"text":"у нас есть специальные функции которые нас это контекст создает можете искать разные вещи в данном случае вот видим указаны только процессор то есть мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=628s"},{"start_seconds":636,"text":"создаем котекс и мы указываем что нашего подписывающим юзерам будет в данном случае аккаунт flyer","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=636s"},{"start_seconds":643,"text":"соответственно если вдруг нам нужны другие тесты то мы можем здесь посмотреть на мы можем указать разные вещи в контексте скажем пока текущей","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=643s"},{"start_seconds":651,"text":"аккаунт до что они с польскую мы использовали старриджа и прочие сколько мы использовали газа то есть какие-то вещи котором можно нужно протестировать","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=651s"},{"start_seconds":659,"text":"это нетривиальные вещи наверное вам на таком базам уровне здесь возможно это не не заполнять если вы не хотите","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=659s"},{"start_seconds":667,"text":"но если вам нужно вы можете указать в целом более продвинутых тестах это делается через симуляции и вам не нужно","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=667s"},{"start_seconds":675,"text":"вручную все указывать но здесь видите можно указывать там и все вплоть до по байта в последовательности для подписи","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=675s"},{"start_seconds":682,"text":"на публичный код подписью значит вот мы с вами здесь в создаем какой-то контекст и дальше в нем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=682s"},{"start_seconds":691,"text":"выполняем тест и если вот взять какой-то тест который у нас ведь опять же описывается через диез тест и функцией климент это тест для функции","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=691s"},{"start_seconds":700,"text":"прибавления единицы инкремента мы здесь указываем что мы создаём некий контекст для данного аккаунта который будет у нас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=700s"},{"start_seconds":709,"text":"подписывающим аккаунт то есть мы сможем заполучить любую ерунду потому что это не идет в блокчейне это просто работает на нашей библиотеке","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=709s"},{"start_seconds":717,"text":"хоть этот важный момент получается ссылкам и каждый раз пишем по сути библиотеки мы не пишем исполняемые файлы нас там ни точки входа можно просто","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=717s"},{"start_seconds":725,"text":"создать контекст и дергать из наших братики любые методы которые нам хочется и проверять как изменился наш наше приложение наш контракт","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=725s"},{"start_seconds":733,"text":"дальше мы создаем для нашего контекста эмуляцию от этого окружения для тестирования","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=733s"},{"start_seconds":742,"text":"создаем контракт из того кода который мы выше написали довольно эта структура здесь создает в нашей эмуляции мы ее","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=742s"},{"start_seconds":750,"text":"здесь видите в конструкторе указать течение которого нам нужны вот здесь в илью 0 тыс если мы допишем здесь какое-то новые переменные в состоянии","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=750s"},{"start_seconds":759,"text":"нашего контракта так много писали вспомните users мы добавляли сюда то она будет еще и теста переписать добавлять там при инициализации еще и новые","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=759s"},{"start_seconds":768,"text":"элементы дальше мы выполняем внутри нашего контракта метод который лишь указал конкретно этот клиент здесь выполнится","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=768s"},{"start_seconds":776,"text":"этот метод который мы писали в контракте мы будем выполнять через тест мы выполняем его метод и мы проверяем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=776s"},{"start_seconds":785,"text":"является ли теперь значение нам но этого номера 1 да потому что по умолчанию оному задали как 0","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=785s"},{"start_seconds":793,"text":"аналогично то же самое для декремента есть видите мы создаем с","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=793s"},{"start_seconds":799,"text":"нулем проверяем и проверяем является ли у нас минус один значение и то же самое для ресета мы прибавляем потом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=799s"},{"start_seconds":808,"text":"сбрасываем проверяем является она у нас в нём то есть acer тыкал проверяется эти значения чтобы зайти в эти тесты у нас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=808s"},{"start_seconds":817,"text":"есть два пути то есть мы должны из корневой папки перейти в папку контракты среди контракт и там запустить карга","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=817s"},{"start_seconds":825,"text":"тест сейчас это делать через гид под потому что конкретно сейчас есть какие-то проблемы с процессором снова","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=825s"},{"start_seconds":833,"text":"версии mac os о роста это я думаю скоро будет поправлено и в принципе симуляционные cs который и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=833s"},{"start_seconds":841,"text":"выполнять проблему не всем вообще нужны то есть просто я это делаю сейчас через браузер но вы можете сделать это через","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=841s"},{"start_seconds":849,"text":"свой компьютер тоже эти тесты работают и на mac os конкретно эти тест и так ведь у нас все три тест сработали сейчас и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=849s"},{"start_seconds":859,"text":"далее ok потому что ну собственно наш код работает правильно если мы сейчас не примем изменением как-то функцию и будем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=859s"},{"start_seconds":867,"text":"проверять ни с чем чем нужно например давайте попробуем что мы будем проверять ну например мы какую-нибудь ерунду","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=867s"},{"start_seconds":874,"text":"проверим чтобы увидеть что у нас будет ошибка да вот я сейчас например шум 10 место 1 мы проверяем что у нас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=874s"},{"start_seconds":884,"text":"при запуске прибавлять прибавления от единички будет ли 10 или нет очевидно на должно быть не десять","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=884s"},{"start_seconds":891,"text":"здесь очень важный момент ведь мы всегда вначале сдаем 0 то есть мы не знаем что","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=891s"},{"start_seconds":898,"text":"в этом контракте есть сейчас то есть дам ответе закономерно наш упал тест на инкремент потому что наша единичка не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=898s"},{"start_seconds":907,"text":"может быть равно десятки так вот вы можете проверять свои контракты то есть если например я могу также сделать пример который мы с которой мы начинали","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=907s"},{"start_seconds":915,"text":"если мы будем прибавлять не один опять то автоматически наши давайте убавлять тоже буду 5 то автоматически наши тесты","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=915s"},{"start_seconds":923,"text":"тоже перестанут работа потому что у нас логика работает из другого теста работы по другому так вот что я начинал значит мы здесь не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=923s"},{"start_seconds":931,"text":"за не владеем контекстом контракта то есть мы не знаем что там есть мы создаем его в вакууме до полностью в окружении","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=931s"},{"start_seconds":939,"text":"который ничего не знает про то что она сейчас есть ответственно мы не можем на реальных данных проверять наш контракт это является таким больше bensons данного типа тестов они могут позволить","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=939s"},{"start_seconds":948,"text":"просто пробежаться диск просто вот как бы очень так поверхностно потому как работа отдельный метод но они не могут","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=948s"},{"start_seconds":956,"text":"погрузиться и проверить какие то более глубинные перехода внутри состояния контрактов и даже извините у нас тоже 1 ошибка","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=956s"},{"start_seconds":964,"text":"должно было быть 15 тут ошибка но и прочее короче ошибки у нас срабатывают тесты тесты не проходят","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=964s"},{"start_seconds":973,"text":"что нам теперь еще может потребоваться давайте посмотрим мы работаем значит в виртуальном контекст и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=973s"},{"start_seconds":983,"text":"запускаем мы я вам показал как через скорби тест вы можете также запускать его не заходя в эту папку вы можете","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=983s"},{"start_seconds":991,"text":"запускать эти же самые тесты через yarn тест это специальная стали метод в","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=991s"},{"start_seconds":999,"text":"файле пикать джейсон которые запускают те же самый тест вот получается одной","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=999s"},{"start_seconds":1006,"text":"строкой он создает опере перестраивать контракт и запускает тест карга который в свою","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1006s"},{"start_seconds":1015,"text":"очередь первым запускает карга теста 2 запускает guest то есть здесь еще симуляционные тесты симуляционные тесты","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1015s"},{"start_seconds":1023,"text":"вот как раз они на одной версии mac os не работают там по какой-то накатили библиотека из них ранее не поддерживает обновления через роста извиняюсь не из","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1023s"},{"start_seconds":1032,"text":"мира вот и соответственно если мы запускаем этот самый ярый тест у нас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1032s"},{"start_seconds":1039,"text":"запускаются два типа тестов и мы можем также увидеть что у нас обычные тесты не прошли и потом про запускается","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1039s"},{"start_seconds":1048,"text":"симуляционные теста давайте я исправлю наши основные то есть чтобы у нас они проходили все исправлю как было и заново","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1048s"},{"start_seconds":1055,"text":"запишу сейчас ярно тест то есть у нас здесь видите запускается","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1055s"},{"start_seconds":1062,"text":"помимо обычных тестов который только что он делал еще вот эти sim тесты они находятся нас папки тест sim файл main","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1062s"},{"start_seconds":1072,"text":"rs конкретно в этом примере и они уже работы несколько иначе ведь они работают дольше здесь есть уже состоянии контракт","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1072s"},{"start_seconds":1081,"text":"используется то есть если мы посмотрим как это работает симуляционные тесты они ведь уже","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1081s"},{"start_seconds":1088,"text":"запускают какие-то более сложные методы они занимают время они просто памяти срабатывать они срабатывают уже в неком","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1088s"},{"start_seconds":1095,"text":"окружении в этом контексте здесь можно запускать более сложные тесты которые например будут касаться разных","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1095s"},{"start_seconds":1104,"text":"контрактов мы можем использовать кросс контракт на взаимодействия загружать несколько контрактов мы можем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1104s"},{"start_seconds":1112,"text":"смотреть как меняется состояние в этих контрактах можем подгружать стальные контракта можем учитывать к потраченный газ они используют не рсд кейси вот мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1112s"},{"start_seconds":1122,"text":"обычно используем не не раз так дикие то есть не раз детей сим еще соответственно видеть как это все здесь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1122s"},{"start_seconds":1130,"text":"загружается в симуляции simulate симуляционных тестах мы здесь вначале подгружаем бинарный файл","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1130s"},{"start_seconds":1138,"text":"нашего контракта который мы его собственно компилировали мы грузим расстояние прямо в память вот через набор байтов мы его инициализируем и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1138s"},{"start_seconds":1148,"text":"потом на этом жилом контракте мы вызываем какие-то методы вот смотрите наш метод который мы simul симуляции","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1148s"},{"start_seconds":1154,"text":"инкремента мы здесь соответственно создаем этот контракт инициализируем его мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1154s"},{"start_seconds":1163,"text":"берем текущее значение из него прямо читаем из памяти какое значение у этого метода get намбер потом мы выводим его","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1163s"},{"start_seconds":1173,"text":"соответственно потом мы делаем это дам кол вызов функций клемент проверяем прошла ли она до не упал ли сам метод","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1173s"},{"start_seconds":1181,"text":"дальше берем новое значение и сверяем изменилось ли она на единицу то есть такой достаточно простой синтаксис роста","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1181s"},{"start_seconds":1188,"text":"мы уже проверять непосредственно на таком более низком уровне","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1188s"},{"start_seconds":1195,"text":"непосредственно дергай метода готового контракт который вас виде бинарного файла находится дальше мы делаем это еще раз или там","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1195s"},{"start_seconds":1203,"text":"делает еще другие вещи можем уже посмотреть то есть преимущество здесь в том что мы можем смотреть как у на старайтесь газ как у нас меняет","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1203s"},{"start_seconds":1211,"text":"состояние привести вдруг он сколько происходит при пополнении допустимы ли они знают по газа вываливается марта здесь можем отловить и понять что она","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1211s"},{"start_seconds":1219,"text":"действительно какой-то метод не сработал примет вылетел да то есть он не вот мне возвращает успех например","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1219s"},{"start_seconds":1227,"text":"этот это более продвинутыми этот мед механика тестированием она на нас тем не менее видите все равно","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1227s"},{"start_seconds":1235,"text":"не выполняет транзакции в живом блокчейне и да она позволяет делать более сложные вещи чем вот эти простые unit тесты и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1235s"},{"start_seconds":1243,"text":"работать с разными контрактами погружая их вот например вы можете здесь наряду с нашим контрактом подгрузить еще один контракт и для него тоже запускать все","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1243s"},{"start_seconds":1252,"text":"что нам потребуется просто здесь указывать мы будем разный последователи байтов принесли зации контракта но если например мы хотим посмотреть как мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1252s"},{"start_seconds":1260,"text":"отправляем какой-то реальный токен скажем talkin' мир и посмотреть потом изменился наш баланс поставок номер один такин прислали назад здесь уже это не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1260s"},{"start_seconds":1269,"text":"сможем потому что нам надо брать ни в симуляция это в живом каком состоянии и если вы хотите делать какое-то прямо","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1269s"},{"start_seconds":1277,"text":"такое более мне кажется продвинутые тестирование более приближенный к реальности то фирмы точнее до то для нам здесь может помочь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1277s"},{"start_seconds":1286,"text":"сети или тестирование этого так называемые and test они используют just этот фрейм на ней ранен описывать","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1286s"},{"start_seconds":1294,"text":"помощью guest этом мэр можно спать по разному довольно популярный фреймворк для тестирования на языке java script он","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1294s"},{"start_seconds":1301,"text":"работает с разными типами языков и соответственно вот по-моему на бабу нам нам побили 0 там где угодно можно","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1301s"},{"start_seconds":1309,"text":"подключить его через в этих универ опять же с и уже запускается как бы в живом окружении то что одна то что мы хотим проверять то","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1309s"},{"start_seconds":1318,"text":"есть мы можем прям отправлять реальные транзакции в то снег и смотреть как они срабатывают","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1318s"},{"start_seconds":1325,"text":"используя вызывать говорите кемер опять же тут является преимуществом то что мы как","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1325s"},{"start_seconds":1333,"text":"бы в своей стороны менее зависим от каких-то богов той библиотеке симуляции которые написаны то потому что выпустим если предположить что к это вскроется","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1333s"},{"start_seconds":1341,"text":"баг в этой симуляции который мы по ошибке нам дает неправильные значения i am a мы думаем что неправильный наш","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1341s"},{"start_seconds":1349,"text":"контакт работать правильно там и про этого слова вряд ли узнаем а предполагается что все-таки мане и дега редактора сети air они","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1349s"},{"start_seconds":1358,"text":"проверяют какое обновление ставят там все то состояние кода который на на на на нотах работает в смете она совпадает","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1358s"},{"start_seconds":1367,"text":"людям большинством свою функции совпадают с война этом с тесно мы тут уже в более предсказуемым работаем окружение и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1367s"},{"start_seconds":1376,"text":"можем быть уверены что когда мы кайтов код прогонять он так же будет работать в майн эти","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1376s"},{"start_seconds":1383,"text":"симуляции эта стружка это допущение там что это некий такой совсем рафинированный случай и исследования","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1383s"},{"start_seconds":1392,"text":"вот получается если мы запускаем intent с то можем прямо прогнать вот полностью подключить какие-то через javascript","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1392s"},{"start_seconds":1400,"text":"методы подключить прем аккаунт с как вот мы с вами сделали на уровне приложения только мы здесь делаем эти советы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1400s"},{"start_seconds":1408,"text":"запускаем уже контрактом и мы проходим их все и допусти например весь процесс делаем и скажем делаем депозит потом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1408s"},{"start_seconds":1417,"text":"garden к этой операции нашим транзак нашим блокчейне но наши в контракте одну операцию вторую потом делаем здорово","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1417s"},{"start_seconds":1425,"text":"проверяем баланс и все ли совпадает как нужны если это у нас работы в правильном и получаем правильные цифры и принципе","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1425s"},{"start_seconds":1432,"text":"спокойно начать мой кот не поломали как работал так работ ты если уже что-то идет не так мы можем прямо пойти в explorer explorer the smiths например","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1432s"},{"start_seconds":1442,"text":"посмотреть какие аргументы передают наш код если вдруг он отправлять не того типа нам прямо там быть ошибкой мы и увидим если например и какие-то калмыки","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1442s"},{"start_seconds":1450,"text":"собак с неправильными увидим какие-то mysql бейки и как мне кажется это более простой способ для тестирования и он по итогу легче пишутся и больше дает","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1450s"},{"start_seconds":1459,"text":"надежности если на него минусы что он будет дольше срабатывать потому что как бы каждый вызов будет занимать какое-то время и если вы захотите запускать вам","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1459s"},{"start_seconds":1468,"text":"огромное количество за ним сотни тестов то вполне можно будет успеть за это время сходитесь поставить щек и вернуться так же преимущества этого теста что вы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1468s"},{"start_seconds":1477,"text":"можете с какой-то мере иметь такой последователь состоянии контракт может один раз его заполнить данный автомобиль долго что протестировать вам не придется","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1477s"},{"start_seconds":1484,"text":"каждый раз пересоздавать его с нуля вот значит здесь как такового примера у меня нет который показать как работает","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1484s"},{"start_seconds":1491,"text":"эти тесты по сути это просто методы javascript от просто вы запускаете не с фронтэнда ут11 за одним в вашем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1491s"},{"start_seconds":1498,"text":"javascript файлы я лично для этих методов могу вам приказывать посмотреть мне rstp сервер","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1498s"},{"start_seconds":1507,"text":"это по сути тоже самое только здесь еще некоторые помогать il n'y и методы то есть например вы можете прямо с помощью","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1507s"},{"start_seconds":1514,"text":"отвара стопе сервера создать себе юзеров можете с ним als die плоть код если вам потребуется можете с него посмотреть баланс а","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1514s"},{"start_seconds":1523,"text":"аккаунта нир например что проверить сработал ли вывод сработал депозит или нет можете также генерировать всякие","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1523s"},{"start_seconds":1532,"text":"ключевые фразы по мнемоническую фразу ключи не за этого вряд ли вам потребуется в тестировании тем не менее и можете даже из него выбрать","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1532s"},{"start_seconds":1540,"text":"забирать данные из яндексе ра то есть это с баз данных которая покрывает все транзакции которые происходят в","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1540s"},{"start_seconds":1548,"text":"облегчении вы можете взять например посмотреть какие им юзеры выполняли какие методы как бы не м ч лимит не очень следствие как вы из из такой вот","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1548s"},{"start_seconds":1556,"text":"архивный словно баз данных резанова тебя покажу как это может работать вот для того же самого","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1556s"},{"start_seconds":1564,"text":"нашего инкремента я ставлю этот код в описании ссылки в описании к видео значит мы используем здесь жертву для","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1564s"},{"start_seconds":1574,"text":"этого передаем но один вариант на передаем какой-то контракт который мы хотим проверять и запускаем какое-то к тестам запускаем какой-то javascript","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1574s"},{"start_seconds":1583,"text":"который я взгляд файл который мы хотим использовать значит мы его здесь видите это стандартные практики которые я оставлю","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1583s"},{"start_seconds":1590,"text":"можете просто их использовать и особо разбираюсь как там все это работает то есть мы инициализируем контракт по таким-то именем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1590s"},{"start_seconds":1598,"text":"это человек который подписывать наши нашей транзакции условно элис да потом инициализируем контракт","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1598s"},{"start_seconds":1606,"text":"мы проверяем за данный контракт вдруг у нас нет переменная инициализируем кошельки скажем если у","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1606s"},{"start_seconds":1615,"text":"аккаунт какое то необходимо качество покинув чтобы вообще работать с тестами дать вдруг там нет токи на вкус и снова","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1615s"},{"start_seconds":1622,"text":"у нас поломать все депозиты лучше вначале узнать когда мы это проверим и мы можем уже делать непосредственно механики вот как","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1622s"},{"start_seconds":1630,"text":"эта работа да там есть у этого я растопи метод view по сути get да где мы отправляем метод аниматоры какие-то параметры но у нас для get no money от","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1630s"},{"start_seconds":1639,"text":"параметров потом мы сначала называемый метод кол это не он . колда изменения отправляем опять же метод параметры и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1639s"},{"start_seconds":1647,"text":"кто подписывает аккаунта едем мы можем также здесь прибавить если нам нужно talking кажется talking закончишь я проверил все","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1647s"},{"start_seconds":1656,"text":"можно добавить добавить токена еще как его нужно добавить к нашему вызову проверяя начни","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1656s"},{"start_seconds":1664,"text":"упал и наш операции по сток она выполнилась проверяем следующее значение для этого числа и сравниваем изменилось","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1664s"},{"start_seconds":1670,"text":"ли она на единичку то же самое для декремента вычитаем проверяешь чтобы ты был у кого образовав но уже вычитаем и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1670s"},{"start_seconds":1677,"text":"для рср проверяем чтобы после ресета у нас был нолик если мы сейчас запустим вот примерно","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1677s"},{"start_seconds":1686,"text":"таким методом да то есть мы указываем здесь дживс 305 if u файл мы можем также указать там","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1686s"},{"start_seconds":1694,"text":"через параметр t какой конкретный теста мы хотим запускать если нам нужен приток один из всех сами хотим все ждать столько один проверяем можем так сделать","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1694s"},{"start_seconds":1701,"text":"вот так запускаем этой штукой и он на сайте прогоняет быстренько все вызовы это реально это все транзакции и мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1701s"},{"start_seconds":1710,"text":"можем давайте посмотрим не оставаться по этому контракту пока щас посмотрим что у нас происходит explorer нет мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1710s"},{"start_seconds":1719,"text":"посмотрим сейчас наш контракт увидим что наша тестирующая эта программка быстрым кого давить и запустила много много чего","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1719s"},{"start_seconds":1726,"text":"разного reset декремент инкремент и соответственно мы это запускаем и проверяем как у нас срабатывает ведь все","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1726s"},{"start_seconds":1736,"text":"пять теста у нас прошли успешно потому что он достаточно легкий функции давайте я покажу какое-то более сложные","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1736s"},{"start_seconds":1743,"text":"еще тест этот вариант для тестирования подобного кода значит вот какой из какого-то проекта который может быть","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1743s"},{"start_seconds":1752,"text":"работать вот елизово довольно много тестов у меня написано это тоже все гитхабе я оставлю после вам будет интересно посмотреть то есть мы например","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1752s"},{"start_seconds":1760,"text":"ну допустим да у нас есть разные видите здесь элис баб там кэрол мы отправляем кита депозит но давайте на этом при этом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1760s"},{"start_seconds":1768,"text":"есть метод junior баланс овна автоматически проверяет число обратно и сразу конвертирует его в мир то есть","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1768s"},{"start_seconds":1775,"text":"нота переводит эффекта nerve ниже вот есть функция депозита которая а вот так tokens вы можете сразу же отправить","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1775s"},{"start_seconds":1783,"text":"какой такой штуки в которой вы хотите отправить приложу при приложить в данной транзакции вы можете также здесь делать разные","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1783s"},{"start_seconds":1791,"text":"сравнения там тубе но тубе клаус ту чтобы там посмотреть скажешь как","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1791s"},{"start_seconds":1800,"text":"меняется баланс в случае с какой-то газ вы тратите есть здесь метод для просмотра баланса","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1800s"},{"start_seconds":1806,"text":"аккаунты junior баланса нет это view аккаунт баланс по-моему сейчас на иной ну где-нибудь он здесь ни у кого не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1806s"},{"start_seconds":1814,"text":"указывается сам метод для контракта мы просто должны будем посмотреть баланс давайте так нашу","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1814s"},{"start_seconds":1822,"text":"баланс вот в аккаунт аккаунт мир bounce да мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1822s"},{"start_seconds":1830,"text":"просто смотрим сколько у бога сейчас денег потом мы делаем какой-то вывод ему день денег и проверяем как у него изменился баланс но по большому счету","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1830s"},{"start_seconds":1838,"text":"такой может быть не самый изящный способ программирования потому что просто немного пишите такого не очень просил","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1838s"},{"start_seconds":1846,"text":"угодно тем не менее они прекрасные работы да вы можете проверять какие то конкретный эксепшен да вот здесь я проверяю что ведь у меня должна быть","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1846s"},{"start_seconds":1853,"text":"конкретная ошибка что не хватает токенах чтобы выплатить сделать вывод там что надо еще заплатить за комиссию а за","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1853s"},{"start_seconds":1860,"text":"комиссию мы заплатить не может вот так же у меня здесь есть контракт который еще работает с другим контрактом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1860s"},{"start_seconds":1868,"text":"телитесь инициализирую новый контракт который у меня работает с санджи был токенами вот этот в те конфликта кого-то","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1868s"},{"start_seconds":1876,"text":"иди соответственно мы запускаем его здесь методы не рад и наше сам основы контракт указаны здесь идти другой контракт дальше появляется ходе трети","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1876s"},{"start_seconds":1885,"text":"контрактом я еще через кросс взаимодействие указываю и какие-то санс внутренней механики проверяй как","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1885s"},{"start_seconds":1892,"text":"работать трети контракт с моим контрактом соответственно много разного кода и написав этот код я более менее","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1892s"},{"start_seconds":1900,"text":"уверен что моя мощь мой контракт работает правильно и нигде не происходит от двойной траты и прочее прочее ну теоретически","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1900s"},{"start_seconds":1910,"text":"конечно может это и катера поможет посмотреть что же там я не проверял но как бы это я не рассчитываю подразумевается что хакеры так найдете","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1910s"},{"start_seconds":1919,"text":"ваши уязвимости и выключить все с вас деньги в общем плюсы этого метода для меня что вы можете прям смотреть в облегчении все","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1919s"},{"start_seconds":1927,"text":"результаты если у вас какой-то метод упадет вы можете прям здесь увидеть что он вас файлов например на если он вас нет не требуется он у вас падает он сам","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1927s"},{"start_seconds":1934,"text":"не должен падать связано вы можете здесь это увидеть плюс например если вы хотите более сделать какие-то","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1934s"},{"start_seconds":1941,"text":"такие изящные этом как про искать более нетривиальный тест чтобы вы выпускаете миллион-биллион раз метод инкремент вы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1941s"},{"start_seconds":1950,"text":"можете например скажем где-то указать какую-то подсказку для себя до что например вот я я световыми я с этого места метод а хочу","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1950s"},{"start_seconds":1959,"text":"отдельно например его понять как он у меня конкретно этот метод работает все могу написать ему какие-то такие левые параметры которые нас реально функциями","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1959s"},{"start_seconds":1967,"text":"не используются но потом вы можете это увидеть у вас в облако спор или что такая конкретная функция как сработал","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1967s"},{"start_seconds":1976,"text":"как она потратила газ и прочее в общем разные методы от простого непосредственно тестирования каких-то","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1976s"},{"start_seconds":1983,"text":"отдельных функций smart контракта до таких глобальных функций которые проверяют прям полностью дерево состояние и проходит много разных своих","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1983s"},{"start_seconds":1993,"text":"операций доставляем какие-то комментарии в коде если вам потребуется это конечно не забудьте удалить потому что чем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=1993s"},{"start_seconds":2000,"text":"лишние лишними данными засорять транзакции от тем не менее это все у вас работать будет и если воспользуетесь люблю такого","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2000s"},{"start_seconds":2008,"text":"типа мир опять же с тобой не 305 сервер то вы сможете делать киты готовы методы вроде примерно нам если","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2008s"},{"start_seconds":2016,"text":"вам нужно сразу deposits контракта можете его деплоить отправив возм файл и он вас за за создаст мир сразу потянув","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2016s"},{"start_seconds":2026,"text":"ти контракт мне раз такая сервер вообще предназначен для таких в пту девелоперов которые захотят","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2026s"},{"start_seconds":2033,"text":"работать с ней блокчейном как бы как веб-сервиса они могут поднять такой сервер на сервер у себя во внутреннем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2033s"},{"start_seconds":2042,"text":"окружении дайте ну какие то ключи которые могут оперировать и просто управляется могу эту запросы там через пост методы скажем ментоны в thedao или","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2042s"},{"start_seconds":2050,"text":"трансфера нефти и используя ключ и которая есть на этом rest api сервере этот сервис будет делать такой достаточно простой вход для игр то есть","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2050s"},{"start_seconds":2059,"text":"можно взять готовый backend игры и просто заставить его очень по простыне тогда поменяю меня и по сути просто and","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2059s"},{"start_seconds":2067,"text":"point научить его научить эту игру сохранять все свои транзакции в блокчейн ввести аккаунты блок чень это мы потом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2067s"},{"start_seconds":2075,"text":"дописать ввод-вывод денег по сути все у вас готова игра но главное чтобы конечно ее этом как-то с франко не не хакнули не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2075s"},{"start_seconds":2083,"text":"научившись не научились вызывать сразу платящие методы нарушая механику игры вот поэтому если вам вдруг захочется","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2083s"},{"start_seconds":2091,"text":"начать не песни использовать этот непосредственно прямой взимать с контрактом через не нее опять же с или","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2091s"},{"start_seconds":2100,"text":"написать супер делая какие-то вызова через консоль через не версия лай вы можете по сути ограничиться какими такими","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2100s"},{"start_seconds":2107,"text":"раз тебя сервер с вами и катя тоже есть как применения от верстака сервисы есть у него веб-интерфейс по адресу web . нет","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2107s"},{"start_seconds":2115,"text":". вы тут можете вызывать какие-то методы прям вот по будто бы из командной строки только через сайт очень можно вызвать","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2115s"},{"start_seconds":2122,"text":"скажем посмотреть аккаунты которые провели своей talkin' of speaking на какой-то конкретный пул это как бы как","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2122s"},{"start_seconds":2130,"text":"конкретные бог через вызов вы можете загрузить залогиниться работать только в тест эти логин чтобы вдруг никак не скомпрометирую свой ключ и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2130s"},{"start_seconds":2138,"text":"вы можете даже подписались какой-то нерка здесь написать и от вашим ключом подпишется транзакция уйдет букчин","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2138s"},{"start_seconds":2146,"text":"сейчас начну отмечу что если вы захотите этот сервер использовать в мае нити то","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2146s"},{"start_seconds":2153,"text":"вам конечно рекомендуется поставить всего у себя на сервере потому что в противном случае вы будете как бы компрометировать ключи этому серверу","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2153s"},{"start_seconds":2162,"text":"нужны данные подписывать транзакции на изменение блокчейна в то знаете это не проблема отправлять ему ключи и собственно в данном случае когда я","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2162s"},{"start_seconds":2169,"text":"использую через вот такие вещи на отправляю конкретные ключи которые есть в моем аккаунте они уходят просто в","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2169s"},{"start_seconds":2176,"text":"открытом виде по сути на сервер потому что они никого не интересуют если же вы хотите использовать этот сервер боевом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2176s"},{"start_seconds":2183,"text":"режиме то лучше поставьте свой все кучи все код в открытом доступе и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2183s"},{"start_seconds":2189,"text":"делайте как бы такое в стиле web 2 программируете блокчейн","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2189s"},{"start_seconds":2198,"text":"ну и теперь тем как переходить к следующей теме давайте немножко по традиции сделаем практике попытаемся","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2198s"},{"start_seconds":2205,"text":"сейчас изменить наш контракт счетчика так чтобы он опять же начинал тратить деньги и посчитаем правильно или уходят","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2205s"},{"start_seconds":2212,"text":"деньги вдруг мы берём что-то лишнего или например как у нас никак срабатывают средства для этого мы к нашему методу инкремент который мы уже один раз","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2212s"},{"start_seconds":2220,"text":"сделали pebble опять добавим макрос paypal то есть это позволит нам забирать деньги у пользователей мы пока","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2220s"},{"start_seconds":2230,"text":"никак не обрабатывает просто забираем такой у нас простой пример теперь значит мы нашли этот инкремент изменим так","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2230s"},{"start_seconds":2238,"text":"чтобы мы сначала читали баланс пользователи давайте сделаем const баланс один мы будем читать баланс","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2238s"},{"start_seconds":2247,"text":"методом венера как-то там мир аккаунт мир баланс и нам нужно будет указать здесь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2247s"},{"start_seconds":2256,"text":"пользователи то есть мы нашей у алисы будем обратил баланс и теперь на что мы должны будем отправлять","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2256s"},{"start_seconds":2265,"text":"давайте сделаем еще некую константу депозит которые могут отправлять с возьмем первым отправляем допустим 2 .","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2265s"},{"start_seconds":2274,"text":"чтобы у нас это было где-то централизовано записано значит мы отправляем tokens чтобы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2274s"},{"start_seconds":2283,"text":"переделал все кто не мы запускаем метод utils . вот и там конверт","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2283s"},{"start_seconds":2294,"text":"конверту не tuner по моему рту мир пишем депозит","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2294s"},{"start_seconds":2302,"text":"теперь мы еще раз прочитаем баланс в конце когда мы сделали это самый депозит когда мы уже прочитали наш баланс","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2302s"},{"start_seconds":2309,"text":"возьмем 2 баланс и теперь попытаемся сделать значит чтобы мы проверим","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2309s"},{"start_seconds":2317,"text":"опять же у нас там есть метод utils конверт","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2317s"},{"start_seconds":2327,"text":"конверты флота нам надо взять вот по моему как то так раундов у дага","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2327s"},{"start_seconds":2335,"text":"мы должны округлить до некого дробного значения быть весь вычитанием значит у нас должен быть баланс один бой больше","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2335s"},{"start_seconds":2344,"text":"чем баланс 2 на собственно размер труби депозит до как то так то есть мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2344s"},{"start_seconds":2354,"text":"должны мы сделали операцию и должны быть посмотреть у нас баланс реальная уменьшился но баланс вашего пользователя давайте мы сейчас перестроим наше","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2354s"},{"start_seconds":2362,"text":"приложение и запустим опять тест","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2362s"},{"start_seconds":2368,"text":"наше приложение от кончается 904 у нас вышла ошибка что мы не можем взять","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2368s"},{"start_seconds":2377,"text":"аккаунт баланс потому что мы написали не ешь да окей я ищу поторопился","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2377s"},{"start_seconds":2385,"text":"так теперь запускаем еще раз","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2385s"},{"start_seconds":2396,"text":"мы отправили депозита проверяем изменилось ли баланс по идее конечно мы должны сочетать какие-то обратно","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2396s"},{"start_seconds":2403,"text":"действия что пришло ли к нам ведь у нас здесь в тест не прошел потому что мы ожидали что будет разница 2 на самом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2403s"},{"start_seconds":2410,"text":"деле была разница чуть больше это произошло потому что мы с этого аккаунта запустили данный вызов и помимо двух токенов мы также потратили что-то на газ","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2410s"},{"start_seconds":2418,"text":"до если мы будем запускать тесты для кого 3 аккаунта мы такого тиснения должны увидеть но здесь в","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2418s"},{"start_seconds":2427,"text":"данном случае мы должны не сделать ту би ту би клаус ту это один из методов геста и мы сделаем что например нас не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2427s"},{"start_seconds":2434,"text":"интересует разница меньше чем 1 100 соответственно если вот эти эти погрешности у нас должны","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2434s"},{"start_seconds":2443,"text":"пропасть таким образом то есть мы не будем обращать внимание если какие-то","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2443s"},{"start_seconds":2449,"text":"мелочи вам что примерно округлённо до 1 бывает снег включит это как раз тот","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2449s"},{"start_seconds":2457,"text":"случай sharpies она наверно какой то мусор поэтому по запускаем еще раз и должны увидеть результат вашу плети прошел тест","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2457s"},{"start_seconds":2466,"text":"то есть мы можем сейчас посмотреть у нас в облачении отразилось то есть вот если мы сейчас перейдем по этому контракту полон да кстати вот он и есть у нас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2466s"},{"start_seconds":2474,"text":"здесь вы видите наш контракт прибавляет постепенно токенов потому что мы отправляем к моему с другого сейчас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2474s"},{"start_seconds":2481,"text":"контракта вот мы отправили в данном случае только что только что один токен на 2 токина и собственно изменился","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2481s"},{"start_seconds":2489,"text":"баланс мы посмотрели что он у нас работает правильно","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2489s"},{"start_seconds":2497,"text":"окей с тестированием я думаю мы закончили показали много чего разного давайте переходим теперь к вопросам которые связаны с обновлением контрактом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2497s"},{"start_seconds":2506,"text":"опять же давайте начнем с примеров и будет понятно какие у нас есть сложности и как их решать и начала значит если часто стран","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2506s"},{"start_seconds":2514,"text":"присмотреться то в нашем контракте счетчика я сделал небольшие изменения во первых я убрал у него здесь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2514s"},{"start_seconds":2521,"text":"инструкцию дефолт то есть он спер нет дефолтного значения для контракта мы создаем конструктором методом вот таким","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2521s"},{"start_seconds":2529,"text":"макросом и нет методом нею мы создаем текущее значение нашего контракта соответственно посылку нас нет дефолта чтобы наш контракт не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2529s"},{"start_seconds":2537,"text":"не требовал дефолта я добавил чтобы у нас не было паника паника по дефолту мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2537s"},{"start_seconds":2544,"text":"убрали это и теперь мы можем начать сделать new build и я рубил точнее и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2544s"},{"start_seconds":2552,"text":"вызвать например у текущее значение посмотреть какой у нас есть здесь где тамбур видеть вас текущее значение это четыре теперь вот предположим что у нас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2552s"},{"start_seconds":2561,"text":"есть какой-то контракт счетчику от время работал целых четыре человека в этом нажала кнопочку допустим и теперь мы пришли к выводу что мы хотим поменять","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2561s"},{"start_seconds":2568,"text":"контракт например мы хотим добавить какие-то новые поля в наш наш контракт или поменять тип и у текущих полей","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2568s"},{"start_seconds":2577,"text":"давайте например я возьму для примера в наше жилье который у нас в данный момент является а и 8 то есть это число целый","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2577s"},{"start_seconds":2585,"text":"который может быть его куплю лет отрицательным так и положительным с размером 8 бит я его поменяю на you 128","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2585s"},{"start_seconds":2593,"text":"то есть она будет теперь гораздо длиннее и только on-site понятно но совсем по-другому хранится в памяти у нас теперь здесь потребует контракт на","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2593s"},{"start_seconds":2602,"text":"написать еще чтобы мыло в отделе да тоже пишу 28 и не противимся вот мы решили теперь работать что у нас на счетчик","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2602s"},{"start_seconds":2609,"text":"будет большим и только положительным но какая-то логика поменялось на так хочется пункт о нам по времени уменьшает как сделать мы давать билды наши","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2609s"},{"start_seconds":2617,"text":"приложения ведь она компилируется нормально делаем ему где в диплом загружает блокчейн и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2617s"},{"start_seconds":2626,"text":"попробуем сейчас сделать такой же метод get нам бы get нам бы и ведь ему вас уходит ошибку неопределенный выход не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2626s"},{"start_seconds":2635,"text":"определено длина поле то есть как что произошло у нас есть некий контракт у него есть состояние и набор функций","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2635s"},{"start_seconds":2642,"text":"которые мы используем для чтения этого состояния для работы с ним нам на издание было размечена исходя из какой-то сетки дамы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2642s"},{"start_seconds":2651,"text":"знаешь там есть вылью с таким но такое такая переменная вал какое-то никого с таким типом осень теперь вдруг внезапно","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2651s"},{"start_seconds":2658,"text":"мы сказали что там находится другой другое значение другой размер но наш контракт с прошлым размером до","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2658s"},{"start_seconds":2667,"text":"соответственно мы не понимаем что происходит и у нас просто контракт падает потому что он не может прочитать это значение до это условное","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2667s"},{"start_seconds":2675,"text":"приятельского это жесткий диск там в беды в него гость мы не понимаете что там написано как и какие там есть размеры и не можем прочитать то есть","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2675s"},{"start_seconds":2683,"text":"если мы добавляем новые функции или меняем а какие то непосредственно функции проблем не будет потому что функции есть функция не отдельно внизу","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2683s"},{"start_seconds":2690,"text":"все как бы перри собираются для того чтобы мы могли менять значение внутри состояния какие-то типы или новые","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2690s"},{"start_seconds":2699,"text":"добавляются до структуры нам потребуется сделать миграцию давайте кстати ради интереса вопрос а что будет если мы сейчас этот контракт назад переделаем b8","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2699s"},{"start_seconds":2708,"text":"будет ли это работать у меня надежду что должно работать мы можем допустим мы сделали какое-то обновление контракта мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2708s"},{"start_seconds":2715,"text":"сломали контракт ведь сейчас это не не с но не дееспособны штука они там никаких действий сделать нельзя но мы давайте его пересоберём со старым значением до","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2715s"},{"start_seconds":2724,"text":"условно можем хоть откатить просто запустить старый вазом файл перезаписать поверх но может пересобрать как данном","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2724s"},{"start_seconds":2732,"text":"случае и сейчас если надеюсь что эти насыпать работает контракт вернулся к прошлой сетки и минуте понимаю теперь как это должно быть на самом деле окей","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2732s"},{"start_seconds":2741,"text":"ну допустим а вот если мы не хотим откатываться если нам прям кровь из носа все-таки мы хотим сделать у 128 для этого нам надо сделать некую функцию","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2741s"},{"start_seconds":2749,"text":"которую мы назовем функции миграции состояния значит мы будем писать и и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2749s"},{"start_seconds":2756,"text":"таким образом значит мы должны указать там макрос и нет и нет мы ждем такой и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2756s"},{"start_seconds":2763,"text":"нет который игнорирует текущее состояние контракта и к то есть мы должны изучать элинор стоит дальше мы пишем название нашей функции","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2763s"},{"start_seconds":2772,"text":"public фанкшн например мы назовем ее мои great играет да и она у нас будет","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2772s"},{"start_seconds":2780,"text":"возвращать состояние этого контракты она у нас называется сел","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2780s"},{"start_seconds":2786,"text":"как мы это спас получим мы получим в исходя из предыдущего значения","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2786s"},{"start_seconds":2794,"text":"данного из предыдущего состояния данного контракта вот так же значит наверное стоит","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2794s"},{"start_seconds":2802,"text":"написать чтобы это был приватным методом до чтобы кто угодно не мог запускать ее этот метод только чтобы данный","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2802s"},{"start_seconds":2810,"text":"контрактом запускать данный метод ну как бы автоматически мы как владельца на контракты сможем запустить данный метод а кто угодно из может сделать миграцию","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2810s"},{"start_seconds":2819,"text":"теперь значит мы должны взять сделать здесь принципе достаточно понятную вещь мы должны взять старое состоянии","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2819s"},{"start_seconds":2827,"text":"контракта и трансформирует его в новой сцене контракта как и можем взять старый сцене контракта мы пишем значит мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2827s"},{"start_seconds":2834,"text":"определяем derive борщ борщ сериал аси the sea реализатор","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2834s"},{"start_seconds":2845,"text":"который написали оптимальный стерилизатор который написали ребята из них","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2845s"},{"start_seconds":2851,"text":"где сирии одессе real life он работает более эффективно чем стандартные методы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2851s"},{"start_seconds":2858,"text":"так что то меня совсем здесь криво получается так это нам здесь не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2858s"},{"start_seconds":2865,"text":"нужно так теперь мы пишем значит с нашу старую структуру например выпишем struck the","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2865s"},{"start_seconds":2874,"text":"old ровня какой-то контракт который раз было раньше и раньше у нас был в или типа и 8","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2874s"},{"start_seconds":2882,"text":"до теперь мы берем и на основании этой","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2882s"},{"start_seconds":2888,"text":"структуры читаем берем некой с первое состояние то мы пишем лет state","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2888s"},{"start_seconds":2896,"text":"один равняется old а","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2896s"},{"start_seconds":2903,"text":"этот тип типа у нас типа old равняется environment этот одна из функций","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2903s"},{"start_seconds":2911,"text":"которого проходили в прошлый раз с they tried и мы читаем старые состоянии если вдруг какая-то ошибка то мы пишем здесь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2911s"},{"start_seconds":2919,"text":"что-то пошло не так и на нет старого стояния что-то произошло мы не знаем что произошло","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2919s"},{"start_seconds":2927,"text":"но это нас не устраивает теперь значит мы все уже мы готовы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2927s"},{"start_seconds":2936,"text":"возвращать мы делаем теперь неужели you do like new вылью она у нас будет уже формацию","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2936s"},{"start_seconds":2945,"text":"128 и мы его приравняем state ван целью","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2945s"},{"start_seconds":2954,"text":"с ю 128 до мы как бы переведем старое значение и сделаем а теперь you 128","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2954s"},{"start_seconds":2963,"text":"теперь мы должны уже возвращать просто сел и здесь вместо в или мы будем возвращать неужели","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2963s"},{"start_seconds":2970,"text":"вот такой метод","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2970s"},{"start_seconds":2974,"text":"[музыка]","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2974s"},{"start_seconds":2975,"text":"тут наверное нам написано что мы должны с большой буквы использовать добра или правильные имена имена","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2975s"},{"start_seconds":2984,"text":"вот теперь не жалуется давайте мы теперь перебил дим это все дело ошибок нет диплом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2984s"},{"start_seconds":2993,"text":"так теперь у нас как мы понимаем уже опять не должно читаться наше состояние потому что у нас потеряно стоит у нас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=2993s"},{"start_seconds":3000,"text":"был раньше одного типа теренса и другого но если мы теперь возьмем и так какой у нас имя контракт давайте мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3000s"},{"start_seconds":3008,"text":"запустим watches правильно значит мы запускаем теперь не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3008s"},{"start_seconds":3014,"text":"кол называем адрес контрактов метод майк рейд","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3014s"},{"start_seconds":3021,"text":"мы запускаем без параметров и мы запишем что его вызвал аккаунт о еде и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3021s"},{"start_seconds":3030,"text":"контракт она нас срабатывает и давайте попробуйте прочитаем номер у нас опять стал 4 ведь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3030s"},{"start_seconds":3039,"text":"она он нас уже теперь у 128 ну как бы взяли и пили записали его абсолютно такой же метод будет у нас если нам","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3039s"},{"start_seconds":3047,"text":"потребуется например дописать какое-то новое значение да например вы сейчас мы давайте у нас было","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3047s"},{"start_seconds":3054,"text":"стоит просто с одним вылью а теперь мы хотим например добавить еще целью","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3054s"},{"start_seconds":3060,"text":"22 и например сделать его тоже и у вас 8 мы его тоже при инициализации делаем их","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3060s"},{"start_seconds":3068,"text":"мир были едва как 0 да ну теперь наши функции миграции тоже нас потребовать вернуть еще какой","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3068s"},{"start_seconds":3077,"text":"то вы едва а мы например его делаем по умолчанию 0 ноликом у нас его не было но мы его теперь делаем и мы теперь сможем","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3077s"},{"start_seconds":3085,"text":"с ним работать то есть в данном случае если это будет какой-нибудь слуг абсент look at me up это в принципе никакой ранее не имеет","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3085s"},{"start_seconds":3093,"text":"главное чтобы мы это все сделали в том же порядке которому нас был изначально устоять и не надо менять местами потому","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3093s"},{"start_seconds":3101,"text":"что мы как бы разметим с наше состояние контракта по новым правилам вы прочитали стали значение по порядку и пишем новое","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3101s"},{"start_seconds":3108,"text":"значение в том в правильном порядке то что потом когда мы будем мышц или его тоже мигрировать чтобы мы тоже не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3108s"},{"start_seconds":3115,"text":"сбились с лучше сохранять порядок давайте-ка дело не рубил где в диплом и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3115s"},{"start_seconds":3123,"text":"у нас опять же сейчас должно не работать чтение потому что у нас поменялся поменялась состоянием и сейчас опять","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3123s"},{"start_seconds":3131,"text":"сделаем мои great то опять у нас все должно починиться вас просто как бы добавится в состоянии теперь новая переменная","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3131s"},{"start_seconds":3140,"text":"так что там он не хочет у нас работать у нас не может уже чтение потому что у нас да теперь когда у нас ведь ошибка у меня","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3140s"},{"start_seconds":3149,"text":"в коде у нас теперь состоянии стороне и а и 8-ой у 128 поэтому он не смог сделать миграция не смог прочитать старые состоянии контракт но нас это не","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3149s"},{"start_seconds":3158,"text":"касается как бы просто я уже в настройках пишу код да получается по и большому счету должна быть метод мои great например 2 и вообще в идеале","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3158s"},{"start_seconds":3166,"text":"конечно нужно делать какую-то версию версия низации то есть я должен написать что версию нас один потом эти два и предварительно что если версии 2 то мы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3166s"},{"start_seconds":3174,"text":"разрешаем делать какие-то методы теперь мы просто перестраиваем делаем где в диплом и запускаем и great и я","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3174s"},{"start_seconds":3182,"text":"надеюсь что у нас теперь сработает до похож на сработало и очевидно что","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3182s"},{"start_seconds":3190,"text":"теперь мы должны уметь читать наш номер но теперь у нас все появилось новое значение мы увеличили state там его пири-пири записали","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3190s"},{"start_seconds":3198,"text":"собственно так это работать миграция состоянии видите ничего сложного повторяясь если вы передадите функции не пережимал не проблема пишете функции менять функции как угодно что хотите","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3198s"},{"start_seconds":3206,"text":"делать если же вы хотите менять сама вот это свое состояние пишите методы которые читают то расстояние и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3206s"},{"start_seconds":3214,"text":"нужным образом трансформирует и перезаписывать новое состояние может быть некий здесь такой трюк если допустим выпер записывать и состояния","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3214s"},{"start_seconds":3222,"text":"которые очень длинный например у вас есть массив какой-нибудь они за там из из тысячи пользователей и вы хотите всех пользователей например там как-то переформатировать например добавить им","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3222s"},{"start_seconds":3231,"text":"новое поле как каждый пользователь например там что-то сгенерировать для них допустим к это хэш специальный и может и хп учиться что вам не хватит","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3231s"},{"start_seconds":3241,"text":"газа что по одной транзакции запустить это полный цикл миграции как бы это тоже не является проблемой тут механизм здесь","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3241s"},{"start_seconds":3248,"text":"может быть таким вы сначала читаете старое состоянии потом создаете например для 100","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3248s"},{"start_seconds":3256,"text":"пользователя первых 100 пользователей обновленные массив генерировать новые новых пользователей сохраняются новых","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3256s"},{"start_seconds":3263,"text":"пользователей и старых пользователей заменяете массивом где вот что убрана до условно было 1000 стала 900","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3263s"},{"start_seconds":3271,"text":"соответственно вам просто нужно будет этот метод запустить энное количество раз до наших лучи 10 раз и вы всех пользователей по очереди перед","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3271s"},{"start_seconds":3279,"text":"генерировать и сделать их новым как только вы сделать это 10 таких транзакций ваш контракт опять станет рабочим и вы сможете его","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3279s"},{"start_seconds":3287,"text":"сразу сайт рабочим и просто вид как бы данные перенесете последовательно опять же неплохо иметь какой-нибудь ключ какой-то флаг точнее заболевал","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3287s"},{"start_seconds":3296,"text":"значением true и false и ставить его скажем куча контракт нам сделать что-нибудь типа как это когда какие-то технические работы проводятся то есть чтобы все","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3296s"},{"start_seconds":3305,"text":"действия были недоступны в этот момент был словно обеспечиваете контакт контракт делайте его","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3305s"},{"start_seconds":3313,"text":"неспособным приделать об обновлении прогоняете весь свой стоять циклом и опять включает силу и по большому счету","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3313s"},{"start_seconds":3321,"text":"никаких проблем не будет все должно работать такой методикой вы можете обновлять свои состояния и делать новые данные новые","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3321s"},{"start_seconds":3330,"text":"значения может быть китов пиксель баги и прочее значит вы можете это делать вот повторюсь за тех пор пока данные аккаунт","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3330s"},{"start_seconds":3337,"text":"у вас имеет ключи доступа как только вы хотите уже отправить контракт свободное плавание вы удаляете через не ордере","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3337s"},{"start_seconds":3346,"text":"ткий не жди","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3346s"},{"start_seconds":3347,"text":"[музыка]","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3347s"},{"start_seconds":3349,"text":"лит-ра нет нигде лид майн узкий вы можете удалить себе ключ от этого","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3349s"},{"start_seconds":3357,"text":"контракта который вас был и доступа после этого вы будете в eg спорили видеть вот здесь что у вас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3357s"},{"start_seconds":3365,"text":"контракт с золоченой где все таким образом больше трюки невозможны дальше вы не можете ничего изменять своим контракту как работа так работа извините","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3365s"},{"start_seconds":3373,"text":"если какие-то проблемы но они навсегда уже с пользователями но естественно с контрактом поэтому вот есть как бы некое такое","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3373s"},{"start_seconds":3381,"text":"понятийное важное свойство для контрактов какие бы там ни были нефти якобы не изменяем и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3381s"},{"start_seconds":3389,"text":"какие бы не были токены которые где-то прописаны по баланса внутри контракты сих пор пока на контрактный злотин как бы есть техническая возможность человеку","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3389s"},{"start_seconds":3398,"text":"владеющему этими ключами взять и полностью пересобрать его но словно хоть и нефти и считается неизменяемым токены","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3398s"},{"start_seconds":3406,"text":"мда но если контрактный залочен пример человек может прийти пробежаться по цене курьер сделать так что пирсинг ти будет пролежать ему допустим из него есть","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3406s"},{"start_seconds":3414,"text":"доступ к этому поэтому имейте ввиду как бы тут есть вещи которые как бы на уровне","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3414s"},{"start_seconds":3422,"text":"этики какой-то находятся есть уровни который находится на техническом карьере то есть для не заочного контракта нет проблемы перезаписать по сути все что","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3422s"},{"start_seconds":3431,"text":"угодно может пройти там и всем баланс нолики поставить если захочет сейчас заходит понятно что","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3431s"},{"start_seconds":3437,"text":"нет такой мотивацию человека как правило поставить для совы контракта какие-то плохие значения потому что если он","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3437s"},{"start_seconds":3445,"text":"владеет ключами он так и так может вывести все что кендо вот эти токи на по сути сюжет на контракте я могу взять и вывести пользователи великий свои","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3445s"},{"start_seconds":3453,"text":"внутренние депозита сюда я могу взять их их все вместе неважно что там есть на контрактник нолики и единички но если у контракта самого нет средств то как бы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3453s"},{"start_seconds":3461,"text":"до свидания но можно и поменять что-то вот на уровне таком паук сильно поменять состоянии единственное что как бы вы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3461s"},{"start_seconds":3470,"text":"можете смотреть что был ли какой-то леди поле контракт если вдруг тут идет вредоносная какие были вызовы как что","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3470s"},{"start_seconds":3479,"text":"там что там вызывалась но конечно что же может быть по сути такой хитрый человек может назвать как-то не нейтрально а при этом сделать что-то другое а потом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3479s"},{"start_seconds":3488,"text":"предстоит контракты и сделать от функций опять работал как раньше короче по цифр попросту по названием тоже не всегда догадаешься но в целом","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3488s"},{"start_seconds":3497,"text":"как бы есть некие механики у пользователей для того чтобы контракты свои","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3497s"},{"start_seconds":3504,"text":"изменять даже если они уже за диплоидных сеть и уже работает имеет пользователей тем не менее если того требуют","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3504s"},{"start_seconds":3512,"text":"обстоятельства при этом случилось какое-то важное обновление все равно можно изменить и функции и","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3512s"},{"start_seconds":3520,"text":"состоянии контракта сделать так называемый миграцию я надеюсь этим были понятны спасибо что посмотрели данное видео давайте не сейчас небольшую я","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3520s"},{"start_seconds":3529,"text":"сделаю рекламу умер проходит хакатон он называется me to build он стартует 27","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3529s"},{"start_seconds":3536,"text":"августа и пройдет от 12 сентября там есть формат и онлайн и оффлайн участие для многих городов в сша в европе есть","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3536s"},{"start_seconds":3545,"text":"offline методы где можно прийти и как бы в компании худей поработать но везде можно прийти работать и онлайн ответственно от нас требуется","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3545s"},{"start_seconds":3554,"text":"зарегистрироваться здесь и призы это миллион долларов виде денег и финансирование тут есть разные призы от","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3554s"},{"start_seconds":3562,"text":"разных партнеров и которые достаточно авторитетное жюри вы можете поучаствовать если вдруг вы","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3562s"},{"start_seconds":3571,"text":"захотите найти себе партнеров по команде и специальный сайт где можно это сделать можно посмотреть открытые позиции который прямо сейчас есть у людей","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3571s"},{"start_seconds":3580,"text":"которые ищут кого-то и есть люди к вы можете посмотреть как бы как бы то есть это позиция от команд который","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3580s"},{"start_seconds":3588,"text":"ищут кого-то а это люди которые оставили свои профили которые ищут чтобы они могли подделать и соответственно кто мог","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3588s"},{"start_seconds":3595,"text":"их позвали к себе в команду отдельного рассмотреть посмотреть его команды в общем если вдруг вы даже не программисты","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3595s"},{"start_seconds":3602,"text":"не хотите например еще сразу писать код на вы например можете сделать фронт-энд или вы можете делать дизайн верил можешь сделать какой-нибудь копирайтинг marketing анис или просто вы художник","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3602s"},{"start_seconds":3611,"text":"который хочет нарисовать и лифте для вас есть возможность на этом хакатоне тоже найти свое место свою какую-то к систему","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3611s"},{"start_seconds":3619,"text":"найти contributor вместе сделать проект во первых научитесь разумеется многому новому познакомитесь каких-то сессиях с","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3619s"},{"start_seconds":3627,"text":"разработчиками мир и с участниками с членами жюри и при этом совсем crushed by призовой фонд не так много сейчас","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3627s"},{"start_seconds":3636,"text":"вообще не на разработчиков мире поэтому я всех уверяю что шансы на призы есть января у каждого достаточно желания и по","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3636s"},{"start_seconds":3645,"text":"сути какого-то стремления сделать полезный продукт ваши усилия наверняка будут оценены","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3645s"},{"start_seconds":3652,"text":"на этом у меня все спасибо за внимание и до новых встреч продолжим наш курс в следующем видео в описании к видео есть","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3652s"},{"start_seconds":3659,"text":"ссылки на предыдущие курсы видео который вас очень много смотрите изучайте раз работаете с нею и участие наших которых","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3659s"},{"start_seconds":3668,"text":"которые проходят достаточно регулярно спасибо и всем пока","url":"https://www.youtube.com/watch?v=ijs691mlEfk&t=3668s"}],"youtube_url":"https://youtube.com/watch?v=ijs691mlEfk","url":"https://near-pedia.xyz/videos/ijs691mlEfk"}