#  Учебное пособие: Интеграция Core Model RedStone Oracle в ваше dApp

By [ivanxx.eth](https://paragraph.com/@ivanxx) · 2023-08-08

---

Введение
--------

Сегодня мы погрузимся в важную тему интеграции оракула RedStone в ваши смарт-контракты. Давайте сначала немного познакомимся с RedStone.

> RedStone - это Oracle, обеспечивающий часто обновляемые, надежные и разнообразные каналы данных для ваших dApp и смарт-контрактов на нескольких L1 и L2.

![](https://storage.googleapis.com/papyrus_images/ce889d7a35d6d77eaf2f60beec86fcca99a6d8641a639f277fa9f156ecf86895.png)

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

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

В этом знакомстве мы расскажем вам, как интегрировать RedStone Oracle в ваши смарт-контракты. В зависимости от архитектуры смарт-контракта и требований бизнеса мы можем предоставлять данные по 3 различным моделям:

*   **RedStone Core**, данные динамически добавляются в пользовательские транзакции, что позволяет достичь максимальной эффективности использования газа и сохранить отличный пользовательский опыт, поскольку весь процесс укладывается в одну транзакцию
    
*   **RedStone Classic** - данные поступают в цепочечное хранилище через ретранслятор. Предназначен для протоколов, разработанных для традиционной модели Oracles, которые хотят иметь полный контроль над источником данных и условиями обновления.
    
*   **RedStone X**, ориентированный на потребности наиболее продвинутых протоколов, таких как вечные контракты, опционы и деривативы, за счет устранения риска опережения, обеспечивающего получение данных о ценах на следующем блоке после взаимодействия с пользователями.
    

Мы сегодня будем интегрировать **RedStone Core.** Давайте вместе начнем это захватывающее путешествие в мире децентрализованных данных и блокчейна. Я уверен, что интеграция RedStone Oracle откроет перед вами новые возможности и поможет достичь новых высот в разработке децентрализованных приложений.

Интеграция
----------

> **TLDR**
> 
> **Вам необходимо сделать две вещи:**
> 
> *   **Настроить смарт-контракты** таким образом, чтобы в них были включены библиотеки, отвечающие за извлечение и проверку данных
>     
> *   **Javascript-код вашего dApp** для инъекции дополнительной полезной нагрузки с **feeds** данных (в противном случае вы получите ошибки смарт-контракта).
>     

> **ВНИМАНИЕ**
> 
> 1.  Наши контракты требуют `solidity > 0.8.4.` Если ваш код написан на более старой версии, пожалуйста, используйте Manual Payload.
>     
> 2.  Если вы работаете со сторонними агрегаторами, убедитесь, что они также поддерживают **передачу дополнительной полезной нагрузки**.
>     
> 3.  Пожалуйста, не используйте Remix для тестирования оракулов RedStone, поскольку Remix не поддерживает модификацию транзакций так, как это делает evm-коннектор
>     
> 4.  **Мы настоятельно рекомендуем иметь механизм обновления контрактов** (он может быть основан на мультисигме или DAO). Таким образом, вы сможете быстро заменить поставщиков данных в случае возникновения каких-либо проблем.
>     

**Шаг 1: Установка и настройка** В среде разработки установите пакет RedStone Oracle с помощью предпочтительного менеджера пакетов (**npm или yarn**).

    Скопируйте код
    
    NPM: npm install @redstone-finance/evm-connector
    YARN: yarn add @redstone-finance/evm-connector
    

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

**Некоторый пример, как это сделать:**

1.  **Установите Node.js и npm**: Убедитесь, что у вас установлены **Node.js и npm** (Node Package Manager). Вы можете загрузить их с официального сайта **Node.js.**
    
2.  **Выберите блокчейн**: Выберите блокчейн, с которым вы хотите работать (например, Ethereum). Для разработки и тестирования вы можете использовать локальный блокчейн, такой как Hardhat, Truffle или Ganache.
    
3.  **Настройте проект**: Создайте новую директорию для вашего проекта и перейдите в нее через командную строку. Затем инициализируйте проект с помощью команды:
    
        npm init
        
    
    Следуйте инструкциям в командной строке для настройки вашего проекта.
    
4.  **Установите зависимости**: Установите необходимые зависимости, включая `@redstone-finance/evm-connector`, а также другие библиотеки, которые вам могут понадобиться для разработки смарт-контрактов.
    
5.  **Создайте смарт-контракт**: Создайте новый файл `.sol` (с расширением Solidity) в директории вашего проекта. В этом файле вы можете определить свой смарт-контракт и подключить необходимые библиотеки, включая `MainDemoConsumerBase.sol`.
    
6.  **Напишите и разверните контракт**: Внутри вашего смарт-контракта вы можете написать логику, использующую функции из библиотеки `@redstone-finance/evm-connector`. Затем вы можете использовать инструменты разработки (например, Hardhat или Truffle) для компиляции, развертывания и тестирования вашего контракта на выбранном блокчейне.
    
7.  **Тестируйте и отладьте**: Вы можете написать юнит-тесты для вашего контракта с использованием инструментов тестирования, предоставляемых средой разработки. Это поможет вам убедиться, что ваш контракт работает правильно и соответствует ожиданиям.
    

> Для пользователей Foundry есть дополнительный шаг по [установке зависимостей](https://book.getfoundry.sh/projects/dependencies) с помощью git-подмодулей.

**Шаг 2: Импорт контрактов RedStone Oracle**

> Список базовых контрактов с услугами передачи данных
> 
> **Базовый контракт** **Сервис данных со списком feeds  Статус**
> 
> [MainDemoCustomerBase.sol](https://github.com/redstone-finance/redstone-oracles-monorepo/blob/main/packages/evm-connector/contracts/data-services/MainDemoConsumerBase.sol)                           [redstone-main-demo](https://app.redstone.finance/#/app/data-services/redstone-main-demo)            Demo
> 
> [RapidDemoConsumerBase.sol](https://github.com/redstone-finance/redstone-oracles-monorepo/blob/main/packages/evm-connector/contracts/data-services/RapidDemoConsumerBase.sol)                          [redstone-rapid-demo](https://app.redstone.finance/#/app/data-services/redstone-rapid-demo) Demo
> 
> [StocksDemoConsumerBase.sol](https://github.com/redstone-finance/redstone-oracles-monorepo/blob/main/packages/evm-connector/contracts/data-services/StocksDemoConsumerBase.sol)                      [redstone-stocks-demo](https://app.redstone.finance/#/app/data-services/redstone-stocks-demo)       Demo
> 
> [AvalancheDataServiceConsumerBase.sol](https://github.com/redstone-finance/redstone-oracles-monorepo/blob/main/packages/evm-connector/contracts/data-services/AvalancheDataServiceConsumerBase.sol)       [redstone-avalanche-prod](https://app.redstone.finance/#/app/data-services/redstone-avalanche-prod) Production
> 
> [PrimaryProdDataServiceConsumerBase.sol](https://github.com/redstone-finance/redstone-oracles-monorepo/blob/main/packages/evm-connector/contracts/data-services/PrimaryProdDataServiceConsumerBase.sol) [redstone-primary-prod](https://app.redstone.finance/#/app/data-services/redstone-primary-prod)       Production

Давайте интегрируем RedStone Oracle в ваш смарт-контракт - это очень простой процесс. Выбираем контракт из списка, например **MainDemoConsumerBase.sol.**

> \*\*MainDemoConsumerBase.sol - \*\*это базовый контракт (base contract) из библиотеки RedStone Oracle, предназначенный для интеграции с оракулами данных, которые предоставляют информацию о ценах на активы, такие как **Ethereum, Bitcoin** и другие токены.

**Получение нескольких значений**

    Скопируйте код
    
    // Импортируем базовый контракт для доступа к RedStone Oracle
    import "@redstone-finance/evm-connector/contracts/data-services/MainDemoConsumerBase.sol";
    
    // Объявляем наш контракт, который наследует функциональность от contract YourContractName is MainDemoConsumerBase {
        // Добавим функцию для получения цен на активы
    
        // Получение цен на указанные активы (например, ETH и BTC)
        function getAssetPrices() public view returns (uint256 ethPrice, uint256 btcPrice) {
            // Создаем массив с идентификаторами активов (символами)
            bytes32[] memory dataFeedIds = new bytes32Unsupported embed;
            //Необходимо передать идентификатор канала данных, преобразованный в bytes32
            dataFeedIds[0] = bytes32("ETH");
            dataFeedIds[1] = bytes32("BTC");
    
            // Получаем значения цен для активов
            uint256[] memory values = getOracleNumericValuesFromTxMsg(dataFeedIds);
    
            // Сохраняем значения цен в переменные
            ethPrice = values[0];
            btcPrice = values[1];
    
            // Возвращаем значения цен на активы
            return (ethPrice, btcPrice);
        }
    
        // Добавьте другие функции вашего контракта здесь
        // ...
    }
    

**Получение единственного значения**

    Скопируйте код
    
    // Импортируем базовый контракт для доступа к RedStone Oracle
    import "@redstone-finance/evm-connector/contracts/data-services/MainDemoConsumerBase.sol";
    
    // Объявляем наш контракт, который наследует функциональность от contract YourContract is MainDemoConsumerBase {
        // Добавим функцию для получения цену на актив
        // Получение цен на указанные активы (например, ETH )
        function getAssetPrices() public view returns (uint256 ethPrice) {
            //Необходимо передать идентификатор канала данных, преобразованный в bytes32
            // Получаем значения цен для активов
            ethPrice = getOracleNumericValueFromTxMsg(bytes32("ETH"));
    
            // Возвращаем значения цен на активы
            return ethPrice;
        }
    
        // Добавьте другие функции вашего контракта здесь
        // ...
    }
    

**Шаг 3: Настройте Javascript-код вашего dApp**

Мы уже интегрировали RedStone Oracle в смарт контракт. Давайте настроим JavaScript-код для вашего dApp, с использованием интегрированного смарт контракта.

1.  **Импортируйте библиотеку и настройки**: Сначала импортируйте необходимые библиотеки, такие как [ethers.js](https://github.com/ethers-io/ethers.js/), и настройки, которые могут понадобиться для взаимодействия с вашим блокчейн-провайдером.
    
        const ethers = require('ethers'); 
        
        // Ваш провайдер Ethereum 
        
        const provider = new ethers.providers.JsonRpcProvider('YOUR_RPC_URL');
        
    
2.  **Импортируйте WrapperBuilder**: Импортируйте `WrapperBuilder` из `@redstone-finance/evm-connector` для настройки взаимодействия с оракулом.
    
        const { WrapperBuilder } = require("@redstone-finance/evm-connector");
        
    
3.  **Создайте экземпляр вашего смарт-контракта**: Используйте `ethers.js` для создания экземпляра вашего смарт-контракта, который вы хотите настроить для работы с оракулом.
    
        const yourEthersContract = new ethers.Contract(address, abi, provider);
        
    
4.  **Оберните смарт-контракт с использованием оракула**: Используйте `WrapperBuilder`, чтобы обернуть ваш смарт-контракт с использованием данных оракула.
    
        const wrappedContract = WrapperBuilder.wrap(YourContract).usingDataService(
          {
            dataFeeds: ["ETH", "BTC"],
          },
        );
        
    
5.  **Взаимодействуйте с обернутым контрактом**:Теперь вы можете получить доступ к любому из методов контракта точно так же, как и к коду ethers-js:
    
        await wrappedContract.getAssetPrices();
        
    

Вы можете увидеть примеры использования `@redstone-finance/evm-connector`в нашем [специальном репозитории с примерами](https://github.com/redstone-finance/redstone-evm-examples) .

Для всех поддерживаемых каналов мы предоставляем [пользовательский интерфейс с графиками и историческими данными](https://app.redstone.finance/)

Спасибо, что прочитали! Теперь, вы успешно интегрировали основную модель RedStone Oracle в свое dApp, расширив его возможности за счет точных данных о ценах в режиме реального времени.

Продолжайте внедрять инновации, создавать и вносить свой вклад в экосистему блокчейн!

---

*Originally published on [ivanxx.eth](https://paragraph.com/@ivanxx/core-model-redstone-oracle-dapp)*
