Za bolje razumijevanje informacija u ovom članku preporučamo pročitati sljedeće uvodne materijale:

Osnove programerskih pojmova (varijabla, petlja) također će biti korisne za potpuno razumijevanje.


Kada šaljete Bitcoin transakciju, ona košta onoliko koliko je sama transakcija velika (u kilobajtima – čim više izlaznih i ulaznih adresa, tim je transakcija skuplja), umnoženo za faktor zakrčenosti mreže – ako mnogo transakcija čeka na red, tada će standardni trošak transakcije rasti.

Kod Ethereuma, budući da se radi o programskom jeziku u samom protokolu, moguće je s vrlo malo teksta (nešto što bi u BTC svijetu bilo jeftino) izvršiti vrlo kompleksne upute, i time zagušiti računala na kojima se te upute izvršavaju.

Pogledajmo petlju:

while (i++ < 1000) {
    j = j + i;
}

Ova petlja kaže "sve dok varijabla i nije veća od 1000, povećaj varijablu i za jedan, zatim zbroji varijablu i i varijablu j, spremi rezultat u j i ponovi petlju". Ova će se petlja izvršiti 1000 puta ako je i 0, ili više ako je i negativan broj.

Da bi se ovakva kompleksnost mogla realno naplatiti (jer troši struju i vrijeme Ethereum rudarima), Ethereum protokol je osmišljen na način da se prilikom izvršavanja Ethereum programa (tzv. pametnog ugovora) unutar EVM-a takve upute naplaćuju u jedinicama zvanim gas. Npr., gore navedeni zbroj i + j bi koštao 3 gasa svaki puta kada se izvrši - dakle 3000 gasa za 1000 izvršenja.

Da bismo objasnili gas, prvo trebamo objasniti pojam EVM.

EVM

EVM je Ethereum Virtualna Mašina. No, što je virtualna mašina?

Virtualna Mašina

Virtualna mašina je softver koji se vrti na određenom računalu, a u kojem je sadržan potpuno odvojen i nezavisni operativni sustav. Virtualna mašina omogućava pokretanje Windows operativnog sustava unutar Linux sustava, ili Linux unutar Windowsa, Windows unutar OS X-a kao na slici dolje, ili neku drugu kombinaciju.

Windows inside OS X

Virtualne mašine se koriste za odvajanje okoline u kojoj razvijate ili isprobavate neki softver od one koju koristite za svakodnevni rad. To onemogućava virusima da pređu iz jednog sustava u drugi, beskonačnim petljama da sruše glavni procesor, ili čak softverskim grešakama da korumpiraju disk. To ujedno omogućava i primjerice, pokretanje Windows igara na Linux računalima, programiranje u više verzija programskog okruženja istovremeno, i slično.

EVM

EVM ili Ethereum Virtualna Mašina je virtualna mašina Ethereum protokola koja služi za izvršavanje raznih Ethereum programa (pametnih ugovora). Ona je sadržana u softveru kojeg vrte full nodes Ethereum mreže, i unutar istog izvršava Ethereum programe.

Ethereum programi pišu se u Solidity programskom jeziku i bilo koji rudar koji rudari Ethereum istovremeno izvršava kod tih programa. To znači da se Ethereum programi (tzv. dapps - decentralizirane aplikacije) izvršavaju na svačijem računalu istovremeno (decentralizirano).

Izvršavanje programa nije besplatno - rudari koji ga omogućuju troše vlastitu električnu energiju, vrijeme i resurse svog računala. Zbog toga svaka instrukcija (uputa u programu, kao na primjer "spremi broj 5 u varijablu X") košta određenu količinu gasa.

Gas, Ether i GWei

Gas je jedinica troška neke operacije koju računalo mora izvršiti, a izvršava je kada pošaljemo transakciju koja sadrži Ethereum program u sebi, kako bismo pokrenuli neki dapp. Npr. zbroj dvije brojke košta 3 gasa. Množenje dvije brojke košta 5 gasa. Spremanje jedne riječi od 256 bita u blockchain košta 20,000 gasa, što znači da bi podaci duljine jednog kilobajta koštali 640,000 gasa.

Kao što dolar ima cente, tako je i kod ethera najmanja jedinica ethera wei. Ako uzmemo jedinicu wei kao osnovnu i iz nje izvodimo ostale jedinice dok ne dođemo do ethera, dobivamo sljedeću tablicu:

jedinicawei
wei1
kwei / ada / femtotether1.000
mwei / babbage / picoether1.000.000
gwei / shannon / nanoether / nano1.000.000.000
szabo / microether / micro1.000.000.000.000
finney / milliether / milli1.000.000.000.000.000
ether1.000.000.000.000.000.000

Prema ovoj informativnoj stranici, trenutna prosječna cijena gasa je 10 GWei-a (10 giga-weia). Budući da je 1 GWei miljardu puta manji od Etha, to znači da je gore spomenuti sadržaj od 640,000 gasa skup 6,400,000 GWeia. 6.4 miljuna GWeia je 0.0064 Eth a po trenutnoj cijeni ($450) to je $2,88.

