{"id":39018,"date":"2019-10-31T22:27:25","date_gmt":"2019-10-31T19:27:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\/"},"modified":"2019-10-31T22:27:25","modified_gmt":"2019-10-31T19:27:25","slug":"kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Cartea \u201eCrearea contractelor inteligente Solidity pentru blockchain-ul Ethereum. Ghid practic\u201d","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Cartea \u201eCrearea contractelor inteligente Solidity pentru blockchain-ul Ethereum. Ghid practic\u201d\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTimp de peste un an, am lucrat la cartea \u201eCrearea smart contractelor Solidity pentru blockchain-ul Ethereum. Ghid practic\u201d, iar acum aceast\u0103 lucrare este finalizat\u0103, iar cartea <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">a fost publicat\u0103 \u0219i este disponibil\u0103 pe Litres<\/a><\/noindex>.<\/p>\n<p>Sper ca cartea mea s\u0103 ajute la ini\u021bierea rapid\u0103 \u00een crearea smart contractelor Solidity \u0219i a aplica\u021biilor distribuite DApp pentru blockchain-ul Ethereum. Aceasta este compus\u0103 din 12 lec\u021bii cu exerci\u021bii practice. Dup\u0103 finalizarea lor, cititorul va putea crea propriile noduri locale Ethereum, publica smart contracte \u0219i apela metodele acestora, schimba date \u00eentre lumea real\u0103 \u0219i smart contracte prin intermediul oracle-urilor, \u0219i lucra cu re\u021beaua de testare Rinkeby. <\/p>\n<p>Cartea este destinat\u0103 tuturor celor interesa\u021bi de tehnologii avansate \u00een domeniul blockchain-ului \u0219i care doresc s\u0103 ob\u021bin\u0103 rapid cuno\u0219tin\u021be pentru a se angaja \u00eentr-o munc\u0103 interesant\u0103 \u0219i promi\u021b\u0103toare.<\/p>\n<p>Mai jos ve\u021bi g\u0103si cuprinsul \u0219i primul capitol al c\u0103r\u021bii (de asemenea pe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">Litres<\/a><\/noindex> sunt disponibile fragmentele c\u0103r\u021bii). Sper s\u0103 primesc feedback, observa\u021bii \u0219i sugestii. Toate acestea le voi lua \u00een considerare la preg\u0103tirea urm\u0103toarei edi\u021bii a c\u0103r\u021bii.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Cuprins<\/b><b class=\"spoiler_title\">Introducere<\/b>Cartea noastr\u0103 este destinat\u0103 celor care doresc nu doar s\u0103 \u00een\u021beleag\u0103 principiile de func\u021bionare ale blockchain-ului Ethereum, ci \u0219i s\u0103 ob\u021bin\u0103 abilit\u0103\u021bi practice \u00een crearea aplica\u021biilor distribuite DApp \u00een limbajul de programare Solidity pentru aceast\u0103 re\u021bea.<\/p>\n<p>Aceast\u0103 carte este mai bine s\u0103 nu fie doar citit\u0103, ci s\u0103 lucra\u021bi cu ea, realiz\u00e2nd exerci\u021biile practice descrise \u00een lec\u021bii. Pentru a lucra, ve\u021bi avea nevoie de un computer local, un server virtual sau \u00een cloud cu sistemul de operare Debian sau Ubuntu instalat. De asemenea, pentru realizarea multor exerci\u021bii, pute\u021bi folosi Raspberry Pi.<\/p>\n<p><b>\u00cen prima lec\u021bie <\/b>vom analiza principiile de func\u021bionare ale blockchain-ului Ethereum \u0219i terminologia de baz\u0103, precum \u0219i vom discuta despre unde poate fi utilizat acest blockchain. <\/p>\n<p>Scop <b>a doua lec\u021bie<\/b> \u2014 s\u0103 crea\u021bi un nod al blockchain-ului privat Ethereum pentru a continua lucrul \u00een cadrul acestui curs pe serverul Ubuntu \u0219i Debian. Vom examina particularit\u0103\u021bile instal\u0103rii utilitarelor de baz\u0103, cum ar fi geth, care asigur\u0103 func\u021bionarea nodului nostru de blockchain, precum \u0219i demnul de stocare descentralizat\u0103 swarm.<\/p>\n<p><b>A treia lec\u021bie<\/b> te va \u00eenv\u0103\u021ba cum s\u0103 efectuezi experimente cu Ethereum pe un microcomputer Raspberry Pi ieftin. Vei instala sistemul de operare (OS) Raspberian pe Raspberry Pi, utilitarul Geth, care asigur\u0103 func\u021bionarea unui nod blockchain, precum \u0219i daemonul de stocare descentralizat\u0103 Swarm.<\/p>\n<p><b>Cursul patru<\/b> este dedicat conturilor \u0219i unit\u0103\u021bilor de criptomoned\u0103 din re\u021beaua Ethereum, precum \u0219i modurilor de a transfera fonduri de la un cont la altul din consola Geth. Vei \u00eenv\u0103\u021ba cum s\u0103 creezi conturi, s\u0103 ini\u021biezi tranzac\u021bii de transfer de fonduri, s\u0103 ob\u021bii starea unei tranzac\u021bii \u0219i chitan\u021ba acesteia.<\/p>\n<p><b>\u00cen cea de-a cincea lec\u021bie<\/b> te vei familiariza cu contractele inteligente din re\u021beaua Ethereum \u0219i vei \u00eenv\u0103\u021ba despre execu\u021bia acestora de c\u0103tre ma\u0219ina virtual\u0103 Ethereum. <\/p>\n<p>Vei crea \u0219i publica \u00een re\u021beaua privat\u0103 Ethereum primul t\u0103u contract inteligent \u0219i vei \u00eenv\u0103\u021ba cum s\u0103 \u00eei apelezi func\u021biile. Pentru aceasta, vei utiliza mediul de dezvoltare Remix Solidity IDE. \u00cen plus, vei \u00eenv\u0103\u021ba cum s\u0103 instalezi \u0219i s\u0103 folose\u0219ti compilatorul de pachete solc.<br \/>\nDe asemenea, \u00ee\u021bi vom prezenta a\u0219a-numitul interface binar de aplica\u021bie Application Binary Interface (ABI) \u0219i te vom \u00eenv\u0103\u021ba s\u0103 \u00eel folose\u0219ti.<\/p>\n<p><b>Cea de-a \u0219asea lec\u021bie<\/b> este dedicat\u0103 cre\u0103rii scripturilor JavaScript care ruleaz\u0103 sub Node.js \u0219i efectueaz\u0103 opera\u021biuni cu contractele inteligente Solidity.<\/p>\n<p>Vei instala Node.js pe OS Ubuntu, Debian \u0219i Raspberian, vei scrie scripturi pentru publicarea contractului inteligent \u00een re\u021beaua local\u0103 Ethereum \u0219i pentru apelarea func\u021biilor sale. <\/p>\n<p>\u00cen plus, vei \u00eenv\u0103\u021ba s\u0103 transferi fonduri \u00eentre conturile obi\u0219nuite folosind scripturi, precum \u0219i s\u0103 le alimentezi \u00een conturile contractelor inteligente.<\/p>\n<p><b>\u00cen cea de-a \u0219aptea lec\u021bie<\/b> vei \u00eenv\u0103\u021ba cum s\u0103 instalezi \u0219i s\u0103 folose\u0219ti mediu integrat Truffle, popular printre dezvoltatorii de contracte inteligente Solidity. Vei \u00eenv\u0103\u021ba s\u0103 creezi scripturi JavaScript care apeleaz\u0103 func\u021biile contractelor folosind modulul truffle-contract, precum \u0219i s\u0103 testezi contractul t\u0103u inteligent cu ajutorul Truffle.<\/p>\n<p><b>Cea de-a opta lec\u021bie<\/b> se concentreaz\u0103 asupra tipurilor de date Solidity. Vei scrie contracte inteligente care lucreaz\u0103 cu tipuri de date precum \u00eentregi semna\u021bi \u0219i nesemna\u021bi, numere cu semn, stringuri, adrese, variabile de tip complex, matrice, enumer\u0103ri, structuri \u0219i dic\u021bionare.<\/p>\n<p><b>\u00cen cea de-a noua lec\u021bie<\/b> Ve\u021bi fi cu un pas mai aproape de crearea de contracte inteligente pentru re\u021beaua principal\u0103 Ethereum. Ve\u021bi \u00eenv\u0103\u021ba s\u0103 publica\u021bi contracte prin Truffle \u00een re\u021beaua privat\u0103 Geth, precum \u0219i \u00een re\u021beaua de testare Rinkeby. Debbugingul contractului inteligent \u00een re\u021beaua Rinkeby este foarte util \u00eenainte de publicarea \u00een re\u021beaua principal\u0103 - acolo aproape totul este real, dar gratuit.<\/p>\n<p>\u00cen cadrul lec\u021biei, ve\u021bi crea un nod \u00een re\u021beaua de testare Rinkeby, ve\u021bi ad\u0103uga fonduri \u0219i ve\u021bi publica un contract inteligent.<\/p>\n<p><b>Lec\u021bia 10<\/b> se concentreaz\u0103 pe stoc\u0103rile de date distribuite Ethereum Swarm. Folosind stoc\u0103rile distribuite, economisi\u021bi costurile de stocare a volumelor mari de date \u00een blockchain-ul Ethereum. <\/p>\n<p>\u00cen cadrul acestei lec\u021bii ve\u021bi crea un depozit local Swarm, ve\u021bi efectua opera\u021biuni de scriere \u0219i citire a fi\u0219ierelor, precum \u0219i a directoarelor cu fi\u0219iere. Apoi ve\u021bi \u00eenv\u0103\u021ba s\u0103 lucra\u021bi cu un gateway public Swarm, ve\u021bi scrie scripturi pentru a accesa Swarm din Node.js \u0219i, de asemenea, cu modulul Perl Net::Ethereum::Swarm.<\/p>\n<p><b>Obiectivul lec\u021biei 11<\/b> este s\u0103 \u00eenv\u0103\u021ba\u021bi s\u0103 lucra\u021bi cu contractele inteligente Solidity folosind popularul limbaj de programare Python \u0219i cadrul Web3.py. Ve\u021bi instala acest cadru, ve\u021bi scrie scripturi pentru compilarea \u0219i publicarea contractului inteligent, precum \u0219i pentru apelarea func\u021biilor acestuia. Web3.py va fi utilizat at\u00e2t singur, c\u00e2t \u0219i \u00eempreun\u0103 cu mediul de dezvoltare integrat Truffle.<\/p>\n<p><b>La lec\u021bia 12<\/b> ve\u021bi \u00eenv\u0103\u021ba s\u0103 transfera\u021bi date \u00eentre contractele inteligente \u0219i lumea real\u0103 folosind oracole. Acest lucru v\u0103 va fi util pentru a ob\u021bine date de pe site-uri web, dispozitive IoT, diferite instrumente \u0219i senzori, \u0219i pentru a trimite date din contractele inteligente c\u0103tre aceste dispozitive. \u00cen partea practic\u0103 a lec\u021biei, ve\u021bi crea un oracol \u0219i un contract inteligent care ob\u021bine rata actual\u0103 de schimb USD la ruble de pe site-ul BNM.<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 1. Scurt istoric despre blockchain \u0219i re\u021beaua Ethereum<\/b><b>Obiectivul lec\u021biei:<\/b> a se familiariza cu principiile de func\u021bionare ale blockchain-ului Ethereum, domeniile de aplicare \u0219i terminologia de baz\u0103.<br \/>\n<b>Exerci\u021bii practice:<\/b> nu sunt prev\u0103zute \u00een aceast\u0103 lec\u021bie.<\/p>\n<p>Rareori ast\u0103zi exist\u0103 un dezvoltator de software (SO) care s\u0103 nu fi auzit nimic despre tehnologia blockchain, criptomonede (Cryptocurrency sau Crypto Currency), bitcoin, oferte ini\u021biale de monede (ICO, Initial coin offering), contracte inteligente (Smart Contract), precum \u0219i alte concepte \u0219i termeni relevan\u021bi pentru blockchain.<\/p>\n<p>Tehnologia blockchain deschide noi pie\u021be \u0219i creeaz\u0103 locuri de munc\u0103 pentru programatori. Dac\u0103 vei st\u0103p\u00e2ni toate subtilit\u0103\u021bile tehnologiilor criptomonedelor \u0219i ale contractelor inteligente, nu ar trebui s\u0103 \u00eent\u00e2mpini probleme \u00een aplicarea acestor cuno\u0219tin\u021be \u00een practic\u0103.<\/p>\n<p>Trebuie spus c\u0103 \u00een jurul criptomonedelor \u0219i al blockchain-urilor circul\u0103 multe specula\u021bii. Vom l\u0103sa deoparte discu\u021biile despre fluctua\u021biile cursurilor criptomonedelor, despre crearea piramidelor, despre subtilit\u0103\u021bile legisla\u021biei criptomonedelor etc. \u00cen cursul nostru de \u00eenv\u0103\u021bare, ne vom concentra \u00een principal pe aspectele tehnice ale aplic\u0103rii contractelor inteligente blockchain Ethereum (ether, ETH) \u0219i dezvoltarea a\u0219a-numitelor aplica\u021bii descentralizate (Distributed Application, DApp).<\/p>\n<h3>Ce este blockchain-ul<\/h3>\n<p>\nBlockchain (Blockchain, Block Chain) este o serie de blocuri de date, legate \u00eentre ele \u00eentr-un anumit mod. La \u00eenceputul acestei serii se afl\u0103 primul bloc, cunoscut sub numele de blocul ini\u021bial (genesis block) sau blocul genezei. \u00cen urma acestuia se afl\u0103 al doilea, apoi al treilea \u0219i a\u0219a mai departe.<\/p>\n<p>Toate aceste blocuri de date sunt duplicate automat pe numeroase noduri ale re\u021belei blockchain. Astfel, se asigur\u0103 stocarea descentralizat\u0103 a datelor blockchain-ului. <br \/>\n\u00ce\u021bi po\u021bi imagina sistemul blockchain ca un num\u0103r mare de noduri (servere fizice sau virtuale) conectate \u00eentr-o re\u021bea \u0219i replic\u00e2nd toate schimb\u0103rile din seria de blocuri de date. Este ca un computer multi-server uria\u0219, iar nodurile acestui computer (servere) pot fi dispersate \u00een toat\u0103 lumea. \u0218i tu po\u021bi ad\u0103uga computerul t\u0103u la re\u021beaua blockchain. <\/p>\n<h4>Baz\u0103 de date distribuit\u0103<\/h4>\n<p>\nBlockchain-ul poate fi imaginat ca o baz\u0103 de date distribuit\u0103, replicat\u0103 pe toate nodurile re\u021belei blockchain. \u00cen teorie, blockchain-ul va func\u021biona at\u00e2ta vreme c\u00e2t va exista cel pu\u021bin un nod care stocheaz\u0103 toate blocurile blockchain-ului.<\/p>\n<h4>Registru distribuit de date<\/h4>\n<p>\nBlockchain-ul poate fi descris ca un registru distribuit de date \u0219i opera\u021biuni (tranzac\u021bii). O alt\u0103 denumire pentru acest registru este cartea de conturi. <\/p>\n<p>\u00cenregistr\u0103rile distribuite pot fi ad\u0103ugate, dar nu pot fi modificate sau \u0219terse. Aceast\u0103 imposibilitate este realizat\u0103, printre altele, prin aplicarea algoritmilor criptografici, algoritmilor speciali de ad\u0103ugare a blocurilor \u00een lan\u021b \u0219i stoc\u0103rii decentralizate a datelor.<\/p>\n<p>Atunci c\u00e2nd se adaug\u0103 blocuri \u0219i se efectueaz\u0103 opera\u021biuni (tranzac\u021bii), sunt utilizate chei private \u0219i publice. Acestea limiteaz\u0103 utilizatorii blockchain-ului, oferindu-le acces doar la blocurile lor de date.<\/p>\n<h4>Tranzac\u021bii<\/h4>\n<p>\nBlockchain-ul stocheaz\u0103 informa\u021bii despre opera\u021biuni (tranzac\u021bii) \u00een blocuri. \u00cen acest context, tranzac\u021biile vechi, deja efectuate, nu pot fi anulate sau modificate. Tranzac\u021biile noi sunt stocate \u00een blocuri noi, ad\u0103ugate.<\/p>\n<p>Astfel, \u00een blockchain poate fi \u00eenregistrat\u0103, \u00eentr-o form\u0103 nemodificat\u0103, \u00eentreaga istorie a tranzac\u021biilor. De aceea, blockchain-ul poate fi utilizat, de exemplu, pentru stocarea sigur\u0103 a opera\u021biunilor bancare, informa\u021biilor despre drepturile de autor, istoria modific\u0103rilor proprietarilor bunurilor imobiliare etc.<\/p>\n<p>Blockchain-ul Ethereum con\u021bine a\u0219a-numitele st\u0103ri ale sistemului. Pe m\u0103sur\u0103 ce tranzac\u021biile se desf\u0103\u0219oar\u0103, starea se modific\u0103 de la ini\u021bial\u0103 la actual\u0103. Tranzac\u021biile sunt \u00eenregistrate \u00een blocuri.<\/p>\n<h4>Blockchain-uri publice \u0219i private<\/h4>\n<p>\nAici trebuie men\u021bionat c\u0103 tot ce s-a spus este adev\u0103rat doar pentru a\u0219a-numitele re\u021bele publice de blockchain, care nu pot fi controlate de entit\u0103\u021bi fizice sau juridice, agen\u021bii guvernamentale sau guverne. <br \/>\nA\u0219a-numitele re\u021bele private de blockchain sunt sub control total al creatorilor lor \u0219i totul este posibil acolo, de exemplu, \u00eenlocuirea complet\u0103 a tuturor blocurilor din lan\u021b.<\/p>\n<h4>Aplica\u021bii practice ale blockchain-ului<\/h4>\n<p>\nPentru ce poate fi util blockchain-ul?<\/p>\n<p>Pe scurt, blockchain-ul permite efectuarea opera\u021biunilor (tranzac\u021biilor) \u00eentr-un mod sigur \u00eentre persoane sau companii care nu au \u00eencredere una \u00een cealalt\u0103. Datele \u00eenregistrate \u00een blockchain (tranzac\u021bii, date personale, documente, certificate, contracte, facturi etc.) nu pot fi falsificate sau \u00eenlocuite dup\u0103 ce au fost \u00eenregistrate. De aceea, pe baza blockchain-ului se pot crea, de exemplu, registre distribuite de \u00eencredere pentru diverse tipuri de documente.<\/p>\n<p>Desigur, \u0219ti\u021bi c\u0103 pe baza blockchain-urilor se creeaz\u0103 sisteme de criptomoned\u0103 destinate s\u0103 \u00eenlocuieasc\u0103 banii tradi\u021bionali. Banii tradi\u021bionali sunt denumi\u021bi \u0219i fiat (de la Fiat Money).<br \/>\nBlockchain-ul asigur\u0103 stocarea \u0219i imuabilitatea tranzac\u021biilor \u00eenregistrate \u00een blocuri, motiv pentru care poate fi utilizat pentru crearea sistemelor de criptomoned\u0103. Acesta con\u021bine \u00eentreaga istorie a transferurilor de fonduri cripto \u00eentre diferi\u021bi utilizatori (conturi), astfel \u00eenc\u00e2t fiecare opera\u021biune poate fi urm\u0103rit\u0103.<\/p>\n<p>De\u0219i opera\u021biunile din cadrul sistemelor de criptomoned\u0103 pot fi anonyme, retragerea criptomonedei \u0219i schimbul acesteia pe bani fiat duc de obicei la desf\u0103\u0219urarea identit\u0103\u021bii posesorului activului de criptomoned\u0103. <\/p>\n<p>A\u0219a-numitele contracte inteligente, care sunt software ce func\u021bioneaz\u0103 pe re\u021beaua Ethereum, permit automatizarea procesului de \u00eencheiere a acordurilor \u0219i controlul execut\u0103rii acestora. Acest lucru este deosebit de eficient atunci c\u00e2nd plata pentru tranzac\u021bie se face \u00een criptomoned\u0103 Ether.<\/p>\n<p>Blockchain-ul Ethereum \u0219i contractele inteligente Ethereum, scrise \u00een limbajul de programare Solidity, pot fi utilizate, de exemplu, \u00een urm\u0103toarele domenii:<\/p>\n<ul>\n<li>alternative la notarizarea documentelor;<\/li>\n<li>stocarea registrului obiectelor imobiliare \u0219i a informa\u021biilor despre tranzac\u021biile cu obiecte imobiliare;<\/li>\n<li>stocarea informa\u021biilor despre drepturile de autor pentru obiectele de proprietate intelectual\u0103 (c\u0103r\u021bi, imagini, lucr\u0103ri muzicale etc.);<\/li>\n<li>crearea sistemelor de votare independente;<\/li>\n<li>domeniul financiar \u0219i bancar;<\/li>\n<li>logistica la scar\u0103 interna\u021bional\u0103, urm\u0103rirea mi\u0219c\u0103rilor de m\u0103rfuri;<\/li>\n<li>stocarea datelor personale ca alternativ\u0103 la sistemele de identificare;<\/li>\n<li>transac\u021bii sigure \u00een domeniul comercial;<\/li>\n<li>stocarea rezultatelor examin\u0103rii medicale, precum \u0219i a istoricului procedurilor prescrise.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Problemele cu blockchain-ul<\/h4>\n<p>\nDar, desigur, nu totul este at\u00e2t de simplu pe c\u00e2t ar putea p\u0103rea! <\/p>\n<p>Exist\u0103 probleme cu verificarea datelor \u00eenainte de a fi ad\u0103ugate \u00een blockchain (de exemplu, nu sunt ele false?), probleme de securitate \u00een software-ul de sistem \u0219i aplica\u021bie utilizat pentru a lucra cu blockchain-ul, probleme cu posibilitatea utiliz\u0103rii metodelor de inginerie social\u0103 pentru a fura accesul la portofelele de criptomoned\u0103 etc.<\/p>\n<p>Din nou, dac\u0103 vorbim despre un blockchain privat, de\u021binut de o persoan\u0103 sau o organiza\u021bie, nivelul de \u00eencredere aici nu va fi mai mare dec\u00e2t nivelul de \u00eencredere \u00een acea persoan\u0103 sau organiza\u021bie.<\/p>\n<p>De asemenea, trebuie s\u0103 \u021binem cont de faptul c\u0103 datele \u00eenregistrate \u00een blockchain devin accesibile pentru toat\u0103 lumea. \u00cen acest sens, blockchain-ul (\u00een special cel public) nu este potrivit pentru stocarea informa\u021biilor confiden\u021biale. Totu\u0219i, faptul c\u0103 informa\u021bia din blockchain nu poate fi modificat\u0103 poate ajuta la prevenirea sau investigarea diferitelor tipuri de fraude.<\/p>\n<p>Aplica\u021biile descentralizate Ethereum vor fi convenabile dac\u0103 utilizarea lor se face pe baza criptomonedelor. Cu c\u00e2t mai mul\u021bi oameni de\u021bin criptomonede sau sunt dispu\u0219i s\u0103 le achizi\u021bioneze, cu at\u00e2t aplica\u021biile DApp \u0219i contractele inteligente vor c\u00e2\u0219tiga mai mult\u0103 popularitate.<\/p>\n<p>Printre problemele comune ale blockchain-ului care \u00eengreuneaz\u0103 aplicarea sa practic\u0103 se num\u0103r\u0103 viteza limitat\u0103 de ad\u0103ugare a noilor blocuri \u0219i costul relativ ridicat al tranzac\u021biilor. Totu\u0219i, tehnologiile din acest domeniu se dezvolt\u0103 activ \u0219i exist\u0103 speran\u021be c\u0103 problemele tehnice vor fi rezolvate \u00een timp.<\/p>\n<p>O alt\u0103 problem\u0103 este c\u0103 contractele inteligente ale blockchain-ului Ethereum func\u021bioneaz\u0103 \u00eentr-un mediu izolat al ma\u0219inilor virtuale \u0219i nu au acces la date din lumea real\u0103. \u00cen special, programul contractului inteligent nu poate citi singur date de pe site-uri sau de la dispozitive fizice (senzori, contacte etc.) \u0219i de asemenea nu poate trimite date c\u0103tre dispozitive externe. Aceast\u0103 problem\u0103 \u0219i metodele de rezolvare a ei vor fi discutate \u00een cadrul lec\u021biei dedicate a\u0219a-numitelor Oracle - intermediari informa\u021bionali pentru contractele inteligente.<\/p>\n<p>Exist\u0103, de asemenea, limit\u0103ri legislative. \u00cen unele \u021b\u0103ri, de exemplu, utilizarea criptomonedei ca instrument de plat\u0103 este interzis\u0103, dar este permis\u0103 de\u021binerea acesteia ca un activ digital, similar cu titlurile de valoare. Aceste active pot fi cump\u0103rate \u0219i v\u00e2ndute pe burse. \u00cen orice caz, atunci c\u00e2nd crea\u021bi un proiect care lucreaz\u0103 cu criptomonede, este necesar s\u0103 v\u0103 familiariza\u021bi cu legisla\u021bia \u021b\u0103rii \u00een care proiectul dumneavoastr\u0103 este supus jurisdic\u021biei.<\/p>\n<h3>Cum se formeaz\u0103 lan\u021bul blockchain<\/h3>\n<p>\nA\u0219a cum am men\u021bionat, blockchain-ul reprezint\u0103 un \u0219ir simplu de blocuri de date. Mai \u00eent\u00e2i se formeaz\u0103 primul bloc din acest \u0219ir, apoi la acesta se adaug\u0103 al doilea \u0219i a\u0219a mai departe. Se presupune c\u0103 datele tranzac\u021biilor sunt stocate \u00een blocuri \u0219i sunt ad\u0103ugate \u00een cel mai recent bloc.<\/p>\n<p>\u00cen figura 1.1 am ar\u0103tat cea mai simpl\u0103 variant\u0103 a secven\u021bei de blocuri, unde primul bloc se refer\u0103 la urm\u0103torul. <\/p>\n<p><img decoding=\"async\" alt=\"Cartea \u201eCrearea contractelor inteligente Solidity pentru blockchain-ul Ethereum. Ghid practic\u201d\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figura 1.1. Secven\u021ba simpl\u0103 a blocurilor<\/i><\/p>\n<p>\u00cen aceast\u0103 variant\u0103, \u00eens\u0103, este foarte u\u0219or s\u0103 falsifici con\u021binutul oric\u0103rui bloc din \u0219ir, deoarece blocurile nu con\u021bin informa\u021bii pentru a proteja \u00eempotriva modific\u0103rilor. Av\u00e2nd \u00een vedere c\u0103 blockchain-ul este destinat utiliz\u0103rii de c\u0103tre persoane \u0219i companii \u00eentre care nu exist\u0103 \u00eencredere, se poate concluziona c\u0103 aceast\u0103 metod\u0103 de stocare a datelor nu este potrivit\u0103 pentru blockchain.<\/p>\n<p>S\u0103 ne ocup\u0103m de protec\u021bia blocurilor \u00eempotriva falsific\u0103rii. \u00cen prima etap\u0103, vom \u00eencerca s\u0103 protej\u0103m fiecare bloc cu un cod de verificare (figura 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"Cartea \u201eCrearea contractelor inteligente Solidity pentru blockchain-ul Ethereum. Ghid practic\u201d\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figura 1.2. Ad\u0103ug\u0103m protec\u021bia datelor blocurilor cu un cod de verificare<\/i><\/p>\n<p>Acum, un atacator nu poate modifica pur \u0219i simplu un bloc, deoarece acesta con\u021bine codul de verificare al datelor blocului. Verificarea codului de verificare va ar\u0103ta c\u0103 datele au fost modificate.<\/p>\n<p>Pentru a calcula codul de verificare, se poate utiliza una dintre func\u021biile de hash, cum ar fi MD-5, SHA-1, SHA-256 etc. Func\u021biile de hash calculeaz\u0103 o anumit\u0103 valoare (de exemplu, sub form\u0103 de \u0219ir de text de lungime fix\u0103) \u00een urma execut\u0103rii unor opera\u021biuni ireversibile asupra blocului de date. Opera\u021biunile depind de tipul func\u021biei de hash. <\/p>\n<p>Chiar \u0219i o mic\u0103 modificare a con\u021binutului blocului de date va schimba valoarea func\u021biei de hash. Analiz\u00e2nd valoarea func\u021biei de hash, nu este posibil s\u0103 se reconstituie blocul de date pentru care aceasta a fost calculat\u0103.<\/p>\n<p>Va fi suficient\u0103 o astfel de protec\u021bie? Din p\u0103cate, nu.<\/p>\n<p>\u00cen acest sistem, codul de verificare (func\u021bia de hash) protejeaz\u0103 doar blocurile individuale, dar nu \u00eentreaga secven\u021b\u0103 de blocuri. \u0218tiind algoritmul de calcul al func\u021biei de hash, un atacator poate schimba cu u\u0219urin\u021b\u0103 con\u021binutul unui bloc. De asemenea, nimic nu \u00eel va \u00eempiedica s\u0103 \u0219tearg\u0103 blocuri din lan\u021b sau s\u0103 adauge altele noi.<\/p>\n<p>Pentru a proteja \u00eentreaga secven\u021b\u0103 \u00een ansamblu, se poate stoca \u00een fiecare bloc, \u00eempreun\u0103 cu datele, \u0219i hash-ul datelor blocului precedent (figura 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Cartea \u201eCrearea contractelor inteligente Solidity pentru blockchain-ul Ethereum. Ghid practic\u201d\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figura 1.3. Ad\u0103ug\u0103m \u00een blocul de date hash-ul blocului anterior<\/i><\/p>\n<p>\u00cen acest sistem, pentru a modifica un bloc, trebuie s\u0103 recalcul\u0103m func\u021biile hash ale tuturor blocurilor urm\u0103toare. Ar p\u0103rea c\u0103 nu e o problem\u0103, nu?<\/p>\n<p>\u00cen blockchain-urile reale, au fost create dificult\u0103\u021bi artificiale suplimentare pentru a ad\u0103uga noi blocuri \u2014 se folosesc algoritmi care necesit\u0103 multe resurse de calcul. Av\u00e2nd \u00een vedere c\u0103 pentru a efectua modific\u0103ri \u00een bloc trebuie s\u0103 recalculezi nu doar acel bloc, ci toate cele urm\u0103toare, va fi extrem de complicat.<\/p>\n<p>De asemenea, s\u0103 ne amintim c\u0103 datele blockchain-ului sunt stocate (duplicate) pe numeroase noduri ale re\u021belei, adic\u0103 se utilizeaz\u0103 stocarea descentralizat\u0103. Aceasta complic\u0103 considerabil falsificarea unui bloc, deoarece modific\u0103rile trebuie efectuate pe toate nodurile re\u021belei.<\/p>\n<p>\u0218tiind c\u0103 blocurile p\u0103streaz\u0103 informa\u021bii despre blocul anterior, putem verifica con\u021binutul tuturor blocurilor din lan\u021b.<\/p>\n<h3>Blockchain-ul Ethereum<\/h3>\n<p>\nBlockchain-ul Ethereum este o platform\u0103 pe care se pot crea aplica\u021bii distribuite DApp. Spre deosebire de alte platforme, Ethereum permite utilizarea a\u0219a-numitelor contracte inteligente (smart contracts), scrise \u00een limbajul de programare Solidity.<\/p>\n<p>Aceast\u0103 platform\u0103 a fost creat\u0103 \u00een 2013 de Vitalik Buterin, fondatorul revistei Bitcoin Magazine \u0219i a fost lansat\u0103 \u00een 2015. Tot ce vom studia sau face \u00een cursul nostru de \u00eenv\u0103\u021bare se refer\u0103 exact la blockchain-ul Ethereum \u0219i la contractele inteligente Solidity.<\/p>\n<h3>Mineritul sau cum se creeaz\u0103 blocuri<\/h3>\n<p>\nMineritul (mining) este un proces destul de complex \u0219i consumator de resurse pentru ad\u0103ugarea de blocuri noi \u00een cadrul blockchain-ului, nu doar \u00abextragerea criptomonedelor\u00bb. Mineritul asigur\u0103 func\u021bionarea blockchain-ului, deoarece acest proces este responsabil pentru ad\u0103ugarea tranzac\u021biilor \u00een blockchain-ul Ethereum.<\/p>\n<p>Persoanele \u0219i organiza\u021biile care se ocup\u0103 cu ad\u0103ugarea de blocuri sunt numite mineri (miner).<br \/>\nSoftware-ul (SO) care func\u021bioneaz\u0103 pe nodurile minerilor \u00eencearc\u0103 s\u0103 g\u0103seasc\u0103 pentru ultimul bloc un parametru de hash numit Nonce, astfel \u00eenc\u00e2t s\u0103 ob\u021bin\u0103 o valoare specific\u0103 a func\u021biei hash, determinat\u0103 de re\u021bea. Algoritmul de hash Ethash, utilizat \u00een Ethereum, permite ob\u021binerea valorii Nonce doar prin \u00eencerc\u0103ri successive. <\/p>\n<p>Dac\u0103 nodul minerului a g\u0103sit un nonce corect, aceasta este cunoscut\u0103 sub numele de dovad\u0103 a muncii (PoW, Proof-of-work). \u00cen acest caz, dac\u0103 blocul va fi ad\u0103ugat \u00een re\u021beaua Ethereum, minerul prime\u0219te o recompens\u0103 \u00een moneda re\u021belei \u2014 Ether. La momentul redact\u0103rii acestei c\u0103r\u021bi, recompensa este de 5 Ether, \u00eens\u0103 \u00een timp aceasta va fi redus\u0103.<\/p>\n<p>Astfel, minerii Ethereum asigur\u0103 func\u021bionarea re\u021belei prin ad\u0103ugarea de blocuri \u0219i primesc \u00een schimb bani \u00een criptomoned\u0103. Pe internet ve\u021bi g\u0103si multe informa\u021bii despre mineri \u0219i minerit, iar noi ne vom concentra pe crearea de contracte Solidity \u0219i aplica\u021bii descentralizate DApp \u00een re\u021beaua Ethereum.<\/p>\n<h3>Rezumatul lec\u021biei<\/h3>\n<p>\n\u00cen prima lec\u021bie, v-a\u021bi familiarizat cu blockchain-ul \u0219i a\u021bi aflat c\u0103 acesta reprezint\u0103 o secven\u021b\u0103 de blocuri compus\u0103 \u00eentr-un mod special. Con\u021binutul blocurilor \u00eenregistrate anterior nu poate fi modificat, deoarece pentru aceasta ar fi necesar\u0103 recalcularea tuturor blocurilor ulterioare pe multe noduri din re\u021bea, ceea ce necesit\u0103 foarte multe resurse \u0219i timp.<\/p>\n<p>Blockchain-ul poate fi utilizat pentru a p\u0103stra rezultatele tranzac\u021biilor. Scopul s\u0103u principal este organizarea unui executare sigur\u0103 a tranzac\u021biilor \u00eentre p\u0103r\u021bi (persoane \u0219i organiza\u021bii) \u00eentre care nu exist\u0103 \u00eencredere. A\u021bi aflat \u00een ce domenii specifice ale afacerii \u0219i \u00een ce sfere poate fi utilizat blockchain-ul Ethereum \u0219i contractele inteligente Solidity. Acestea includ sectorul bancar, \u00eenregistrarea drepturilor de proprietate, documente etc.<\/p>\n<p>De asemenea, a\u021bi aflat c\u0103 utilizarea blockchain-ului poate prezenta diverse probleme. Acestea includ probleme de verificare a informa\u021biilor ad\u0103ugate \u00een blockchain, viteza de func\u021bionare a acestuia, costul tranzac\u021biilor, problema schimbului de date \u00eentre contractele inteligente \u0219i lumea real\u0103, precum \u0219i atacuri poten\u021biale ale r\u0103uf\u0103c\u0103torilor care vizeaz\u0103 furtul fondurilor criptomonedelor din conturile utilizatorilor.<\/p>\n<p>De asemenea, am prezentat pe scurt mineritul ca proces de ad\u0103ugare a noilor blocuri \u00een blockchain. Mineritul este necesar pentru execu\u021bia tranzac\u021biilor. Cei care se ocup\u0103 cu mineritul asigur\u0103 func\u021bionarea blockchain-ului \u0219i primesc \u00een schimb recompense \u00een criptomoned\u0103.<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 2. Preg\u0103tirea mediului de lucru \u00een sistemele de operare Ubuntu \u0219i Debian<\/b>Alegerea sistemului de operare<br \/>\nInstalarea utilitarilor necesare<br \/>\nInstalarea Geth \u0219i Swarm pe Ubuntu<br \/>\nInstalarea Geth \u0219i Swarm pe Debian<br \/>\nPreg\u0103tirea preliminar\u0103<br \/>\n\u00cenc\u0103rcarea distribu\u021biei Go<br \/>\nConfigurarea variabilelor de mediu<br \/>\nVerificarea versiunii Go<br \/>\nInstalarea Geth \u0219i Swarm<br \/>\nCre\u0103m un blockchain privat<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nCre\u0103m un director pentru munc\u0103<br \/>\nCre\u0103m un cont<br \/>\nIni\u021bializ\u0103m nodul<br \/>\nParametrii de pornire ai nodului<br \/>\nNe conect\u0103m la nodul nostru<br \/>\nGestionarea mineritului \u0219i verificarea soldului<br \/>\n\u00cenchiderea consolei Geth<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 3. Preg\u0103tirea mediului de lucru pe Raspberry Pi 3<\/b>Preg\u0103tirea Raspberry Pi 3 pentru munc\u0103<br \/>\nInstalarea Rasberian<br \/>\nInstalarea actualiz\u0103rilor<br \/>\nActivarea accesului SSH<br \/>\nSetarea unei adrese IP statice<br \/>\nInstalarea utilitarilor necesare<br \/>\nInstalarea Go<br \/>\n\u00cenc\u0103rcarea distribu\u021biei Go<br \/>\nConfigurarea variabilelor de mediu<br \/>\nVerificarea versiunii Go<br \/>\nInstalarea Geth \u0219i Swarm<br \/>\nCre\u0103m un blockchain privat<br \/>\nVerificarea contului \u0219i a soldului<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 4. Conturi \u0219i transferul de fonduri \u00eentre conturi<\/b>Vizualizarea \u0219i ad\u0103ugarea conturilor<br \/>\nVizualizarea listei de conturi<br \/>\nAd\u0103ugarea unui cont<br \/>\nParametrii comenzii geth account<br \/>\nParolele conturilor<br \/>\nCriptomoneda \u00een Ethereum<br \/>\nUnit\u0103\u021bile monetare Ethereum<br \/>\nDeterminarea soldului curent al conturilor noastre<br \/>\nTransferul de fonduri de la un cont la altul<br \/>\nMetoda eth.sendTransaction<br \/>\nVizualizarea st\u0103rii tranzac\u021biei<br \/>\nChitan\u021ba tranzac\u021biei<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 5. Publicarea primului contract<\/b>Contracte inteligente \u00een Ethereum<br \/>\nExecutarea contractului inteligent<br \/>\nMa\u0219ina virtual\u0103 Ethereum<br \/>\nMediul de dezvoltare integrat Remix Solidity IDE<br \/>\nPornirea compil\u0103rii<br \/>\nApelarea func\u021biilor contractului<br \/>\nPublicarea contractului \u00een re\u021beaua privat\u0103<br \/>\nOb\u021binem defini\u021bia ABI \u0219i codul binar al contractului<br \/>\nPublicarea contractului<br \/>\nVerificarea st\u0103rii tranzac\u021biei de publicare a contractului<br \/>\nApelarea func\u021biilor contractului<br \/>\nCompilatorul de pachete solc<br \/>\nInstalarea solc \u00een Ubuntu<br \/>\nInstalarea solc \u00een Debian<br \/>\nCompilarea contractului HelloSol<br \/>\nPublicarea contractului<br \/>\nInstalarea solc pe Rasberian<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">\u0423\u0440\u043e\u043a 6. \u0421\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0438 Node.js<\/b>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Node.js<br \/>\nInstalarea \u00een Ubuntu<br \/>\nInstalarea \u00een Debian<br \/>\nInstalarea \u0219i pornirea Ganache-cli<br \/>\nInstalarea Web3<br \/>\nInstalarea solc<br \/>\nInstalarea Node.js pe Rasberian<br \/>\nScript pentru ob\u021binerea listei de conturi \u00een consol\u0103<br \/>\nScript pentru publicarea contractului inteligent<br \/>\nPornirea \u0219i ob\u021binerea parametrilor<br \/>\nOb\u021binerea parametrilor de pornire<br \/>\nCompilarea contractului<br \/>\nDeblocarea contului<br \/>\n\u00cenc\u0103rcarea ABI \u0219i a codului binar al contractului<br \/>\nEstimarea cantit\u0103\u021bii necesare de gaz<br \/>\nCrearea obiectului \u0219i pornirea public\u0103rii contractului<br \/>\nPornirea scriptului de publicare a contractului<br \/>\nApelarea func\u021biilor contractului inteligent<br \/>\nEste posibil\u0103 actualizarea contractului inteligent publicat<br \/>\nLucrul cu Web3 versiunea 1.0.x<br \/>\nOb\u021binem lista conturilor<br \/>\nPublicarea contractului<br \/>\nApelarea func\u021biilor contractului<br \/>\nTransferul de fonduri de la un cont la altul<br \/>\nTransfer de fonduri c\u0103tre contul contractului<br \/>\nActualiz\u0103m contractul inteligent HelloSol<br \/>\nCre\u0103m un script pentru vizualizarea soldului contului<br \/>\n\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 getBalance \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 call_contract_get_promise.js<br \/>\nRe\u00eenc\u0103rc\u0103m contul contractului inteligent<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 7. Introducere \u00een Truffle<\/b>Instalarea Truffle<br \/>\nCre\u0103m proiectul HelloSol<br \/>\nCrearea directorului \u0219i fi\u0219ierelor proiectului<br \/>\nDirector contracts<br \/>\nCatalogul migrations<br \/>\nCatalogul test<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nCompilarea contractului HelloSol<br \/>\nLansarea publica\u021biei contractului<br \/>\nApelarea func\u021biilor contractului HelloSol \u00een invita\u021bia Truffle<br \/>\n\u0412\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 HelloSol \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 JavaScript \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Node.js<br \/>\nInstalarea modulului truffle-contract<br \/>\nApelarea func\u021biilor contractului getValue \u0219i getString<br \/>\nApelarea func\u021biilor contractului setValue \u0219i setString<br \/>\nModificarea contractului \u0219i republicarea<br \/>\nLucrul cu Web3 versiunea 1.0.x<br \/>\nFacem modific\u0103ri \u00een smart contractul HelloSol<br \/>\nScripturi pentru apelarea metodelor contractului<br \/>\nTestarea \u00een Truffle<br \/>\nTest pe Solidity<br \/>\nTest pe JavaScript<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 8. Tipuri de date Solidity<\/b>Contract pentru studierea tipurilor de date<br \/>\nTipuri de date logice<br \/>\nNumere \u00eentregi f\u0103r\u0103 semn \u0219i \u00eentregi cu semn<br \/>\nNumere cu virgul\u0103 mobil\u0103<br \/>\nAdresa<br \/>\nVariabile de tipuri complexe<br \/>\nMatrice fixe<br \/>\nMatrice dinamice<br \/>\nEnumerare<br \/>\nStructuri<br \/>\nDic\u021bionare mapping<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 9. Migrarea contractelor \u00een re\u021bea privat\u0103 \u0219i \u00een re\u021beaua Rinkeby<\/b>Publicarea contractului din Truffle \u00een re\u021beaua privat\u0103 Geth<br \/>\nPreg\u0103tirea nodului \u00een re\u021beaua privat\u0103<br \/>\nPreg\u0103tirea contractului pentru func\u021bionare<br \/>\nCompilarea \u0219i migrarea contractului \u00een re\u021beaua Truffle<br \/>\nLansarea migra\u021biei \u00een re\u021beaua local\u0103 geth<br \/>\nExtrac\u021bie artefacte Truffle<br \/>\nPublicarea contractului din Truffle \u00een re\u021beaua de testare Rinkeby<br \/>\nPreg\u0103tirea nodului Geth pentru func\u021bionarea cu Rinkeby<br \/>\nSincronizarea nodului<br \/>\nAd\u0103ugarea conturilor<br \/>\nUmplerea contului Rinkeby cu ether<br \/>\nLansarea migra\u021biei contractului \u00een re\u021beaua Rinkeby<br \/>\nVizualizarea informa\u021biilor despre contract \u00een re\u021beaua Rinkeby<br \/>\nConsola Truffle pentru re\u021beaua Rinkeby<br \/>\nO modalitate mai simpl\u0103 de a apela func\u021biile contractului<br \/>\n\u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Node.js<br \/>\nTransfer de fonduri \u00eentre conturi \u00een consola Truffle pentru Rinkeby<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 10. Stocare descentralizat\u0103 de date Ethereum Swarm<\/b>Cum func\u021bioneaz\u0103 Ethereum Swarm<br \/>\nInstalarea \u0219i lansarea Swarm<br \/>\nOpera\u021biuni cu fi\u0219iere \u0219i directoare<br \/>\n\u00cenc\u0103rcarea unui fi\u0219ier \u00een Ethereum Swarm<br \/>\nCitirea unui fi\u0219ier din Ethereum Swarm<br \/>\nVizualizarea manifestului fi\u0219ierului \u00eenc\u0103rcat<br \/>\n\u00cenc\u0103rcarea directoarelor cu subdirectoare<br \/>\nCitirea unui fi\u0219ier din directorul \u00eenc\u0103rcat<br \/>\nUtilizarea unui gateway public Swarm<br \/>\n\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a Swarm \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 Node.js<br \/>\nModulul Perl Net::Ethereum::Swarm<br \/>\nInstalarea modulului Net::Ethereum::Swarm<br \/>\nScrierea \u0219i citirea datelor<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 11. Cadru Web3.py pentru interac\u021biunea cu Ethereum pe Python<\/b>Instalarea Web3.py<br \/>\nActualizarea \u0219i instalarea pachetelor necesare<br \/>\nInstalarea modulului easysolc<br \/>\nPublicarea contractului cu Web3.py<br \/>\nCompilarea contractului<br \/>\nConectarea la furnizor<br \/>\nExecutarea public\u0103rii contractului<br \/>\nSalvarea adresei contractului \u0219i ABI \u00een fi\u0219ier<br \/>\nPornirea scriptului de publicare a contractului<br \/>\nApelarea metodelor contractului<br \/>\nCitirea adresei \u0219i ABI-ului contractului din fi\u0219ierul JSON<br \/>\nConectarea la furnizor<br \/>\nCrearea obiectului contractului<br \/>\nApelarea metodelor contractului<br \/>\nTruffle \u0219i Web3.py<br \/>\nRezumatul lec\u021biei<\/p>\n<p><b class=\"spoiler_title\">Lec\u021bia 12. Oracle<\/b>Poate un smart contract avea \u00eencredere \u00een datele din lumea exterioar\u0103<br \/>\nOracle ca intermediari informa\u021bionali pentru blockchain<br \/>\nSursa de date<br \/>\nCod pentru reprezentarea datelor din surs\u0103<br \/>\nOracle pentru \u00eenregistrarea cursului de schimb \u00een blockchain<br \/>\nContract USDRateOracle<br \/>\nActualizarea cursului de schimb \u00een smart contract<br \/>\nUtilizarea furnizorului Web Socket<br \/>\nA\u0219tept\u00e2nd evenimentul RateUpdate<br \/>\nGestionarea evenimentului RateUpdate<br \/>\nIni\u021bierea actualiz\u0103rii datelor \u00een smart contract<br \/>\nRezumatul lec\u021biei<\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467347\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u043a\u043d\u0438\u0433\u043e\u0439 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb, \u0438 \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, \u0430 \u043a\u043d\u0438\u0433\u0430 \u0438\u0437\u0434\u0430\u043d\u0430 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u041b\u0438\u0442\u0440\u0435\u0441\u0435. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043c\u043e\u044f \u043a\u043d\u0438\u0433\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 Solidity \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 DApp \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 12 \u0443\u0440\u043e\u043a\u043e\u0432 \u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f\u043c\u0438. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0438\u0445, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29275,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-39018","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:27:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:27:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Cartea \u201eCrearea smart contractelor Solidity pentru blockchainul Ethereum. Ghid practic\u201d | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb | ProHoster","og:url":"https:\/\/prohoster.info\/ro\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:27:25+00:00","article:modified_time":"2019-10-31T19:27:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"39018","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 00:24:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:58:39","updated":"2026-01-24 00:24:24","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}