Ugrás a fő tartalomra
Change page

Orákulumok

Utolsó módosítás: @Satglow(opens in a new tab), 2024. április 1.

Az orákulumok olyan adatcsatornák, amelyek a láncon kívüli adatforrásokat teszik elérhetővé a blokkláncon lévő okosszerződések számára. Erre azért van szükség, mert az Ethereum-alapú okosszerződések alapértelmezés szerint nem férhetnek hozzá a blokkláncon kívül tárolt információkhoz.

Ha az okosszerződéseket a láncon kívüli adatok felhasználásával lehet végrehajtani, az kiterjeszti a decentralizált alkalmazások hasznosságát és értékét. A láncon belüli előrejelzési piacok például orákulumokra támaszkodnak, hogy információt szolgáltassanak az eredményekről, amelyet a felhasználók előrejelzéseinek validálására használnak. Tegyük fel, hogy Alice 20 ETH-t tesz fel arra, hogy ki lesz a következő amerikai elnök. Ebben az esetben az előrejelzési piac dappnak szüksége van egy orákulumra, amely megerősíti a választási eredményeket, és meghatározza, hogy Alice jogosult-e kifizetésre.

Előfeltételek

Ezt az oldalt könnyebb megérteni, ha az olvasó ismeri az Ethereum alapjait, beleértve a csomópontokat, a konszenzusmechanizmusokat és az EVM-et. Érdemes ismerni a okosszerződéseket és a okosszerződések anatómiáját, különösen az

.

Mi az a blokkláncorákulum?

Az orákulumok olyan alkalmazások, amelyek külső információkat (azaz a láncon kívül tárolt információkat) gyűjtenek, ellenőriznek és továbbítanak a blokkláncon futó okosszerződésekhez. Amellett, hogy az orákulumok a láncon kívüli adatokat hoznak be az Ethereumra és terjesztik szét azokat, a blokkláncról információkat is küldhetnek külső rendszerekbe, például feloldhatnak egy intelligens zárat, amint a felhasználó Ethereum-tranzakción keresztül elküldi a releváns díjat.

Orákulum nélkül az okosszerződés kizárólag a láncon belüli adatokra korlátozódna.

Az orákulumok eltérnek az adatforrás (egy vagy több forrás), a bizalomigény (centralizált vagy decentralizált) és a rendszer felépítése (azonnali olvasás, közzététel-feliratkozás és kérés-válasz) szerint. Az orákulumokat aszerint is megkülönböztethetjük, hogy külső adatokat kérnek le a láncon belüli szerződéseknek (bemeneti orákulumok), információt küldenek a blokkláncból a láncon kívüli alkalmazásoknak (kimeneti orákulumok), vagy számítási feladatokat végeznek a láncon kívül (számítási orákulumok).

Miért szükséges az okosszerződésekhez orákulum?

Sok fejlesztő úgy tekint az okosszerződésekre, mint a blokklánc adott címein futó kódokra. Az okosszerződések általánosabb nézete azonban az, hogy ezek olyan önvégrehajtó szoftverprogramok, amelyek képesek a felek közötti megállapodások érvényesítésére, ha bizonyos feltételek teljesülnek – innen ered az okosszerződés kifejezés.

De az okosszerződések használata az emberek közötti megállapodások érvényesítésére nem egyszerű, mivel az Ethereum determinisztikus. A determinisztikus rendszer(opens in a new tab) egy kezdeti állapot, amely egy adott bemenet mellett mindig ugyanazt az eredményt produkálja, vagyis nincs véletlenszerűség vagy variáció a bemenetekből származó kimenetek kiszámításának folyamatában.

A determinisztikus végrehajtás elérése érdekében a blokkláncok a csomópontokat arra korlátozzák, hogy egyszerű bináris (igaz/hamis) kérdésekben konszenzusra jussanak csak a blokkláncon tárolt adatok felhasználásával. Példák az ilyen kérdésekre:

  • „A (nyilvános kulccsal azonosított) számlatulajdonos aláírta ezt a tranzakciót a hozzá tartozó privát kulccsal?”
  • „Van-e elegendő fedezet ezen a számlán a tranzakció fedezésére?”
  • „Érvényes ez a tranzakció az adott okosszerződés keretében?” stb.

Ha a blokkláncok külső forrásból (azaz a való világból) kapnának információt, a determinizmus megvalósítása lehetetlen lenne, ami megakadályozná, hogy a csomópontok megegyezzenek a blokklánc státuszában bekövetkezett változásokról. Vegyünk például egy olyan okosszerződést, amely egy tranzakciót hajt végre a hagyományos ár-API-ból kapott aktuális ETH-USD árfolyam alapján. Ez a szám valószínűleg gyakran változik (arról nem is beszélve, hogy az API-t elavulttá tehetik vagy feltörhetik), ami azt jelenti, hogy az azonos szerződéskódot végrehajtó csomópontok különböző eredményekre jutnának.

