Bystroushaak's blog / Czech section / Crypto / Ethereum

Ethereum

První polovina roku 2014 je za námi a na světě existuje víc virtuálních měn, než se dá spočítat, protože než dopočítáte, tak alespoň dvě nové vzniknou. Mnoho jich vzniká prostě proto, že je jednoduché si vytvořit vlastní fork Bitcoinu či Litecoinu. Je možné najít všechny možné varianty zvířat (Dogecoin, catcoin, foxcoin, birdcoin, horsecoin atp..), různé národní měny (czechcoin, e-gulden, ..), ale i zajímavé myšlenky (namecoin, gridcoin, coloredcoin). Kdo chce, může si projít celý dlouhý seznam.

Naprostá většina z existujících kryptoměn nepřidává vůbec žádnou hodnotu oproti ostatním, a jediné čim se odlišují je název a "marketing". Existuje pár pokusů, které snaží například věnovat výpočetní výkon na hledání léku rakoviny, či mimozemšťanů. Žádný z nich se však však široce neujal a není používanou měnou. Lidi je používají protože chtějí pomoci, nikoliv proto, že by se jim to hodilo. Ethereum se od nich odlišuje, protože kromě samotné hodnoty dané nedostatkem má i hlubší ekonomický smysl.

O co se jedná

Ethereum je možné popsat jako blockchain s turingovsky kompletní podporou scriptování, či jako na konsenzu založený virtuální stroj. Od Bitcoinu se liší hned v několika bodech:

  • posílání zpráv
  • cloud "účty"
  • podporou scriptování

Jinak řečeno, jedná se o výpočetní cloud a kryptoměnu zároveň. Příjemci zpráv a peněz (Etherů) nemusí být jen uživatelé, ale i jednotlivé cloud účty, kde běží nahraný bytecode a které mohou posílat zprávy ostatním, či zakládat další účty, do kterých nahrají další bytecode. Tím jak tyto cloud účty běží, dochází ke spalování Etherů, které mají na svém kontě, ve prospěch těžařů, kteří poskytují výpočetní výkon.

Zatímco Bitcoin je jako zlato a jeho cena je dána jeho nedostatkem, Ethereum je jako energie, která se neztrácí, ale jen transformuje. Těžením věnujete výkon cloud účtům a dostáváte za to Ether. Běh cloud účtů a posílání zpráv vás stojí Ether, čímž vracíte měnu zpět do oběhu.

Ač to na první pohled může vypadat trochu jako mix všech momentálně populárních buzzwordů, zůstaňte ještě chvíli se mnou a podívejte se, proč jsem tomu věnoval čas na psaní článku.

Jak to funguje

Na rozdíl od Bitcoinu, Ethereum zavádí dva druhy účtů, které si mezi sebou mohou posílat zprávy a Ether:

1. Externě vlastněné účty, dále jen EOA (Externally Owned Accounts) 2. Smluvní účty, dále jen CA (Contract Accounts)

EOA jsou běžné uživatelské účty, které neobsahují žádný program a umožňují vytváření transakcí. Pod tím si můžeme představit posílání hodnoty, či zpráv, ostatním účtům, ale také založení CA jejich nahráním do Ethereum sítě.

CA obsahují program, který je aktivován pokaždé, když dojde k transakci (ať už jde o zprávu či převod Etherů) na adresu CA. Takto aktivovaný účet může vytvářet transakce (posílat zprávy/Ether), zapisovat do interního úložiště, či vytvářet další CA. Každá provedená instrukce a každý uložený bajt ho stojí Gas, což je tržně určená hodnota Etherů. Tento spálený Gas je poté sítí předán těžařům.

Data nahraná do CA není možné nějakým podvodem změnit. Máte tak jistotu, že jednou nahraný kód poběží tak jak byl naprogramován. To hraje velkou roli v mnoha konceptech, kde potřebujete důvěřovat provozovateli, například loterie, různé fondy, pojištění a tak dále.

(Grafické klikátko na vytváření kontraktů.)

Transakce

Ethereovské transakce se dost podobají těm bitcoiním, až na tři odlišnosti:

