Децентралізована мережа Ethereum та її смарт-контракти повністю ізольовані від реального світу. Ця ізоляція забезпечує послідовність, безпеку та цілісність. Однак це також створює обмеження: ці смарт-контракти не можуть самостійно отримати доступ до зовнішніх даних або підтвердити їх. Що ж робити, якщо виконання контракту залежить від поточної ціни золота, погодних умов в конкретному місті або результатів виборів?
Оракули заповнюють цю проблему. Як посланці, вони збирають, підтверджують та доставляють інформацію з реального світу для смарт-контрактів, тим самим розширюючи можливості для децентралізованих додатків.
Уявіть наступну ситуацію:
Solidity//Макетний розумний контракт слідує зовнішньому даним контракту GoldPriceBet { Oracle OracleInstance;//Екземпляр Oracle в реальному часі адреса екземпляра золота ставщик; uint256 сума_ставки; Функція placeGoldPriceBet (uint PredictedPrice) зовнішній оплачуваний { ставщик = msg.sender; сума_ставки = msg.value; // Тут ми зазвичай викликаємо оракул для отримання поточної ціни золота }}
Коментарі до коду:
OracleInstance;
Це заповнювач для нашого GoldPriceBet
контракт на взаємодію з метою отримання поточної ціни золотого контракту (Oracle).Функція placeGoldPriceBet дозволяє користувачам робити ставки для передбачення ціни
золота. Ідеально, після укладення ставки будуть викликані мандрівники, щоб отримати реальний час ціни золота та визначити результати.Загалом, оракули поділяються на дві основні категорії:
Працюючи під керівництвом одного суб'єкта чи організації, централізовані оракули ефективні й можуть швидко отримувати дані. Однак їхнім Ахіллесовим каблуком є довіра. Виконання смарт-контрактів залежить від доброчесності цього централізованого суб'єкта. Маніпульовані чи помилкові дані можуть призвести до неочікуваних результатів.
Для того щоб зменшити недоліки централізованих систем, з'явилися децентралізовані оракули. Тут мережа кількох оракулів надає дані. Розумний контракт може використовувати метод агрегування, такий як середнє або медіана, для отримання значення. Децентралізація джерел даних дозволяє цим оракулам зменшити ризик, пов'язаний з людським втручанням або однією точкою відмови.
Solidity//Ілюстративний смарт-контракт, що використовує гнучкий фреймворкконтракт Oracle CommodityPriceFeed { Decentralized Oracle [] OracleArray;//Масив децентралізованих функцій оракулів deriveAveragePrice () external view returns (uint256) { uint256 cumulativeValue = 0; for (uint i = 0; i < oracleArray.length; i++) { cumulativeValue += oracleArray[i].fetchPrice(); } return cumulativeValue/ oracleArray.length; }}
Коментарі до коду:
DecentralizedOracle [] OracleArray; це масив, який зберігає кілька екземплярів децентралізованих оракулів
.Об'єкт
визначитиСереднюЦіну
Функція обчислює середню ціну, отриману з усіх оракулів в OracleArray. Вона проходить через кожен з оракулів, отримує ціну, а потім ділить її на кількість оракулів, щоб отримати середнє значення.Потенційне застосування оракулів дуже широке і різноманітне:
Фінансові платформи потребують актуальної інформації про ціни активів, процентні ставки або інші економічні показники. Децентралізовані платформи деривативів використовують оракули, щоб забезпечити, що контракти, такі як фьючерси та опціони, вирішуються на основі точних, недоступних для втручання ринкових даних.
SoliditySolidityCopy code//Приклад розумного контракту для зручної опціїcontract DecentralizedOption { Oracle PriceOracle; uint256 strikePrice = 1000;//Прикладне значення function exerciseOption () external { uint256 currentPrice = priceOracle.fetchCurrentPrice (); if (currentPrice strikePrice>) { // Логіка виконання опції } }}
Коментарі до коду:
Децентралізована опція
контракт взаємодіє з оракулами, щоб отримати поточну ціну.Оракули сприяли розвитку децентралізованих страхових платформ, надаючи дані, такі як погодні умови, необхідні для страхування врожаю, умови польоту, необхідні для страхування під час подорожей, або сейсмічна активність, необхідна для страхування від землетрусів.
Контракт Soliditycontract FlightDelayInsurance { Оракул FlightStatusOracle; функція claimInsurance (string flightNumber) зовні { string status = flightstatusOracle.getFlightStatus (flightNumber); якщо (strcmp (status, " Затриманий") == 0) { // Логіка компенсації страхувальників } }}
Коментарі до коду:
Страхування затримки рейсу
контракти використовують оракули, щоб отримати статус рейсу.Для децентралізованих рішень у сфері ланцюга постачання оракули можуть забезпечити перевірені дані на кожному етапі, від закупівлі сировини до доставки продукції, щоб забезпечити автентичність продукту та етичну закупівлю.
контракт SoliditysupplyChainTracker { Oracle LocationOracle; адреса ProductOwner; функція verifyProductLocation (адреса ProductID) зовнішній вид повертає (string пам'ять) { return locationOracle.fetchProductLocation(productID); }}
Коментарі до коду:
Ігри, які інтегрують події реального світу, такі як результати спортивних подій або рухи фондового ринку, можуть бути побудовані децентралізованим чином за допомогою оракулів для отримання необхідних даних.
SolidityContract SportsBet { Oracle SportsResultOracle; Функція placeBet (string teamName) зовнішня оплата { // Логіка для укладання ставки } функція resolveBet () зовнішня { string winningTeam = sportsResultOracle.getMatchResult(); // Логіка для винагородження переможців на підставі результату }}
Коментарі до коду:
SportsBet
дозволяє користувачам ставити ставки на результати спортивних подій.Децентралізована мережа Ethereum та її смарт-контракти повністю ізольовані від реального світу. Ця ізоляція забезпечує послідовність, безпеку та цілісність. Однак це також створює обмеження: ці смарт-контракти не можуть самостійно отримати доступ до зовнішніх даних або підтвердити їх. Що ж робити, якщо виконання контракту залежить від поточної ціни золота, погодних умов в конкретному місті або результатів виборів?
Оракули заповнюють цю проблему. Як посланці, вони збирають, підтверджують та доставляють інформацію з реального світу для смарт-контрактів, тим самим розширюючи можливості для децентралізованих додатків.
Уявіть наступну ситуацію:
Solidity//Макетний розумний контракт слідує зовнішньому даним контракту GoldPriceBet { Oracle OracleInstance;//Екземпляр Oracle в реальному часі адреса екземпляра золота ставщик; uint256 сума_ставки; Функція placeGoldPriceBet (uint PredictedPrice) зовнішній оплачуваний { ставщик = msg.sender; сума_ставки = msg.value; // Тут ми зазвичай викликаємо оракул для отримання поточної ціни золота }}
Коментарі до коду:
OracleInstance;
Це заповнювач для нашого GoldPriceBet
контракт на взаємодію з метою отримання поточної ціни золотого контракту (Oracle).Функція placeGoldPriceBet дозволяє користувачам робити ставки для передбачення ціни
золота. Ідеально, після укладення ставки будуть викликані мандрівники, щоб отримати реальний час ціни золота та визначити результати.Загалом, оракули поділяються на дві основні категорії:
Працюючи під керівництвом одного суб'єкта чи організації, централізовані оракули ефективні й можуть швидко отримувати дані. Однак їхнім Ахіллесовим каблуком є довіра. Виконання смарт-контрактів залежить від доброчесності цього централізованого суб'єкта. Маніпульовані чи помилкові дані можуть призвести до неочікуваних результатів.
Для того щоб зменшити недоліки централізованих систем, з'явилися децентралізовані оракули. Тут мережа кількох оракулів надає дані. Розумний контракт може використовувати метод агрегування, такий як середнє або медіана, для отримання значення. Децентралізація джерел даних дозволяє цим оракулам зменшити ризик, пов'язаний з людським втручанням або однією точкою відмови.
Solidity//Ілюстративний смарт-контракт, що використовує гнучкий фреймворкконтракт Oracle CommodityPriceFeed { Decentralized Oracle [] OracleArray;//Масив децентралізованих функцій оракулів deriveAveragePrice () external view returns (uint256) { uint256 cumulativeValue = 0; for (uint i = 0; i < oracleArray.length; i++) { cumulativeValue += oracleArray[i].fetchPrice(); } return cumulativeValue/ oracleArray.length; }}
Коментарі до коду:
DecentralizedOracle [] OracleArray; це масив, який зберігає кілька екземплярів децентралізованих оракулів
.Об'єкт
визначитиСереднюЦіну
Функція обчислює середню ціну, отриману з усіх оракулів в OracleArray. Вона проходить через кожен з оракулів, отримує ціну, а потім ділить її на кількість оракулів, щоб отримати середнє значення.Потенційне застосування оракулів дуже широке і різноманітне:
Фінансові платформи потребують актуальної інформації про ціни активів, процентні ставки або інші економічні показники. Децентралізовані платформи деривативів використовують оракули, щоб забезпечити, що контракти, такі як фьючерси та опціони, вирішуються на основі точних, недоступних для втручання ринкових даних.
SoliditySolidityCopy code//Приклад розумного контракту для зручної опціїcontract DecentralizedOption { Oracle PriceOracle; uint256 strikePrice = 1000;//Прикладне значення function exerciseOption () external { uint256 currentPrice = priceOracle.fetchCurrentPrice (); if (currentPrice strikePrice>) { // Логіка виконання опції } }}
Коментарі до коду:
Децентралізована опція
контракт взаємодіє з оракулами, щоб отримати поточну ціну.Оракули сприяли розвитку децентралізованих страхових платформ, надаючи дані, такі як погодні умови, необхідні для страхування врожаю, умови польоту, необхідні для страхування під час подорожей, або сейсмічна активність, необхідна для страхування від землетрусів.
Контракт Soliditycontract FlightDelayInsurance { Оракул FlightStatusOracle; функція claimInsurance (string flightNumber) зовні { string status = flightstatusOracle.getFlightStatus (flightNumber); якщо (strcmp (status, " Затриманий") == 0) { // Логіка компенсації страхувальників } }}
Коментарі до коду:
Страхування затримки рейсу
контракти використовують оракули, щоб отримати статус рейсу.Для децентралізованих рішень у сфері ланцюга постачання оракули можуть забезпечити перевірені дані на кожному етапі, від закупівлі сировини до доставки продукції, щоб забезпечити автентичність продукту та етичну закупівлю.
контракт SoliditysupplyChainTracker { Oracle LocationOracle; адреса ProductOwner; функція verifyProductLocation (адреса ProductID) зовнішній вид повертає (string пам'ять) { return locationOracle.fetchProductLocation(productID); }}
Коментарі до коду:
Ігри, які інтегрують події реального світу, такі як результати спортивних подій або рухи фондового ринку, можуть бути побудовані децентралізованим чином за допомогою оракулів для отримання необхідних даних.
SolidityContract SportsBet { Oracle SportsResultOracle; Функція placeBet (string teamName) зовнішня оплата { // Логіка для укладання ставки } функція resolveBet () зовнішня { string winningTeam = sportsResultOracle.getMatchResult(); // Логіка для винагородження переможців на підставі результату }}
Коментарі до коду:
SportsBet
дозволяє користувачам ставити ставки на результати спортивних подій.