Egy olyan nyilvános blokklánc esetében, mint az Ethereum, ahol világszerte több ezer csomópont dolgozza fel a tranzakciókat, a determinizmus kritikus fontosságú. Mivel nincs központi hatóság, amely az igazság forrásaként szolgálna, a csomópontoknak olyan mechanizmusokra van szükségük, amelyekkel ugyanazon tranzakciók feldolgozása után ugyanazt az státuszt érik el. Az az eset, amikor az A csomópont végrehajtja egy okosszerződés kódját, és 3-at kap eredményként, míg a B csomópont 7-et kap ugyanarra, a konszenzus felbomlásához vezetne, és megszüntetné az Ethereum mint decentralizált számítástechnikai platform értékét.

Ez a forgatókönyv rávilágít arra a problémára is, hogy a blokkláncokat úgy tervezzük meg, hogy külső forrásokból nyerjenek információkat. Az orákulumok azonban úgy oldják meg ezt a problémát, hogy információkat vesznek a láncon kívüli forrásokból, és azt a blokkláncon tárolják, hogy az okosszerződések felhasználhassák azokat. Mivel a láncon belül tárolt információk megváltoztathatatlanok és nyilvánosan elérhetők, az Ethereum-csomópontok biztonságosan használhatják a láncon kívülről importált orákulum-adatokat a státuszváltozások kiszámításához anélkül, hogy a konszenzus megszakadna.

Ehhez az orákulum egy láncon belüli okosszerződésből és néhány láncon kívüli komponensből áll. A láncon belüli szerződés más okosszerződésektől kap adatigényléseket, amelyeket a láncon kívüli komponensnek (az úgynevezett orákulum-csomópontnak) továbbít. Ez az orákulum-csomópont lekérdezhet adatforrásokat – például alkalmazás programozási felület (API) használatával –, illetve tranzakciókat küldhet arra, hogy a kért adatok az okosszerződés tárolójába kerüljenek.

Lényegében egy blokklánc-orákulum áthidalja a blokklánc és a külső környezet közötti információs szakadékot, „hibrid okosszerződéseket” létrehozva. A hibrid okosszerződés a láncon belüli szerződéskód és a láncon kívüli infrastruktúra kombinációján alapul. A decentralizált előrejelzési piacok kiváló példái a hibrid okosszerződéseknek. További példák lehetnek a terménybiztosítási okosszerződések, amelyek akkor fizetnek, amikor az orákulumok egy csoportja megállapítja, hogy bizonyos időjárási jelenségek bekövetkeztek.

Mi az orákulumprobléma?

Az orákulumok fontos problémát oldanak meg, de némi bonyodalmat is okoznak, például:

  • Hogyan ellenőrizzük, hogy a bejuttatott információ a megfelelő forrásból származik-e, vagy nem manipulálták-e?

  • Hogyan biztosítsuk, hogy ezek az adatok mindig rendelkezésre álljanak és rendszeresen frissüljenek?

Az úgynevezett „orákulumprobléma” azokat a nehézségeket mutatja be, amelyek abból adódnak, hogy a blokklánc orákulumai adatot szolgáltatnak az okosszerződéseknek. Az orákulumtól származó adatoknak helyesnek kell lenniük ahhoz, hogy egy okosszerződés helyesen teljesüljön. Továbbá az, hogy meg kell bízni az orákulumoperátorokban, hogy pontos információkat szolgáltassanak, aláássa az okosszerződések bizalomigény nélküli aspektusát.

A különböző orákulumok különböző megoldásokat kínálnak az orákulumproblémára, amelyeket később vizsgálunk meg. Az orákulumokat általában aszerint értékelik, hogy mennyire képesek kezelni a következő kihívásokat:

  1. Helyesség: Egy orákulum nem okozhatja, hogy az okosszerződések állapotváltozásokat indítsanak el érvénytelen, láncon kívüli adatok alapján. Az orákulumnak garantálnia kell az adatok hitelességét és integritását. A hitelesség azt jelenti, hogy az adatok a megfelelő forrásból származnak, az integritás pedig az, hogy az adatok sértetlenek maradtak (azaz nem változtatták meg őket), mielőtt továbbküldték a láncon belülre.

  2. Elérhetőség: Az orákulum nem késleltetheti vagy akadályozhatja meg az okosszerződések végrehajtását és a státuszváltozások kiváltását. Ez azt jelenti, hogy az orákulumtól származó adatoknak megszakítás nélkül kell rendelkezésre állniuk kérés esetén.

  3. Ösztönzőkompatibilitás: Az orákulumnak ösztönöznie kell a láncokon kívüli adatszolgáltatókat arra, hogy helyes információkat küldjenek az okosszerződéseknek. Az ösztönzőkompatibilitás magában foglalja a hozzárendelhetőséget és az elszámoltathatóságot. A hozzárendelhetőség lehetővé teszi egy külső információ összekapcsolását a szolgáltatójával, míg az elszámoltathatóság az adatszolgáltatókat az általuk adott információhoz köti, így a szolgáltatott információ minősége alapján jutalmazhatók vagy büntethetők.

Hogyan működik a blokklánc orákulumszolgáltatás?

Felhasználók

