Tokeny a NFT

ERC-20 a ERC-721 jsou pár řádků. Co z toho plyne.

Co se naučíš: Uvidíš, že token je tabulka v jednom kontraktu, a naučíš se, proč standard není záruka.

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

Token není nová technologie. Je to záznam v jednom kontraktu, který říká, kolik čeho komu patří. Celý standard se vejde na stránku a to je zároveň to nejdůležitější, co je potřeba o tokenech vědět.


Co token doopravdy je

Kontrakt s tabulkou:

adresa                                      zůstatek
0x1a2b...                                      1 500
0x9f8e...                                        320
0x44cc...                                    120 000

A funkce preved(komu, kolik), která přesune číslo z jednoho řádku na druhý. To je celý token. Standard ERC-20 popisuje jen jména těch funkcí, aby s tokenem uměly pracovat peněženky a burzy.

Klíčové důsledky:

  • Token neexistuje v blockchainu, existuje v kontraktu. Síť o něm neví nic, jen provádí kód, který někdo nasadil.
  • Vytvořit token stojí pár minut a pár dolarů. Nedává to samo o sobě žádnou záruku, hodnotu ani smysl.
  • Kdo napsal kontrakt, určil pravidla. Může tam být funkce na doražení dalších tokenů, na zmrazení adresy nebo na zákaz prodeje. Standard to nezakazuje.

Ten třetí bod je nejdůležitější praktická věc celé kapitoly: standard není záruka. Kontrakt může mít správná jména funkcí a přitom uvnitř dělat cokoli.


NFT je totéž s jinou tabulkou

Nezaměnitelný token je tentýž nápad, jen se místo množství eviduje vlastník konkrétního čísla:

id     vlastník
1      0x1a2b...
2      0x9f8e...
3      0x1a2b...

Samotný obrázek v tom kontraktu není, protože ukládání dat je drahé. Uložený je obvykle jen odkaz. A to je zdroj většiny nedorozumění: vlastníš záznam v tabulce, který ukazuje na adresu, kde něco je.

Pokud ten odkaz vede na běžný server, může se obsah kdykoli změnit nebo zmizet, a kontrakt to nepozná. Lepší varianta odkazuje na obsah pomocí jeho hashe, takže se aspoň pozná záměna. I tak ale platí, že soubor musí někdo hostit.


Co token nezaručuje

Lidé očekávajíSkutečnost
Že jich je omezené množstvíjen pokud to kontrakt vynucuje, ověř si to
Že je token krytýkrytí je slib mimo blockchain, kontrakt ho nevynutí
Že vlastním obrázekvlastníš záznam odkazující na obrázek
Že s tím jdou spojená právapráva vznikají smlouvou, ne zápisem v tabulce
Že to nejde zmrazitmnoho tokenů má funkci na zmrazení adres

Cvičení

  1. Jak zjistíš, jestli může autor tokenu vytvořit další kusy?
  2. NFT odkazuje na obrázek na běžném serveru. Vyjmenuj dva způsoby, jak se dá takové NFT znehodnotit bez zásahu do blockchainu.
  3. Proč samotné dodržení standardu nic negarantuje?
Náčrt řešení: rozbal, až si cvičení zkusíš sám
  1. Přečteš si zdrojový kód kontraktu a hledáš funkci, která zvyšuje celkovou zásobu, a to, kdo ji smí volat. Prakticky: ověř, že kontrakt je zveřejněný a odpovídá nasazenému bytecode, a hledej funkce typu ražby a jejich omezení. Pozor i na proxy vzor, protože pak může být vyměněna celá logika. Když kód zveřejněný není, nedá se to zjistit vůbec, a to je samo o sobě odpověď.
  2. Server se vypne, nebo se obsah na stejné adrese vymění. V obou případech kontrakt dál tvrdí, že vlastníš token číslo tři, jen za tím odkazem není nic nebo je tam něco jiného. Blockchain o obsahu nic neví a nemá jak to zjistit. Odolnější řešení odkazuje na obsah pomocí jeho hashe, což aspoň odhalí záměnu, ale ani to nezaručí, že soubor bude někdo dál hostit.
  3. Protože standard určuje jen jména a tvar funkcí, ne to, co uvnitř dělají. Kontrakt může mít předepsanou funkci pro převod a přitom v ní mít podmínku, že převod se povolí jen vybraným adresám, nebo si při každém převodu strhávat část. Peněženky a burzy se standardem řídí proto, aby uměly s tokenem pracovat, ne proto, že by tím něco ověřily.

Shrnutí

  • Token je tabulka v jednom kontraktu plus funkce na přesun čísla mezi řádky.
  • Standard sjednocuje jen jména funkcí, aby s tokenem uměly pracovat peněženky.
  • Standard není záruka: uvnitř může být ražba dalších kusů i zmrazení adres.
  • NFT eviduje vlastníka konkrétního čísla; samotný obsah leží mimo blockchain.
  • Vytvoření tokenu je triviální a samo o sobě neznamená vůbec nic.
Co je token z technického hlediska?

Záznam v tabulce jednoho konkrétního kontraktu, který přiřazuje adresám zůstatky, plus funkce na přesun mezi řádky. Blockchain o tokenu sám nic neví, jen provádí kód, který někdo nasadil. Standard popisuje jen jména funkcí, aby s tokenem uměly pracovat peněženky a burzy.

Proč dodržení standardu neznamená, že je token v pořádku?

Protože standard určuje tvar rozhraní, ne chování uvnitř. Kontrakt může mít správně pojmenovanou funkci pro převod a přitom v ní omezovat, kdo smí prodávat, strhávat část částky nebo umožnit autorovi razit další kusy. Jistotu dá jen přečtení zdrojového kódu a ověření, že odpovídá nasazenému.

Co přesně vlastní držitel NFT s obrázkem?

Záznam v kontraktu, který k danému číslu tokenu přiřazuje jeho adresu, a v tom záznamu je odkaz na místo, kde obrázek leží. Samotný soubor v blockchainu není, protože ukládání dat je drahé. Pokud odkaz vede na běžný server, může obsah zmizet nebo se změnit a kontrakt to nepozná.