Solidity. Смарт контракты и аудит – Telegram
Solidity. Смарт контракты и аудит
2.62K subscribers
246 photos
7 videos
18 files
547 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
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
Chainlink VRF. Часть 4.1

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

Давайте пройдемся по коду.

Итак, в начале импортируются три контракта: ConfirmedOwner устанавливает нас (msg.sender), как владельца, VRFCoordinatorV2Interface - контракт Координатор для данной сети, VRFConsumerBaseV2 - обрабатывает ответ от Координатора.

Далее порождаются два event, чтобы в личном кабинете мы видели транзакции, создается структура RequestStatus, отвечающая за статусы запросов, mapping для хранения полученных чисел, а также несколько переменных для нашего ID, id последнего запроса.

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

Вообще keyhash отвечает за то, сколько газа в wei вы готовы заплатить за транзакцию. Чем больше это число, тем быстрее пройдет транзакция.

callbackGasLimit - отвечает за вызов callback функции в нашем контракте fulfillRandomWords(). Она должна быть меньше MaxGasLimit в контракте Координатора. Если указать ее слишком маленькой, то полученные сгенерированные числа просто не сохранятся в нашем контракте.

requestConfirmations - сколько подтверждений узел Chainlink должен подождать прежде чем ответить. Он должен быть в пределах Minimum и Maximum конфигурации.

numWords - сколько случайных чисел нам нужно получить. Их количество влияет на количество газа в callbackGasLimit. Будьте тут внимательны. Также это значение не должно превышать значение VRFCoordinatorV2.MAX_NUM_WORDS.  

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

Далее в конструкторе устанавливается владелец контракта и передается контракт Координатор.

Также тут представлены всего три функции.

requestRandomWords() - основная функция, которая отправляет запросы на генерацию случайных чисел в контракт Координатор, создает новую запись struct в mapping, устанавливает id последнего запроса и порождает событие.

fulfillRandomWords() - это функция, которую в нашем контракте вызывает контракт Координатор, когда получает сгенерированное число. Она добавляет числа в массив и порождает событие.

getRequestStatus() - служебная функция, которая позволяет нам проверять статус того или иного запроса.

Деплой можно также сделать из Ремикса, указав наш ID личного кабинета.

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

Для запроса случайного числа вызываем функциюrequest RandomWords(), ждем немного пока вернется ответ, и проверяем значения в requestIds.

В личном кабинете можно увидеть информацию по транзакции.

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

Пара слов о Link токенах во всем этом деле.

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

И за все это время ни разу не проскальзывает Link!

А его работа заключается в другом.

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

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

И, да, Link - это своего рода тоже криптовалюта, которой торгуют на бирже.

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

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

Идем по этой ссылке и также открываем код в Ремиксе.

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

Конфигурации сетей для разовых запросов можно посмотреть тут.

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

Итак, в данном коде появляются новые переменные: linkAddress и wrapperAddress, куда записываются адреса контрактов токена и wrapper. Их все можно найти в конфигурации.

Функции requestRandomWords(),  fulfillRandomWords() и getRequestStatus() делают все то же, что и описанные ранее.

И добавляется функция withdrawLink(). Сейчас объясню зачем она нужна.

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

И функция withdrawLink() нужна для того чтобы вернуть неиспользованные Link обратно на кошелек с контракта, если таковые будут после запроса.   

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

В завершении темы VRF стоит упомянуть еще несколько моментов.

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

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

2. В контракте можно запрашивать число "между % и %", например, между 1 и 50. Для этого потребуется добавить следующую строку в функцию fulfillRandomWords():

s_randomRange = (randomWords[0] % 50) + 1;

Однако, как я понял, это работает в случае единичного запроса. Для нескольких чисел придется писать цикл.

3. Можно получать от 1 до 200-500 случайных чисел за раз, в зависимости от конфигураций сети.

4. Если вы позволяете делать запросы на случайное число другим контрактам, то можно отслеживать этот процесс с помощью добавление нового mapping, куда будут записываться id запроса и адрес контракта.

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

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

Далее мы переходим к теме подключение к API через Chainlink.

#chainlink #vrf #random
👍1
Chainlink Connect to API. Интро

С сегодняшнего дня мы будем учиться использовать сервис Chainlink, чтобы подключаться к разным API и передавать данные с внешнего мира к себе в контракт.

Возможно, сам процесс займет пару дней и вот почему.

Хоть документация на сайте chainlink написана достаточно хорошо, но все же вопросы возникают в большом количестве. Я раньше никогда не работал с API, тем более на стыке с блокчейном, поэтому техническая часть вгоняет меня в депрессию.

Я пробовал поискать видео объяснения на эту тему. Однако они лекторы берут пример с документации и просто его воспроизводят, другие, с официального канала сервиса, слегка устаревшие.

Не, с кодом там все достаточно просто. Если вы со мной изучали предыдущие темы VRF и Data Feeds, то с ним проблем возникнуть не должно.

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

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

Также вызывает вопросы процесс создания и подключения своего оракула. Тема такая, что нужно сначала найти сторонний сервис, API которого нам интересен для своего контракта, создать шаблон \ оракул, и каким-то образом поместить его на узел, чтобы тот начал с ним работать.

В общем и тут разбираюсь. Как только что-либо будет понятно, сразу напишу посты.
Chainlink Connect to API. Часть 1

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

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

Как это все работает на chainlink?

Сейчас есть два способа работы с API:

1) Создать свой external adapter (далее Внешний Адаптер), куда определить нужное вам API. И уже оттуда получать информацию в свой смарт контракт;

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

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

У вас есть смарт контракт, и вы хотите получать в него текущий курс биткойна. Далее вам нужно найти сторонний ресурс, например, биржу обмена валют, у которого на сайте есть API.

Грубо говоря, API это, чаще всего, обычный json файл с необходимой информацией, который можно посмотреть по ссылке. Вот пример по ссылке.

Как было раньше:

Вы заходите на маркет chainlink, выбираете узел, в своем контракте указываете параметры этого узла (токен, оракул и тип работы), вставляете ссылку и деплоите. После этого, вы можете вызвать функцию в своем контракте и получить данные с API ссылки.

Как сейчас:

Первый вариант.

Лавочку прикрыли. На маркете теперь есть официальные узлы, которые могут предоставить вам данные с API, которые уже установлены в них. Доступные узлы и информацию можно посмотреть тут.

Если хотите найти другой узел для выполнения вашего API, chainlink говорит, что можно зайти на их Дискорд канал и попросить кого-нибудь из сообщества сделать это.

Я зашел на этот канал, но выглядит он как-то глухо. Не, люди там есть, но в основном просто висят вопросы или новости.

Второй вариант.

Вы пишите свой адаптер, где указываете API ссылку и информацию, которую хотите получить. Далее, вам нужно развернуть и настроить свой узел на chainlink для обработки этого адаптера. И уже там появится вся необходимая информация для контракта, типа jobId, oracle, tokenId и т.д.

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

#chainlink #api #adapter
Chainlink Connect to API. Часть 2

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

Single Word Response

Результатом такого запроса будет всего одна единица данных: одно число uint или int, булево значение, строка или bytes32. Например, как в этой ссылке мы получаем только значение USD числом.

Multi-Variable Responses

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

Array Response

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

Large Responses

В этом случае мы сможем получить большие по объему данные, в рамках блокчейна, как например, такой.

В документации я не нашел дополнительных примеров, кроме ссылки IPFS, о том, что еще Chainlink подразумевают по "большие данные".

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

Далее перейдем к коду.

#chainlink #api #adapter