Solidity. Смарт контракты и аудит – Telegram
Solidity. Смарт контракты и аудит
2.62K subscribers
246 photos
7 videos
18 files
547 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
Начало работы с TheGraph. Часть 1

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

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

TheGraph использует систему отправки запросов graphQL, которая была создана в Facebook d 2012 году и открыта для всех пользователей в 2015. Из-за удобства и простоты, она стала популярна во всем мире.

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

Если хотите прочитать про сам язык запросов graphql, то на Хабре есть хорошая статья на эту тему.

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

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

Вот так выглядит ссылка для запроса:

https://gateway.thegraph.com/api/[api-key]/subgraphs/id/2szAn45skWZFLPUbxFEtjiEzT1FMW8Ff5ReUPbZbQxtt

[api-key] - это именно то место, куда вам и нужно вставить свой ключ, а "2szAn45skWZFLPUbxFEtjiEzT1FMW8Ff5ReUPbZbQxtt" - специальный id субграфа, в данном случае Uniswap v2.

На странице обзора субграфов можно посмотреть все проекты, с которыми работает TheGraph, и далее мы будем рассматривать Uniswap v2.

#thegraph #graphql
GraphQL запросы в TheGraph. Часть 2

В предыдущем посте я забыл сказать, что graphql запросы через api-key стоят денег. Вам нужно будет купить их местную валюту с одноименным названием TheGraph, перевести на свой кошелек и затем оплачивать счета. Это нормальная практика в подобных сервисах.

Итак, перейдем к самим запросам. Понять, как они работают и немного поиграться можно в специальном разделе Playground на странице каждого субграфа. Возьмем, к примеру, субграф Uniswap.

Экран playground разделен на три части. В первой - составляем запрос, во второй - он выводится, в третьей - подсказки того, что можно запрашивать.

Если "покрутить" запросы, то мы сможем увидеть, что они составляются довольно просто: в фигурных скобках мы пишем, что хотим получить, аргументы запроса, типа фильтра или id (о нем позже), и в конце, уточняем данные. Например, можно получить данные о токенах, которые есть на этой бирже и их объем. Или общий оборот биржи, или пару торгуемых токенов, и т.д.

Есть один не самый очевидный момент, хотя он может где-то в документации прописан, но я его не обнаружил. В подсказках к возможным запрашиваемым данным, как раз в третьем столбце, указаны параметры в единственном числе, например, token, pair, user.

И чтобы сделать запрос по ним, то вам необходимо знать id (адрес контракта, кошелька, токена), чтобы этот запрос прошел.

Но можно запросить и все возможные вариации pair, user и token. Для этого в grqphql запросе нужно писать не pair, а pairs, не users, а users, и т.д. Другими словами, нужно писать во множественном числе. В этом случае вам покажутся все пары, пользователи или токены.

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

А вот тут можно найти условия фильтрации для запросов.

Дальше мы посмотрим, как принимать запросы на своем сайте.  

#thegraph #graphql
GraphQL запросы в TheGraph. Часть 3

Я также писал ранее, что в официальной документации TheGraph указаны три способа отправки запроса:

1) Через Graph client;
2) Через сервис Apollo;
3) Через URQL;

Но на YouTube я нашел еще один способ (на английском языке):

4) Через axios;

Как раз в этом видео я и нашел ссылку, которая позволяет отправлять запросы в TheGraph, пусть и в ограниченном режиме, вроде как тестовые запросы на Playground субграфа.

Эти ссылки можно найти в разделе Hosted Service или по этой ссылке.

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

Опять же, эта ссылка для запросов и ссылка, которую мы видим с [api-key], по своей сути, делают одно и тоже. Только первая в ограниченном варианте. При этом код запроса graphql и код запроса, скажем axios, будет одинаоковый.

В своем репозитарии я привел пример кода для запросов на axios, apollo и urql. Они находятся в папке src/app.tsx.

Вы можете скачать его и поэкспериментировать со своими запросами на другие субграфы.

Есть два нюанса:

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

2. Для каждого отдельного случая вам нужно будет ставить свой пакет npm.

npm install --save-dev @apollo/client graphql
npm install --save-dev urql graphql
npm install --save-dev axios

Так же обратите внимание, что на странице не отображается результат запроса. Он будет в консоли. Если захотите что-то сделать с ним, то просто выведете через цикл.

Если не хотите сами составлять запрос, то можете посетить страницу Playground субргафа и просто там посоставлять запросы, а потом скопировать их в свой проект.