A felhasználók olyan entitások (azaz okosszerződések), amelyeknek a blokkláncon kívüli információkra van szükségük bizonyos műveletekhez. Az orákulumszolgáltatás alapvető folyamata azzal kezdődik, hogy a felhasználó adatot kér az orákulumszerződéstől. Az adatkérések általában az alábbi kérdések némelyikére vagy mindegyikére választ adnak:

  1. Milyen forrásokból tájékozódhatnak a láncon kívüli csomópontok a kért információról?

  2. Hogyan dolgozzák fel a riportolók az adatforrásokból származó információkat, és hogyan vonják ki a hasznos adatpontokat?

  3. Hány orákulum-csomópont vehet részt az adatok lekérdezésében?

  4. Hogyan kell kezelni az orákulumjelentésekben szereplő eltéréseket?

  5. Milyen módszert kell alkalmazni a beérkezett kérések szűrésére és a jelentések egyetlen értékké történő összesítésére?

Orákulumszerződés

Az orákulumszerződés az orákulumszolgáltatás láncon belüli összetevője. Figyeli a más szerződésektől érkező adatkéréseket, továbbítja az adatkéréseket az orákulum-csomópontoknak, és a visszaküldött adatokat továbbítja az kliensszerződéseknek. Ez a szerződés végezhet számításokat is a visszaküldött adatpontokon, hogy egy összesített értéket állítson elő, amelyet elküldhet az adatot kérő szerződésnek.

Az orákulumszerződés tartalmaz néhány függvényt, amelyeket a kliensszerződések hívnak meg adatigényléskor. Egy új lekérdezés fogadásakor az okosszerződés egy naplóeseményt bocsát ki az adatkérés részleteivel. Ez értesíti a naplóra feliratkozott, láncon kívüli csomópontokat (általában a JSON-RPC eth_subscribe parancsot használva), amelyek lekérdezik a naplóeseményben meghatározott adatokat.

Az alábbiakban egy orákulumszerződéses példa(opens in a new tab) olvasható Pedro Costától. Ez egy egyszerű orákulumszolgáltatás, amely más okosszerződések kérésére lekérdezheti a láncon kívüli API-okat, és a kért információt a blokkláncon tárolja:

1pragma solidity >=0.4.21 <0.6.0;
2
3contract Oracle {
4 Request[] requests; //list of requests made to the contract
5 uint currentId = 0; //increasing request id
6 uint minQuorum = 2; //minimum number of responses to receive before declaring final result
7 uint totalOracleCount = 3; // Hardcoded oracle count
8
9 // defines a general api request
10 struct Request {
11 uint id; //request id
12 string urlToQuery; //API url
13 string attributeToFetch; //json attribute (key) to retrieve in the response
14 string agreedValue; //value from key
15 mapping(uint => string) answers; //answers provided by the oracles
16 mapping(address => uint) quorum; //oracles which will query the answer (1=oracle hasn't voted, 2=oracle has voted)
17 }
18
19 //event that triggers oracle outside of the blockchain
20 event NewRequest (
21 uint id,
22 string urlToQuery,
23 string attributeToFetch
24 );
25
26 //triggered when there's a consensus on the final result
27 event UpdatedRequest (
28 uint id,
29 string urlToQuery,
30 string attributeToFetch,
31 string agreedValue
32 );
33
34 function createRequest (
35 string memory _urlToQuery,
36 string memory _attributeToFetch
37 )
38 public
39 {
40 uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, ""));
41 Request storage r = requests[length-1];
42
43 // Hardcoded oracles address
44 r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1;
45 r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1;
46 r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1;
47
48 // launch an event to be detected by oracle outside of blockchain
49 emit NewRequest (
50 currentId,
51 _urlToQuery,
52 _attributeToFetch
53 );
54
55 // increase request id
56 currentId++;
57 }
58
59 //called by the oracle to record its answer
60 function updateRequest (
61 uint _id,
62 string memory _valueRetrieved
63 ) public {
64
65 Request storage currRequest = requests[_id];
66
67 //check if oracle is in the list of trusted oracles
68 //and if the oracle hasn't voted yet
69 if(currRequest.quorum[address(msg.sender)] == 1){
70
71 //marking that this address has voted
72 currRequest.quorum[msg.sender] = 2;
73
74 //iterate through "array" of answers until a position if free and save the retrieved value
75 uint tmpI = 0;
76 bool found = false;
77 while(!found) {
78 //find first empty slot
79 if(bytes(currRequest.answers[tmpI]).length == 0){
80 found = true;
81 currRequest.answers[tmpI] = _valueRetrieved;
82 }
83 tmpI++;
84 }
85
86 uint currentQuorum = 0;
87
88 //iterate through oracle list and check if enough oracles(minimum quorum)
89 //have voted the same answer as the current one
90 for(uint i = 0; i < totalOracleCount; i++){
91 bytes memory a = bytes(currRequest.answers[i]);
92 bytes memory b = bytes(_valueRetrieved);
93
94 if(keccak256(a) == keccak256(b)){
95 currentQuorum++;
96 if(currentQuorum >= minQuorum){
97 currRequest.agreedValue = _valueRetrieved;
98 emit UpdatedRequest (
99 currRequest.id,
100 currRequest.urlToQuery,
101 currRequest.attributeToFetch,
102 currRequest.agreedValue
103 );
104 }
105 }
106 }
107 }
108 }
109}
Összes megjelenítése
Másolás

Orákulum-csomópontok

