Oracles

Jak se do uzavřeného světa dostane cena zvenčí a proč je to slabé místo.

Co se naučíš: Pochopíš, proč je most mezi kontraktem a skutečností nejslabší článek většiny systémů.

5 min čtení + cvičeníNavazuje na:📜 Smart kontrakty

Kontrakt nesmí sáhnout ven, jinak by se uzly neshodly. Jenže spousta užitečných věcí potřebuje vědět, kolik stojí dolar, jestli zásilka dorazila nebo kdo vyhrál zápas.

Řešení se jmenuje oracle a je to nejslabší článek většiny postavených systémů.


Problém, který nejde obejít

Blockchain je uzavřený svět. Ví jen to, co do něj někdo zapsal transakcí. Nemá hodiny podle skutečného času, nemá internet a nemá čidla.

Oracle je tedy prostě někdo, kdo data zapíše. A tím se do bezdůvěrného systému vrací otázka, komu věřit.

Kontrakt může být bezchybný a stejně se dá o všechno připravit, když ho někdo nakrmí špatným číslem. Většina velkých ztrát v téhle oblasti nevznikla chybou v kontraktu, ale manipulací se vstupem.


Jak se to dělá lépe a hůř

Nejhorší varianta: jeden zdroj. Kontrakt čte cenu z jedné adresy. Kdo ovládne ten klíč, ovládne všechno, co na ceně závisí.

Špatná varianta: cena z jednoho bazénu. Vypadá to bezdůvěrně, protože se čte přímo z blockchainu. Jenže bazén se dá na jednu transakci překlopit: půjčíš si obrovskou částku, posuneš cenu v bazénu, necháš kontrakt přečíst zmanipulovanou hodnotu, vytěžíš to a půjčku vrátíš, všechno v jediné transakci. Tomu se říká manipulace ceny a je to nejčastější způsob, jak se vybírají DeFi protokoly.

Lepší varianta: časově vážený průměr. Místo okamžité ceny se čte průměr za delší dobu. Manipulace pak vyžaduje držet cenu mimo trh po celou tu dobu, což stojí mnohonásobně víc.

Nejlepší dostupná varianta: víc nezávislých zdrojů s ekonomickou zárukou. Několik poskytovatelů podepisuje hodnoty, bere se medián a ti, kdo dodají špatná data, přijdou o vklad. Není to bezdůvěrné, ale důvěra je rozdělená a špatné chování je potrestané.


Věc, kterou blockchain neumí a nikdy nebude

Oracle problém není technická nedokonalost, kterou někdo jednou vyřeší. Je to hranice systému. Blockchain umí zaručit, že se s daty po zápisu nic nestane. Nemůže zaručit, že data byla pravdivá v okamžiku zápisu.

Odtud plyne užitečný test pro každý nápad na blockchainu:

Kolik toho závisí na datech zvenčí? Přesně tam leží skutečná důvěra celého systému.

U sledování původu zboží je to sto procent. U směny dvou tokenů uvnitř řetězu nula. Většina reálných nápadů je někde blízko té stovky, a proto u nich blockchain nedává smysl, jak jsme si řekli v první kapitole.


Cvičení

  1. Kontrakt na půjčky čte cenu zástavy z bazénu na burze. Popiš, proč je to nebezpečné.
  2. Jak pomůže časově vážený průměr a co za to zaplatíš?
  3. Proč se oracle problém nedá vyřešit lepší kryptografií?
Náčrt řešení: rozbal, až si cvičení zkusíš sám
  1. Protože cena v bazénu se dá krátkodobě posunout obchodem a kontrakt tomu uvěří. Útočník si může v rámci jediné transakce půjčit velkou částku bez zástavy, překlopit poměr v bazénu, nechat kontrakt přečíst nesprávnou cenu, vytěžit z toho výhodu a půjčku vrátit. Vše proběhne atomicky, takže se to nedá zachytit mezi kroky. Obrana je nečíst okamžitou cenu z jednoho bazénu, ale průměr přes čas a ideálně z více zdrojů.
  2. Manipulace pak musí trvat celé okno průměru, což je řádově dražší. Posunout cenu na jeden blok stojí jednu transakci; udržet ji posunutou třicet minut znamená bránit se arbitražérům, kteří cenu tlačí zpět a berou si na tom zisk. Zaplatíš za to zpožděním: průměr reaguje na skutečné pohyby pomaleji, takže při rychlém pádu může kontrakt pracovat se zastaralou hodnotou a likvidace přijdou pozdě.
  3. Protože to není problém přenosu dat, ale jejich původu. Kryptografie umí zaručit, že zprávu poslal držitel klíče a že se cestou nezměnila. Neumí zaručit, že to, co ten držitel napsal, odpovídá skutečnosti. Jediné, co s tím jde dělat, je rozdělit důvěru mezi víc nezávislých stran a udělat lhaní ekonomicky nevýhodným, tedy problém zmenšit, ne odstranit.

Shrnutí

  • Kontrakt nemá přístup ven, takže data zvenčí musí někdo zapsat transakcí.
  • Tím se do bezdůvěrného systému vrací otázka, komu věřit, a je to jeho nejslabší článek.
  • Čtení okamžité ceny z jednoho bazénu je nejčastější příčina velkých ztrát v DeFi.
  • Časově vážený průměr manipulaci prodraží, ale zpomalí reakci na skutečné pohyby.
  • Blockchain zaručí neměnnost dat po zápisu, nikdy ne jejich pravdivost při zápisu.
Proč je oracle nejslabším článkem systémů postavených na kontraktech?

Protože kontrakt nemá přístup k vnějšímu světu a musí věřit tomu, kdo mu data zapíše. I bezchybný kontrakt se dá připravit o prostředky tím, že dostane nesprávné číslo. Většina velkých ztrát v této oblasti vznikla manipulací vstupu, ne chybou v kódu.

Proč je nebezpečné číst cenu z jediného likviditního bazénu?

Protože cenu v bazénu lze posunout jedním velkým obchodem a kontrakt jí uvěří. Útočník to zvládne v rámci jediné transakce i bez vlastního kapitálu, pokud si částku půjčí a ve stejné transakci vrátí. Obranou je číst průměr za delší dobu a kombinovat víc nezávislých zdrojů.

Proč se oracle problém nedá vyřešit kryptografií?

Protože kryptografie řeší pravost a neměnnost přenosu, nikoli pravdivost obsahu. Podpis dokáže, že hodnotu zapsal držitel klíče, ale ne že hodnota odpovídá skutečnosti. Zmírnit to jde jen rozdělením důvěry mezi víc nezávislých zdrojů a ekonomickým postihem za nesprávná data.