Artikkeli
Oraakkeli: mistä älysopimus saa hinnan ja miksi se voi olla väärä?
Älysopimus ei tavallisesti näe itsestään kryptovaran markkinahintaa. Se tarvitsee tiedon lähteen, jota kutsutaan oraakkeliksi. Jos sopimus tekee päätöksen tämän tiedon perusteella, sen toiminta riippuu myös siitä, mistä hinta tulee ja miten se päivitetään.1
Virheellinen hintasyöte voi johtaa päätökseen, joka näyttää koodin näkökulmasta oikealta mutta perustuu väärään tietoon. Kyse ei siis ole vain siitä, toimiiko älysopimuksen koodi suunnitellusti. Myös sopimuksen käyttämä hintatieto ja siihen liittyvät oletukset on ymmärrettävä.
Mikä oraakkeli on?
Oraakkeli voi tuoda lohkoketjun ulkopuolista tietoa älysopimuksen käyttöön. Hintaa varten oraakkeli voi myös hyödyntää ketjussa syntyvää markkinatietoa, eikä jokainen hintalähde edellytä ketjun ulkopuolista syötettä. Esimerkiksi Uniswap v2:n parin kertyneistä hintatiedoista voidaan laskea aikapainotettu keskihinta.2 Oraakkelit voivat erota toisistaan tiedonlähteiden määrän, luottamusmallin ja arkkitehtuurin perusteella. On myös järjestelyjä, jotka välittävät tietoa ketjusta ulospäin tai tekevät laskentaa ketjun ulkopuolella.1
Tässä artikkelissa keskitytään nimenomaan sopimukseen tulevaan hintatietoon. Emme pyri arvioimaan yksittäisen lainapalvelun tuottoa tai suosittelemaan tiettyä syötettä. Sama kysymys voi silti tulla vastaan monessa palvelussa: mikä hinta vaikuttaa toimintoon, johon olet sitoutumassa?
Ajattele oraakkelia tietokanavana, ei tuomarina, joka voi taata markkinan todellisen hinnan. Eri kauppapaikoilla hinnat voivat poiketa toisistaan, ja ne voivat muuttua myös nopeasti. Syötteen tekijän on päätettävä, mistä lähteistä arvo muodostetaan, milloin se päivitetään ja mitä tapahtuu, jos tietoa ei saada.
Mihin hintaa käytetään?
Hintasyöte voi olla osa järjestelmää, joka käsittelee vakuuksia. Palvelun ehdot ja älysopimukset määrittävät, miten vakuuden arvo vaikuttaa käyttäjän asemaan. Lukijan kannalta olennaista on erottaa kolme asiaa: omistamasi varan määrä, sopimuksen käyttämä yksikköhinta ja näistä johdettu vakuuden arvo.
Kuvitteellinen esimerkki: henkilöllä on palvelussa vakuutena yksi token. Palvelun sopimus lukee oraakkelista tokenin hinnaksi 100 euroa. Jos syötteeseen päätyy virheellisesti 50 euroa, sopimus voi arvioida vakuuden arvon eri tavalla kuin käyttäjä odottaa. Se, seuraako tästä esimerkiksi lisävakuusvaatimus tai vakuuden realisointi, riippuu juuri kyseisen palvelun säännöistä. Esimerkki ei kuvaa todellista palvelua eikä ennusta lopputulosta.
Hintaa ei siis kannata ajatella irrallisena ruudulla näkyvänä numerona. Kannattaa selvittää, mikä järjestelmä sitä lukee ja mikä toiminto voi seurata sen muuttumisesta. Sama luku voi olla yhdessä sovelluksessa vain näyttötieto ja toisessa tieto, joka vaikuttaa sopimuksen ehtoihin.
Mistä syötteen hinta muodostuu?
Syöte voi perustua yhteen lähteeseen tai useiden lähteiden tietoihin. Oraakkelissa voi olla myös useita osallistujia, joiden lähettämistä arvoista lasketaan yhteinen arvo. Ethereum.org kuvaa esimerkiksi rakennetta, jossa usean lähettäjän arvot yhdistetään mediaaniksi ennen viitehinnan päivittymistä. Tämä on esimerkki toteutuksesta, ei lupaus siitä, että kaikki syötteet toimivat samalla tavalla.1
Useampi tietolähde voi pienentää riippuvuutta yhdestä lähteestä, mutta määrä yksin ei ratkaise kaikkea. Jos lähteet nojaavat samoihin markkinoihin tai samaan tiedonvälittäjään, yhteinen riippuvuus voi jäädä piiloon. Tarkista siksi sekä lähteiden määrä että niiden riippumattomuudesta annettu selvitys.
Hinnan muodostuksessa voi olla mukana myös aikajakso. Aikapainotettu keskihinta, josta käytetään lyhennettä TWAP, kuvaa hintaa valitun ajanjakson yli eikä välttämättä vastaa juuri tämän sekunnin kauppahintaa. Ethereum.org mainitsee TWAPin yhtenä hintasyötteissä käytettävänä mallina.1 Aikajakso voi tasoittaa lyhyitä liikkeitä, mutta samalla viive suhteessa nopeasti muuttuvaan markkinaan voi olla merkityksellinen. TWAP ei ole manipuloinnilta suojattu automaattisesti: esimerkiksi Uniswap v2:n kuvauksessa manipuloinnin kustannuksiin vaikuttavat muun muassa likviditeetti ja mittausjakson pituus.2
Tarkka laskentatapa on aina tarkistettava käytettävän syötteen dokumentaatiosta. Pelkkä sana oraakkeli ei kerro, käytetäänkö mediaania, keskiarvoa vai muuta menetelmää. Samannimisetkin ratkaisut voivat erota verkon, omaisuuserän ja sopimusversion mukaan. Myös käytetty mittausjakso kannattaa selvittää ennen eri lukujen vertailua.
Neljä tapaa, joilla hinta voi johtaa harhaan
Väärä tai puutteellinen lähtötieto. Jos käytetty markkinadata on virheellistä, myös siitä laskettu viitearvo voi olla virheellinen. Monen lähettäjän malli ei automaattisesti korjaa ongelmaa, jos niiden tiedot ovat virheellisiä samasta syystä.
Vanhentunut tieto. Viimeinen tallennettu arvo voi olla oikein siltä ajalta, jolloin se julkaistiin, mutta huono kuva nykytilanteesta. Katso, kertooko palvelu päivityksen ajankohdan ja määritteleekö se enimmäisiän, jonka jälkeen arvoa ei enää käytetä. Jos näitä tietoja ei ole näkyvissä, arvon ajantasaisuus jää sinulle epäselväksi.
Väärä vertailukohde. Sopimus voi lukea eri tokenin, token-version, verkon tai valuuttaparin hintaa kuin lukija olettaa. Samantapaiset nimet eivät riitä varmistamaan, että kyse on samasta asiasta. Tarkista palvelun dokumentaatiosta sekä kohde että se yksikkö, jossa arvo ilmoitetaan.
Markkinan tai syötteen häiriö. Jos tietolähteitä ei saada käyttöön tai poikkeava havainto päätyy laskentaan, lopputulos riippuu toteutuksen suojauksista. Ethereum.org käsittelee oraakkeleihin liittyviä luottamus- ja manipulointikysymyksiä: ketjussa näkyvä tieto ei itsessään todista ulkoisen lähtötiedon oikeellisuutta.1
Nämä ovat erilaisia ongelmia. Hintasyöte voi olla teknisesti saatavilla mutta väärä, tai se voi olla aikanaan oikea mutta nyt liian vanha. Tarkastelussa ei kannata tyytyä kysymykseen, onko syöte yleensä toiminnassa.
Miksi yksi hinta ei aina vastaa kysymykseen?
Hinta on aina suhteessa johonkin. Tokenin eurohinta vastaa eri kysymykseen kuin saman tokenin hinta toisessa kryptovarassa. Myös mittausajankohta ja käytetyt markkinat vaikuttavat siihen, mitä arvo kuvaa. Kun vertailet palvelun lukemaa toiseen näkymään, varmista ensin, että molemmat tarkoittavat samaa paria ja samaa ajanjaksoa.
Jos näytöllä näkyvä luku ja sopimuksen lukema eroavat, ero ei vielä kerro, että toinen järjestelmä on rikki. Näyttö voi päivittyä eri tahdissa tai käyttää eri lähdettä kuin sopimuksen päätös. Selvitä palvelun ohjeista, mikä lukema oikeasti ratkaisee kyseisen toiminnon. Älä tee johtopäätöstä pelkän yleisen hintakaavion perusteella.
Kysy myös, näetkö tiedon viimeisimmästä päivityksestä juuri sille sopimukselle, jota olet käyttämässä. Yleinen palvelun tilasivu voi kertoa paljon, mutta se ei välttämättä vastaa yksittäisen omaisuuserän hintasyötteen tilannetta. Epäselvässä tilanteessa palvelun asiakastuelle voi esittää rajatun kysymyksen: mikä syöte vaikuttaa tähän toimintoon, mistä tarkistan sen päivitysajan ja miten palvelu käsittelee liian vanhan arvon?
Kuka voi muuttaa tiedon käyttöä?
Hintalähde ei ole ainoa päätös. Palvelu määrittelee myös, miten se käyttää syötettä. Tarkista, kuka voi vaihtaa osoitetta, muuttaa hyväksyttävän tiedon ikää tai päättää poikkeustilanteen toimista. Näitä kysymyksiä ei voi ratkaista pelkällä tiedolla siitä, että käytössä on useita datan lähettäjiä.
Eri järjestelyt voivat jakaa vastuuta eri tavoin. Yhdessä mallissa käyttäjän pitää luottaa tiettyyn tiedontoimittajaan; toisessa mukana voi olla joukko osallistujia ja erillinen arvojen yhdistäminen. Ethereum.org erottaa oraakkeleita niiden tiedonlähteiden ja luottamusmallien perusteella.1 Hajautetuksi kutsutun järjestelyn todelliset riippuvuudet on siksi tarkistettava sen omasta dokumentaatiosta.
Päätös ei myöskään aina perustu vain yhteen syötteeseen. Sovellus voi yhdistää eri tietoja tai käyttää erillisiä rajoja. Jos palvelu ei kerro, miten näin tehdään, yksittäisen syötteen tutkiminen ei vielä anna koko kuvaa. Tässä oppaassa kuvattu tarkistuslista on lähtökohta, ei tekninen auditointi eikä tae siitä, että kaikki riippuvuudet löytyvät.
Mitä tapahtuu, jos syöte ei toimi?
Etsi palvelun ehdoista ja teknisestä kuvauksesta poikkeustilanteen toimintamalli. Keskeytetäänkö jokin toiminto, käytetäänkö viimeistä tunnettua arvoa vai siirrytäänkö toiseen tiedonlähteeseen? Kuka voi muuttaa asetuksia tai pysäyttää toiminnon? Onko vaihtoehtoisen lähteen käyttäminen automaattista vai vaatiiko se erillisen päätöksen?
Älä oleta, että varasyöte on olemassa vain siksi, että ensisijainen syöte on tunnettu. Varajärjestely voi perustua samaan markkinadataan tai edellyttää toimijaa, johon käyttäjän on erikseen luotettava. Myös pysäytys voi suojata yhdeltä riskiltä mutta estää käyttäjää tekemästä haluamaansa toimintoa.
Jos dokumentaatio ei vastaa näihin kysymyksiin, puute on itsessään tärkeä tieto päätöstä varten. Epäselvää toimintaa ei tarvitse paikata oletuksella. Voit kysyä palvelulta, mistä kyseisen toiminnon hinta tulee ja missä tilanteessa sitä ei enää pidetä käyttökelpoisena.
Tarkistuslista ennen kuin luotat hintaan
- Tunnista toiminto, johon hinta vaikuttaa. Onko kyse näyttöhinnasta vai sopimuksen päätöksen perusteesta?
- Tarkista omaisuuserä, verkko ja valuuttapari palvelun dokumentaatiosta. Varmista myös, mitä versiota sopimuksesta ohje koskee.
- Selvitä, mitä lähteitä ja yhdistämistapaa syöte käyttää. Erota useiden lähteiden määrä niiden tosiasiallisesta riippumattomuudesta.
- Katso, miten päivitys tapahtuu ja onko viimeisen arvon ikä nähtävissä. Selvitä, mitä vanhentuneelle tiedolle tehdään.
- Etsi kuvaus katkoksista, varajärjestelystä ja mahdollisesta pysäytyksestä. Kirjaa itsellesi avoimet kysymykset ennen sitoutumista.
Lista ei todista palvelua turvalliseksi. Se auttaa kuitenkin muuttamaan epämääräisen kysymyksen ”onko oraakkeli luotettava?” tarkemmiksi kysymyksiksi, joihin palvelun pitäisi pystyä vastaamaan. Jos toimintamallia ei ymmärrä, odottaminen tai lisätiedon pyytäminen on perusteltua.
Usein kysyttyä
Onko lohkoketjussa oleva hinta aina oikea?
Ei. Lohkoketjuun tallennettu arvo voi olla luettavissa ja silti perustua virheelliseen tai vanhentuneeseen lähtötietoon. Ketjuun tallentuminen ei yksin osoita, että arvo kuvaa haluttua markkinaa tai sen ajantasaista hintaa.1
Voiko sama token saada eri hinnan eri palveluissa?
Voi, jos palvelut käyttävät eri syötteitä, lähteitä tai ajanjaksoja. Tämä ei yksin osoita, kumpi arvo on oikea juuri kyseisen sopimuksen tarkoitukseen. Vertaa hinnan muodostustapaa ja aikaa, älä vain näytön lukemia.
Poistaako usean lähteen käyttäminen riskin?
Ei välttämättä. Se muuttaa riippuvuuksia, mutta lähteiden laatu, yhteiset riippuvuudet ja poikkeustilanteen käsittely ratkaisevat edelleen. Oraakkelin arviointi kuuluu yhteen sen kanssa, miten sitä käyttävä sopimus on rakennettu.