Важливість оракул-машини в блокчейні та механізм реалізації Chainlink
Оракул-машина є ключовою інфраструктурою в галузі Блокчейн, вона може надавати зовнішню інформацію для смарт-контрактів на ланцюгу. Як проміжне програмне забезпечення, що з'єднує смарт-контракти та зовнішній світ Блокчейн, Оракул-машина відіграє надзвичайно важливу роль, а її основна функція полягає в наданні даних для смарт-контрактів на Блокчейн.
Наприклад, якщо ми розгорнемо смарт-контракт в мережі Ethereum, який потребує отримання даних про обсяги торгівлі нафтою за певний день. Оскільки смарт-контракт сам по собі не може безпосередньо отримувати дані з реального світу поза блокчейном, для реалізації цієї функції потрібен оракул-машина. У цьому випадку смарт-контракт запише обсяги торгівлі нафтою за потрібну дату в журнал подій. Після цього поза блокчейном запуститься процес, який буде моніторити та підписувати цей журнал подій. Коли буде виявлено запит у торгівлі, цей процес через подачу транзакції в блокчейні викликає відповідні методи контракту, щоб завантажити інформацію про обсяги торгівлі нафтою за вказану дату до смарт-контракту.
! Chainlink (частина 1) серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-ced3348559da0aabbf1c67c4d84ddc88.webp)
Chainlink є наразі найбільшим проектом оракулів за часткою ринку в сфері блокчейн. Це децентралізована система оракулів, яка має на меті надавати дані з реального світу в блокчейн найнадійнішим способом. Chainlink на основі основних принципів оракулів побудувала економічно стимульовану добру екосистему через токен LINK. Оракул Chainlink потрібно активувати шляхом передачі токенів LINK, які є контрактом ERC677 на мережі Ethereum. Функція оракулів, реалізована на основі токенів LINK ERC677, працює за моделлю запит/відповідь.
Стандарт токенів ERC677 був запропонований Chainlink для задоволення потреб у сценаріях послуг оракулів. Він додає метод transferAndCall на базі стандартного ERC20, об'єднуючи платіж та запит на послугу в один процес. Коли користувач проводить переказ за допомогою transferAndCall, окрім функції переказу ERC20, також перевіряється, чи є адреса отримувача адресою контракту; якщо так, викликається метод onTokenTransfer цього адреси.
! Chainlink Частина 1 серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-36eedcde4ebee55bf1c0e6c5f02934df.webp)
У реалізації Chainlink, коли споживачі оракулів використовують метод transferAndCall для сплати зборів та запиту послуг, метод onTokenTransfer контракту оракулів спочатку виконує ряд перевірок безпеки. Це включає в себе перевірку, чи є переказ токенами LINK, перевірку довжини даних на перевищення обмежень, а також верифікацію селектора функцій тощо. Після успішної перевірки, за допомогою deleGatecall викликається метод oracleRequest поточного контракту оракулів.
! Chainlink (частина 1) із серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-d05f88f78a86510920ca9cb9cb97fcd6.webp)
метод oracleRequest генерує унікальний requestId, встановлює час дії та додає відповідну інформацію до мапи commitments. Найголовніше, він викликає подію OracleRequest, яка містить дані запиту, представлені у вигляді CBOR( компактного бінарного об'єкта у форматі кодування ).
! Chainlink Частина 1 серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-dae23b36c6a83626aa95ba58fa8dbee5.webp)
Вузли поза ланцюгом будуть слухати ці події OracleRequest. Коли буде виявлено новий запит, вузол розпарсить інформацію в події, отримає необхідні дані через API, а потім надішле дані в ланцюг, викликавши метод fulfillOracleRequest контракту оракула. Цей метод виконає ряд перевірок, а потім викличе функцію зворотного виклику контракту запитувача, щоб повернути результат контракту споживача.
! Chainlink (частина 1) із серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-1994fff156354700fda0609f9e317726.webp)
Для розробників, якщо потрібно використовувати лише ціни на існуючі торгові пари, можна безпосередньо використовувати Price Feed, наданий Chainlink, який також називається Aggregator(. Кожна торгова пара має окремий Price Feed, насправді це контракт AggregatorProxy. Ці контракти надають кілька методів запиту, включаючи отримання точності ціни, опису, версії та останніх даних про ціну тощо. У більшості сценаріїв програма може просто потребувати зчитувати останню ціну, тобто викликати метод latestRoundData)(.
! Chainlink (частина 1) із серії Oracle Explainer])https://img-cdn.gateio.im/webp-social/moments-bb84d77f358852f47e9adf3e74ba5bf9.webp(
Слід зазначити, що для торгових пар, які оцінюються в USD, точність цін зазвичай уніфікована на рівні 8 знаків, що спрощує питання обробки точності між різними токенами. Цей дизайн дозволяє розробникам зручніше використовувати дані про реальні ціни в смарт-контрактах, не займаючись складними викликами API та перетворенням форматів даних.
! Chainlink (частина 1) із серії Oracle Explainer])https://img-cdn.gateio.im/webp-social/moments-527bd8714534f5f06ccdd9afe40b253a.webp(
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Chainlink: як Оракул-машина з'єднує Блокчейн з реальним світом
Важливість оракул-машини в блокчейні та механізм реалізації Chainlink
Оракул-машина є ключовою інфраструктурою в галузі Блокчейн, вона може надавати зовнішню інформацію для смарт-контрактів на ланцюгу. Як проміжне програмне забезпечення, що з'єднує смарт-контракти та зовнішній світ Блокчейн, Оракул-машина відіграє надзвичайно важливу роль, а її основна функція полягає в наданні даних для смарт-контрактів на Блокчейн.
Наприклад, якщо ми розгорнемо смарт-контракт в мережі Ethereum, який потребує отримання даних про обсяги торгівлі нафтою за певний день. Оскільки смарт-контракт сам по собі не може безпосередньо отримувати дані з реального світу поза блокчейном, для реалізації цієї функції потрібен оракул-машина. У цьому випадку смарт-контракт запише обсяги торгівлі нафтою за потрібну дату в журнал подій. Після цього поза блокчейном запуститься процес, який буде моніторити та підписувати цей журнал подій. Коли буде виявлено запит у торгівлі, цей процес через подачу транзакції в блокчейні викликає відповідні методи контракту, щоб завантажити інформацію про обсяги торгівлі нафтою за вказану дату до смарт-контракту.
! Chainlink (частина 1) серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-ced3348559da0aabbf1c67c4d84ddc88.webp)
Chainlink є наразі найбільшим проектом оракулів за часткою ринку в сфері блокчейн. Це децентралізована система оракулів, яка має на меті надавати дані з реального світу в блокчейн найнадійнішим способом. Chainlink на основі основних принципів оракулів побудувала економічно стимульовану добру екосистему через токен LINK. Оракул Chainlink потрібно активувати шляхом передачі токенів LINK, які є контрактом ERC677 на мережі Ethereum. Функція оракулів, реалізована на основі токенів LINK ERC677, працює за моделлю запит/відповідь.
Стандарт токенів ERC677 був запропонований Chainlink для задоволення потреб у сценаріях послуг оракулів. Він додає метод transferAndCall на базі стандартного ERC20, об'єднуючи платіж та запит на послугу в один процес. Коли користувач проводить переказ за допомогою transferAndCall, окрім функції переказу ERC20, також перевіряється, чи є адреса отримувача адресою контракту; якщо так, викликається метод onTokenTransfer цього адреси.
! Chainlink Частина 1 серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-36eedcde4ebee55bf1c0e6c5f02934df.webp)
У реалізації Chainlink, коли споживачі оракулів використовують метод transferAndCall для сплати зборів та запиту послуг, метод onTokenTransfer контракту оракулів спочатку виконує ряд перевірок безпеки. Це включає в себе перевірку, чи є переказ токенами LINK, перевірку довжини даних на перевищення обмежень, а також верифікацію селектора функцій тощо. Після успішної перевірки, за допомогою deleGatecall викликається метод oracleRequest поточного контракту оракулів.
! Chainlink (частина 1) із серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-d05f88f78a86510920ca9cb9cb97fcd6.webp)
метод oracleRequest генерує унікальний requestId, встановлює час дії та додає відповідну інформацію до мапи commitments. Найголовніше, він викликає подію OracleRequest, яка містить дані запиту, представлені у вигляді CBOR( компактного бінарного об'єкта у форматі кодування ).
! Chainlink Частина 1 серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-dae23b36c6a83626aa95ba58fa8dbee5.webp)
Вузли поза ланцюгом будуть слухати ці події OracleRequest. Коли буде виявлено новий запит, вузол розпарсить інформацію в події, отримає необхідні дані через API, а потім надішле дані в ланцюг, викликавши метод fulfillOracleRequest контракту оракула. Цей метод виконає ряд перевірок, а потім викличе функцію зворотного виклику контракту запитувача, щоб повернути результат контракту споживача.
! Chainlink (частина 1) із серії Oracle Explainer](https://img-cdn.gateio.im/webp-social/moments-1994fff156354700fda0609f9e317726.webp)
Для розробників, якщо потрібно використовувати лише ціни на існуючі торгові пари, можна безпосередньо використовувати Price Feed, наданий Chainlink, який також називається Aggregator(. Кожна торгова пара має окремий Price Feed, насправді це контракт AggregatorProxy. Ці контракти надають кілька методів запиту, включаючи отримання точності ціни, опису, версії та останніх даних про ціну тощо. У більшості сценаріїв програма може просто потребувати зчитувати останню ціну, тобто викликати метод latestRoundData)(.
! Chainlink (частина 1) із серії Oracle Explainer])https://img-cdn.gateio.im/webp-social/moments-bb84d77f358852f47e9adf3e74ba5bf9.webp(
Слід зазначити, що для торгових пар, які оцінюються в USD, точність цін зазвичай уніфікована на рівні 8 знаків, що спрощує питання обробки точності між різними токенами. Цей дизайн дозволяє розробникам зручніше використовувати дані про реальні ціни в смарт-контрактах, не займаючись складними викликами API та перетворенням форматів даних.
! Chainlink (частина 1) із серії Oracle Explainer])https://img-cdn.gateio.im/webp-social/moments-527bd8714534f5f06ccdd9afe40b253a.webp(