В общем, ничего супер сложного! Дерзайте!

#thegraph #graphql
Свой субграф в TheGraph. Часть 4

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

Если честно, я не исследовал этот вопрос, так как пока не вижу особого смысла в этом. У меня нет большого проекта в mainnet, чтобы как-то возиться. Однако там также, как и с другими субграфами: создаешь свой проект, получаешь ссылку, платишь за отслеживание и составляешь запросы.

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

#thegraph #graphql
Курс на Chainlink

Далее я хотел бы узнать больше о применении Chainlink в контрактах.

Кто забыл, напомню, что Chainlink базируется на оракулах для смарт контрактов. А кто забыл, что такое оракулы, повторяюсь, это такие программы, которые соединяют внешний мир и мир блокчейна, как например, мы можем брать актуальную информацию о биржевых котировках и передавать в наших смарт контракты.

Вообще, оракулы должны передавать только 100% верную информацию в наши СК, поэтому достоверность источника в этом деле крайне важна.

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

И вот тут приходит на помощь сервис Chainlink. Сейчас это самый лучший сервис оракулов, которые предоставляют наилучшую информацию из внешних источников.

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

Разбирать код мы будем чуть позже, когда я сам смогу объяснить принципы работы Chainlink. Сейчас же могу назвать четыре основные сферы, с которыми он работает. Возможно, потом найдется больше, но эти приводятся чаще всего.

1. Data Feeds - в основном используют для взаимодействия с другими блокчейнами и биржами для получения актуальных цен на криптовалюту.
2. VRF - получение случайного числа для СК. Как мы знаем в Solidity большие проблемы с генерацией случайных чисел. Практически для всех внутренних методов можно предсказать результат. Поэтому разработчики постоянно ищут новые способы для этого простого действия.
3. Keeper - автоматизация выполнения действий в СК. Например, можно заложить в наш контракт, чтобы выплата произвелась в тот момент, когда Эфир будет стоить 1000$. И оракул вызовет нужную функцию нашего СК по достижению условий.
4. API - это пока "темная лошадка" для меня. Я понял, что через него можно подключаться к другим источникам для получения информации, но как именно, еще нет.

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

#оракулы #chainlink
Оффтоп про обучение

Хочу немного поговорить про планы на обучение, чтобы вы были в курсе, чего ожидать.

В ближайших планах, как вы поняли, мы попробуем разобраться с chainlink. После этого я планирую "копнуть глубже" в Uniswap. Возможно, посвятить ему неделю, и рассмотреть популярные действия с ним.

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

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

В принципе, именно поэтому сейчас я уделяю время современным подходам к работе с СК, а не углублению в кодинг контрактов. Мне интересно узнать вообще о том, как сейчас их пишут, и что используют, что бы, в случае необходимости, знать, что это можно сделать более простым и удобным способом, нежели городить костыли по всему коду.

Говоря о времени, то в планах занять весь октябрь на это.

Приятного вечера и легкого обучения!
👍1
Goerly faucets

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

Я поискал в сети и нашел несколько сайтов, где можно запросить немного эфира на свой кошелек бесплатно. Чаще всего дают 0,01 Эфира. Поэтому можно посетить несколько ссылок в течение пары дней и накопить небольшую суммы для работы.

Хочу отметить, что у всех пользователей по разному работают данные ссылки: кому-то присылают эфир, у кого-то возникает ошибка. Пробуйте в разное время разные ссылки.

P.S. Для начала вам потребуется скачать Метамаск, зайти в него, выбрать тестовую сеть Goerly, скопировать номер кошелька, и уже после всего этого запрашивать эфир.

PoW Faucet: https://goerli-faucet.pk910.de

Authenticated Faucet: https://faucet.goerli.mudit.blog/Goerly faucets

Alchemy: https://goerlifaucet.com/

Görli Faucet: https://goerli-faucet.slock.it/

Another one: https://fauceth.komputing.org/?chain=5

Paradigm: https://faucet.paradigm.xyz/

Metamask Faucet: https://faucet.metamask.io/

https://ethfaucet.vercel.app/

https://faucets.chain.link/goerli

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

#goerli #faucet
👍1
Как получить тестовые Link токены

Для работы с chainlink в некоторых случаях вам могут потребоваться внутрисервисные тестовые токены для подписи транзакций под названием Link.

Для тестовой работы сервис может прислать вам до 20 токенов бесплатно. И через некоторое время их можно запросить еще раз.

