Продвинутая работа со смарт-контрактом (Курс Rust на NEAR)
Nothing is loaded from YouTube until you press play, and then without tracking cookies.
About this video
Все видео курса • Курс Rust на NEAR (RU) Совместный курс NEAR & 4ire Labs
0:00 Приветствие 01:40 NEAR-API-JS 13:32 Развертывание контракта 17:04 Переменные окружения 23:10 Структуры данных 31:13 Promise 34:10 Cross-contract вызовы 51:39 Обработка исключений 57:02 Вопросы
Слайды из презентации третьего урока docs.google.com/presentation..., код для кросс-контракт счетчика https://github.com/zavodil/rust-count...
Подписывайтесь, чтобы получать обновления о новостях NEAR, акциях, запуске проектов, баунти, хакатонов Русскоязычное сообщество NEAR t.me/near_protocol Твиттер / near_protocol Общение с разработчиками t.me/openwebdev
Follow the latest from NEAR Protocol on: Website: near.org Discord: near.chat Blog: near.org/blog Twitter: / nearprotocol GitHub: github.com/near github.com/nearprotocol #Blockchain #FutureIsNEAR #NEAR #nearprotocol #rust #wasm #assemblyscript #раст
Transcript
8,437 wordsCaptions as YouTube publishes them, usually machine-generated, so product and people names can be misheard.
- 0:00
всем привет мы продолжаем курс разработки сумма контрактов на расти для обучения нет протокола меня зовут вадим ильин я представляю мир работаю в отделе dvl мы провели уже два занятия сегодня будет то что назвал продвинутой работа в смарт контрактом мы многие вещи разбирают и поверхностно в прошлые разы чтобы не сильно концентрироваться таких сложных темах сегодня постараемся покопаться вот в каждой части которой мы до этого разобрали я покажу какие то
- 0:31
вещи которые нами к вам пригодятся если вы начнете делать какие-то проекты на нее вообще в целом поучений у нас остается два занятия я планирую на следующем занятии сделать выпуск по тестированию и по миграции контрактов так довольно много всего разного и наверно последний день мы разберем наконец большой проект вот это постараемся разобрать все файлы которые не обходит все механики все действия надеюсь что будет полезно так значит мы с вами сделали два занятия
- 1:04
и мы научились более-менее как-то криво косо но тем не менее можно с вами умеет писать код на раз мы умеем его компилировать возьму файлы с помощью библиотеки не расти крс мы умеем разворачивать наш код блокчейне с помощью команды не эрзи play и мы умеем создавать юваль то есть интерфейс и какие-то приложения сайты или как то еще взаимодействие с нашим контрактам с помощью мир опять же с это библиотека для javascript а
- 1:34
тесто мы сегодня будем разбирать все эти аспекты более глубоко давайте начнем с ней опять же с это библиотека она присутствует в npm то есть если вдруг вы захотите с нуля собирать свой продукт до этого мы с вами делали это клонируй какие-то примеры и это мне кажется самом деле идеальный способ для того что начинать работать то есть можно взять какой-то пример более подходящей на сайте и к замку . мир .
- 2:02
word май каждое занятие на него смотрели выбрать что-то подходящее там уже будет написано все необходимое взаимодействие и просто допиливать под свои задачи бы убирать не нужно добавлять нужные если же вы хотите с нуля то вы можете создать новый про новый проект на audi установить команды npm install мир и 5с она становится у вас и соответственно вы сможете подключить свой смарт контрактах вашему
- 2:33
приложению который поддерживает javascript импорт этой библиотеки в подсак производится такой обычной строчкой импорт что-то как нервы 5 же с из друзяки не роджерс потом из этой переменной не рака и вы сможете много чего полезно вытащить мы сейчас про это поговорим чтобы работать с ключами которые ваши пользователи сможет подписывать какие-то транзакции мы порно потребуется импортировать кейс торс это вот эти части не рупий обычно ключи после логина в ваш бог сын
- 3:13
аккаунт будет храниться в local storage браузера если вдруг потребуется подписывать или джером джером будете подписывать в любом случае не рычат и все берет на себя вы об этом совершенно не должны беспокоиться мы сможем просто и легко отправлять команда блокчейн ключи необходимо будет подхватывать это самая ньера 5 же с волшебное пойдемте дальше значит нам потребуется сконфигурировать наше подключение здесь нам важно указать тип сети который мы
- 3:46
будем использовать мы работали всегда втисните можно будет потом со временем принятия майнит когда вы уже готовы будете запускаться в инете есть некоторые адреса кошелька этом explorer и собственно письмо да куда будут уходить запросы ваших пользователей разменять они будут уходить в такому лицу from обработанном виде приватный буче никуда не уходят с компьютера вашего клиента дальше мы создадим объект мир и объект валюта не нам тоже потребуются для того
- 4:17
чтобы в приложении делать вещи которые нам будут нужны а если нам нужно подключить пользователь то есть некая кнопка логин на сайт то мы должны в нем будет вызвать воле . этот объект воли который мы создали через вольт connection что тоже является частью не робей мы будем подключать пользователям нет методом валят .
- 4:42
request сайн ин нам нужно нужно будет указать именно контракта который мы хотим чтобы пользователь авторизовала своем аккаунте некой имя который выйдет ему на экране когда он будет конвертится к этому приложению и дальше есть два параметра куда нужно быть переадресовать пользователя в случае успеха и случае неуспеха например там у пользователя нет кошелька и он может не справиться с
- 5:09
подключением и вернулся куда-нибудь на вашу страницу где вы скажете ну как создать кошелек если же он все сделает хорошо вы можете принять его на странице где ему скажут молодец в голову все погнали дальше acta это делается где это тоже вначале при инициализации вашего приложения мы будем сделать новый новый объект типа мир и 5 . контракт здесь мы указываем аккаунт и контракт название контракт то есть в нашем случае когда мы делали тест эти это это какие-то вот
- 5:50
сложные там дев минус что там создавали дарит у либо вы можете создать свое имя и записывать в его то есть это какой-то контракт которым вы управляете куда вы хотите что ваши пользователя обращались для работы с приложений дальше мы указывали view методы и чинить методы если помните у нас были очень методы инкремента в метод были get нам для нашего счетчика каунта соответственно мы можем записывать какие-то методы сюда случае если нам потребуется и
- 6:20
какие то вот аккаунт это объект который мы создали раньше то есть если мы все сделаем правильно опять же можно просто брать код из примеров кода у вас это все будет практически играть контра контра вы скопируете поменяется методы и все будет работать и собственно такая плоть и кровь уже на вашего приложения это метода по чтению из блокчейна и по записи в блокчейн читаем мы методом вывел мясо тогда у нас вот как контракт
- 6:53
. view my ass вот какой то вот она случайно был дед нам и мы указываем параметры которые нам нужны здесь который мы отправим на вход нашей функции после этого мы получаем оптимальность штучка и weight то есть мы обязательно дожди дождемся исполнение данного метода и после этого пройдем дальше и пример можем вывести в консоль то число которое мы получили из-за блокчейн если же мы
- 7:17
хотим чтобы использовать или что-то записал блокчейн например какое-то свое действие ваше приложение то мы указываем по сути таким же способом только мы здесь еще позже присоединяем видите газ это опциональный параметр если вы не укажете будет некое значение по умолчанию передано и какое-то количество рек тонер для это токины которые мы готовы отправить с данным запросам йог tanir
- 7:49
это 10 2 4 степени мир единичек то есть чтобы один таким передать там мы должны писательство 40 здесь сестра это сделали того чтобы мы не хранили в обучении ники дробной части мы храним там целый для оптимизации тут важное замечание намекалось по комнате что если мы передаем токены к параметру то каждый раз это будет вызывать интерфейс кошелька и пользователь будет нажимать прям в кошельке подтверждение данного запроса потому что мы не даем приложению тратить
- 8:21
деньги без спроса если же это просто какой-то метод который нет я будет рад как пользователь покинув то мы можем это сделать просто нажатием кнопки если все подключено заранее есть ключ в памяти браузера то этот метод выполнится автоматически наверное здесь стоит все упомянуть что у каждого ключа есть некий kia ловинс то есть нет разрешение на трату которой удается при выписывании этого ключа это
- 8:49
сделано для того чтобы какой-то ключ не смог потратить слишком много средств то есть него уделяется к эта маленькая сумма и он не может тратить например случае игры человек сможет выполнить какое-то комплекта не знаю допустим 500 покупок на маркетплейсе пока у него ключ постепенно не вы работает этот вуки allows после этого возможно ситуацию что либо вы его просите пользователя
- 9:13
перелогиниться либо можно перевыпустить ключ к глазам дать ему по-новому и тот самый баланс бы газа для каждого конкретного ключа опять же это сделано для того чтобы пользователь не мог внезапно обнаружить что ключ вдруг каким-то супер дорогими транзакциями выдавил из него много денег а они ушли куда-то там неизвестно куда ну или просто вредоносное про плане это те вещи которые я выписал в презентации представьте будет приложена к данному видео я оставлю ссылку на описание нейро 5gs на нашем сайте dogs .
- 9:50
мир . орк здесь представлена неимоверное количество из этих примеров каких-то африку для того чтобы вы могли пробежаться потом и посмотреть те пример использования которые вам нужно будет для работы с ней 5 часть например здесь есть видите подключения давайте можете вместе посмотрим так что мы можем сделать мы можем создать аккаунт например ведь мы подключали не р опять же с дальше будет устанавливая конфиг про то что мы с вами говорили и создаем
- 10:22
аккаунт вот мы на шипке история создаем некую ключевую фразу стандартной методами ключевой фразы province кого-то получается пара приватного ключа и публичного ключа после этого мы добавляем публичную ключ и отправляем транзакцию чтобы этот количестве добавился общение создался аккаунт станом ключом с теста после этого пользователь сможет уже обладать даром данным аккаунт подписывать от него некие транзакции здесь видно чтобы указываются газ указывается депозит который мы хотим
- 10:55
отправить отдельно можно работать какие то конкретными ключами тоже есть примеры можно удалять ключи все это для вас прописаны можно взять будет и посмотреть можно будет проверять статус транзакций отправляя их ешь допустим вот здесь к этой операции при очень долго что-то будет происходить или вы ждете какой-то транзакции вы можете повесить какой-то спиннеры и ждать пока придет необходимость статус много-много разных действий здесь можно выполнять можно заворачивать транзакции
- 11:28
в набор и сделан для того чтобы допустим этим нам не нужно подделать что-то выполнять в принципе не заинтересован чтобы человек на половине остановился поэтому мы можем сразу несколько мутаций упаковать в один набор и все вместе это завернуть в одно подписей человек все сделать разом и мы таким образом создаем аккаунт перешли в нибудь деньги сразу имени какой-нибудь контракт отправим в
- 11:52
сеть и например инициализирует контракт на этом у нее есть здесь специальные утилиты например можно видеть и за деплоить контракт прямо из кода если ты нам нужно можем считать газ который у нас был израсходован выводить его на контролировать газ который тратится зажигается на вызовах всевозможных проверять статус аккаунт смотреть его депозиты и прочие например таким образом можно убедиться реальность перед нами
- 12:23
аккаунт или нет если в с deposit значит он реальный можем заворачивать мир и можем проверять подписи есть еще отдельный раздел и фиг югу здесь представлен отдельные вопросы вы можете и бизнес подключать на ком-нибудь там просто как статический файл подключить делать все ровно то же самое например как есть такие форм где вообще без кода люди пишут программы то есть можно просто импортировать файлы там без
- 12:53
javascript а по сути кинсей плагин вызов делать и чтобы они отправляли транзакции блок чей в общем ссылки оставлю я надеюсь что какие-то поверх где главный вещь я описал если вам нужно будет более глубокие вещи то просто посмотрите здесь наши инженеры записали довольно много чего полезного также тут есть еще формате лс например вы можете отформатировать отформатировать размеры из секты нет в мир и назад это
- 13:27
мы в одном из уроков тоже показываете ласточку format эти более глубоко поговорим еще про развертывания контракта значит когда мы с вами какой-то код написали на стороне блокчейна мы должны создать это важный файл assembly файл который уход нас букчин и народах потом исполнять никого не к виртуальной машине гарантируя тем гарантирую что на каждом сервере код будет исполняться схожим
- 13:59
образом и будет давать предсказуемый результат значит для работы вам наверняка очень пригодится команда не рдв диплом в этом случае она будет вам создавать новый аккаунт с 20 ма тически выполнять его тестовыми токенами и сразу разворачивать на ним контракт который вы используйте данный момент это помогает тебе различных проблем и сразу же протестировать какой-то код который вы
- 14:29
начали использовать начали изучать в данном случае ключи сохраняются в ней рк 165 показывал но с прошлых уроков 1 каждого конкретного продукта мы можем посмотреть какой у него был создан аккаунт если мы зайдем в папку nerdist здесь есть кнопку дело к он начал для этого контракта был создан такой аккаунт команда делать play и соответственно если вдруг и каждый раз мы будем переплывать берет перерыв
- 15:01
развертывать этот контракт по это в адресе случае если мы хотим вдруг начать чистого листа мы можем указать ключ минус f force когда он перри создаст аккаунты и за тепло и по новому адресу сделать можно тоже сам если вопрос удалите какую папку не rdf то есть если исчезнут пути то он тоже будет перри создан наш его зам файлы хранятся обычно в папке а вот слэш майонезом то есть вот
- 15:31
если например вам нужно этот файл вы можете его точно также суда взять предложит накид have чтобы все могли убедиться что ваш файл соответствует его хэш потому что излучение соответственно люди могут без не обладая раз там установлен тоже этот файл просто деплоить в в числе покажет путь на этот уазом файл полный формат мир диплом команды как для того чтобы мы приняли вам уже работать потом в монете она была так нир диплом
- 16:05
потом мы должны указать аккаунт который мы загружаем наш контракт дальше ссылка на сам с глазом файл сам этот файл который мы создали только что из нашего кода на расти значит мы это не делали это может быть важно если ваш контракт требуется функций функции инициализации конструктора то мы можем указать ее указать аргументы вы наш инициализатор и газ который мы хотим предложить и также
- 16:31
не ради начальный депозит если требуется это сделано для того чтобы если у вас нет высоконагруженные приложение если вы просто обновите контракт немцы визир не интересовал его какие-то люди могут сразу же попасть на проблему потому что будет даваться ошибка что кадров не инициализирован теста вы можете этого избежать если сделаете сразу одной транзакцией сразу разворачиваем сразу интеле за цию и после этого вас уже
- 16:55
сразу готовое приложение так мы раза чем контракты надеюсь тут не оставишь вопросов ременное окружении это давайте большая тема мы ее сквозь знали каждый раз наверное самый самый лучший момент сейчас пробежаться по ней уже более подробно значит не возникает с это то что мы используем в каждый раз при инициализации наших наших программ нарастим не раз дека из используют разные разные методы внутри себя и одна из них вот эта переменная n она имеет очень много чего интересного
- 17:37
здесь выписывал как бы наверно самый главный вещь который будет польза почти постоянно но мы сейчас приближу с поповым списку тоже так значит мы импортируем и это къюс не раз детей и инженер бенджен вам потребуется используемые м2 : и какой-то метод пример н2 : а также депозит даст вам размер токенов который приложил пользователю данные операции понятном пополнять баланс мы должны стать какая-то сумма чтобы как-то в
- 18:08
spore контракте про взаимодействовать с этой транзакции экспресс на мы должны узнать мы узнаем что а также депозит надеюсь вашем приложении будут часто прикладывается депозиты и вы будете с удовольствием их обрабатывать еще аккаунт который владеет данным контрактом это карта к отойди то есть данном случает адрес как раката которым у нас срабатывать это может быть важно чтобы понять например кто конкретно вызывает какой-то метод пользователя или
- 18:38
контракт мы это чуть позже сегодня посмотрим лак это функция который выводит в лоб лоб мы можем увидеть в консоль и конечно в первую очередь во вторых может быть всего блока к спорили лук например это будет приложена к транзакции мы посмотрим сегодня руководители тоже можно отловить этот лог в в обработчике ошибок на стороне браузера и тоже как-то показать красивым в общем лук может пригодиться паника команда денег он делает тот же
- 19:14
самый лог но сначала прерывает код то есть когда происходит непредвиденной ситуации вы можете сбросить все что происходило вылезти ошибки и быть уверенным что смарт контракт не обработать ничего что была в панике совершено разве что только газ может быть потрачена потому что работа уже была сделана она для майнеров оплачивается это сделано это для того чтобы люди не могли за спамить сеть каким-то транзакциями все все из которого сбрасываются чтобы майнеры не
- 19:44
умерли под нагрузкой следующая строчка это seiner аккаунт один аккаунт подписавший данную транзакцию без процессор аккаунт и аккаунт писавший транзакцию которая была первой транзакции в списке связанных транзакций это сделано при первом методе когда человек только вызвал транзакцию некую она это два значения равны если же у нас какой-то метод вызывает следующий метод которые вызывают следующий метод то в этом
- 20:14
случае процесс ради будет один и тот же человек который изначально был данный метод a summer аккаунта де может быть разным смотря откуда кто вызывает метод по этой цепочке мы сегодня внимательны и посмотр что еще есть может быть важно значит ну вот есть в контрактах всякие сочники для того чтобы она расти у нас есть некие источники для рандомности вы можете взять и сделать охват рандом можно проверять является ли данный аккаунт валидным можно раза
- 20:47
посмотреть высоту блокчейна да то есть каком блоке сейчас находится но если у вас есть некая передаю сколько времени то можете посмотреть либо таймс там блока либо высоту блока допустим вы хотите чтобы книг иметь смелость работа только когда блокчейн дойдет до какой-то доход номер блока большого для круглого или как угодно вы это можете сделать используя эти самые переменные ну что касается promise of моей разберем чуть позже мы можем смотреть как исполнилось предыдущий вызов какой-то функции куда которой нам передала
- 21:19
управление какое количество кубиков было вызвано предварительно что у нас вернулась и прочее мы можем работать с состоянием контракта это может быть опасно перезаписывать состоянии довольно опасно вот таким способом но если вам требуется вы можете это делать смотреть сколько кайф было использование хранилище в контракте как она используется как она тратится какое качество газа был из-под была приложена и опять же сколько из него осталось
- 21:49
отдельный вид есть для работы с валидаторы это если какой-то подпи подпис контракт который после который подписал контракт является валидатора мы можем проверить какой него стейк например чтобы дать ему их отдельные условия для работы же ссылку я оставляю лично я на этот сайт вот с описанием dogs рис . дождь .
- 22:15
весь лишний раз детей захожу каждый день что то здесь смотрю вам это тоже к пригодится из указано типа которые вам могут быть полезны и к слишком большие числа чтобы их обрабатывал правильно javascript мы оборачиваем как джейсон это небольшой мы обучались работали с ю маленьким но если вы отправите you маленькой 128 это огромные огромные наборы цифр если вы отправите его на client to browse просто не понимал что это чьи слова переполнен соответственно мы отправляем его как строку видит женщина чтобы браузер
- 22:49
правильно обработала не проиграю вам при этом выдаст не править же сам пред нам выдаст как число также можете видеть здесь брать всяких еше и общем посмотреть как вам что здесь делать мы опять же вот эти методы которые кстати как раз подошло время пора поговорить про эти методы структур данных в прошлом задании прошлом видео я давал задание с просьбой перевести на русский язык статью про структур данных которые используются в контрактах мир антона
- 23:23
romankov это сделал он получил свой приз получит 50 проблемам я просил сделать пример и как мы можем использовать разные структуры данных давайте прочитаем что нам сказал антон и с неким моими комментариями в прошлом видео мы в конце это делали нельзя использовать данные наобум вы должны понимать какие структур данных вас что и зачем и и используется про это было много очень и вчера это просто рассказано к смотрите если другу пропустили если вдруг вы допустите ошибку при дизайне структур данных то
- 23:59
это может быть очень потом для вас болезненного первых будут проблемы с контрактом вторых придется пересобирать контракт на ходу это не как весело мы это будем делать в следующий следующем видео так значит который сделал сам стать структуры вектор не раз детей collections вектор значит пересобирать элементы дорого по газу в этой структуре можно хранить данные доступ который мы получаем через яндекс например если у вас есть некий striking и мы хотим чтобы вы знали в каком
- 24:32
сколько мы получали доходы в каждом по очереди цикле это вас техник мы можем использовать вектор в этом случае мы должны будем знать индексы просто брать нужное значение такой пример при пример привел антон в целом увидите у некоторых есть разные и разные методы можно встретила длинную прядь пустой он можно поменять добавить и удалить какие-то значения можно пробежаться по самым вектору то что эти векторы си
- 25:09
реализуются автоматически делает более дорогим использовать данный вектор конкретно наверное в примере с рейтинга я бы если я правильно понял премьер я бы наверно использовала все-таки скорее она вот рецепт но давайте пока вот так так вот такая идея в принципе она тоже может использоваться мы можем здесь наверное для вектора как-то посчитать все доходы stay king pro пройдя их сами соседней а пока мы можем делать операции операцию но конечно в идеале мы просто должны иметь отдельные значения отдельно какую цифру который
- 25:43
будет увеличиваться каждый раз мы будем знать значение за каждый день и общие значения в принципе это вам должно хватать не целесообразно прибегать по вектору чтобы взять ее сумму был проще сохранять каждый раз look up set предположим наш контракт хранится список зарегистрированных пользователей эта структура нам подойдет чтобы дешево добавлять новые аккаунты коллекции появляется регистрируем пользователь или нет да согласен это прикольная штука и сможем добавлять каждый раз пользователей потом понять
- 26:15
что там у нас есть просмотров какие методы у нас есть в lookup сети мы не можем пробежаться мы не сможем вытащить всех зарегистрированных пользователей нам в принципе это может и не потребоваться никогда но мы можем узнать контента если кто-то у нас можем удалить и можем добавить в принципе хороший метод для того чтобы просто иметь коллекцию всех пользователей она рецепт хоть я убрал пример им свой там был слишком сложный пример она
- 26:45
трясет при может пригодиться нам если мы например разрешаем в нашем контракте работать только с каким-то набором токенов да и скажем когда приходит к нам пользователей пользователь мы проверяем покойном прикладывать таким и если этот токен существует в нашем она адрес сети если вот например у него есть поле контента мы разрешаем и в транзакции если нет то мы говорим извини какой там был только нам он не нужен совершенно
- 27:16
но при этом мы должны получить некое значение всех разрешенных токенов знают и может быть много где использованы пользователя принципе door знать что там вообще вот доступны в контракте это должно быть методом поэтому можем использовать в данном случае она артер цвет и где-нибудь потом на экране красивые стены список поддерживаемых точек можем вывести как вектор можно просто пробежаться дальше look at me довольно часто намекает и будет использовать это контракт этому на некая структура без
- 27:50
операции по ключам мы должны знать ключ заранее может быть использован как контракт который хранит баланс по айди пользователя до полного согласен хороший пример мы имеем список балансов и для каждого пользователя можем достать его собственный баланс принципе не сильно интересует какой-то список у нас пользователь всего доступен мы главное для каждого пользователя достать его баланс
- 28:16
при этом здесь есть у меня хороший пример еще дополнительные допустим что нам надо хранить баланс и в для каждого токио должен быть юзер некий токен и баланс предположительно что юзер могут быть баланс и в разных точках вот у нас в этом она вторит с эти будет хранить список разрешенных токенов а.в.
- 28:37
как хранить нам баланс и мы же ну то есть по сути здесь три переменные когда должно быть аккаунта иди токи найди и баланс довольно хороший метод сделать вот таким способом и stm отдельную структуру токен buy аккаунт где мы имеем аккаунт этот человек и токен аккаунта эти это контракт о кино потом мы создаем lookup map и мы его ключом будет вот этот самый talking аккаунт то есть за счет уникальной сериализации там не буду повторяться значения и баланс это будет
- 29:08
собсно значение для данного дела в данной записи великаном пользователь придет и скажет какой у меня есть баланс для такого токина мы можем легко создать в такую структуру и спросить для него баланс это будет работать очень быстро и очень эффективен в принципе к то что надо on orders т'мек здесь приводится антона плеер для какой-то игры например у нас есть задание что мы 1 день платим награду за убитых врагов соответственно мы можем записывать видимо награды и при этом мы
- 29:41
можем пробежаться потом по всем награду мы найти скажем человек который больше всех получил наград и дать ему будет дополнительно принц бонус или просто вывести его в доске лидеров это важная задача для этого вполне может использованного перт map но и тогда будет дороже потому что мы здесь можем использовать еще и эти методы по итерации вот здесь это все у нас указано методы которые можем сделать нам можем взять отдельно значения по ключам отдельно пробежаться по значениям можем очистить
- 30:11
можете можем все это привести к ректору ну разумеется можем добавлять и удалять значению можно проверить пустой ли взять его длину вот значит еще раз вы давайте посмотрим на статью про данные методы про данные типы струг данных мы здесь должны обращать внимание на бега quotation мы должны стараться использовать те структуры данных которые не используют линейной или тем более логарифмическую сложность то есть если
- 30:43
этот сделано это это нам поможет мне уйти в китае лимиты очень быстро потому что я скажем из нас будет база пользователи стали расти и сложность будет расти майк рано или поздно разорвем все преграды поэтому в идеале мы должны придумать так наши данные чтобы они имели вот эти ооо1 самую простую сложность отлично давайте идем дальше в конце отвечу на все вопросы promise это спрашивали в одном из видео
- 31:15
и сегодня много будем говорить про прорисовать давайте посмотрим отдельно значит у них есть свои собственные promise и и они используют случаях во-первых если нам нужно вернуть некий promise например мы делаем кода транзакцию обучение мы должны в принципе знать и что там еще происходит то ли она зафейлилась то ли она выполнилась какие что там да как то есть черный ящик возвращать вот мы получаем этот случай пор нас это такой своего рода синхронный
- 31:39
вызов мы отправили транзакцию и она к нам приходит мы обрабатываем ответ это вопрос и делал что дальше отвертка можем как хочешь поймать выпуск выполнить следующую акции по цепочке на стороне блокчейном own promise нам поможет нам нужно выполнить серию транзакций внутри какой-то какого то не туда вот например здесь можно посмотреть в опять же на этом сайте который я вам уже сегодня рекламировал это может работать во первых мы можем вернуть promise в данном случае видео с из них и контракт и методов и другой
- 32:13
контракт мы можем вызвать контроль этот метод из из этого contract б некая нитки метод с параметрами и что там вернется отправить на выход из контракты рейки 2 использование мы можем сделать эти члены запустить одно опять своем аккаунт передаем таки мы добавляем ключ доступа нам нужно сделать от именно в этой последовательности не раньше и не позже поэтому кроме здесь идеально срабатывает
- 32:41
для таких значений я таких использований мы можем установить разные методы можем видеть работать с ключами вы cry promise и мы можем сделать какой то вот zen очень полезная полезный не тот опять что какая вас крепить это мы делаем одно потом сразу выполняем другое решил сделать в самарканд раз как вы понимаете то есть например мы можем увидеть всегда 4 аккаунта именно в этой последовательности если вдруг мы напишем чем просто по 1 по 23 то по сути мы не знаем а не
- 33:12
выполнится может быть что-то случится на ком-то из нот не палками по замыслу и я надолго проваляется выполнится позже или общем рецепт целому дико поручиться за используй довольно часто у нас в работе чтобы следить за порядком действий с риттер мы можем видеть и вернуть promise как некое значение хотя здесь написано что до идентичная а1 и а2 и что еще но и всякие методы для конвертации для кастинга можем
- 33:49
использовать можем делать in the если нам надо полностью то это надеюсь будет понятно ну и да понятно что умер свои promise они так работать в россии потому что другие у нас последовательности другие по-другому много при не надо газ передавать если вы делаете цепочку из promise этого вам придется там прикладывать газ ну это сегодня с вами посмотрим собственно главное для чего мы прополис и говорили это чтобы поговорить про рост контрактные взаимодействие это наверное
- 34:22
самая большая и самая важная вещь которая сейчас существует в блокчейн разработки поскольку мы можем работать с любыми контрактами было бы учение как бы ну словно луне и pr это довольно интересная тема пару мин поболтаю то есть представьте что у вас есть опять же некий appstore или google play но вы можете работать на уровне программы в этом google play с любым контрактом который есть с любым приложением которое есть в данном google play допустим вы играете на комп angry birds или во что-то да и например у вас есть
- 34:54
какой-нибудь там словно ежедневник расписание и вы можете запросить а сколько вы сегодня игра лего энгри бердс или the насколько кто он последовал ценность как еще что произошло как бы все контракты которые там работают они имеют некие открытые методы и любое приложение можно с ними работать больше всего это правильно и лучше всего это проявляется финансовых приложениях то есть допустим у нас есть некий
- 35:19
контрактника и приложение которое дает кредиты гопники лендинг под залог чего-то не киева некое продолжение например делает торговые бирже ног операций на бирже ждет ники обмен и например 3 приложения делает допустим страхование весьма далекий задаток не как страховой суммы платим и нам какой-то кейс страхуется вот мы можем используя эти три метода которые придумал из главных от приложения которые допустим делать код от рейд на чужие деньги они на ваши деньги скажем вы делаете заем под залог там чего то
- 35:54
потом скажем страхуете сразу свою сделку и отправляете ее на бирже антенна сделать какой-то с плечом операции на и большому счету это все кросс контактное взаимодействие это все можно делать на блокчейне и это именно та благодаря чему дафа его далека слышали буквосочетания децентрализованной финансы дафай по сути только за счет этой фишки и это пошло из комп забили сюда interoperability когда какие-то связанные какие-то вещи могут быть связаны между собой давать новые из
- 36:26
кейсы которые в принципе не были даже предназначены они не были написаны ради этого мы это можем делать вот вне же кросс контрактные взаимодействия работают через макрос текст контракт давайте опять же я открою страничку тут сама теорий указана для символ скрипта наверно скоро такая проявляется для роста мы сейчас поговорим по напиши более подробно код для cross контракт на взаимодействия значит важное здесь момент что все вызова синхронные это то
- 37:00
что отличает ее от других членов то есть когда мы делаем какой то crosscontact на взаимодействие оно может быть выполнено не в этом блоке которые мы начали работать в следующем плоть или через блок когда угодно то есть для того чтобы маму не собираем все вызовы в одном блоке и разум не обрабатывал как раз-таки из-за этого в других ученых происходит тоже называется заторы канзаши когда слишком много берется собирается в куча потом не может
- 37:26
столкнуться у нас все это синхронно работает соответственно если вдруг нам потребуется вернуться в запасе у вас есть некий метод мы вызвали некий контракт другой контракт мы хотим вернуться мы уже не можем до это станет ушло на стал с прошлым нам нужно заново вызвать свой собственный контракт передать некие данные опять посмотреть что на самом деле произошло какое-то время могло что-то произойти по другому выполнить на новые действия соответственно разумеется это требует повышенного потребления газа но как бы
- 37:59
деваться некуда не настолько это много что прям сходить с ума на тебя не менее иметь ввиду тут будут более серьезные потери по газу и что важный момент вот эти колбы которые к нам возвращаются из контракта который мы дерну люком ради чего то они должны быть приватными они должны иметь доступ только для самого смарт-контракты это сделано имейте ввиду кусок всегда открыты какой-то контракт
- 38:26
может начать дергать вашей клубники как бы не не недобросовестно он может притворяться добросовестным контрактом дергать вашем клубе кику будто бы вы там что-то случилось первых делать сколько у человека денег он им и возвращать 100 г муки и тогда мы возвращаем ему там 50 какой-то контракт может просто начать возвращать вам сто количество и если вы не проверьте кто-то на самом деле вызвал этот за эту запись вы можете начать отдавать деньги не неправильно
- 38:59
должно быть прямо к нам часто посмотрим и так вот как это все у нас имплементировать давайте мы я сейчас постараюсь написать какой-нибудь код который у нас будет работать с уже привычным для нас к унтером значит вот наш контракт я сейчас собрал новую совершенно новую ветку я хочу сделать такой код у нас будет два разных шарика и мы сделаем так что один счетчик как будет главным счетчикам и мы сделаем так чтобы 2 счетчик не мог прибавляться если
- 39:32
значение первый счетчик к меньше чем значение 2 счетчика и потом еще чуть больше поиграем со всем этим 8 хватит времени давайте значит для начала мы запустим вот это пример которым использованием втором уроке в прошлом уроке мы сейчас просто сделаем давайте сделаем не yarn build вы с заново соберем этот контракт это у нас будет как бы таким неизменяемым образцом а второй мы уже сделаем
- 40:05
скоро с контрактом к первым контракт и так значит я делаю не rdf диплом минус f я делаю force апдейт дело его на новый адрес сейчас мы создадим лишь новый контракт от кончается на 593 ну и давайте я запишу яр надев и сейчас запустим его front end of запустил вас на партия 123 так [музыка] интересно будет ли работа потому что количеством из для сюда не выписали да и тот придет должно не работать давить вас попрошу даже давать я сделал сигнал и
- 40:51
замок сделать самим так вот мы сейчас все произошло почему отделался out some мы запустили наш контент на в парке который мы уже использовали раньше у нас уже есть local storage какие-то значения но это неправильно потому что мы для это контракта не никаких ключей не описывали вот сейчас на должно работать мы должны получить один мы собственно все отлично у нас работает 12 теперь давайте мы открываем наш контракт который новый новый контракт каунтер и мы постараемся сейчас сделать
- 41:28
взаимодействие с первым контракт для начала нам нужно сюда импортировать текст контракт дальше мы должны будем здесь создать [музыка] я скопирую чтобы было чуть побыстрее вот примерно такой какой-то метод [музыка] не самое удобное копированием так значит мы создаем какой-то такой метод и видите мы здесь что создали мы делаем некое новое значение каунтер мы создаем структуру данных external каунтер и мы
- 42:08
будем из нее брать метод get нам то есть если мы захотел взять когда другие методы из external этому примеру если у нас то помните был бит юзер сейчас во врага нет можем ездят в шоке от users или еще что-то или какие-то меры которые мы хотим запускать в другом контракт как мы видим его get нам больше нет параметров поэтому мы просто self если бы у нас были параметры могут тоже здесь прописали чтобы знать какие нам
- 42:32
нужны будут метод теперь давайте мы напишем собственно как это мы будем с этим get нам будем взаимодействовать давайте посмотрим значит так могу времени буду копировать нам часть кода чтобы у нас было побыстрее значит мы как мы должны работать мы должны нашим и клементе теперь проверить да какое у нас значение собственно том самом контракт для этого мы вызываем примерно таким способом значит каунта
- 43:11
get нам бы и допустим да вот как бы написать это могли например могли бы написать в лс берию равняется commander get намбер и написать некое некой здесь assert чтобы проверить его вообще какое-то значение и больше ли оно или меньше чем наше текущее значение 0 подход неправильный потому что это у нас не значение а это у нас это говорю promise то есть в данном случае документ не сработать мы не можем приравнять некое значение этому вызову потому что он
- 43:52
выполнится где то вообще в будущем и мы не сможем вернуться к этому поводу назад в прошлое здесь наш правильный подход который нам здесь потребуется примерно вот такой вы должны будем вызвать этот метод указал здесь адрес контракта который мы хотим вызвать да вот начались контракт который мне только что за тепло или два тела здесь мы вызываем этот тракт у него запускаем этот где то нам бы мы прикладываете газ и токены но только надо с не нужны и после этого мы запускаем некое вот
- 44:25
методом zen мы запускаем еще какое-то другую метод в нашем контракте который уже собственно будет реагировать на то что мы получим из этого blogged нам бо ра мы отправили кит набор мы обработали и мы вернулись поэтому здесь у меня есть такой метод видите он get нам бы и у него уже не каунта а xl здесь вот можно теперь она будет написать такую же штуку только это будет не каунтер а это будет вот здесь у нас x сэлфи развала все название вы можете
- 44:56
прервать написать свои это никакая не догма до сути главное чтобы у вас это все просто билась и значит вот здесь я напишу что нам нужно будет метод который мы называем он get нам то есть когда мы мы его вызовем в случае когда у нас закончится get намбер и выйти здесь есть параметр мы передаем сюда call back on некий нам до некое значение потому что нам потребуется здесь вернуть его это значение и обработать у собственно нашем контракте
- 45:36
так вот мы здесь получается видите передаем а для запуска callback нам потребуется те же самые три параметра но здесь мы указывали конкретный контракт который мы хотим дернуть в данном случае когда оно случится уже возврат из-за нашего call back to do is функция с которой требует возврат мы здесь укажем контракт наш собственно вот король таком выйдет наш контракт который запущен это опять же можем указать его в прямом виде
- 46:01
прям текст это более надежно чтобы не было печатать ничего указывать в т.к. мы вернем свой контракт и передадим ему 0 токина 525 строга за чтобы как-то обработать что собственно здесь произойдет давайте скопируем значение скопирую функций очень и которые у нас будет обрабатывать это самое он get намбер значит опять же дамы мы используем метод ньюта был сел в потому что мы будем изменять азбук чем
- 46:31
мы пишем про его это вот про то что я говорил потому что мы хотим чтобы только наш контрактных бу мог вызывать данный call back если вдруг от другой вредоносный контракт заходит вызывать этот call back у себя то мы не запустим его потому что у него будет данном случае это можно по большому счету написать в более явном виде мы можем сравнить карат аккаунта diy процессор аккаунта если вот это на
- 46:55
счет и к у нас работает этот особенно что это метод было проявлять это просто делаем для упрощения значит нашим метод 9-го проверяем что является ли это значение который мы получили из callback а больше чем значение которые есть в нашем контракте и если это не так то мы просим сначала увеличить счетчик который нас был в первом контракт в противном случае у нас этот контракт не отрывается мы идем сюда дальше и вызываем обычный рейс на это просто чудо скопировал ну и здесь вот важная вещь почему меня сегодня это
- 47:29
просит вас я хочу чтобы меня данный метод возвращал продать это мы потом будем использовать чтобы отслеживать ошибки на fontaine de естественно нет promise и давайте я вот точно также импортирую из нее раз детей и если все в порядке то давайте попробуем мы сейчас в папке лосин 3 мы сейчас сделаем я build отлично давайте сделаем а yarn дев опять же он сейчас у нас создаст по новому адресу создаст быть проверим если он что-то по
- 48:16
этому адресу же некий контракт и за тепло и тыва в блокчейн и засаду под ними для него новый сплошь не рорк проверку вдруг он меня какой-то взял старый значение что там не было быть ненужного стэйта да он не за старое значение давайте также я щас брошу я не хочу работать со старым контрактом я сделаю не дев диплом минус f он создаст новый для меня контракт на вич 949 а у меня здесь был ноль 28 лет новый контракт чтобы меня не использовалась некой
- 48:58
старое состоянии которые я использовал при подготовке куроки уроку и я давайте запускаю явно дев он опять перезапишет и вопрос чтобы было более предсказуемы поведение и поднимет нам frontend окей значит мы в этой предложил продолжение теперь заново логинимся и у нас первый контракт имеет значение 2 давайте сразу выведу от соль чтобы могли видеть что у нас происходит так первый раз я запускаю если мы ничего
- 49:31
не напутали если я ничего не напутал то должно у нас работать а от ул а второй раз как-то маскот написаны разработал третий раз ведь раз не сработала видите это под значение 2 давайте посмотрим собственно что же у нас есть здесь собственно какая ошибка у нас свыше так это я не про не скопировал так наш контракт имеет вот такой адрес посмотрим что же там вышло у нас бог эксплорере почему у нас не сработал вот видите наш последний знаменитыми
- 50:22
этого метод field соответственно видите implement у нас совершился вызову вызвали местный клемент после этого у нас нашими этот наш контракт пошел вызывать где-то нам из контракта который мы попросили посмотреть мы получили значение 2 в ответ потому что это то что сейчас есть контракте и после этого у нас произошла ошибка видите пожалуйста прибавьте сначала следующий лишь первый счетчик только потом прибавляется 2 то есть все что мы написали работает
- 50:51
немудрено яшка 1 кода где вы меня так теперь давайте запустим первый счетчик еще раз мы делаем внутри и после этого наш счетчик здесь уже должен нормально сработать видите это метром может здесь требуется два более долгой финализации мы сначала делаем одно потом второе потом третье еще это работать то станете которые изначально работать должен плохо ведь иногда перед собирает как бы перри отправлять транзакции на 3 стремились работал что
- 51:24
логично а вот 4 5 работать не дождь потому что мы так написали код что пока этот счетчик не лечится этот ваш счетчик 2 работать не будет ведь он уже собственно мешал ошибку давайте мы сделаем простой обработчик ошибок чтобы мы не должны были смотреть в консоль поскольку наш метод инкремент возвращать провис мы можем легко узнать на фронт индия что же там такое происходит у этого метода хотя у меня было бы спроса написать значит давайте пишу кач
- 51:59
нанесен пищу что мулан cut эксепшен давайте мы что мы сделаем делаем console.log это сама эксепшен потом мы можем написать например alert [музыка] ну и давайте вижу есть апдейт юго эта функция собственно вызовем функций 3 white чтобы она у нас идем перестала рисовать какие-то там рисовать ядра вам новую так по поводу давайте проверять я это где исправлял был см3 давайте я не заметил перри собралась у нас фонд интернет поэтому давайте я заново сделают
- 52:52
нас в contra жакет с нашла его не меняли frontend должен сейчас перезапустится 65 на 91 как я что-то напутал да видимо гей давайте попробуем еще раз это сделать за логинюсь возможно и консоли pierburg так точно так же я захожу давайте сейчас в [музыка] наш это делел портал смотрю на консоль у нас есть троечка что верно если я нажму плюс теперь то у нас четверка сработать не должна должна появиться alert и должен появиться собственно что-то такое
- 53:30
уже более красивая ведь error нас появился и у нас уже не ошибка она с тобой консоль то есть мы можем поймать это этот выход этот это входное значение и как-то красиво обработать его и отобразить пользователям пример виде кого-то более мягкого сообщение об ошибке чтобы возвращать нам теперь не promise а например значение true или false мы можем пойти ещё дальше я вот видите сделал здесь в примере
- 54:01
своем который был еще до такое я сделал по-другому чтобы чтобы мы могли получать статус операции мы можем вызывать его примерно таким способом посмотрите я сделал здесь [музыка] я сделал здесь такой метод который называется samsung вот он у нас возвращает promise и в нем возьмите вызываю сел потом я вызываю и сэлфи инкремент то есть функция и потом я для этого элемента проверяю еще
- 54:35
отдельных callback вызывая и этот call back у меня уже должен непосредственно понять а сработал ли у меня этот инкремент или нет значит в этом методе он сам 7 то есть это некий call back который нас возвращается после об срабатывания самсунга я что я делаю я проверяю значит во первых является ли этот метод will become то есть что у него кроме срезал скаут равно единиц его кто-то вернулся не просто вызвал его а его кто-то вернул это очень важный
- 55:06
момент здесь и значит потом я проверяю какой был пробный срезал из предыдущего вызова мать мне опять же надо здесь сначала импортировать promise резалт и во-вторых мне нужно будет импортировать да как бытописание функции чтобы наши вообще в принципе наш smart контракт знал что у нас существует такая новая функция теперь которые можно обрабатывать вот теперь в этом случае значит если мы вызовем этот внутри mend the app у нас
- 55:37
сработает потом пройдет сюда он сам сын и уже мы в итоге получим true или false по итогу пусть у нас работала если сработал фолз если этот метод не сработал buy сейчас не буду тратить время на прогон я оставлю скотта в gigabyte проверьте как это работает но еще раз хочу повторить и должно быть проявить чтобы никто лишний не вызвал данный метод и мы должны проверять что это реальный call back to что если вас куда я их финансовое приложение то поверьте
- 56:11
особенно если вы опубликовали код в гитхабе то это будет очень ловко кусочек поискать как можно неправомерно вызвать вашей клубники притворяясь вашим приложением так на этом у меня по теме данного занятия все мы посмотрели много продвинутых методик в сейчас давайте буду рад ответить на ваши вопросы обработка исключений как деток в конус как бы в на хлеб получается в насколько рассказал в принципе вы можете возвращать как труба сможете взращивать
- 56:42
какой-то серьезный джейсон еще что то делать код ошибки может возвращать вот если вы будете более четко делать скалку методы которые следуют заметным которые вас падают можете отловить все ошибки и красивых отобразить на клиенте так давайте потом на вопросы я захожу в сыщик юный блок хранится блок чтения или что-то это стоит для контракта или пользователя лоб хранится на специальных архивных водах и со временем удаляется он не
- 57:13
хранится в общении но он показывается в эксплорере не запланировано что логе будут храниться вечно это просто никакой информации где вы можете посмотреть какую вы хотите посмотреть в процессе работы с приложений это спрошу алекс с спасибо хороший вопрос дальше антон взаимодействовать с другими контрактами можем только на чтение и на запись тоже если на запись то транзакция будет разбит на несколько блоков да можно на запись взаимодействовать то
- 57:44
есть мы это обычно транзакция просто ее вызывает контракт они пользователя контракт она может вызвать что-то сделал с другом контракте потом вернуть ваш контракт но при условии был сделать разумеется если и дают доступ туда она будет записывать маленький пример как работает иногда данные калмыки допустим мы хотим вывести некий токен из нашего контракта обратно адрес на кошелек пользователя токена я
- 58:14
между ними противники вам же был таким да там кити нефти или еще что ну допустим 3 года talking который для его перемещения требуется вызов никого контракт для фантагиро тариф ти нижние потертыми трансфер то есть мы например как мы делаем мы говорим человеку есть допустим один да и или один из детей мы говорим мы хотим этот один видите отправить ему на его баланс мы и уменьшаем его баланс на нашем контракте встань 30 после этого вызываем идти трансфер с этим одним таким в качестве аргумента и проверяем пришли реально
- 58:47
talking или нет то вдруг что-то случилось вообще не вдруг за как проблема да или вдруг указанные карты не корректный адрес или вдруг контракт за бартеру если мы получаем после этого ответ что рокки мне пришел мы берем и ставим планку этого человека опять на обратно на единицу чтобы в случае когда фото починиться он мог оправиться баланс использовать если мы это не сделаем то человек случае ошибки останется просто с
- 59:11
нулем что неправильно но разумеется этот контракт отправки токенов сработает случай если он из гнезда на корректное у человека есть реально точеные все работает и прочее что это про это нотация перекрывает пап fn для функций да это другая немножко если вы не напишете пап перед fn то в принципе кубок не сработать потому что его не найдет не буду его не сможет найти какой-то контракт чтобы его вызвать
- 59:41
фанфан шину приватная она работает как будто здесь правильно неправильно просто фарш небес приписки пап работать только для ноутов контракта который работает прямо в одном блоке в одну по точек если же мы хотим искал бека вернуться и знать что именно наш контракт его вызвал вот как бы все это эту цепочку то мы пишем вот это самое диез проявить и после этого мы будем убить мы можем убедиться что именно этот контракт именно мы инициатор изначально этого
- 1:00:16
вызов обновление контракта расскажу в следующем уроке рассмотрите выбор структуры данных для конкретных кейсов часто у меня уже нет времени на это и так сходу я наверное смогу сообразить хорошие примеры давайте постараюсь разобрать тут значит вопросы дайте раз сейчас скопирую чтобы читателю несколько вопросов видим какие-то конкретные кейсы так еще вопрос от этого же человека an
- 1:00:49
anonymous от индии как удалить контракт с большим эстетом покажите пример ну вы можете просто удалить аккаунт с этим контрактам если хотите все весь стыд удалиться не ли они делиться аккаунтом посмотрите в конструкции и вы можете перезаписать этот контракт перезаписать стоит с помощью миграции это тоже можно по сути главное просто чтобы прочесать провели предыдущие стоит и запусти записать его 1 пустой стоит
- 1:01:21
здесь ли вы просто spears запишите контракт где будет 0 стоит у вас потеряет все реализация мы говорим про это все чуваки про миграцию контракт [музыка] быть элеум есть или илья расспрашивает в тереме есть события контракт может генерировать фонтан подписываться ходила в ней тюнер нет надо исполнять какие-то прокси видим еще что то это будет дополнительно серы с которой проверяются контракты гильдия в китае винт и опять же это не thorium генерирует события сказать информирует события да это некий
- 1:02:00
бёдер сам блокчейн вам на браузер ничего не пошлет надо использовать какой-то прослойку [музыка] все крутые главный по спасибо спасибо за лекцию ok если вопросов нет здоровым и прослужили сейчас всем спасибо большое за внимание если значит захотите какие-то конкретные примеры разобрать на нашем пятом уроке которые я хочу посвятить полз просто анализу приложение то пишите свои предложения пока у меня
- 1:02:37
по плану разобрать х нибудь большой marketplace для нужд и где будут контракты на все где будет marketplace собственно такая система аукционов покупка-продажа и какой-то frontend который все это обрабатывается вот если вас это устраивает не пишите если хотите что-то специальное дмм какой-нибудь prediction market мы можем это тоже сделать выберем что будет больше всего запросов к инету меня все спасибо и всем пока до новых встреч хорошая неделя