Programare Blockchain: Soliditate. Programarea contractelor inteligente

În peste 10 ani de dezvoltare, blockchain-ul s-a extins semnificativ de la un sistem simplu de transfer de valoare prin monede la baza pentru Web 3.0 și aplicații descentralizate. Acest lucru s-a întâmplat în principal din cauza izbucnirii de noi proiecte după ce Ethereum și-a introdus standardele ERC20 și contractele inteligente.

Contractele inteligente au fost utilizate pe scară largă în strângerea de fonduri pentru ICO-uri pentru a asigura transparența participanților. Acest lucru i-a făcut celebri, dar nu a fost singura implementare. Există cazuri de succes pentru contracte inteligente în crearea de organizații autonome distribuite, gestionarea drepturilor și conducerea guvernării. Nevoia lor este atât de evidentă, încât există chiar încercări de a crea contracte inteligente pentru Bitcoin.

Dacă doriți să o realizați în ingineria blockchain, va trebui să știți cum funcționează contractele inteligente și cum să le construiți. Din fericire, Ethereum oferă tot ceea ce este necesar, inclusiv propriul limbaj de programare – Solidity. Acest limbaj a fost creat special pentru a lucra cu mașina virtuală Ethereum. Este destul de ușor de înțeles, dar trebuie să țineți cont de câteva caracteristici distinctive. Astăzi ne vom scufunda adânc în lumea contractelor inteligente și vom codifica unele dintre ele. Sa mergem!

Cum funcționează Ethereum?

În primul rând, trebuie să înțelegem elementele de bază ale blockchain-ului Ethereum și cum funcționează. Acest lucru ne va ajuta să înțelegem diferența dintre codarea aplicațiilor centralizate și a celor descentralizate (care sunt practic contractele inteligente).

În centrul său, Ethereum are o mașină virtuală. Probabil că le-ați întâlnit mai devreme când lansați jocuri vechi într-un emulator sau rulați un software specific pentru SO pe sistemul de operare non-nativ. În termeni simpli, o mașină virtuală este un computer din interiorul unui computer, care folosește hardware-ul mașinii originale. În cazul Ethereum, EVM folosește resurse de computere conectate la rețea (noduri). La fel ca orice altă mașină virtuală, cea din Ethereum are propriile RAM și ROM, care sunt utilizate de programele care rulează deasupra acestuia. Singura excepție semnificativă este că memoria ROM a EVM este blockchain, deci odată ce ceva ajunge acolo, nu mai poate fi eliminată.

De ce este important acest lucru? Crearea contractelor inteligente este o responsabilitate incredibilă, deoarece în cazul în care există o vulnerabilitate, banii utilizatorilor pot fi furați sau pierduți. Deși puteți modifica sau înlocui complet codul pe un server centralizat, nu puteți face acest lucru pe o mașină virtuală descentralizată. În plus, fiecare acțiune efectuată cu un contract inteligent necesită plata taxelor către rețea. De ce? Deoarece EVM trebuie să proceseze o anumită sarcină și o poate face numai utilizând puterea de procesare a unor noduri. Taxele se numesc Gas și sunt plătite în Gwei, care sunt similare cu Satoshi-ul Bitcoin.

Cum funcționează un contract inteligent?

Dacă ați folosit vreodată Ethereum, atunci ați generat cel puțin o dată un portofel în rețea. Portofelul dvs. este practic un cont care este reprezentat de o adresă. Un contract inteligent este și un cont, dar diferă de un cont obișnuit.

Odată ce ați creat un portofel, îl puteți conecta la oricare dintre rețelele disponibile, iar singurul lucru care se va schimba este soldul dvs. Acest lucru se datorează faptului că adresele utilizatorilor nu sunt interne nicio rețea – există în paralel. Pe de altă parte, o instanță a unui contract inteligent este inclusă într-un anumit blockchain și nu poate fi vizualizată într-un alt lanț. Pentru a putea lansa un contract pe rețeaua principală după testarea acestuia, să presupunem că Rinkeby, creatorul său va trebui să implementeze o nouă instanță a contractului. Acest lucru va necesita compilarea codului sursă din nou. Un creator de contracte poate crea oricâte instanțe ale codului doresc, atâta timp cât au suficient ETH pentru a plăti Gaz pentru interacțiunea cu rețeaua.