Co se smluvních účtů týče, jsou aktivovány pokaždé, když obdrží transakci a běží tak dlouho, dokud se samy neukončí, či dokud nevyčerpají veškerý Ether, který mají k dispozici (Gas).

EVM

Ethereum Virtual Machine je možné brát jako obrovský decentralizovaný počítač obsahující miliony objektů nazvaných "účty". Každý účet má k dispozici paměť, úložiště, peněženku a API pro posílání a příjem transkací.

EVM-code

Bytecode, který je vykonáván Ethereum sítí je znám jako EVM-code (někdy též také jako EtherScript). Jedná se o na zásobníku založený bytecode, jehož plnou specifikaci můžete najít na straně 18 yellow paperu, či v Development tutorialu.

Výkon připadající na jeden jediný CA není moc velký, podle některých odhadů se pohybuje přibližně na úrovni mobilního telefonu z roku 1998, což ovšem bohatě stačí na spoustu kryptograficky velmi zajímavých aplikací.

Podporované jazyky

Kromě samotné EVM-, který je vykonáván přímo Ethereovskou sítí, je k dispozici několik programovacích jazyků, které je možné použít k psaní CA.

LLL

LLL je na lispu založený jazyk, do kterého jsou v současnosti kompilovány všechny ostatní, v Ethereum ekosystému dostupné jazyky. Jedná se dost nízkoúrovňový jazyk s místy docela šílenou syntaxí:

(for [i]:0 (< @i 10) [i](+ @i 1)
  ;; do something
)

Pokud vás LLL zaujal, pár zajímavých odkazů se dá najít v diskuzi na redditu: http://www.reddit.com/r/ethereum/comments/2dug8k/learning_lll/

Serpent

Serpent je Python-like jazyk implementující část RPython specifikace. Dostupné překladače ho momentálně překládají do LLL. Ve většině tutoriálů se můžete setkat právě se Serpentem, jelikož je ze všech uvedených relativně nejvíc uživatelsky přívětivý.

Mutan

Mutan je pro změnu C-like jazyk s místy poněkud ujetou syntaxí. Například nevyžaduje středníky, před proměnné se dává var a přiřazení je někdy = a někdy :=. Hodit se bude hlavně ve chvíli, kdy potřebujete vyždímat co nejvíc výkonu, protože umožňuje práci s pointery a inline vkládání bytecode.

Technické detaily

Oficiální spuštění

Ethereum v současnosti běží pouze v testovacím režimu (PoC 5). Cokoliv co nyní vytěžíte je z dlouhodobého hlediska bezcenné, neboť po přepnutí sítě do ostrého režimu dojde k použití jiného blockchainu. Na druhou stranu vám to vám dává možnost si s dostatečným předstihem ozkoušet všechny koncepty, nastavit minery a naučit se pracovat s různými klienty.

Oficiální spuštění by mělo proběhnout někdy na konci tohoto roku, či začátkem příštího.

Předprodej

Ačkoliv jsem psal, že síť momentálně neběží v ostrém režimu, autoři již začali s předprodejem prvních Etherů vytěžených v novém blockchainu. Během akce která probíhala o prázdninách se prodalo 60 102 216 Etherů za cenu okolo 18.5 milionů dolarů (začínalo se na ceně 2000 Etherů za 1 BTC, postupně to klesalo až k 1200 Etherům za 1BTC).

Celá akce vzbudila mezi uživateli dost kontroverze, jednak protože cena byla docela vysoká (začínalo to na 6kč za Ether, což je pro novou a stále ještě neexistující měnu nevídané), ale také proto, že autoři na všem vybrali takhle ohromnou částku.

Jednotky

Ether je poměrně velká jednotka, kterou je možné rozdělit na triliontiny (10^-18, neboli 0.000000000000000001 ETH) wei, podobně jako je možné jeden Bitcoin rozdělit na milibitcoiny, microbitcoiny až na miniaturní sathoshi.

Celá stupnice vypadá takhle:

Jak to použít

Tak jako u každé jiné kryptoměny budete potřebovat klienta, kterým se připojíte do sítě a přes kterého můžete vytvářet transakce. Pro Ethereum momentálně existují dva klienti - jeden pro příkazovou řádku, druhý jako grafické rozhraní.

