Dorești să devii un dezvoltator Ethereum? Acest ghid te va ajuta să te apropii mai mult de cele propuse. La final vei cunoaște bazele Ethereum suficient de mult încât să faci pasul spre a deveni dezvoltator.
NOTĂ: Succesul tău ca dezvoltator depinde în mare măsură de inițiativa personală și volumul de muncă depus. Trebuie să te dezvolți continuu pentru a ține pasul cu noutățile și actualizările de ultimă oră.
Pagina web a Ethereum oferă această descriere: „Ethereum este o platformă descentralizată care rulează contracte smart: aplicații care funcționează exact așa cum sunt programate, fără orice posibilitate de oprire, cenzură, fraudă sau intervenția unei a treia părți. Aceste aplicații rulează pe un blockchain construit la comandă, o infrastructură distribuită globală cu o capacitate enormă, care poate deplasa valori și poate reprezenta dreptul de proprietate”.
În termeni mai simpli, Ethereum își propune să fie platforma software a viitorului. Dacă viitorul este descentralizat, iar Dapp devine un lucru obișnuit, Ethereum trebuie să fie în centrul acestora.
Bitcoin
Chiar dacă este prima aplicare a tehnologiei blockchain, Bitcoin rămâne în continuare doar o valută. Ethereum aduce cu sine toată sfera de aplicare a tehnologiei blockchain.
După cum spune și cofondatorul Ethereum, Dr. Gavin Wood: „Bitcoin este în primul rând și mai ales o valută; este o aplicare specială a blockchain. Dar nu este nici pe departe singura aplicare. Pentru a da un exemplu voi aminti e-mailul, care este o utilizare particulară a internetului și cu siguranță a contribuit la popularizarea acestuia, dar mai sunt și destule altele.”
Cum funcționează minatul Ethereum?
Momentan Ethereum utilizează același protocol Proof-of-Work pe care îl folosește și Bitcoin. Ethereum își propune însă trecerea la Proof of Stake și utilizarea protocolului Casper în vederea realizării acestei tranziții.
Ce diferențe există între Proof of Stake și Proof of Work?
Proof of Work:
Este protocolul urmat până acum de majoritatea criptovalutelor (printre care Bitcoin și Ethereum). Asta înseamnă că minerii efectuează „minatul” criptovalutelor prin rezolvarea unor puzzle-uri criptografice, cu ajutorul unor hardware dezvoltate în acest scop.
Proof of Stake:
Acest protocol transformă întregul proces al minatului într-unul virtual. În acest sistem există validatori în loc de mineri. Funcționează în felul următor: ca validator trebuie să trebuie să blochezi (depui) în sistem o parte a ether-ului tău. Pe urmă vei începe validarea blocurilor, ceea ce înseamnă de fapt că, dacă observi un bloc care consideri că merită adăugat la blockchain îl poți valida plasând o miză pe el. În cazul în care blocul este acceptat, vei primi o recompensă proporțională cu miza plasată pe acesta. Însă dacă ai mizat pe un bloc greșit sau malițios, miza plasată îți va fi confiscată.
În vederea implementării Proof of Stake, Ethereum va folosi algoritmul de consens Casper. Inițial, sistemul va funcționa în stil hibrid – majoritatea tranzacțiilor vor fi confirmate în continuare în PoW, în timp ce fiecare a 100-a tranzacție va fi efectuată în Proof of stake. Va fi un adevărat test privind funcționarea PoS pe rețeaua Ethereum. Dar să vedem ce însemnătate au toate acestea pentru Ethereum și ce avantaje are acest protocol.
Avantajele Proof of Stake
Reduce costurile energetice și financiare generale. Minerii bitcoin din lume cheltuie pe curent electric cam 50.000 de dolari pe oră. Această sumă se ridică la 1,2 milioane de dolari zilnic, 36 milioane lunar și 450 de milioane de dolari pe an. Prin utilizarea Proof-of-Stake întregul proces devine virtual și reduce aceste costuri.
Nu există avantajul ASIC: Fiind un proces virtual, nu va depinde de cine dispune de echipamente de minat sau ASIC-uri mai performante.
Îngreunează atacul de 51%: Acest tip de atac are loc atunci când un grup de mineri obține mai mult de 50% din totalul puterii hash care există în lume. PoS previne astfel de activități.
Eliminarea validatorilor rău intenționați: Oricare validator ce are sume depuse în blockchain se va convinge că lanțului nu sunt adăugate blocuri greșite sau rele; în caz contrar îi vor fi retrase sumele investite.
Crearea blocului: Accelerează întregul proces și rapiditatea creării blocurilor.
Scalabilitate: Face blockchain-ul scalabil prin introducerea conceptului „sharding”.
Chiar dacă Proof of Stake a avut anterior numeroase forme simplificate, ceea ce diferențiază Casper de restul este că acesta stimulează minerii cinstiți și îi pedepsește pe cei rău intenționați. Dacă ai mizat pe un bloc malițios, ți se va lua miza. Vor fi pedepsiți toți cei care nu joacă după reguli.
Vitalik explica în felul următor:
„Imaginează-ți că 100 de oameni stau în jurul unei mese rotunde. O persoană are un pachet de hârtii, fiecare cu un istoric de tranzacții diferit. Primul participant ia stiloul și semnează una, pe urmă îl predă persoanei următoare care va proceda la fel. Fiecare participant primește doar un dolar dacă semnează acel istoric de tranzacții pe care majoritatea participanților îl semnează în final. Dacă semnezi o pagină, iar pe urmă semnezi o pagină diferită, îi va arde casa.”
Ce sunt contractele smart?
Contractele smart sunt contracte automate. Ele execută (în mod independent) instrucțiunile speciale programate în codul lor, la îndeplinirea condițiilor stabilite. Cu ajutorul contractelor smart, în ecosistemul Ethereum lucrurile decurg fără dificultăți. Dacă cineva execută o anumită sarcină în Ethereum, va iniția un contract smart cu una sau mai multe persoane. Contractele smart cuprind o serie de comenzi, introduse prin utilizarea limbajului de programare „solidity” și care funcționează pe baza instrumentului IFTTT: IF-THIS-THEN-THAT. Fundamental, dacă prima comandă a fost executată, atunci ea va executa următoarele funcții, în mod repetat, până ce nu ajunge la finalul contractului.
O bună modalitate de înțelegere a funcționării acestora este imaginarea unor automate de produse. Fiecare pas efectuat de tine va declanșa efectuarea pasului următor. Este asemenea efectului de domino.
Pașii
Să analizăm pașii efectuați în timpul interacțiunii cu automatul:
- Introduci bani în automat .
- Apeși butonul corespunzător produsului dorit .
- Primești produsul .
Privește aceste etape și gândește-te. Va funcționa vreuna dacă n-ai efectuat-o pe cea anterioară? Fiecare pas este legat de cel precedent. Trebuie să mai adăugăm un factor, iar astfel am obținut toate componentele contractelor smart. Si anume: n-a fost implicată vreo a treia parte; după cum ai văzut, de-a lungul întregii interacțiuni, ai intrat în contact doar cu aparatul.
Cum ar arăta această tranzacție dacă ar fi avut loc în rețeaua Ethereum? Să presupunem că nu demult ai cumpărat ceva din automatul rețelei Ethereum; cum vor arăta pașii?
1. pas: Introduci bani în aparat, iar acest lucru va fi înregistrat de toate nodurile de legătură ale rețelei Ethereum, iar tranzacția va fi actualizată în registru.
2. pas: Apeși butonul ce corespunde produsului dorit, iar rețeaua va înregistra acest fapt, fiind actualizat atât în rețeaua Ethereum, cât și în registru.
3. pas: Primești produsul, iar acest lucru este înregistrat de toate nodurile și de registru.
Rețeaua va înregistra și actualiza fiecare tranzacție efectuată prin contracte smart. Acest lucru înseamnă că fiecare participant la contract va fi responsabil pentru faptele sale. În acest fel este eliminată rea-voința, fiecare faptă a participantului fiind publică și întreaga rețea o poate vedea.
Ce este Mașina Virtuală Ethereum (EVM)?
Înainte de-a putea înțelege ce este mașina virtuală Ethereum (EVM), trebuie să vedem de ce avem nevoie de ea. Să ne întoarcem la contractele smart. Ce calități avantajoase am dori să includem în ele? Trebuie să avem în vedere că elementelele de pe blockchain trebuie să fie imuabile și capabile să ruleze prin mai multe noduri, fără a le periclita integritatea. Ca urmare, funcționalitatea contractelor smart este dată de următoarele trei calități:
Determinism
Finalitate
Izolare
1. Calitate: Determinism
Un program este determinist dacă în urma introducerii unei valori date ne furnizează același rezultat de fiecare dată. De exemplu, dacă 2 + 1 = 3, atunci 2 + 1 va fi ÎNTOTDEAUNA 3. Astfel, atunci când în urma introducerii unui set inițial de date un program ne oferă același rezultat pe diverse calculatoare, acesta este numit determinist.
Există însă situații în care un program nu va funcționa în mod determinist – de exemplu, dacă un programator introduce un algoritm nedeterminist sau date nedeterminate. La fel, dacă un program obține date în timpul rulării, iar sursa lor nu poate fi determinată, acel program nu va fi determinist.
2. Calitate: Finalitate
În matematică, teoria calculabilității analizează o eroare pe care o numim „problema opririi”, atunci când un calculator nu știe dacă programul își poate executa funcția într-un termen stabilit. Alan Turing a dedus în 1936, folosindu-se de teoria mulțimilor elaborată de Georg Cantor, că nu există vreun mod ca să afle dacă un anumit program poate fi sau nu finalizat într-o limită de timp.
Aceasta este și problema contractelor smart, fiindcă, prin definiție, contractele trebuie să fie capabile de a fi finalizate într-un termen stabilit. Există însă diferite măsuri pe care le putem lua în vederea terminării unui contract, ceea ce ne ajută să nu intrăm într-un ciclu nesfârșit care ne va epuiza resursele.
O astfel de măsură este aplicarea teoremei de incompletitudine a lui Turing – un blockchain incomplet Turing va avea funcționalitate limitată și nu va fi capabil de cicluri sau salturi; putem evita astfel să se formeze cicluri care nu se mai termină.
Contorul de trepte și taxe – programul va putea urmări cu ușurință „pașii” efectuați (număr comenzilor executate), iar în cazul contabilizării unui număr stabilit, va termina contractul. Contorul de taxe este o altă soluție. Aici contractele sunt executate prin taxe plătite dinainte. Executarea fiecărei comenzi va necesita taxe diferite. Dacă valoarea sumei cheltuite depășește valoarea taxei plătite în avans, contractul va înceta.
Temporizatorul – va fi utilizat un cronometru/temporizator prestabilit. Dacă executarea contractului depășește termenul, acesta va fi întrerupt din exterior.
3. Calitate: Izolare
Oricine poate introduce un contract smart în blockchain. Chiar de aceea, contractele pot conține, voit sau întâmplător, viruși sau erori. Dacă nu este izolat, contractul poate perturba întreaga rețea. Astfel, este indispensabil ca, în vederea protejării ecosistemului de efectele negative, contractele să fie păstrate în mod izolat. După ce-am făcut cunoștință cu aceste caracteristici, să vedem cum sunt ele aplicate. În general, contractele smart sunt derulate printr-unul din cele două sisteme:
Mașini virtuale: Utilizate de Ethereum.
Docker: Utilizat de Fabric.
Mașini virtuale
Să le comparăm și să vedem care dintre ele asigură un ecosistem mai bun – EVM sau Docker.
Mașinile virtuale asigură un mediu mai determinist, mai finalizabil și mai izolat pentru încheierea contractelor smart. Dar și docker are avantajul său. Acesta asigură flexibilitatea limbajului de programare, în timp ce în cazul unei mașini virtuale, precum EVM, este nevoie de asimilarea unui limbaj total nou (solidity) pentru crearea contractelor smart.
EVM este mașina virtuală în care funcționează toate contractele smart din Ethereum. Aceasta este o mașină simplă Turing-Complete de 256 bytes, ce permite ca – prin luarea în considerare a resurselor și memoriei – orice program derulat în EVM să poată rezolva orice problemă.
Pentru codificarea programelor smart în EVM, este necesară învățarea limbajului de programare Solidity.
Ce este Solidity?
Pentru cei care doresc să învețe cum să creeze contracte smart, cunoașterea Solidity este obligatorie. Solidity a fost dezvoltat de Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai și câțiva colaboratori de bază ai Ethereum pentru a permite scrierea contractelor smart pe platforme blockchain ca Ethereum.
Solidity este un limbaj simplificat cu intenție, lejer, a cărei sintaxă este foarte asemănătoare cu ECMAScript (Javascript). Câteva puncte-cheie merită reținute din documentul Ethereum Design Rationale; mai precis, că lucrăm într-un model stack-and-memory cu o dimensiune a cuvântului de instrucție de 32 biți, unde mașina virtuală Ethereum oferă accesul la „stack” – care este asemenea unui spațiu de stocare a înregistrărilor și la care putem alipi adrese de memorie pentru a realiza ciclul Program Counter (pentru controlul secvențial al programului), asigurându-ne o „memorie” temporară extensibilă și „stocare” mai durabilă ce au fost scrise de fapt în blockchain-ul permanent, și poate cel mai important: EVM necesită determinism total în contractele smart.
NOTĂ: Ethereum plănuiește ca până la urmă să treacă de la Solidity la Viper.
Înainte de-a continua, să vedem un exemplu de contract de bază Solidity.
Să analizăm codul – l-am împărțit în trei bucăți pentru o mai bună înțelegere.
1. etapă: Alocarea valorilor
În prima fază completăm un bloc denumit „număr întreg” care cuprinde 10 numere întregi nesemnate de 8 biți. Acestea le vom efectua printr-un ciclu while. Să vedem ce se întâmplă în acest ciclu.
Nu uita că am alocat valoarea 0 numărului întreg x. Ciclul while ține de la 0 până la integers.length. – care este o funcție ce returnează capacitatea maximă a blocului. Astfel, dacă decidem ca un bloc să conțină 10 numere întregi, arrayname.length ne va returna o valoare de 10. În ciclul de mai sus valoarea x merge de la 0 la 9 (<10) și alocă valoarea în sine blocului de numere întregi. Deci la sfârșitul ciclului numerele întregi vor avea următoarea valoare:
0,1,2,3,4,5,6,7,8,9.
2. etapă: Adăugarea conținutului blocului
În funcția getSum () vom aduna conținutul blocului în sine. Vom face asta prin repetarea ciclului anterior și utlizarea variabilei „sum” pentru a adăuga conținutul blocului.
3. etapă: Închiderea contractului
Această funcție „ucide” (închide) contractul și returnează sumele rămase în contract celui care a creat contractul. Legat de inspirația și motivația din spatele creării solidity, Dr. Gavin Woods a spus:
„Prin Solidity s-a dorit crearea acelui instrument sofisticat pentru elaborarea contractelor, care în cele din urmă oferă informații corecte despre funcționarea codului atât dezvoltatorilor, cât și utilizatorilor. Pentru a ajuta acest lucru am conceput NatSpec, o formă de documentație favorabilă contractelor, și i-am atribuit un rol principal în Solidity. Am propus de asemenea un subgrup formal de instrument lingvistiv (nu a fost încă implementat) în vederea maximizării garanțiilor de corectitudine ce pot fi făcute. Acestea le-am făcut pentru a oferi o frumoasă abstractizare pentru LOG-uri, care sunt similare ca și formă apelurilor funcționale. Inspirația a venit de la „semnalele” sistemului meta-obiect Qt.”
O caracteristică ce a fost descoperită ulterior este modifcatorul de funcții. Aceasta permite ca atributele plasate ca parte a unei semnături a funcției să facă unele modificări ale corpului funcțional aparent. Fiind un mijloc de exprimare foarte declarativ, este un limbaj care se încadrează plăcut în spațiul de programare orientat spre contract.
Ce este ether și gas?
Ether este token-ul principal al ecosistemului. Acesta stimulează participanții să-și ducă la bun sfârșit contractele smart. Gas este cantitatea de „combustibil” (energie) necesară satisfacerii tuturor nevoilor unui anumit contract smart.
Atunci când cineva prezintă un contract smart, acesta va avea o valoare gas predeterminată. La executarea contractului, fiecare pas și etapă a acestuia va necesita o anumită cantitate de gas ca să poată fi îndeplinit(ă).
Aceasta poate duce la două scenarii:
Cantitatea de gas necesară depășește limita fixată – dacă se întâmplă astfel, contractul revine la starea inițială și întregul gas va fi consumat.
Cantitatea de gas necesară este sub limita fixată – dacă acest lucru se întâmplă, contractul este finalizat și gas-ul rămas va fi returnat celui care l-a setat.
Gas este seva Ethereum. În Ethereum, toate tranzacțiile sunt validate de către mineri. Fundamental , pentru ca tranzacția să fie validată, fiecare tranzacție trebuie adăugată manual în blocurile pe care le-au minat. În schimbul serviciilor, aceștia primesc o anumită valoare de taxe de tranzacții. În general, sunt preferate contractele cu taxe ridicate de gas, deoarece minerii au șansa colectării unor taxe mai mari prin intermediul acestora. Cu toate acestea, taxa colectată este destul de nominală în comparație cu bitcoin.
Crearea Dapp și ICO
Poate cea mai atrăgătoare calitate a Ethereum este platforma pe care o asigură utilizatorilor pentru ca aceștia să-și poată crea propriile Dapps. Oricine, oriunde își poate crea propriul Dapp, iar prin intermediul ICO (Initial Coin Offering) poate obține finanțare pentru aceasta – doar prin simpla prezentare a unui whitepaper. Este cea mai excitantă, dar în același timp și cea mai periculoasă trăsătură a Ethereum. Foarte probabil ai văzut deja câteva sume exorbitante pe care le-au adunat aceste ICO-uri în ultimul timp.
Ethereum a început să fie acceptat la o scară cât mai largă, datorită sprijinului oferit de unele companii mari și a popularității ICO-urilor. Ca urmare, numărul nodurilor de rețea ai Ethereum a crescut considerabil. De fapt, este criptovaluta cu cele mai multe noduri și în consecință și cea mai descentralizată.
De exemplu, în mai 2017 Ethereum avea 25.000 de noduri, în timp ce Bitcoin doar 7.000 – este de trei mai mult. Și dacă tot vorbim de acea perioadă, pe-atunci numărul nodurilor a crescut cu 81% în decurs de o lună, din aprilie până-n mai (aproape s-a dublat).
Există câteva ICO-uri interesante care merită amintite:
- Augur.
- Bancor.
- Golem.
- WeiFund.
Dacă dorești să elaborezi un Dapp
Există numeroase moduri prin care te poți alătura rețelei Ethereum. Una dintre cele mai simple este utilizarea navigatorului web nativ Mist. Acesta oferă o interfață de utilizator prietenoasă și portofel digital (wallet) pentru stocarea și tranzacționarea Ether, precum și pentru scrierea, gestionarea, instalarea și utilizarea contractelor smart. Asemenea browsere ce le asigură oamenilor acces la internet și îi ajută să navigheze, Mist ne oferă o poartă de intrare în lumea aplicațiilor blockchain descentralizate.
Mai avem și extensia browserului MetaMask, care transformă Google Chrome într-un navigator Ethereum. MetaMask permite oricui să ruleze sau să dezvolte cu ușurință aplicații descentralizate, din propriul browser. Cu toate că inițial MetaMask a fost construit ca extensie Chrome, acesta va susține Firefox și numeroase alte platforme web.
Este încă prematur să vorbim despre asta, dar se pare că Mist, MetaMask și o serie de alte browsere doresc să asigure accesul a cât mai mulți oameni la aplicațiile bazate pe blockchain. Chiar și persoanele fără sprijin tehnic potențial pot construi propria aplicație blockchain. Este un salt revoluționar pentru tehnologia blockchain, care poate aduce aplicațiile descentralizate în trendul majoritar.
Utilizarea portofelelor Ethereum
Dacă dorești să devii un dezvoltator Bitcoin, neapărat trebuie să știi cum funcționează portofelele (wallet-urile) Ethereum. Fără îndoială, cel mai sigur mod al stocării criptovalutelor este paper wallet-ul. Prin urmarea pașilor pe care le vom prezenta în cele ce urmează, chiar tu însuți vei putea crea unul. Acesta te transformă în „stăpânul” investiției tale și dacă iei toate măsurile de precauție necesare, nu există șanse ca oricine altcineva să afle cheia ta privată.
Bineînțeles, asta înseamnă că trebuie ținută o evidență strictă a lor. Pierderea cheilor private este egală cu pierderea întregului conținut al paper wallet-ului.
Ce este paper wallet-ul?
Ca să fie cât mai simplu de explicat și ca să înțelegi precis, paper wallet-ul este un mediu offline de stocare a criptovalutelor. Presupune printarea cheilor publice și private pe o hârtie pe care trebuie să o păstrezi în loc sigur. Cheile sunt printate sub formă de coduri QR, ce pot fi citite cu ocazia fiecărei tranzacții. Această modalitate este atât de sigură fiindcă îți oferă întregul control ție, utilizatorului. Nu trebuie să-ți faci griji pentru siguranța unui hardware sau din cauza hackerilor și a porgramelor malițioase – trebuie să ai grijă doar de o bucată de hârtie.
Crearea paper wallet
Paper wallet-urile sunt formate cu ajutorul unui program care generează aleatoriu cheia publică și cheia privată. Cheile vor fi unice, iar programul care le generează este cu susrsă deschisă. Cei care au cunoștințe avansate de programare pot verifica ei înșiși substratul programului din acest punct de vedere. Mai mult, cheile le putem genera și offline – aceasta ne protejează de expunerea la amenințările online și ștergerea programului după utilizare distruge orice urmă a acestuia.
Nu-ți fă griji dacă sună un pic confuz, fiindcă nu e. Nu vei avea nevoie de cunoștințe specifice despre secretizare sau codificare. Toate cele necesare sunt doar un calculator, o conexiune la internet și de ceva pentru înregistrarea cheilor.
Să luăm toți pașii, pe rând.
Pașii de urmat
- Intră pe pagina MyEtherWallet.com.
- Dă clic pe opțiunea help.
- Du-te în jos și apasă pe a 5-a opțiune.
- Deschide link-ul.
- Pe urmă, descarcă fila ZIP în calculatorul tău.
- Deschide pe calculator fișierul zip și dă clic pe fila index.html. Înainte să faci asta, oprește internetul ca să fii offline.
- Acum creează-ți o parolă nouă și generează-ți wallet-ul, asigurându-te că setezi o parolă puternică.
- Pe urmă trebuie să descarci fișierul de stocare a cheii, care fundamental este fișierul wallet-ului. Nu uita să faci o salvare de siguranță a acestui fișier. După ce-ai terminat cu asta, apasă pe opțiunea “I understand. Continue.”
- Ți-ai și creat wallet-ul. Ceea ce vei vedea acum este cheia ta privată. NU o împărtăși cu nimeni.
- În final, printează wallet-ul pe o hârtie, apăsând pe butonul „Print”. Să ai în vedere că aici (pe hârtie) vei vedea atât cheia privată, cât și cea publică.
Astfel poate fi creat un paper wallet Ethereum.
Concluzie: Cum poți deveni dezvoltator Ethereum
Ai aflat de tot cei vei avea nevoie să aprofundezi pentru a deveni un dezvoltator Ethereum de succes. Conform Upwork, locurile de muncă legate de blockchain sunt un sector în plină ascensiune. Din ce în ce mai multe persoane caută programatori și dezvoltatori din lumea crypto; iar dacă și tu ești interesat de acest domeniu, merită o încercare.