La fel ca o aplicație centralizată, un contract inteligent are un loc dedicat pentru stocarea resurselor sale și un substituent pentru cod (imaginați-l ca pe o pagină web pe care o descărcați de pe internet, va avea un fișier.html și câteva foldere cu imagini și altele chestie). Există, de asemenea, o indicație despre cât de mult ETH are un contract pe soldul său; acest lucru este crucial pentru diferite cazuri de utilizare precum strângerea de fonduri, testamente etc. Schema completă este prezentată în imaginea de mai jos.

Ethereum EVM & amp; Schema portofeluluiImagine de U.Today

Cum să construiești un contract inteligent?

Acum, că știm principiile despre modul în care funcționează Ethereum și modul în care contractele inteligente rulează în cadrul acestuia, putem crea unul singur. În primul rând, va trebui să creăm un mediu adecvat. Puteți parcurge două rute, fie scriind codul în browser cu IDE-ul Remix furnizat de Ethereum Foundation, fie descărcând o aplicație de codificare la alegere împreună cu câteva pachete pentru acesta. În scopul acestui tutorial, vă vom arăta atât Remix, cât și Atom (o aplicație de codare universală pentru Mac & Windows).

Primul contract inteligent pe care îl vom încheia va lua numele diferitelor modele de mașini și puterea lor. Ceea ce vrem să vedem este două câmpuri de intrare și două câmpuri de ieșire pentru valorile pe care le avem. Deoarece vom schimba intrările, trebuie să setăm variabile de două tipuri: un șir pentru nume și un număr întreg pentru puterea de cai.

Înainte de contractul nostru, vom pune o linie care specifică versiunea lingvistică, deoarece acest lucru va ajuta compilatorul să adapteze corect codul. Compilarea codului este necesară deoarece odată ce ajungem la etapa de implementare, codul va fi adaptat la codul mașinii pe care EVM îl va putea citi și prelucra. În plus, va fi creată o interfață binară a aplicației care ar putea fi utilizată în continuare în crearea unei aplicații descentralizate cu drepturi depline. Puteți verifica întotdeauna cea mai recentă versiune a Solidity pe site-ul său oficial. Pentru a o specifica, tastați „soliditatea pragmei” și versiunea după semnul „^”.

Pentru a seta granițele pentru contractul nostru, să-i dăm un nume urmat de o paranteză. În primul rând, vom declara două variabile: „model” și „HP”. Primul va fi un șir care reprezintă un model de mașină și al doilea va fi un întreg care reprezintă puterea unui model de mașină dat. Există două lucruri de menționat despre variabile în termeni de soliditate. Prima este că ar trebui să declarăm dacă terții ar trebui sau nu să le poată vedea punând „public” sau „privat” lângă ele. Aceasta din urmă este că numerele întregi din Solidity pot fi semnate sau nesemnate. Un număr întreg nesemnat poate fi posibil doar și este scris ca „uint”. Un număr întreg semnat poate fi ambele pozitive & negativ și este scris ca „int”.

După specificarea variabilelor noastre, este timpul să scriem câteva funcții pe care le va îndeplini contractul nostru inteligent. În primul rând, trebuie să creăm substituenți pentru modelul nostru și HP. Vom folosi câteva funcții publice setate și le vom atașa variabilele. În al doilea rând, trebuie să schițăm câteva funcții publice care să returneze o intrare. Uitați-vă la aspectul contractului nostru inteligent.

Modelul vehiculului & amp; contract inteligent de cai putereImagine de U.Today

Cum se face un simbol pe Ethereum?

Mulți oameni au fost atrași de industria blockchain-ului din cauza câștigurilor scandaloase de pe piața criptografică la sfârșitul anului 2017. Acesta a fost în principal rezultatul apariției noului standard de jetoane ERC20 pe care un număr mare de start-up-uri le-a folosit pentru a-și lansa jetoanele și a crește bani pentru dezvoltare. În ciuda scăderii hype-ului, unele companii își lansează încă jetoanele pe Ethereum și vând către colaboratori, demonstrând că cererea este încă acolo. Dacă ați visat întotdeauna să construiți un startup și să vă lansați simbolul, această parte va fi foarte interesantă.

Crearea unui simbol înseamnă utilizarea standardului ERC20, care poate fi rapid căutat pe Google. Nu uitați să setați versiunea Solidity înainte de standard. Vor exista un set de funcții și câteva evenimente care ar trebui să înregistreze acțiuni în registrul Ethereum. Printre funcții, veți găsi setul de funcții necesare: una pentru definirea aprovizionării totale, una pentru verificarea soldului unui portofel dat și una pentru transferul de jetoane între portofele. Deoarece Ethereum permite controlul portofelelor de la alte portofele, veți găsi, de asemenea, funcții care definesc un portofel țintă și care permit soldul pentru transfer și aprobă o tranzacție. Salvați acest lucru într-un fișier separate.sol.