Instalace

Postupoval jsem podle návodu na githubu, za použití čerstvé instalace Mintu 17 s Mate.

# Prvně pár závislostí
sudo apt-get install build-essential g++-4.8 git cmake libgmp-dev \
libboost-all-dev automake unzip libtool libleveldb-dev yasm libminiupnpc-dev \
libreadline-dev scons libncurses5-dev qtbase5-dev qt5-default qtdeclarative5-dev \
libqt5webkit5-dev libcurl4-openssl-dev
 
# Stažení zdrojových souborů z githubu
git clone https://github.com/ethereum/cpp-ethereum
cd cpp-ethereum
 
# Cryptopp
git clone https://github.com/mmoss/cryptopp.git
cd cryptopp
sudo scons --shared --prefix=/usr
cd ..
 
# JSON RPC API - tenhle krok se dá vynechat
git clone git://github.com/cinemast/libjson-rpc-cpp.git
cd libjson-rpc-cpp/build
cmake .. && make
sudo make install
sudo ldconfig
cd ../..
 
# Sestavení klienta
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release && make  # přidejte k cmake parametr -DHEADLESS=1 pokud nechcete GUI

Jakmile budete mít dokompilováno, všimněte si dvou složek eth/ a alethzero/. To první je klient pro příkazovou řádku, to druhé poněkud divoký grafický klient.

Pokud se vám podaří vše korektně zprovoznit, gratuluji, ale jak to použít budete muset zjistit sami. Alethzero mi přijde absolutně nedodělaný a použití CLI je na článek samo o sobě.

FAQ

Kolik může být maximálně etherů?

Každý rok se vytěží 0.4x předešlý rok, jestli to chápu správně. Konkrétnější odpověď jsem nenašel.

(kredit XRPTalk diskuze)

Zdroje:

Kolik bude k dispozici Etherů za 5 let?

Předpovědi se momentálně dost liší a to tak, že o celé řády. Viděl jsem odhady okolo 107 986 582Ξ, ale i 31 344 216Ξ. Názor si udělejte sami:

Zdroje:

Jak můžu na serveru pracovat se sítí?

K dispozici je JSON RPC API.

Jak velkou výpočetní sílu má jeden CA?

Ve whitepaperu je vysloveně uvedeno, že je to přibližně na úrovni mobilu z roku 1998. Převedeno na reálný hardware, tak se výkon pohybuje někde na úrovni jednočipů, které se používají v elektronice. To se může zdát jako docela málo, ale pro spoustu různých úkolů to bude zcela postačující. Cílem není vytvořit decentralizované VPS, ale co nejbezpečnější cloud. Pokud někdo potřebuje výkon, lze ho outsourcovat.

Detaily zde: http://www.reddit.com/r/ethereum/comments/2bzyrs/computation/

Do budoucna je plánováno zvyšování výkonu pomocí speciálních instrukcí. K dispozici by tak měly být například instrukce pro podporu eliptické kryptografie, takže výkon může být z hlediska šifrování podstatně vyšší. Také se pracuje na jakési metodě definování pevných procedur, které bude možné volat s nižšími náklady, než kdyby byly vykonávány přímo CA. Detaily najdete v kapitole Native Code Extensions. Zatím se jedná o teorii, první implementace budou k vidění nejdříve v PoC 7.

Jak často je vydáván blok?

Původně se jednalo o každou minutu. Před nedávnem se objevily informace, že by se doba měla zkrátit na 12 vteřin, v posledním update se mluví dokonce i o 6 vteřinách.

Symbol

Tak jako Bitcoin používá ฿, pro Ether je momentálně používán Ξ (html element &Xi;). Podle všeho to vypadá, že už to tak zůstane.

Kde se kód vykonává a kdo má data?

Data jsou uloženy v blockchainu (Merkele-Patricia stromy), který mezi sebou sdílí všechny úplné uzly (full nodes). Tak jak to chápu já, kód je na úrovni konců stromu vykonáván všemi úplnými uzly, které potom výsledek odešlou síti a hlasují o správnosti.

Zdroj:

Kolik toho spočítám s jedním etherem?

