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

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

The Graph — это децентрализованный протокол, созданный для эффективной индексации и запроса данных из публичных блокчейнов.

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

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

Протокол организовывает данные в подграфы, которые представляют собой открытые API. Любой разработчик может создать свой подграф и предложить его сообществу The Graph Network для передачи данных (например, котировок токенов) в децентрализованные приложения.

The Graph Network придерживается принципов максимальной децентрализации: большинство этапов работы протокола распределено между тысячами участников сообщества, а их вклад в обеспечение функционирования сети оплачивается токенами GRT.

Очень хорошо про The Graph рассказано в этом видео.

Советую посмотреть, чтобы понимать, о чем будут завтра посты.

#thegraph #graph #graphql
👍1
Не рабочая база!

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

В общем пока не берите этот пример!
👍1
Конфликт tsconfig и исправленная база

Проблема была в том, что я устанавливал react с уже содержащим в себе typenoscript, и в hardhat создавался проект typenoscript. Оба этих действия создавали файл в корневой папке tsconfig, который, я писал ранее, нужно удалять. Так получается, что когда создавался сервер и программа пыталась создать приложение, то она не находила некоторые записи в этом самом конфиге и выдавала ошибку, о том что "не задан флаг —jsx".

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

Посмотреть и скачать файлы из моей обновленной базы можно тут.

За оформление git и его описание не ругайтесь, я еще не до конца разобраться с этим GitHub.

В целом, работаем дальше!

#base
👍2
Проблемы с подключением к TheGraph

Сегодня полдня возился с файлами tsconfig и вторые полдня с подключением к TheGraph.

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

По сути, там предлагается три способа подключения:

1. Через graphQL-client;
2. Через сторонний сервис Apollo;
3. Через URQL;

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

При этом каждый запрос - платный. Другими словами, вам нужно купить их внутреннюю валюту, а потом уже создавать запросы.

Они также предлагают акцию "1000 первых запросов бесплатно", но у меня не получилось активировать ее ни через ru почту, ни через com.

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

Но и тут показано подключение, во-первых, по устаревшей ссылке, во-вторых, через простой javanoscript, а мне нужен пример с typenoscript.

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

Так или иначе пробую разные способы. Как только получится что-нибудь, то сразу сделаю пост с разбором.

Держу в курсе!

#thegraph #graphql
👍1
Начало работы с 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