Este timpul să ne prezentăm propriul simbol. Începeți cu specificațiile versiunii Solidity. Apoi importați interfața și atașați-o la un nou contract inteligent prin „este”. Mergând mai departe vom:

  • Mai întâi, descrieți simbolul, numele și numărul de zecimale din variabile. Numărul de zecimale permite utilizatorului să transfere și să stocheze părți ale unui jeton, cel mai frecvent număr de zecimale este 18. Toate acestea vor fi vizibile pentru utilizatori, așa că le facem publice.

  • În al doilea rând, vom defini oferta totală. În cazul acestui tutorial, acesta va fi fix și egal cu un miliard.

  • În al treilea rând, să facem mapări pentru verificarea soldurilor de pe portofele și cote în cazul în care un terț va controla o adresă.

  • În al patrulea rând, vom seta o funcție care va fi executată o singură dată la implementarea contractului (constructor), care va oferi adresei noastre toate jetoanele pe care le vom crea.

  • În al cincilea rând, trebuie să creăm o serie de funcții care constrâng ceea ce avem în interfață. Oferta totală va fi preluată din variabila pe care am declarat-o anterior. Soldurile vor fi verificate conform cartografierii. Transferul va fi permis numai dacă un utilizator are un ETH și trimite mai puțin sau egal cu ceea ce are de fapt. Controlul unui alt portofel se va face conform cartografierii definite anterior și verificați suma permisă. Verificați codul pe care l-am primit mai jos.

Jeton UTD ERC20Imagine de U.Today

Cum se lansează un contract inteligent?

Acum știți cum să codificați contracte inteligente simple pe Solidity. Să încercăm să înțelegem cum pot fi lansate în rețeaua Ethereum. În primul rând, trebuie să compilăm codul. În acest scop, puteți folosi compilatorul integrat Remix sau îl puteți face pe mașina dvs. cu ajutorul Truffle Framework. Să mergem mai întâi pe ruta ușoară.

Înainte de a începe, este necesar să creați un cont Ethereum, dacă nu ați făcut-o până acum. Pentru aceasta, vă recomandăm să folosiți extensia Metamask care poate fi instalată pe browserele Chrome, Opera, Firefox și Brave. După ce creați un portofel, asigurați-vă că salvați expresia seed, deoarece va fi singura modalitate de a accesa un portofel de pe alte mașini sau în cazul în care trebuie să reinstalați extensia. Avantajul Metamask este că puteți comuta între diferite rețele. Acest lucru va fi util, deoarece vom folosi o rețea de testare pentru experimentele noastre. Deschideți extensia și alegeți rețeaua Ropsten. Apoi, du-te la robinet și solicită niște ETH, amintește-ți că fiecare operație cu EVM costă Wei.

Deschideți remix.ethereum.org. Veți vedea un cod pentru un buletin de vot – închideți fila cu el. Remix are un browser dedicat pentru fișiere.sol și un compilator integrat. În partea de sus a browserului, există o pictogramă încrucișată care permite crearea de fișiere noi. Să creăm un fișier și să copiem primul nostru contract inteligent cu vehicule și puterea lor. În partea dreaptă a ecranului, veți vedea compilatorul cu câteva file. În prima filă, selectați o versiune a compilatorului care corespunde cu versiunea Solidity pe care ați specificat-o și inițiați procesul de compilare. Dacă nu există erori, vi se va prezenta un mesaj de „succes”. Selectați a doua filă și veți vedea o secțiune în care ar trebui să specificați un mediu adecvat (în cazul nostru Web3) și să verificați dacă adresa dvs. este corectă (ar trebui să coboare din Metamask). Dacă totul este corect, apăsați pe „deploy” și veți primi o fereastră pop-up de la Metamask cu o tranzacție. Confirmați-l și voila, contractul dvs. inteligent este implementat în rețea.

Acum la ceva mai interesant. Dacă ați folosit un editor de text pe computer pentru a scrie codul, îl puteți implementa local folosind Node.js. Mai întâi, descărcați-l de pe site-ul oficial sau instalați printr-o linie de comandă (Windows) sau Terminal (OSX). În cazul nostru, vom folosi OSX, dar procesul este similar.

Instalarea Node.js.Imagine de U.Today

