Урок 3

Створення простого контракту, інтегрованого з Oracle

Тепер, коли ми налаштували Remix IDE та імпортували необхідні бібліотеки Chainlink, ми збираємося створити базовий смарт-контракт, який інтегрується з оракулом. Це дозволить нам отримувати та обробляти зовнішні дані.

Складання контракту: Основи інтеграції Oracle

  1. Починаючи з основ:
    Давайте почнемо з визначення нашого контракту, визначення версії Solidity та імпортування бібліотеки Chainlink, яку ми будемо використовувати:
    ```
    Солідність
    // SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

імпорт “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;

контракт OracleIntegratedContract {
AggregatorV3Interface внутрішній priceFeed;

// Видимість для конструктора видалено 
 конструктор (адреса _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
У цьому сегменті ми вказали, що наш контракт використовуватиме канал цін Chainlink. Конструктор бере адресу для контракту каналу цін у мережі Ethereum.

1. 
 Отримання даних з Oracle 

 1. 
 Давайте продовжимо наш контракт, щоб отримати останню ціну Ethereum:

Солідність
функція getLatestEthPrice() публічний перегляд повертає (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
Функція `latestRoundData()` з інтерфейсу Chainlink Aggregator надає нам різноманітні дані, включаючи найновішу ціну.

## Обробка відповідей Oracle: керування даними після їх отримання 

 Дані, отримані від оракулів, часто надходять у необроблених форматах, які можуть не одразу відповідати нашим потребам. Важливо правильно обробляти ці дані в наших розумних контрактах: 



 1. 
 Форматування даних 

 1. 
Скажімо, оракул повертає ціну Ethereum у доларах США, але помножену на 10^8, щоб гарантувати відсутність десяткових знаків (часто в налаштуваннях оракула). Щоб отримати фактичну ціну, потрібно відформатувати дані:

Солідність
функція getFormattedEthPrice() публічний перегляд повертає (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1. 
Ця функція отримує вихідну ціну, а потім ділить її на 10^8, щоб отримати реальне значення.

1. 
 Обробка помилок 

 1. 
 Завжди враховуйте можливість того, що оракул не зможе отримати дані:

Солідність
функція safeGetLatestEthPrice() загальнодоступний перегляд повертає (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
 Тут функція `latestRoundData()` також надає мітку часу. Якщо мітка часу дорівнює 0, це, ймовірно, означає, що оракул не зміг отримати дані, і ми обробляємо це за допомогою оператора `require`.
Ваш повний код має виглядати так:

Солідність
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

імпорт “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;

контракт OracleIntegratedContract {
AggregatorV3Interface внутрішній priceFeed;

// Видимість для конструктора видалено 
 constructor(address _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

функція getLatestEthPrice() публічний перегляд повертає (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

функція getFormattedEthPrice() публічний перегляд повертає (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

функція safeGetLatestEthPrice() публічний перегляд повертає (ціле) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

До кінця цього уроку ви повинні мати базовий інтегрований з Oracle смарт-контракт, складений у Remix. Цей контракт отримує останню ціну Ethereum і обробляє повернуті дані. У наших наступних уроках ми розгорнемо цей договір і детальніше розглянемо найкращі практики та нюанси.

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
Каталог
Урок 3

Створення простого контракту, інтегрованого з Oracle

Тепер, коли ми налаштували Remix IDE та імпортували необхідні бібліотеки Chainlink, ми збираємося створити базовий смарт-контракт, який інтегрується з оракулом. Це дозволить нам отримувати та обробляти зовнішні дані.

Складання контракту: Основи інтеграції Oracle

  1. Починаючи з основ:
    Давайте почнемо з визначення нашого контракту, визначення версії Solidity та імпортування бібліотеки Chainlink, яку ми будемо використовувати:
    ```
    Солідність
    // SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

імпорт “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;

контракт OracleIntegratedContract {
AggregatorV3Interface внутрішній priceFeed;

// Видимість для конструктора видалено 
 конструктор (адреса _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
У цьому сегменті ми вказали, що наш контракт використовуватиме канал цін Chainlink. Конструктор бере адресу для контракту каналу цін у мережі Ethereum.

1. 
 Отримання даних з Oracle 

 1. 
 Давайте продовжимо наш контракт, щоб отримати останню ціну Ethereum:

Солідність
функція getLatestEthPrice() публічний перегляд повертає (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
Функція `latestRoundData()` з інтерфейсу Chainlink Aggregator надає нам різноманітні дані, включаючи найновішу ціну.

## Обробка відповідей Oracle: керування даними після їх отримання 

 Дані, отримані від оракулів, часто надходять у необроблених форматах, які можуть не одразу відповідати нашим потребам. Важливо правильно обробляти ці дані в наших розумних контрактах: 



 1. 
 Форматування даних 

 1. 
Скажімо, оракул повертає ціну Ethereum у доларах США, але помножену на 10^8, щоб гарантувати відсутність десяткових знаків (часто в налаштуваннях оракула). Щоб отримати фактичну ціну, потрібно відформатувати дані:

Солідність
функція getFormattedEthPrice() публічний перегляд повертає (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1. 
Ця функція отримує вихідну ціну, а потім ділить її на 10^8, щоб отримати реальне значення.

1. 
 Обробка помилок 

 1. 
 Завжди враховуйте можливість того, що оракул не зможе отримати дані:

Солідність
функція safeGetLatestEthPrice() загальнодоступний перегляд повертає (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
 Тут функція `latestRoundData()` також надає мітку часу. Якщо мітка часу дорівнює 0, це, ймовірно, означає, що оракул не зміг отримати дані, і ми обробляємо це за допомогою оператора `require`.
Ваш повний код має виглядати так:

Солідність
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

імпорт “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;

контракт OracleIntegratedContract {
AggregatorV3Interface внутрішній priceFeed;

// Видимість для конструктора видалено 
 constructor(address _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

функція getLatestEthPrice() публічний перегляд повертає (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

функція getFormattedEthPrice() публічний перегляд повертає (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

функція safeGetLatestEthPrice() публічний перегляд повертає (ціле) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

До кінця цього уроку ви повинні мати базовий інтегрований з Oracle смарт-контракт, складений у Remix. Цей контракт отримує останню ціну Ethereum і обробляє повернуті дані. У наших наступних уроках ми розгорнемо цей договір і детальніше розглянемо найкращі практики та нюанси.

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.