Síť momentálně funguje v testovacím režimu, takže je v podstatě nemožné tuto otázku zodpovědět. Výpočty samotné nestojí Ether, ale Gas. Gas jsou Ethery nahrané na účet CA a jeho hodnota se může tržně měnit v závislosti na momentálním zatížení sítě.

Komu to stále není jasné: Při založení CA mu pošlu pár Etherů a on je spaluje vždy za každou operaci daný násobek Gasu (násobení stojí 1 Gas, operace nad úložištěm třeba 100), jak je to předem deklarováno. Co se mění je kolik Etherů je jeden Gas.

Pro testnet se hodnota Gasu pohybuje na 10 szabo za 1 Gas. Za jeden Ether si tak koupíte 100 000 Gasu, přičemž platí, že většina instrukcí vás bude stát 1 Gas. Jakmile dojde k ostrému spuštění, cena se bude pohybovat někde jinde a za 1 Ether si pravděpodobně koupíte podstatně víc operací.

Konverzní poměr mezi Gasem a Etherem se bude měnit, podle vytížení. Tím se předchází útokům, které by jinak nesmyslně zatěžovaly síť.

Zdroje:

Kdo stojí za Ethereem?

Vitalik Buterin je zakládajícím členem. Vývoji se nyní věnuje celý tým lidí. Poté co vybrali 18.5 milionů dolarů v předprodeji pravděpodobně ještě přiberou další lidi.

Nebojíš se, že se jedná o podvod?

Ne. Tým okolo Etherea sice vybral 18 a půl milionu dolarů, ale taky všichni dostanou podíly z prvních vytěžených Etherů. Nyní jsou z nich milionáři. Pokud vše půjde jak má a podaří se jim rozjet síť a vytvořit skvělý produkt, který bude užitečný milionům lidí, budou z nich pravděpodobně miliardáři.

To ovšem není to důležité, důležité je, že jsou v pozici změnit svět. Kdo by se toho vzdal kvůli penězům?

Zajímají mě technické detaily

Jak se Ethereum brání 51% útoku? Jak přesně funguje těžení? Když full nody počítají kontrakty, tak tím vlastně těží. Komu je vyplácena odměna za těžení? Všem, prvnímu, náhodnému? Slyšel jsem, že to má být ASIC resistant, jak to bude fungovat?

Opravdu rád bych odpověděl, ale nemá to moc smysl. Návrh protokolu se mezi PoC 5, 6 a 7 silně mění a tohle jsou věci, na kterých se pracuje právě teď. Podle toho co jsem tak viděl diskuze na internetu, nemalá část z 18 milionů vybraných dolarů bude do nalitá do dalšího vývoje, aby byly tyto problémy vyřešeny nejlepším způsobem.

Některé odpovědi, domněnky a spekulace najdete zde: http://www.reddit.com/r/ethereum/comments/2g3hwn/questions/

Je to k něčemu?

Momentálně více/méně ne. Jak tomu bude v budoucnosti samozřejmě ukáže čas. Běžný uživatel bude využívat pravděpodobně hlavně tu "měnovou" část, tedy posílání a příjem Etherů z jednoho účtu na druhý. Pro programátory a kryptology je zajímavá zase scriptovací část, protože jim umožňuje vytvářet některé v současnosti nevytvořitelné koncepty založené na možnosti důvěřovat CA:

(Jedna z možností použití. Kredit bitcoingress.)

Pokud by to někomu nestačilo, aby jste si udělali představu, zde je překlad části jednoho příspěvku na redditu:

Myslím, že je špatně uvažovat o Ethereu jako o lepším, či snad jiném typu počítače.
Ethereum (pokud bude fungovat) otevře úplně nové oblasti ke zkoumání. Bude to něco jako objevení Ameriky v patnáctém století, zpřístupnění nízké orbity v 60 letech, či jako vynález rádia na začátku dvacátého století.
Když byly tyhle nové oblasti zpřístupněny, nikdo skutečně nevěděl co s tím dělat, nebo jak by to mělo fungovat. Mnoho bohatství bylo nabyto a ztraceno hned ze začátku a spousta dnešního majetku, kultury atd. je vytvářena na základě těchto sfér.
Ve době objevení Ameriky neměl nikdo ani tušení, že se z ní stane dominantní supervelmoc, GPS a komunikační satelity budou létat po nebesích, či že radio a televize redefinuje způsob šíření informací a zábavy skrz celou společnost.
Ethereum (pokud bude fungovat) je počítač, který nejde vypnout. Softwarová platforma, na které může kdokoliv a kdekoliv na světě stavět a být si jist, že jejich výtvor bude přístupný všem.
To je novinka, která dovolí vytváření dalších úplně nových věcí. Mezinárodní společnosti s reputací, spoluvlastníky atp, které nemohou být nespravedlivě uzavřeny politicky zainteresovanými stranami. Komplexní směnárny, kde si účastníci mohou přečíst zdrojový kód a ujistit se, že podvod je nemožný. Komplexní charity, kde dárci můžou mít aktivní spoluúčast na toku peněz, to vše s téměř nulovou režií. Taky doufám spousta dalších věcí, které si ani neumím představit.

V současnosti neexistuje žádná alternativní služba (když tedy pominu, že v praxi neexistuje ani Ethereum), která by se dala použít podobným způsobem. Jak jednou nahrajete data do EVM, tak se můžete spolehnout že nebudou nikým externě manipulována a poběží přesně tak, jak bylo naprogramováno.

Dovolím si opět citovat diskutující z redditu:

Výhodou Etherea není výpočetní síla (váš notebook může pravděpodobně předstihnout celou síť), ale fakt že veškeré výpočty probíhají důvěryhodným, decentralizovaným způsobem.

Osobně jsem přesvědčený, že Ethereum je perspektivní technologie a nezáleží na tom, jestli se konkrétní (stávající) implementace ujme, nebo ne. I kdyby autory někdo zabil a zničil všechnu jejich práci, myšlenka již byla zasazena a dříve nebo později se najde někdo, kdo vytvoří stejný koncept.

Ethereum je ochutnávka budoucnosti, která je podivná a ještě před pár lety téměř nepředstavitelná. Budoucnosti plné softwarových entit (viz Entity), kde není nic podivného, když je řeka, hora, či nějaký jiný neživý předmět ekonomicky zastupovaná softwarem, který se o ní stará a dává jí podobná práva, jako mají lidé.

Co dál?

Po přečtení tohoto článku by jste měli mít základní představu co je Ethereum, jak ho použít a k čemu to je. Pokud vás to zaujalo, doporučuji projít si zdroje v následující kapitole. Potom se můžete zapojit do vývoje, počkat až přijde finální verze, nebo na všechno zapomenout.

Osobně doporučuji nastudovat si detaily, přidat si do čtečky RSS kanál subredditu a připravit minery na spuštění sítě. Nechci tvrdit, že to bude bůh ví jak skvělá měna, na které zbohatnete, ale co se samotné technologie distribuovaných kontraktů týče, něco mi říká že má velký potenciál.

(Dogecoin samozřejmě nezůstává pozadu a pracuje na svojí verzi..)

Další čtení

Tento článek má být spíš přehledem, který se snaží upozornit na novou technologii, než vyčerpávajícím popisem obsahujícím všechny aspekty technologie, která stojí za Ethereem.

Pokud se chcete dozvědět víc, doporučuji Ethereum Development Tutorial, který velmi názorně a prakticky ukazuje, jak vše funguje z uživatelského hlediska.

Více do hloubky poté jde White Paper, který se více věnuje rozdílům oproti Bitcoinu a implementačním detailům.

Nejkomplexnější popis na který jsem narazil je potom tento pdf dokument obsahující kompletní proof of concept.

A zde je seznam praktických ukázek vytváření CA;

Komunitní zdroje

Obecné články

Ostatní odkazy

Omluva

Napsání tohohle článku mi zabralo přes čtyři měsíce. Všem komu jsem to sliboval dřív se omlouvám, ale nějakou dobu mi trvalo uchopit co jsem to vlastně našel a dohledat si k tomu relevantní informace. Taky práce z člověka saje chuť po večerech psát články, tak to prostě nešlo tak jednoduše, jak jsem čekal.

Become a Patron