Az orákulum-csomópont az orákulumszolgáltatás láncon kívüli összetevője. Információkat szerez külső forrásokból, például harmadik fél szerverein tárolt API-okból, és a láncon belülre helyezi, hogy az okosszerződések felhasználhassák azokat. Az orákulum-csomópontok figyelik a láncon belüli orákulumszerződés eseményeit, és folytatják a naplóban leírt feladat elvégzését.

Az orákulum-csomópontok gyakori feladata, hogy HTTP GET(opens in a new tab) kérést küldjenek egy API-szolgáltatáshoz, elemezzék a választ a releváns adatok kinyeréséhez, formázzák az adatokat a blokklánc által olvasható kimenetté, és elküldjék a láncon belül egy tranzakcióba foglalva az orákulumszerződéshez. Az orákulum-csomópontnak a benyújtott információk érvényességét és sértetlenségét „hitelességi bizonyítékok” segítségével is igazolnia kell, amelyeket később vizsgálunk meg.

A számítási orákulumok a láncon kívüli csomópontokra is támaszkodnak olyan számítási feladatok elvégzésében, amelyeket a láncon belül nem lenne célszerű végrehajtani, tekintettel a gázköltségekre és a blokkméretkorlátokra. Az orákulum-csomópont feladata lehet például egy ellenőrizhetően véletlenszerű szám előállítása (például blokkláncalapú játékok esetében).

Orákulumtervezési minták

Az orákulumoknak több különböző típusa létezik, beleértve az azonnali olvasás, közzététel-feliratkozás és kérés-válasz típusokat, amelyek közül az utóbbi kettő a legnépszerűbb az Ethereum-okosszerződések körében. Röviden ismertetjük a közzététel-feliratkozás és kérés-válasz modelleket.

A közzététel-feliratkozás orákulumok

Az ilyen típusú orákulum egy „adatfolyamot” tesz közzé, amelyet a szerződések rendszeresen olvashatnak információkért. Ebben az esetben az adatok várhatóan gyakran változnak, ezért a kliensszerződéseknek figyelniük kell az orákulum tárolójában lévő adatok frissítésére. Például az az orákulum, mely a legfrissebb ETH-USD árinformációkat szolgáltatja a felhasználóknak.

Kérés-válasz orákulumok

A kérés-válasz beállítás lehetővé teszi a kliensszerződés számára, hogy a közzététel-feliratkozás típusú orákulum által biztosított adatoktól eltérő, tetszőleges adatokat kérjen. A kérés-válasz orákulumok ideálisak, ha az adathalmaz túl nagy ahhoz, hogy az okosszerződés tárhelyén tárolják, és/vagy a felhasználóknak az adatoknak csak egy kis részére van szükségük egy adott időpontban.

Bár a közzététel-feliratkozás típusú modelleknél összetettebbek, a kérés-válasz orákulumok alapvetően az előző szakaszban leírtaknak felelnek meg. Az orákulumnak van egy láncon belüli komponense, amely fogad egy adatkérést, és továbbítja azt egy láncon kívüli csomópontnak feldolgozásra.

Az adatlekérdezést kezdeményező felhasználóknak kell fedezniük a láncon kívüli forrásból származó információk költségeit. A kliensszerződésnek biztosítania kell a fedezetet arra a gázköltségre, amikor az orákulumszerződés a választ visszakapja a callback függvényen keresztül.

A centralizált és a decentralizált orákulumok összehasonlítása

Centralizált orákulumok

A centralizált orákulumot egyetlen szervezet irányítja, amely a láncon kívüli információk összesítéséért és az orákulumszerződés adatainak kérés szerinti frissítéséért is felelős. A centralizált orákulumok hatékonyak, mivel csak egyetlen igazságforrásra támaszkodnak. Jobban működhetnek azokban az esetekben, amikor a védett adatkészleteket közvetlenül a tulajdonos teszi közzé egy elfogadott aláírással. Ugyanakkor hátrányaik is vannak:

Alacsony helyességi garanciák

A centralizált orákulumok esetében nem lehet megerősíteni, hogy a megadott információ helyes-e vagy sem. Még a „jó hírű” szolgáltatók is tévedhetnek vagy feltörhetik őket. Ha az orákulum hibássá válik, az okosszerződések rossz adatok alapján kerülnek végrehajtásra.

Alacsony szintű elérhetőség

A centralizált orákulumok nem garantálják, hogy mindig elérhetővé teszik a láncon kívüli adatokat az okosszerződések számára. Ha a szolgáltató úgy dönt, hogy kikapcsolja a szolgáltatást, vagy egy hacker eltéríti az orákulum láncon kívüli komponensét, akkor a rá támaszkodó okosszerződést a szolgáltatásmegtagadás (DoS-támadás) kockázata fenyegeti.

Gyenge ösztöntzőkompatibilitás

A centralizált orákulumok gyakran rosszul megtervezett ösztönzőket adnak az adatszolgáltatóknak vagy nem adnak semmit azért, hogy azok pontos/helyes információkat küldjenek. Ha egy orákulumnak fizetünk a helyességért, az még nem garantálja azt. Ez a probléma annál nagyobb lesz, minél nagyobb az okosszerződések által kezelt érték.