Чтобы получить токены Link вам потребуется:

1) Кошелек Метамаск с аккаунтом на тестовой сети Goerly;
2) Аккаунт в Твиттере для авторизации;

Далее идем по официальной ссылке chainlink.

Кстати, тут они могут накинуть вам немного эфира, также для тестов.

Подключаете твиттер, копируете-вставляете свой номер кошелька, проходите капчу и жмете "Отправить запрос". Через некоторое время вам "упадут" до 20 токенов Link.

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

После первого запроса на счету у меня появился Эфир, но токенов не было. По опыту я понял, что нужно импортировать токены, нажав в кошельке соответствующую кнопку.

У меня запросили адрес контракта токенов и символ.

Тут будьте внимательны! Есть два контракта chainlink с токенами Link. И в первый раз я добавил "боевые" токены Link по адресу контракта. И потом долго думал, почему тестовые токены не появились.

Короче, как нужно поступать, если у вас тоже не появились токены после запроса.

В завершении процесса выполнения запроса на токены появится окошко с хешем транзакции и надписью, что все ок. Переходим по этому хешу. Должна будет открыться страница на etherscan. Там в блоке Profile Summary будет адрес контракта.

Копируете этот адрес и вставляете его в "Импорт токенов" в Метамаск, символ Link.

После этого токены должны будут появится на балансе. Теперь после запросы новых токенов на chainlink, они сразу будут отображаться в кошельке.

#link #chainlink
👍1
Faucets для других тестовых сетей

Нашел еще один прекрасный сайт, который отслеживает активность faucets и ведет актуальный список.

https://faucetlink.to/select

#faucet
👍1
Заметка по Chainlink

В общем, уже второй день погружен в документацию chainlink, чтобы хоть как-то разобраться с ним. Точнее в данный момент экспериментирую с Data Feed и получением цен на пары криптовалют.

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

Так вот сегодня меня смутила данная строка в коде:

const provider = new ethers.providers.JsonRpcProvider("https://rpc.ankr.com/eth_goerli")

Раньше с этим не сталкивался: ни в уроках Ильи, ни в других разборах.

Сам ethers.providers однажды встречался, когда требовалось получить номер блока для тестов, но с JsonRpcProvider...

И что это за ссылка?..

Перейдя по ней, я обнаружил еще один сервис для блокчейна, о котором ни разу ранее не слышал. Думаю, однажды мы вернемся к нему и разберем хотя бы теоретически.

О сервисе Ankr можно почитать в статье Бинанс.

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

Так вот, ссылка с кода ведет на узел Goerly, а команда ethers.providers.JsonRpcProvider просто подключает к этому узлу.

#ankr #JsonRpcProvider #providers
👍1
Функции ethers

Короче, нашел еще одну строку в коде, которая заставила задуматься. Теперь я иногда буду писать посты о функциях ethers, чтобы мы вместе могли их изучать и запоминать. Так или иначе они могут пригодиться нам в будущем.

Итак, вот эта строка:

const priceFeed = new ethers.Contract(addr, abi, provider)

Provider берется, как раз из функции прошлого поста: new ethers.providers.JsonRpcProvider(), поэтому рассмотрим их обе.

Информация взята и переведена из документации Ethers.

ethers.providers.JsonRpcProvider( [ urlOrConnectionInfo [ , networkish ] ] ) - в скобках указывается url (например, ссылка на узел) и сеть, при необходимости. Если ссылка не указана, то запрос будет отправлен на узел, используя eth_chainId с отсылкой к eth_networkId. По умолчанию используется "http://localhost:8545".

Также с JsonRpcProvider можно использовать ".connection" - для получения информации о провайдере, ".getSigner" - для получения пользователя, который управляет узлом, а если его нет, то вернется нулевой адрес, ".getUncheckedSigner" - для получения хеша транзакции, не дожидаясь дополнительной информации, ".listAccounts" - для получения списка адресов, которыми управляет провайдер, ".send" - для отправки сообщений на узел.

ethers.Contract( address , abi , signerOrProvider ) - подключение к конкретному контракту в сети Ethereum, где "adress" - подключаемый адрес контракта, "abi" - контракт с двоичным интерфейсом приложения, который описывает имеющиеся у него методы и события, "signerOrProvider" - аккаунт, от которого идет подключение, или провайдер (узел).

С ethers.Contract можно использовать ".attach(addressOrName)" - присоединяет новый адрес: это может быть полезно, когда есть несколько похожих копий контракта и вы хотите работать с каждым; ".connect(providerOrSigner)" - подключение аккаунта или узла, от которого будет выполнятся транзакция.