Tekst od početka tablice gore pa sve do >>ovog markera<< ima cca 1 kilobajt. To znači da da bi ga se spremilo u Ethereum blockchain, potrebno je $2.88 ili nekih 18.5kn. Ali to je samo spremanje tog teksta - u trošak se treba uračunati i druga logika. Primjerice, možda naš pametni ugovor treba filtrirati neke riječi iz tog teksta, možda ujedno treba pomnožiti i spremiti neke brojke, možda treba podesiti okidače za pojedine događaje u Ethereum sustavu, kao npr. slanje neke poruke kada se otkrije određeni blok, itd. Prema tome, vidimo da je potpuno neisplativo spremati nepotrebne podatke u Ethereum blockchain - podaci se spremaju izvan blockchaina u spremište poput BigchainDB ili IPFS, dok se blockchain koristi za globalnu obradu i verifikaciju istinitosti informacija.

Zašto Gas?

Zašto se trošak transakcije naplaćuje u gas a ne direktno u etheru?

Trenutno su sve gas cijene raznih instrukcija koje EVM može izvršiti definirane u kodu Ethereum protokola, tj. u kodu programa koje spajamo na Ethereum mrežu - programa poput Geth, Eth, Parity, itd. Kada bi bile definirane u etheru, morali bismo mijenjati izvorni kod tih programa pri svakom pomaku cijene ethera, što bi značilo strahovito nepredvidljive troškove izvršavanja programa.

Uvođenjem dodatnog sloja u kontekst naplate izvršenja programa time da gasu pridodajemo cijenu u GWeiu, omogućeno nam je da prilikom slanja neke transakcije na Ethereum mrežu sami odredimo koliko ćemo gasa poslati s transakcijom, i koliko ćemo platiti pojedinu jedinicu gasa. Time upravljamo cijenom transakcija i brzinom izvršenja.

To nas dovodi do zadnje teme.

Limit / Cost vs. Price

Gas limit je količina gasa koju smo spremni potrošiti na izvršenje neke transakcije. Obično softver kojim vršite transakcije zna sam procijeniti koliko će otprilike gasa biti potrebno, i predlaže neku cifru. Jednostavne monetarne transakcije obično koštaju samo 21000 gasa, dok kompliciranije, koje pozivaju neke funkcije pametnih ugovora tj. Ethereum programa, mogu koštati nekoliko stotina tisuća ili miljuna gasa. Mi kao korisnik možemo promijeniti taj gas limit i smanjiti ga, ali ukoliko transakciji za vrijeme pokušaja izvršenja instrukcija ponestane gasa jer smo odabrali pre nizak limit, naša transakcija se proglašava neuspjelom i mi gubimo do tada potrošeni gas. S druge strane, ako stavimo više gasa nego bi transakcija mogla trebati, vraća nam se sav višak - stoga je uvijek bolje pretjerati na gas limit postavkama, jer sav nepotrošeni višak ionako dobivate nazad. Potrošeni dio gasa naziva se gas cost.

Gas Price je jedinična cijena gasa, tj. koliko GWeia po jednom gasu smo voljni platiti.

Dakle, ukupna cijena transakcije će biti ukupna količina gasa potrebna za njeno izvršenje umnožena za cijenu gasa koju smo voljni platiti. To će biti maksimalna cijena transakcije, jer je moguće da će transakcija trebati manje gasa te će nam se ostatak vratiti.

Pogledajmo to na primjeru:

25 Gwei

U primjeru gore izvršavamo transakciju koja se zbog svoje kompleksnosti procjenjuje na 135963 gasa. S cijenom od 25 GWei, maksimalni trošak naše transakcije je $1.57, što je relativno zanemarivo kada pogledamo ukupni iznos transakcije (šaljemo 0.387617 Eth, što je cca $178.74). Ako pak podignemo cijenu gasa u GWei na 250, cijena transackije postaje proporcionalno skuplja:
250 GWei

S većom cijenom mi efektivno prisiljavamo rudare da našu transakciju uključe prije drugih, i da se brže izvrši. Ako nismo u žurbi, možemo ostaviti cijenu gasa na početnim postavkama i izvršenje transakcije ne bi trebalo trajati dulje od 10ak minuta. No, ako nam se žuri i želimo biti gotovi u roku od nekoliko sekundi (recimo da se radi o nekoj aukciji u kojoj moramo biti prvi), lako je povisiti cijenu gasa u GWei-u i time žrtvovati trošak u naplati transakcije, ali postići garantirani uspjeh.

Zaključak

Gas je mjera cijene određenih računalnih operacija u Ethereum Virtualnoj Mašini (EVM). Gas se plaća u etheru - valuti Ethereum protokola - i jedinica gasa ima određenu cijenu koja varira ovisno o zakrčenosti mreže i korisnikovim preferencama.

Za pametni ugovor koji pošaljemo u Ethereum mrežu bitne su dvije stavke: gas cost (potrošnja gasa) i gas price (cijena gasa). Gas cost je količina gasa koja je potrebna da se logika iz ugovora odradi - doslovno "benzin" koji se potroši na izvršenje programa. Gas price je cijena koju plaćamo za gas cost. Transaction fee (trošak transakcije) je dakle umnožak gas cost-a i gas price-a. Budući da je teško točno procijeniti koliko će gasa određeni ugovor trebati za izvršenje, korisnike se ohrabruje da pošalju više gasa uz svoju transakciju nego misle da je potrebno, jer sav gas koji se ne potroši se vraća pošiljatelju kako bi sustav ostao pošten.

LEAVE A REPLY

Please enter your comment!
Please enter your name here