Decentralizált orákulumok

A decentralizált orákulumok célja a centralizáltak korlátainak kiküszöbölése azáltal, hogy kizárjuk az egyetlen meghibásodási pont lehetőségét. A decentralizált orákulumszolgáltatás egy egyenrangú hálózat több résztvevőjéből áll, akik konszenzust alakítanak ki a láncon kívüli adatokról, mielőtt elküldenék azokat egy okosszerződésnek.

Egy decentralizált orákulum (ideális esetben) engedély nélküli, bizalomigénytől mentes és nem kezeli azt egy központi fél; a valóságban a decentralizáció egy spektrumon mozog. Vannak félig decentralizált orákulumhálózatok, amelyekben bárki részt vehet, de van egy „tulajdonos”, aki a korábbi teljesítmény alapján jóváhagyja és eltávolítja a csomópontokat. Léteznek teljesen decentralizált orákulumhálózatok is: ezek általában önálló blokkláncokként működnek, és meghatározott konszenzusmechanizmusokkal rendelkeznek a csomópontok koordinálására és a helytelen viselkedés szankcionálására.

A decentralizált orákulumok használata a következő előnyökkel jár:

Magas szintű helyességi garanciák

A decentralizált orákulumok különböző megközelítésekkel próbálják elérni az adatok helyességét. Ez magában foglalja a visszaküldött információk hitelességét és integritását igazoló bizonyítékok használatát, valamint több szervezetnek együttesen meg kell állapodnia a láncon kívüli adatok érvényességéről.

Hitelességi igazolások

A hitelességi bizonyítékok olyan kriptográfiai mechanizmusok, amelyek lehetővé teszik a külső forrásból származó információk független ellenőrzését. Ezek a bizonyítékok hitelesíthetik az információ forrását, és felismerhetik azt, hogy módosították-e az adatokat a lekérdezés után.

Példák a hitelességi igazolásokra:

Transport Layer Security (TLS) bizonyítékok: Az orákulum-csomópontok gyakran kérnek le adatokat külső forrásokból a Transport Layer Security (TLS) protokollon alapuló biztonságos HTTP-kapcsolat segítségével. Egyes decentralizált orákulumok hitelességi igazolásokat alkalmaznak a TLS-munkamenetek ellenőrzésére (azaz egy csomópont és egy adott kiszolgáló közötti információcsere megerősítésére), és arra, hogy a munkamenet tartalmát nem módosították.

Trusted Execution Environment (TEE) tanúsítványok: A megbízható végrehajtási környezet(opens in a new tab) (TEE) egy olyan sandbox számítási környezet, amely elszigetelten működik a gazdarendszer folyamataitól. A TEE-k biztosítják, hogy a számítási környezetben tárolt/használt alkalmazáskód vagy adat megőrzi integritását, bizalmas jellegét és megváltoztathatatlanságát. A felhasználók tanúsítást is létrehozhatnak annak igazolására, hogy egy alkalmazáspéldány a megbízható végrehajtási környezetben fut.

A decentralizált orákulumok bizonyos osztályai megkövetelik, hogy az orákulum-csomópontok üzemeltetői TEE-tanúsítványokat adjanak. Ez megerősíti a felhasználó felé, hogy a csomópont üzemeltetője egy megbízható végrehajtási környezetben futtatja az orákulumkliens egy példányát. A TEE-k megakadályozzák, hogy külső folyamatok megváltoztassák vagy elolvassák az alkalmazás kódját és adatait, ezért ezek az igazolások bizonyítják, hogy az orákulum-csomópont sértetlenül és bizalmasan őrzi az információkat.

Az információk konszenzusalapú validálása

A centralizált orákulumok az igazság egyetlen forrására támaszkodnak, amikor adatokat szolgáltatnak az okosszerződéseknek, ami magában hordozza a pontatlan információk közzétételének lehetőségét. A decentralizált orákulumok úgy oldják meg ezt a problémát, hogy több orákulum-csomópontra támaszkodva kérdezik le a láncon kívüli információkat. A több forrásból származó adatok összehasonlításával a decentralizált orákulumok csökkentik azt a kockázatot, hogy az érvénytelen információkat adnak a láncon belüli szerződéseknek.

A decentralizált orákulumoknak azonban kezelniük kell a több, láncon kívüli forrásból származó információk közötti eltéréseket. Az információkülönbségek minimalizálása és annak biztosítása érdekében, hogy az orákulumszerződéshez továbbított adatok az orákulum-csomópontok kollektív véleményét tükrözzék, a decentralizált orákulumok a következő mechanizmusokat használják:

Szavazás/letétadás az adatok pontossága érdekében

Egyes decentralizált orákulumhálózatok megkövetelik, hogy a résztvevők szavazzanak vagy letétet helyezzenek az adatkérdésekre adott válaszok pontosságára (például „Ki nyerte a 2020-as amerikai választásokat?”) a hálózat natív tokenjét használva. Ezután egy aggregációs protokoll összesíti a szavazatokat és letéteket, és a többség által támogatott választ tekinti érvényesnek.