Так же с contract работают такие свойства, как: ".address" - возвращает адрес контракта, ".resolvedAddress" - возвращает промис контракта, к которому идет запрос: если address был указан в конструкторе. ".deployTransaction" - если объект контракта был результатом действия ContractFactory, то свойство покажет транзакцию, которая сделала деплой. ".signer" - вернет аккаунт, который был указан в конструкторе контракта.

Чуть больше прочитать про обе функции можно тут и тут.

#ethers #contract #JsonRpcProvider #provider
👍1
Chainlink Data Feeds. Часть 1

Chainlink Data Feeds - это одна из 4 частей сервиса chainlink, позволяющий подключать смарт контракты к сети оракулов, чтобы получить достоверную информацию о цене на криптовалюту, балансы бирж и состояния L2 секвенсеров.

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

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

Итак, Data Feeds состоят из трех компонентов:

1. Нашего контракта, в котором нам нужно получить некую информацию, например, о цене на какую-либо криптовалюту;
2. Прокси контракт, к которому мы подключаемся, и который в свою очередь подключается к Агрегатору для получения нужно информации;
3. Агрегатор. Именно он получает всю информацию от оракулов.

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

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

Далее мы рассмотрим Solidity код подключения.

#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 2

Удобнее всего практиковаться с Data Feeds в Remix IDE в браузере. Конечно, для вашей большей практики деплоя контрактов в различные сети, в том числе в goerly, можно писать и в VS Code или другом редакторе кода, но Remix в данном случае проще.

Лично я сначала пробовал делать в Ремиксе, потом в VS практиковался с интерфейсом и js.

Для начала пойдем простым способом и посетим эту ссылку. Скролим ниже до Solidity кода и нажимаем "Open in Remix".

Мы увидим самый простой пример валидного кода с подключенным уже интерфейсом агрегатора.

ВАЖНО! На данный момент практики с кодом у вас на счету в тестовой сети в кошельке Метамаск уже должны быть некоторые средства, 0.02 Эфира будет самый раз.

Справа в меню (иконки) сначала переходим в раздел Compile и компилируем наш контракт.

Далее идем в раздел Deploy (иконка с эфиром). В поле "Environment" выбираем "Injected Provider - Metamask". Под этим полем, после подключения, должна появиться ваша тестовая сеть, обычным текстом, типа "Goerly network", а в поле "Account" - отобразиться ваш адрес в кошельке. В поле "Contract" проверяем, чтобы был именно наш контракт. И жмем "Deploy".

Возможно, в первые разы у вас будет появляться окошко Метамаска для авторизации. Тут нужно будет все одобрить.

В момент деплоя снова появится окошко Метамаска, где нужно будет одобрить транзакцию и заплатить немного эфира. После этого в консоли Ремикс появится ссылка на ваш контракт в Etherscan, и справа, где вы нажимали кнопку деплоя, можно будет развернуть ваш контракт и попробовать вызвать функцию getLatestPrice().

По сути, это самый простой вариант работы с chainlink.

Далее рассмотрим другие функции, которые можно вызывать с Data Feeds.

#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 3

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

decimals - возвращает, даже не знаю, как перевести, эти самые decimals. Помните в одном из постов мы разбирали из чего состоит Эфир? Эфир, потом Gwei, потом в самом конце Wei, который равен "0, семнадцать нулей и 1", всего после запятой 18 символов. Так вот эти 18 символов и называются decimals. И в отношении других валют, это количество символов после запятой может быть разным.

denoscription - описание контракта Агрегатора, на который указывает Прокси контракт.

getRoundData - получение данных с определенного раунда.

latestRoundData - получение данных с последнего раунда.

version - версия контракта Агрегатора.

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

Для getRoundData() - все таки потребуется знать id интересующего раунда.

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

Эти функции иногда меняются, поэтому перед использованием всегда проверяйте, что они делают.

Далее узнаем, как подключать функции из Агрегатора и как его найти.  

#chainlink #datafeeds #feeds
👍1
Chainlink Data Feeds. Часть 4

Итак, есть несколько основных блокчейн сетей, к которым вы можете подключаться. В каждом из них есть список конкретных смарт контрактов, из которых мы и получаем основные сведения, типа стоимости ETH/USD.

И когда в Ремиксе была строка в конструкторе

priceFeed = AggregatorV3Interface(0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e);