În al doilea rând, instalați Solidity Framework Truffle prin „npm install”.

Instalarea TruffleImagine de U.Today

În al treilea rând, creați un folder nou și creați o repo prin intermediul comenzii „init”.

Crearea unui repo TruffleImagine de U.Today

În al patrulea rând, instalați HDWalletProvider în această repo și prin Node.js.

Instalarea HDWalletProviderImagine de U.Today

În al cincilea rând, copiați fișierele cu interfața ERC20 și contractul dvs. de token în folderul „contracte” din repo. În al șaselea rând, creați următorul fișier JavaScript în folderul „Migrații” din repo.

Fișier de implementare JSImagine de U.Today

În al șaptelea rând, trebuie să vă modificați fișierul de configurare Truffle. Cu toate acestea, este necesar un pas suplimentar înainte de a face acest lucru. Veți introduce mnemonicul portofelului (pe care l-ați salvat mai devreme) și un API pentru Ropsten testnet. Pentru a-l obține pe acesta din urmă, accesați Infura și înregistrați un proiect. Pe pagina proiectului, veți vedea ID-ul acestuia. Folosiți-l ca API.

Config trufăImagine de U.Today

În cele din urmă, sunteți gata să vă lansați contractul inteligent. Iată cum arată comanda și procesul. În cazul în care există probleme, vi se va prezenta în schimb.

Contractul inteligent este implementat la nivel localImagine de U.Today

Ce poți face cu un contract inteligent?

Muncă bună, aveți primele două contracte inteligente desfășurate. Acum ce? Pentru început, trebuie să le verificați și să le publicați. Să le găsim mai întâi în oricare dintre exploratorii de blocuri Ethereum. Vom folosi Etherscan.

Cel mai rapid mod de a vă accesa contractele este prin tranzacțiile din portofel. Accesați Metamask, apăsați trei puncte și vă va permite să vă vedeți contul în Etherscan. Adresa dvs. are acum cel puțin o tranzacție pentru crearea contractului. Accesând o tranzacție, veți găsi o adresă de destinație, care este în esență adresa unui contract. Odată ce ați ajuns pe pagina contractului, veți vedea câteva file. Accesați fila „Cod” și accesați pagina de verificare. Aici introduceți toate informațiile relevante și apăsați butonul pentru a începe procesul de verificare.

Verificarea coduluiImagine de U.Today

După ce verificați primul contract inteligent pe care l-am creat, acum puteți interacționa cu acesta. Accesați fila „Scrieți contractul” și veți vedea substituenții pe care i-am specificat. Să conectăm Etherscan la Metamask și să introducem Toyota Soarer și 280 CP. Reîmprospătați pagina și veți vedea datele în secțiunea „Citiți”.

Lucrări de contract inteligenteImagine de U.Today

rezumat

Pe scurt, construirea de contracte inteligente este o abilitate necesară pentru fiecare inginer de blockchain de acolo. Prima platformă care a introdus contracte inteligente a fost Ethereum; Fundația a prezentat comunității un limbaj special scris numit Solidity. În ciuda noutății conceptului și a limbajului în sine, construirea de contracte inteligente nu are nimic excepțional. Persoanele care au experiență anterioară cu limbaje de programare orientate obiect, în special JavaScript, se vor simți foarte confortabil să se deplaseze.

Contractele inteligente sunt doar programe, dar au caracteristici distinctive pe care fiecare dezvoltator ar trebui să le aibă în vedere. De exemplu, deoarece contractele inteligente rulează deasupra unei VM descentralizate, datele lor sunt înregistrate imuabil în blockchain. Prin urmare, nu există loc pentru greșeli, iar testarea unui contract inteligent este crucială înainte ca acesta să fie implementat în rețeaua principală. O altă caracteristică a unui contract inteligent este că fiecare acțiune se face prin tranzacții, care necesită puterea de procesare a EVM. În consecință, implementarea contractelor inteligente și interacțiunea cu acestea costă bani.

Astăzi am explicat principiile de funcționare pentru Ethereum Main și rețelele de testare, v-am arătat diverse instrumente pentru crearea contractelor inteligente și am prezentat procesul de realizare a două tipuri de contracte. De asemenea, am demonstrat diferite moduri de lansare a contractelor inteligente în rețea și de interacțiune ulterioară cu acestea. Credem că, cu aceste cunoștințe, veți fi gata să începeți ca inginer blockchain și să construiți contracte inteligente excepționale și aplicații descentralizate pe baza acestora. Bucurați-vă!