Azokat a csomópontokat, amelyek válaszai eltérnek a többségi választól, úgy büntetik, hogy a tokenjeiket szétosztják azok között, amelyek többször adnak helyes értéket. Ha a csomópontoknak az adatszolgáltatás előtt kötelezvényt kell adniuk, akkor ez őszinte válaszadásra ösztönzi őket, mivel feltételezzük, hogy a racionális gazdasági szereplők hozammaximalizálásra törekszenek.

A letét adás/szavazás megvédi a decentralizált orákulumokat a „Sybil-támadásoktól” is, amikor a rosszindulatú szereplők több személyazonosságot hoznak létre, hogy kijátsszák a konszenzusrendszert. A letétadás azonban nem tudja megakadályozni az „ingyenélést” (az orákulum-csomópontok másolnak információt másoktól) és a „lusta validálást” (a többséget követik anélkül, hogy maguk ellenőriznék az információt).

Schelling-pont mechanizmusok

A Schelling-pont(opens in a new tab) egy játékelméleti fogalom, amely feltételezi, hogy több entitás mindig egy közös problémamegoldásra jut, ha nincs kommunikáció. A Schelling-pont mechanizmusokat gyakran használják a decentralizált orákulumhálózatokban, hogy a csomópontok konszenzusra jussanak az adatkérésekre adott válaszokkal kapcsolatban.

Ennek egyik korai ötlete volt a SchellingCoin(opens in a new tab), egy olyan adatfolyam, ahol a résztvevők „skaláris” kérdésekre (melyek nagyságrendekre vonatkoznak, például „mennyi az ETH ára?”) adnak válaszokat, egy letéttel együtt. Azok a felhasználók, akik a 25. és 75. percentilis(opens in a new tab) közötti értékeket adnak, jutalomban részesülnek, akiknek az értékei nagymértékben eltérnek a mediánértéktől, büntetést kapnak.

Bár SchellingCoin ma még nem létezik, számos decentralizált orákulum – nevezetesen a Maker Protocol's Oracles(opens in a new tab) – használja a schelling-pont mechanizmust az orákulumadatok pontosságának javítására. Minden Maker Oracle csomópont két komponensből áll: a csomópontok („közvetítők” és „ellátók/betáplálók”) láncon kívüli peer-to-peer (P2P) hálózatból, amelyek a biztosítéki eszközök piaci árait megadják, valamint egy láncon belüli „Medianizer” szerződésből, amely kiszámítja a megadott értékek mediánját. A megadott késleltetési időszak lejártával ez a mediánérték lesz a kapcsolódó eszköz új referenciaára.

További példák a Schelling-pont mechanizmusokat használó orákulumokra: Chainlink Off-Chain Reporting(opens in a new tab) és Witnet(opens in a new tab). Mindkét rendszerben a peer-to-peer hálózat orákulum-csomópontjaitól érkező válaszokat egyetlen összesített értékké, például átlagértékké vagy mediánná aggregálják. A csomópontokat aszerint jutalmazzák vagy büntetik, hogy válaszaik milyen mértékben igazodnak az összesített értékhez vagy térnek el attól.

A Schelling-pont mechanizmusok azért vonzók, mert minimalizálják a láncon belüli lábnyomot (egy tranzakció kell hozzá), miközben garantálják a decentralizációt. Ez utóbbi azért lehetséges, mert a csomópontoknak alá kell írniuk a benyújtott válaszok listáját, mielőtt az bekerül az átlag/középértéket előállító algoritmusba.

Elérhetőség

A decentralizált orákulumszolgáltatások képesek biztosítani az okosszerződéseknek a láncon kívüli adatok magas szintű elérhetőségét. Ehhez decentralizálni kell mind a láncon kívüli információk forrását, mind az információk láncon belüli továbbításáért felelős csomópontokat.

Ez biztosítja a hibatűrést, mivel az orákulumszerződés több csomópontra támaszkodhat (amelyek több adatforrásra támaszkodnak) a szerződések lekérdezéseinek végrehajtásában. A decentralizáció a forrás és a csomópontüzemeltető szintjén döntő fontosságú – az orákulum-csomópontok hálózata, mely azonos forrásra támaszkodik, ugyanabba a problémába ütközik, mint egy centralizált orákulum.

A letétalapú orákulumoknál lehetséges súlyos büntetést (slashing) adni a csomópont-üzemeltetőknek, ha nem reagálnak gyorsan az adatkérésekre. Ez jelentősen ösztönzi az orákulum-csomópontokat arra, hogy hibatűrő infrastruktúrába fektessenek, és időben szolgáltassanak adatokat.

Jó ösztöntzőkompatibilitás

A decentralizált orákulumok különböző ösztönzőket alkalmaznak, hogy megakadályozzák a bizánci(opens in a new tab) viselkedést a orákulum-csomópontok között. Az ösztönzőkompatibilitás magában foglalja a hozzárendelhetőséget és az elszámoltathatóságot:

  1. A decentralizált orákulum-csomópontoknak gyakran alá kell írniuk az adatkérésekre adott adatokat. Ez az információ segít az orákulum-csomópontok teljesítményének értékelésében, így a felhasználók adatigényléskor kiszűrhetik a megbízhatatlan szereplőket. Ilyen például a Witnet Algoritmikus reputációs rendszere (Algorithmic Reputation System)(opens in a new tab).

  2. A decentralizált orákulumok megkövetelhetik a csomópontoktól, hogy az általuk benyújtott adatok helyességét letéttel is alátámasszák. Ha az adatszolgáltatás helyes, ez a letét a szolgálatért járó jutalmakkal együtt visszatérül. De büntetésképpen slashelhető is, ha az információ téves, ami bizonyos fokú elszámoltathatóságot biztosít.

