Škálovateľnosť nielen Etherea ale aj každého ďalšieho blockchainu je problém, o ktorom nikto nechcel počuť a každý sa ho bál až do roku 2017, kým projekt Cryptokitties, exponenciálne naberajúci na popularite, nezačal spomaľovať sieť a nevytlačil čas cenu gasu za transakcie do výšin.
Téma CryptoKitties je viac než len vyčerpaná, keďže bola omieľaná dlhé mesiace v každom crypto-news. Okrem popularity, projekt CryptoKitties poukázal na jednu dôležitú vec. Štádium, v akom sa momentálne nachádza Ethereum poukazuje na to, že sieť nieje pripravená na enormné množstvo užívateľov a trafficu na sieti, ktoré prichádza so spustením úspešnej Dapplikácie. Preto je nutné nájsť riešenie pre tento problém a toto je aj téma tohto článku.
Trilemma
Jednou z teórií technológie blockchain je, že sieť môže podporovať iba dve z nasledujúcich možností: bezpečnosť, decentralizáciu a škálovateľnosť. Táto “trilemma” – bola a je výzvou Ethereum developerov, pretože sa vždy snažia zachovať základné princípy technológie blockchiain (decentralizácia a bezpečnosť), zatiaľ čo sa snažia túto technológiu prispôsobiť a “poľudštiť” (UX) pre širšiu adopciu vo svete. Niektoré z návrhov pre riešenie tohto problému ale vážne ovplyvňujú základné princípy, ktorými sú práve bezpečnosť a decentralizácia.
Používanie altcoinov bolo jedným z prvých teoretických riešení škálovateľnosti blockchainu. V princípe ide o upustenie od myšlienky jediného blockchainu, na ktorom prebiehajú všetky operácie a namiesto toho je predstavený model, v ktorom koexistujú viaceré altcoiny, kde všetky fungujú na samostatných ledgeroch. Práve takéto zredukovanie operácii per blockchain a vytvorenie samostatných blockchainov – sidechainov k jednotlivým dapplikáciám by malo pomôcť škálovateľnosti nielen Ethereum blockchainu. Nerieši však trilemma problém. Práve s menším počtom uzlov v sieti na každom takomto blockchaine prichádza aj vyššia pravdepodobnosť, resp. náchylnosť na útoky a škodlivých užívateľov v sieti. Preto toto riešenie hoc výrazne napomáha škálovateľnosti technológie blockchain, výrazne ale ovplyvňuje jej bezpečnosť.
Za zmienku stojí aj ďalšie riešenie škálovateľnosti – zväčšovanie veľkosti bloku(Increasing block size). Ak by Ethereum komunita volila v prospech zväčšenia veľkosti bloku, všetky uzly(nodes) v sieti by rovnako procesovali všetky operácie v sieti ako doteraz s tým, že viac transakcií by sa sprocesovalo za rovnaký čas. Tým pádom by došlo k vyššej priepustnosti, resp. laicky povedané, došlo by k zrýchleniu siete. Vyššou veľkosťou blocku ale vyžaduje aj väčšie množstvo energie. To znamená, že stále menšie množstvo uzlov v sieti, minerov, by bolo schopných udržať produkciu. Pre budúcnosť by to znamenalo to, že pravdepodobne by sieť v budúcnosti prevádzkovala len malá skupina superpočítačov, čo logicky znamená centralizáciu.
Hlavné sústredenie pri vývoji technológie blockchain bolo vždy na bezpečnosť a decentralizáciu. Preto v súčasnosti hlavnou prekážkou pre škálovateľnosť je fakt, že každý uzol v sieti spracováva každú transakciu. Hoci je tento proces bezpochyby bezpečný a decentralizovaný, natívne nám neposkytuje veľa priestoru pre rast. Tu práve prichádza otázka trillemy. Sme schopní adoptovať pre naše dapplikácie technológiu Ethereum v takej miere, aby sme ju dokázali škálovať a neovplyvnili sme bezpečnosť alebo decentralizáciu?
V súčasnosti sú vo vývoji štyri protokoly, ktoré práve túto otázku riešia – Sharding, Plasma, Raiden. Za zmienku stojí Casper, ktorý ale je vyvýjaný v rámci Ethereum protokolu ako celku a je to obsiahlejšia téma.
V tomto článku sa budeme bližšie venovať práve sidechainom a scalability riešeniu zvanom Plasma, ktorý bol predstavený 10. augusta 2017 Vitalikom Buterinom a Josephom Poonom.
O Plasme v krátkosti
Podobne ako Bitcoin Lighting Network, Plasma predstavuje riešenie alebo spôsob uskutočňovania off-chain transakcií, pričom bezpečnosť týchto transakcií je zabezpečovaná “materským” blockchainom, ako v prípade Plasma technológie je to Ethereum blockchain. Plasma umožňuje vytváranie “child” blockchainov, ktoré sú stále v spojení s ich “materským” blockchainom, v prípade technológie Plasma je to Ethereum blockchain. Tieto child-chains môžu dokonca vytvárať svoje sub-child-chains. Plasma a sidechainy sú v podstate vetvy rôznych chainov v spojení s ich materským blockchainom. Procesovanie smart contractov bude vždy prebiehať ako na Ethereovej sieti s tou výnimkou, že iba konečný výsledok celého procesu je uložený v materskom chaine, resp. je tam premietnutý výsledok procesu. Môžeme si to predstaviť ako hierarchickú štruktúru blockchainov, procesujúce informácie periodicky späť do ich materského chainu.
V konečnom dôsledku nám z toho vyplýva, že vďaka minimálnemu počtu uzlov v sidechaine a tým aj vďaka vyššej rýchlosti a zanedbateľným nákladoch na gas môžeme procesovať komplexnejšie operácie, resp. komplexnejší kód v smart contractoch, kde len konečný výsledok sa premietne späť do hlavného chainu – v prípade Plasma do Ethereum blockchainu. To umožňuje developerom vytvárať celé aplikácie na technológii blockchain s tisíckami userov, bez obáv zo škálovateľnosti či obmedzení.
Čo sú teda hlavné výhody Plasmy?
- Plasma pomôže Ethereu spracovávať oveľa väčšie datasety ako je v súčasnosti možné.
- Vďaka veľkému nárastu transakčnej kapacity/priepustnosti umožňuje rôznym aplikáciám s komplexnejšími operáciami bežať na technológii blockchain.
- Nižší počet uzlov na sieti procesuje len transakcie zo sidechainu. Tým pádom poplatky za transakcie sú zanedbateľne malé.
- Plasma nám pomôže zbaviť sa zbytočných dát, v súčasnosti ukaldaných do main-chainu. Ušetrí to obrovské množstvo energie a pamäte na main-chain uzloch.
- Plasma je kompatibilná s rôznymi on-chain riešeniami škálovateľnosti ako napríklad sharding, rôzne veľkosti blokov a podobne.
Plasma v praxi – Plasma Cash a DAppChain
V súčasnosti celý ekosystém dapplikácií trpí neefektivitou. Neefektivitou v smere miešania sa transakcií finančných s transakciami v podobe spúšťania funkcií na smart contractoch a interagovania s funkcionalitou dapplikácií. Či už sa jedná o inštrukciu v smart contracte alebo transfer miliónov dolárov medzi peňaženkami, každá takáto transakcia je v súčasnosti spracovávaná s rovnakou úrovňou zabezpečenia. V podstate toto nie je samotným problémom. Bezpečnosť je vždy prvoradá, keďže aj príkaz na smart contract môže mať hodnotu miliónov. Problém je však škálovateľnosť a situácie, kedy nie sú príkazy na smart contracty vyslovene len napríklad, o uvoľňovaní financií ale len manipulácia s dátami, prípadne nejaký update. Je to ako platiť si premium funkcionalitu, keď potrebuje len basic. Nie každá transakcia v dapplikácii vyžaduje rovnakú úroveň zabezpečenia. Útočník alebo hacker má oveľa menší záujem exploitovať a škodiť transakciám v rámci dapplikácií, kde sa jedná doslova o mikrotransakcie, ako naopak v prípade útokov ako double-spending, ktoré môžu mať hodnotu miliónov eur.
Loom Network
Práve tento problém – problém škálovateľnosti DApplikácií rieší projekt Loom a ich DAppChain. DAppChain ako ďalšia vrstva nad Ethereovým blockchainom. Hlavnou filozofiou Loom DappChainu je vytvoriť pre každú dapp osobitný sidechain, ktorý funguje paralelne s Ethereovým mainchainom a s assetmi zabezpečnými práve technológiou Plasma.
1 dapp = 1 sidechain
Podľa zdrojov z Loom-u, táto filozofia “1 dapp = 1 sidechain” prináša niekoľko výhod. Prvou výhodou môže byť využitie alternatívneho konsenzus mechanizmu, ako napríklad DPoS – Delegated Proof of Stake), čo prinesie výraznú optimalizáciu v kontexte škálovateľnosti chainu. Druhou výhodou je využitie ako core sidechainu Ethereum blockchain, čo umožňuje tokenom ako ERC20 a ERC721 fungovať na sidechaine a komunikovať s Ethereum blockchainom vďaka Plasme. Podľa Loom-u, implementácia spomínaného Delegated Proof of Stake konsenzus umožňuje vyvíjať robustné dapplikácie s transakciami, ktoré sú “gas-less”, to znamená, že sú bez obvyklých nákladov na gas, ktorý sa vyžaduje na Ethereum mainchaine a zároveň transakcie prebiehajú v zlomku sekundy. Toto nastavenie umožňuje vytvárať dapplikácie, ktoré na bežnom chaine doteraz neboli moc efektívne, prípadne veľmi nákladné, ako napríklad hry a tokenová ekonomika v hrách či celé decentralizované sociálne siete.
Úloha technológie Plasma je v tomto prípade zabezpečenie dôvery medzi hlavným Ethereum chainom a DAppChainom, ako napríklad transfer ERC20 či ERC721 tokenov z Ethereum mainchain na DAppChain a zasa späť, bez potreby dôvery v konsenzuálny mechanizmus na DAppChaine. Prejdime ale od teórie k praxi a ukážme si to na reálnom príklade.
Loom Transfer Gateway
[Poznámka autora – Tutoriál je určený pre pokročilých programátorov z oblasti technológie blockchain a Etherea. Pokiaľ ste len na začiatku, určite odporúčam začať s TruffleNetwork.]
Transfer Gateway ako už nám naznačuje voľný preklad do slovenčiny, predstavuje bránu medzi Ethereum blockchainom a Loom dappchainom. Bránu pre transfer tokenov na sidechaine a ich bezpečný prenos späť na Ethereum mainchain. Podľa oficiálnej dokumentácie Loom networku je v tomto momente podporovaný len štandard tokenov ERC721 a podpora pre ERC20 by mala byť čoskoro implementovaná. S malými úpravami dokážeme však už teraz transferovať ERC20 a tým logicky aj ERC223 medzi mainchainom a sidechainom. Skôr než prejdeme ku kódu, začnime najskôr s vysvetlením čo vlastne Transfer Gateway je a ako funguje.
Transfer Gateway pozostáva zo štyroch hlavných komponentov:
- Gateway smart contract na strane Ethereum blockchainu
- Gateway smart contract na strane Loom dappchainu
- Address mapper smart contract na strane Loom dappchainu
- Loom Gateway Oracle ako standalone proces
Každá adresa peňaženky na Ethereum blockchaine, ktorá chce interagovať s Loom dappchainom, musí byť s ním spárovaná. V skratke, automaticky pri transferovaní tokenov, je vytvorená párovacia adresa na Loom dappchaine k danej peňaženke.
Aby užívateľ dokázal preniesť svoje tokeny na dappchain, musí ich najprv tranferovať na Gateway smart contract na Ethereum blockchaine, ktorý nasledovne emituje “deposit event” – informáciu o tom, že užívateľ poslal tokeny na Gateway smart contract. Tento deposit event je vyzdvihnutý Gateway Oraclom, ktorý ma za úlohu observovať tieto eventy na smart contract na Ethereum blockchaine a informovať o týchto eventoch Gateway smart contract na strane Loom dappchainu. V momente ako Gateway smart contract na strane Loom dappchainu má informáciu o depositovaných tokenoch na Ethereum Gateway, Loom dappchain Gateway vytvorí klon týchto tokenov na strane Loom dappchainu.
Ak chce užívateľ svoje tokeny preniesť späť na Ethereum blockchain, musí ich najprv transfernúť na Loom dappchain gateway, ktorý vytvorí požiadavku na výber tokenov, ktorá je pripravená na podpis. Gateway Oracle túto požiadavku vyzdvihne, podpíše a posunie informáciu o podpise Loom dappchain gateway, ktorý notifikuje užívateľa o tom, že jeho tokeny sú pripravené na Ethereum Gateway a môže transakciou podpísať výber týchto tokenov späť na jeho peňaženku.
Pre lepší prehľad a pochopenie ako Loom dappchain funguje, prejdime ku kódu. Zdrojový kód k spusteniu vlastného dappchainu si môžete naklonovať z môjho Github repozitára na tejto adrese GITHUB LINK.
Minimálne požiadavky:
- node >= 8
- wget
- nc (pre kontrolu obsadených portov)
- MetaMask
Začneme naklonovaním repozitára:
Po naklonovaní repa vidíme súborovú štruktúru ako:
- dappchain – obsahuje binary k loom dappchain, dappchain oracle a config súbor
- transfer-gateway-scripts – JS script, ktorý sa stará o mapovanie adries peňaženiek
- truffle-dappchain – Ethereum core loom dappchainu, obsahuje zdrojáky k smart contractom a scripty pre deploy
- truffle-ethereum – Lokálny Ethereum chain na Ganache, pre účely testu a simulácie mainchainu, obsahuje zdrojáky k smart contractom a scripty pre deploy
- webclient – obsahuje UI komponenty a logiku medzi mainchainom a dappchainom
Po naklonovaní repa môžeme nainštalovať všetky potrebné súčasti spustením scriptu:
Keď setupnutie všetkých balíčkov prejde v poriadku, sme pripravení sidechain spustiť:
Script transfer_gateway a príkaz start nám spustia lokálne servery a spustia deploy pre Ganache ethereum blockchain a Loom dappchain. Deploy zabezpečuje Truffle. Kto prišiel do kontaktu s TruffleNetwork, veľmi jednoducho pochopí fungovanie sidechainu a jeho následnú modifikáciu.
Na interakciu s dapplikáciou musíte mať nainštalovaný Metamask. Keďže ideme interagovať s lokálnou inštanciou blockchainu, metamask si musíme prepnúť na lokalhost network, defaultne nastavenou na port 8545.
Po prepnutí siete si importujeme defaultný účet automaticky generovaný Ganache inštanciou etherea pomocou nasledujúceho privatekey:
Ak by sme si chceli prejsť celý zdrojový kód detailne, nebol by to tutoriál ale celý román, preto vyberiem najpodstatnejšie súčasti, ktoré v kratkosti popíšem. štruktúra a celkovo kód je jednoduchý na pochopenie, preto zbehlejší JS programátor pochopí vzťahy veľmi rýchlo. Prípadne je k dispozícii oficiálna dokumentácia transfer gateway, ktorá pomôže určite lepšie.
Začnime config yaml file-om z prvej zložky “dappchain”. Súbor obsahuje všetky konkrétne presmerovania a linky, podstatné pre binary loomu a loom oraclu, zabezpečujúci spojenie medzi dvoma chainami. Z komentárov je jasné, k čomu patrí aký riadok:
Najpodstatnejšou súčasťou je samotný Gateway smart contract. Stará sa o emitovanie eventov hneď po tom ako užívateľ naňho spravil deposit jeho tokenov. Emitovaná eventy následne prevezme Loom Oracle, ktorý ich posunie ďalej ako to bolo popisované vyššie, prípadne uvoľní tokeny pre ich withdrawal. Konkrétne tento Gateway smart contract zvládne manažovanie nielen ERC721 ale aj ERC20 a Etherea.
Pokiaľ si otvoríme smart contracty v súborových zložkách truffle, pre loom dappchian a ethereum, jedná sa len o dvojice smart contract pre ERC tokeny, ktoré v tomto tutoriále nestoja za reč a sú základom práce. Pre nás je podstatný ERC20:
Podstatnou modifikáciou contractu v truffle-ethereum zložke je ale funkcia pre depositovanie na Gateway smart contract:
A zasa na strane truffle-dappchain, zložka obsahuje smart contracty pre správu a mintovanie tokenov na strane loom dappchainu. Keď užívateľ depozituje ERC20 token z Etheruem blockchainu na dappchain, Gateway contract na strane dappchainu vymintuje korešpondujúcu čiastku tokenov na strane dappchainu:
Treba si pamätať, že Gateway contract na strane dappchainu musí byť autorizovaný mintovať tokeny na strane dappchainu. To znamená, že peňaženky musia byť vždy spárované a peňaženka na strane Ethereum blockchainu musí byť dokázateľným vlastníkom tokenom depositovaných na Gateway na strane Ethereum blockchainu.
Pre tých, ktorým sa nechce spúšťať celú appku, pripájam zopár screenshotov. Prvý je signovanie do dappky, kde zároveň na pozadí prebieha párovanie adries.
Po prihlásení vidíme balance svojich tokenov, ktoré môžeme transferovať na Loom dappchain. Keďže stále robíme transfer tokenov na Ethereum Gateway, musíme platiť gas.
Na pozadí, po depozitovaní na Ethereum Gateway, je emitovaný event na základe ktorého Loom Oracle posunie informáciu o deposite na Gateway na strane Loomu. Následne sú vymintované tokeny a pripravené na použitie v peňaženke na dappchaine.
Záver
Tento tutoriál predstavuje len veľmi stručný úvod do problematiky sidechainov a riešenia škálovateľnosti na Ethereovom blockchaine. Čerpal som len z dostupných zdrojov v oficiálnej dokumentácie Loom Networku. Dokumentácia je žiaľ veľmi nekompletná a človek musí štúdiu ich knižníc venovať enormné množstvo času pre pochopenie a následnú implementáciu. Celý tento čas by bol ušetrený prehľadnou dokumentáciu, nielen strohými inštrukciami, ktoré v súčasnosti Loom poskytuje. Snáď sa to do budúcnosti zlepší, pretože ja osobne Loom vnímam ako projekt s obrovským potenciálom a širokým využitím v budúcnosti a to nielen v hernom priemysle. Nechajme sa ale prekvapiť.