то тут указывался адрес в тестовой сети goerly для пары ETH/USD.

Вы можете поэкспериментировать с различными контрактами сами. Просто замените адрес контракта в строке в конструкторе.

Однако учтите, что за каждый деплой контракта вы должны будете заплатить.

Все адреса контрактов и сети можно посмотреть тут.

#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 5

Возможно, вам потребуется узнать Прокси контракт или Агрегатор для данной пары, типа ETH/USD, как это сделать?

1. Прежде всего выбираем интересующий нас контракт Data Feed с парой валюты, представленных в официальной документации chainlink. Ссылку на их список я давал в прошлом посте.

2. Открываем контракт в etherscan.

3. Выбираем вкладку "Contract" и жмем "Read contract".

4. Далее из показанных там функций жмем на "Agregator". Это и будет адрес контракта AccessControlledOffchainAggregator.

5. Если в этом же окне функций спуститься ниже и нажать на "Owner", то вы получите адрес прокси контракта.

#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 6

Если мы хотим подключить контракт Агрегатор (AccessControlledOffchainAggregator) в свой контракт, то это будет чуть сложнее.

В документации написано, что можно использовать Ремикс, но, если честно, это очень странный способ для разработчика. Особенно, когда работаешь в редакторах кода, типа VS Code. Поэтому я опишу другой способ.

1. Прежде всего, способ описанным в предыдущем посте, мы находим Агрегатор контракта, который нам нужен, и во вкладке "Contract" внизу ищем его ABI.

2. Копируем ABI и переходим по данной ссылке. В поле ABI вставляем скопированный код, жмем на кнопку внизу и получаем интерфейс контракта.

3. Сохраняем этот интерфейс в свой контракт.

4. Далее в своем контракте создаем новую переменную объекта.

5. И в конструкторе в эту переменную кладем адрес контракта.

Все, после деплоя можно вызывать функции с Агрегатора.

Пример, как это сделал я, можно найти в файле в моем репозитории на GitHub тут.

P.S. Этот код можно скопировать в Ремикс и потестить там.

#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 7

Забыл еще сказать одну штуку.

Если вы хотите подключать интерфейсы в своем контракте из редакторов кода, типа VS Code, то можно добавить пакет chainlink в свой проект, выполнив команду в консоли

npm install @chainlink/contracts --save

После этого можно использовать import.

#chainlink #datafeeds #feeds
Chainlink VRF. Часть 1

Следующие несколько постов будут про Chainlink VRF или про то, как сервис помогает сгенерировать случайное число.

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

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

Сервис предоставляет два метода генерации чисел: Подписной и По запросу.

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

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

В данный момент генерация случайных чисел доступна для сети Эфира, BNB, Polygon, Avalanche и Fantom.

#chainlink #vrf #random
👍1
Chainlink VRF. Часть 2

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

В chainlink vrf помимо нашего контракта существуют еще два контракта: VRF Координатор и VRF Сервис.

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

Второй, внесетевой компонент, слушает события от Координатора и генерирует случайное число основанное на хеше блока и времени. После этого он отправляет данное число и доказательство, что число действительно было сгенерировано случайно, в Координатора.

Эту цепь можно представить так:

Наш контракт (отправляет запрос на число) => Координатор (порождает событие, отправляет в Сервис) => Сервис (создает число и доказательство случайности, отправляет в Координатор) => Координатор (подтверждает число и доказательство, отправляет в наш Контракт) => Наш контракт

В нашем контракте сгенерированное число записывается либо в переменную, либо в mapping.

#chainlink #vrf #random
👍1
Chainlink VRF. Часть 3

Как создать Подписной метод генерации случайных чисел?

1. Для начала нужно зарегистрироваться на сервисе по этой ссылке, нажав "Create Subnoscription" и подключив кошелек.

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

2. Затем требуется добавить Link на счет только что созданного аккаунта. Это можно сделать и позже, если вы не запросили их на chainlink до сих пор.

3. Добавление Consumers (пользователей, от которых будут поступать запросы на генерацию чисел). Сюда добавляются адреса контрактов, откуда будут идти запросы. Мы сделаем это чуть позже.

Создание аккаунта, добавление Link - все это требует наличие Эфира на счету! Добавьте его через faucets, как было написано в предыдущих постах. 

Если вы все сделали правильно, то откроется ваш личный кабинет на chainlink.

Кстати, там указан ваш ID, который нам понадобится для написания смарт контракта.

#chainlink #vrf #random
👍1