Orákulumok alkalmazása az okosszerződésekben

Az Ethereumon használt orákulumok gyakori felhasználási esetei a következők:

Pénzügyi adatok lekérdezése

A decentralizált pénzügyi (DeFi) alkalmazások lehetővé teszik a peer-to-peer hitelezést, kölcsönzést és az eszközök kereskedelmét. Ehhez gyakran különböző pénzügyi információk beszerzésére van szükség, beleértve az árfolyamadatokat (a kriptovaluták fiat-értékének kiszámításához vagy a tokenárak összehasonlításához) és a tőkepiaci adatokat (a tokenizált eszközök, például az arany vagy az amerikai dollár értékének kiszámításához).

Egy DeFi kölcsönzési protokollnak például le kell kérdeznie a biztosítékként letétbe helyezett eszközök (például az ETH) aktuális piaci árait. Ez lehetővé teszi, hogy a szerződés meghatározza a fedezeti eszközök értékét, és ezáltal a felvehető kölcsön értékét is.

A DeFi népszerű „ár-orákulumjai” közé tartozik a Chainlink Price Feeds, a Compound Protocol Open Price Feed(opens in a new tab), az Uniswap Time-Weighted Average Prices (TWAPs)(opens in a new tab) és a Maker Oracles(opens in a new tab).

Az építőknek meg kell érteniük az ezekkel az ár-orákulumokkal járó fenntartásokat, mielőtt beépítenék őket a projektjükbe. Ez a cikk(opens in a new tab) részletes elemzést nyújt arról, hogy mit kell figyelembe venni, ha az említett ár-orákulumok bármelyikét használni szeretnénk.

Következzen egy példa arra, hogyan lehet lekérdezni a legfrissebb ETH árat az okosszerződésben a Chainlink árakra vonatkozó adatfolyamával:

1pragma solidity ^0.6.7;
2
3import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
4
5contract PriceConsumerV3 {
6
7 AggregatorV3Interface internal priceFeed;
8
9 /**
10 * Network: Kovan
11 * Aggregator: ETH/USD
12 * Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
13 */
14 constructor() public {
15 priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331);
16 }
17
18 /**
19 * Returns the latest price
20 */
21 function getLatestPrice() public view returns (int) {
22 (
23 uint80 roundID,
24 int price,
25 uint startedAt,
26 uint timeStamp,
27 uint80 answeredInRound
28 ) = priceFeed.latestRoundData();
29 return price;
30 }
31}
Összes megjelenítése
Másolás

Ellenőrizhető véletlenszerűség generálása

Bizonyos blokklánc-alkalmazások, mint például a játékok vagy a lottórendszerek, nagyfokú kiszámíthatatlanságot és véletlenszerűséget igényelnek a hatékony működéshez. A blokkláncok determinisztikus végrehajtása azonban kiküszöböli a véletlenszerűséget.

A szokásos megközelítés az álvéletlenszerű kriptográfiai függvények használata, mint például a blockhash, de ezeket manipulálhatják a bányászok(opens in a new tab) a proof-of-work algoritmust megoldva. Továbbá, az Ethereum proof-of-stake mechanizmusra való átváltása azt jelenti, hogy a fejlesztők többé nem támaszkodhatnak a blockhash-re a láncon belüli véletlenszerűség tekintetében (a Beacon lánc RANDAO mechanizmusa(opens in a new tab) azonban alternatív véletlenszerűségi forrást biztosít).

Lehetséges a véletlen értéket a láncon kívül generálni és a láncon belül elküldeni, de ez nagy bizalmi követelményeket támaszt a felhasználókkal szemben. Azt kell hinniük, hogy az érték valóban kiszámíthatatlan mechanizmusok révén jött létre, és nem változott meg az átadás során.

A láncon kívüli számításhoz tervezett orákulumok úgy oldják meg ezt a problémát, hogy biztonságosan generálnak véletlenszerű eredményeket, amelyeket a folyamat kiszámíthatatlanságát igazoló kriptográfiai bizonyítékokkal együtt továbbítanak a láncon belülre. Ilyen például a Chainlink VRF(opens in a new tab) (Igazolható véletlenfüggvény/Verifiable Random Function), amely egy bizonyíthatóan igazságos és hamisításbiztos véletlenszám-generátor (RNG), hogy a kiszámíthatatlan eredményekre támaszkodó alkalmazásokhoz megbízható okosszerződéseket lehessen létrehozni. Egy másik példa az API3 QRNG(opens in a new tab), amely a kvantum véletlenszám-generálást (QRNG) szolgálja ki, egy kvantumjelenségeken alapuló, Web3 RNG nyilvános módszert, amelyet az Ausztrál Nemzeti Egyetem (ANU) által elérhető.

Az események eredményeinek elérése

Az orákulumok segítségével könnyű olyan okosszerződéseket létrehozni, amelyek valós eseményekre reagálnak. Az orákulumszolgáltatások ezt azáltal teszik lehetővé, hogy a szerződések külső API-okhoz kapcsolódhatnak a láncon kívüli komponenseken keresztül, és információkat vehetnek ezekből az adatforrásokból. Például a korábban említett előrejelző alkalmazás kérhet egy orákulumot, hogy küldje vissza a választási eredményeket egy megbízható, láncon kívüli forrásból (például az Associated Presstől).

Az orákulumok valós adatok lekérdezésére való használata újszerű felhasználási területeket tesz lehetővé; például egy decentralizált biztosítási terméknek pontos információkra van szüksége az időjárásról, katasztrófákról stb. a hatékony működéshez.

Okosszerződések automatizálása

Az okosszerződések nem futnak automatikusan, hanem egy externally owned account (EOA), azaz külső tulajdonú számlának vagy egy másik szerződéses számlának kell elindítania a funkciókat a szerződéskód végrehajtásához. A legtöbb esetben a szerződésfunkciók nagy része nyilvános, és az EOA-k és más szerződések által meghívhatók.

De vannak olyan privát funkciók is egy szerződésen belül, amelyek mások számára elérhetetlenek, de kritikusak a dapp általános funkcionalitása szempontjából. Ilyen lehet például egy mintERC721Token() függvény, amely rendszeresen új NFT-ket készít a felhasználók számára, egy függvény a kifizetések odaítélésére egy előrejelzési piacon, vagy egy függvény a feltett tokenek feloldására egy DEX-en.

A fejlesztőknek időközönként ilyen funkciókat kell indítaniuk, hogy az alkalmazás zökkenőmentesen működjön. Ez azonban azt eredményezheti, hogy a fejlesztők több órát veszítenek a hétköznapi feladatokkal, ezért fontos az okosszerződések végrehajtásának automatizálása.

Egyes decentralizált orákulumhálózatok automatizálási szolgáltatásokat kínálnak, amelyek lehetővé teszik a láncon kívüli orákulum-csomópontok számára, hogy a felhasználó által meghatározott paraméterek alapján okosszerződés-funkciókat indítsanak el. Ehhez általában „regisztrálni” kell a célszerződést az orákulumszolgáltatásnál, pénzeszközöket kell biztosítani az orákulumüzemeltető kifizetéséhez, és meg kell határozni a szerződést kiváltó feltételeket vagy időpontokat.

A Chainlink Keeper Network(opens in a new tab) lehetőséget biztosít az okosszerződések számára a rendszeres karbantartási feladatok minimális bizalomigényű és decentralizált módon történő kiszervezésére. Tekintse meg a hivatalos Keeper-dokumentációt(opens in a new tab) a szerződés Keeper-kompatibilissé tételével és az Upkeep-szolgáltatással kapcsolatos információkért.

Hogyan használjuk a blokkláncorákulumokat

Többféle orákulumalkalmazást is integrálhat az Ethereum dappba:

Chainlink(opens in a new tab)A Chainlink decentralizált orákulumhálózatok hamisításbiztos bemeneteket, kimeneteket és számításokat biztosítanak a fejlett okosszerződések támogatásához bármely blokkláncon.

Witnet(opens in a new tab)A Witnet egy engedély nélküli, decentralizált és cenzúrának ellenálló orákulum, amely segíti az okosszerződéseket, hogy erős kriptogazdasági garanciákkal reagáljanak a valós világ eseményeire.

UMA Oracle(opens in a new tab)Az UMA optimista orákulum lehetővé teszi, hogy az okosszerződések gyorsan, mindenféle adatot megkapjanak különböző alkalmazásokhoz, beleértve a biztosítási, pénzügyi derivatívákat és előrejelzési piacokat.

Tellor(opens in a new tab)A Tellor egy átlátható és engedély nélküli orákulumprotokoll az okosszerződések számára, hogy könnyedén hozzájusson bármilyen adathoz, amikor csak szükség van rá.

Band Protocol(opens in a new tab)A Band Protocol egy láncokon átívelő adatorákulum-platform, amely valós adatokat és API-okat aggregál és kapcsol össze okosszerződésekkel.

Paralink(opens in a new tab)A Paralink nyílt forráskódú és decentralizált orákulumplatformot biztosít az Ethereumon és más népszerű blokkláncokon futó okosszerződésekhez.

Pyth Network(opens in a new tab)A Pyth hálózat egy olyan pénzügyi orákulumhálózat, amely első kézből szerez információt, és folyamatosan valós adatokat tesz közzé a láncon belül egy hamisításnak ellenálló, decentralizált és önfenntartó környezetben.

API3 DAO(opens in a new tab)Az API3 DAO olyan, első féltől származó orákulummegoldásokat kínál, amelyek nagyobb forrásátláthatóságot, biztonságot és skálázhatóságot biztosítanak egy decentralizált megoldásában az okosszerződések számára.

További olvasnivaló

Cikkek

Videók

Oktatóanyagok

Példaprojektek

Hasznosnak találta a cikket?