Cum să scrieți primul dvs. contract inteligent?



Aflați elementele de bază ale dezvoltării Smart Contract și începeți să scrieți primul dvs. contract inteligent. De asemenea, veți ști cum să testați contractul inteligent.

În , ați aflat despre ce sunt contractele inteligente, diferite limbi pentru contracte inteligente și despre cum să creați un mediu de dezvoltare a contractelor inteligente. În acest articol, veți afla cum să construiți primul dvs. contract inteligent. Voi folosiRemixează IDE pentru dezvoltarea și testarea unui contract inteligent.

Subiectele de mai jos sunt tratate în acest tutorial privind dezvoltarea contractelor inteligente:





Construirea contractului dvs. inteligent

Ca parte a acestei serii de bloguri, va fi dezvoltat un contract inteligent de comandă de cumpărare simplu. Pe măsură ce această serie progresează și pe măsură ce sunt introduse noi concepte de limbaj de programare soliditate, contractul inteligent al comenzii de cumpărare va evolua și se va îmbunătăți.



Structura contractului inteligent

Contractul inteligent de soliditate, în esență, este o colecție de următori

  • date - care menține starea actuală a contractului
  • funcţie - care aplică logica tranziției stării contractului

Contractele inteligente de soliditate urmează o structură standard. Orice contract inteligent începe cu următoarea declarație



Directiva Pragma

Cuvântul cheie „pragma” poate fi utilizat pentru a activa anumite caracteristici sau verificări ale compilatorului. Declarația de mai jos definește că fișierul sursă (contract inteligent) nu va fi compilat cu compilatorul mai devreme de 0.4.0 și versiunea compilatorului după 0.6.0. Această declarație asigură că nu este introdus niciun comportament neintenționat atunci când este introdusă o nouă versiune a compilatorului.

soliditatea pragmatică> = 0,4,0<=0.6.0 

Declarația contractului

Contractul este declarat folosind cuvântul cheie „contract”. Aceasta declară un contract gol, care este identificat cu numele „PurchaseOrder”.

contract PurchaseOrder {}

Stocarea datelor relevante pentru contract

Fiecare contract sau, în termeni generici, fiecare program poate necesita stocarea unor date. Adăugarea de date la program îi oferă un nivel de flexibilitate. Trecerea de la valorile codificate în program la valorile furnizate de utilizator este o caracteristică importantă. Variabilele vă permit să stocați datele, să le etichetați, să le preluați și să le manipulați.

Dezvoltare inteligentă a contractelor: introducerea variabilelor

În soliditate, variabilele sunt de două tipuri

  1. Tipul valorii: Acest tip de variabile sunt trecute prin valoare, adică sunt întotdeauna copiate atunci când sunt utilizate ca argumente funcționale sau în atribuții. De exemplu: numere întregi, adresa booleană etc.
  2. Tipuri de referință: Aceste tipuri de variabile sunt de tipuri complexe și sunt transmise prin referință, aceste variabile nu se încadrează în 256 biți și trebuie gestionate cu atenție, deoarece copierea acestora este costisitoare.

Adăugarea de date la Smart Contract

Să adăugăm câteva variabile de date la contract. Pentru fiecare comandă de cumpărare, trebuie să existe o cantitate de produs asociată acesteia. Să adăugăm o variabilă product_quantity care va fi de tipul de date întreg sau număr.

este masterat postuniversitar

Variabila pe care o introducem acum este un număr întreg nesemnat și este reprezentată de uint256, 256 înseamnă aici stocarea pe 256 de biți.

  • U - nesemnat (adică acest tip poate reprezenta numai numere întregi pozitive, nu întregi pozitive și negative)
  • INT - întreg
  • 256 - 256 biți în dimensiune
  • valoarea minimă uint256 poate fi atribuită este 0
  • valoarea maximă uint256 poate fi atribuită este 2 ^ 256-1 [un număr foarte mare]

Cantitatea de produs este doar o valoare pozitivă, iar presupunerea actuală este că vom răspunde unei valori foarte mari pentru cantitatea de produs.

java este-o relație

Variabila „product_quantity” declarată face parte din starea contractului și, prin urmare, este persistată sau stocată în spațiul contractului. În prezent, această variabilă va avea valoarea implicită 0.

contract PurchaseOrder {uint256 product_quantity}

Definirea constructorului

Constructorul este apelat atunci când contractul este implementat. Constructorul inițializează contractul cu unele valori. În scenariul actual, cantitatea produsului este setată la 100, când contractul este implementat. Un constructor parametrizat poate fi creat și prin trecerea unei variabile și inițializarea product_quantity utilizând valoarea trecută.

Punctul cheie care trebuie remarcat aici este modificatorul de acces „public” asociat cu constructorul. Cuvântul cheie public specifică că oricine poate accesa această funcție, aceasta nu este o funcție restricționată.

constructor () public {product_quantity = 100}

Adăugarea de funcții

Să adăugăm acum funcții pentru a face programul nostru interactiv. Funcțiile sunt capabilități controlate care pot fi adăugate unui program. Orice funcție este precedată de funcția de cuvânt cheie. În general, așa arată declarația de funcție' funcţie ”.

Obțineți funcția

Una dintre cele mai comune cerințe, pentru oricare dintre programe, este citirea valorii stocate. În următorul contract, va trebui să citim valoarea „product_quantity”. Pentru a oferi această capacitate, se adaugă o funcție de citire sau o funcție get. În această funcție nu facem nicio manipulare a valorii stocate, ci doar recuperăm valoarea stocată.

Haideți acum să descompunem funcția noastră get (get_quantity)

Nu. Cuvânt cheie Valoare
unu get_quantity (){nu sunt trecuți parametri}
2 public{oricine poate accesa funcția}
3 vedere{înseamnă că funcția citește doar starea contractului, nu modifică starea contractului, deci vizualizarea}
4 returnează o variabilă de tip uint256 {a definit ceea ce este returnat de funcție}
funcția get_quantity () public view returnează (uint256) {return product_quantity}

Funcții Setter

Citirea datelor este necesară și le-am realizat în ultima secțiune, dar cea mai mare parte a scenariului necesită și capacitatea de a scrie / actualiza datele. Această capacitate specifică este asigurată prin adăugarea unei funcții setter. Această funcție ia o valoare de la utilizator sub forma unui parametru de intrare. Folosind valoarea furnizată funcției de către utilizator, valoarea variabilei „product_quantity” este scrisă / actualizată.

Să ne descompunem acum funcția setată (update_quantity)

Adăugarea unei funcții pentru actualizarea valorii cantității de produs

Nu. Cuvânt cheie Valoare
unu update_quantity (valoare uint256){valoarea parametrului de tip uint256 este trecută}
2 public{oricine poate accesa funcția}
3 Nu este necesar deoarece statul este actualizat de funcții
4 returnează o variabilă de tip uint256 (a definit ce este returnat de funcție)
funcție update_quantity (valoare uint256) public {product_quantity = product_quantity + value}

Conectând toate acestea, așa ar trebui să arate contractul general.

soliditatea pragmatică> = 0,4,0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

Implementarea contractului inteligent

Este timpul să testați contractul inteligent. Pentru a testa acest contract inteligent, vom folosi Remixează IDE online .

Remix este un loc de joacă online pentru contract inteligent ethereum . Remix este complet bazat pe browser. Remix vă oferă un IDE online (mediu de dezvoltare integrat) în care vă puteți scrie contractele inteligente. Remix vă oferă o capacitate de compilare a solidității online. Contractul inteligent din Remix IDE poate fi compilat utilizând o versiune specifică a compilatorului fără probleme.

Remix oferă, de asemenea, capacitatea de a testa rapid contractul inteligent.

Remix oferă un set complet de instrumente pentru a începe dezvoltarea contractului inteligent și testarea unității a contractului inteligent, fără a face nicio instalare pe mașina dvs. locală. Acest lucru este extrem de util pentru început cu soliditate, deoarece dezvoltatorii trebuie doar să se concentreze pe scrierea unui contract inteligent, mai degrabă să se îngrijoreze de infrastructură.

Cu IDE Remix tot ce aveți nevoie este un browser și o conexiune la internet pentru a începe cu dezvoltarea contractelor inteligente. Dezvoltare rapidă, testare și validare a unei idei pentru un contract inteligent.

Remix și-a actualizat recent interfața de utilizare.

Remix-UI-Smart-Contracts-Edureka

Faceți clic pe pictograma fișierului așa cum este evidențiată în imaginea de mai sus, se va deschide exploratorul de fișiere.

  1. Dând clic pe pictograma plus, poate fi creat un fișier nou, denumiți fișierul PurchaseOrder.sol
  2. Aceasta va crea un fișier gol numit PurchaseOrder.sol, faceți clic și deschideți acest fișier.
  3. Să copiem și să lipim întregul contract în PurchaseOrder.sol.
  4. Faceți clic pe a doua pictogramă, în meniul din stânga chiar sub pictograma fișierului, ar trebui să apară opțiunea de compilare a solidității.
  5. Sub eticheta compilatorului, selectați versiunea compilatorului. Versiunea curentă selectată este 0.5.8.
  6. Selectați versiunea compilatorului, faceți clic pe „Compile PurchaseOrder.sol”. Aceasta va compila contractul inteligent.

7. După încheierea cu succes a contractului inteligent, faceți clic pe butonul „Detalii de compilare” și urmează să apară următoarele detalii. După compilare, sunt puse la dispoziție două informații cheie

    • ABI - Interfață binară a aplicației. Acesta este un fișier json care detaliază toate metodele expuse în contractul inteligent, împreună cu meta date ale metodelor. Mai multe despre acest lucru vor fi discutate în blogurile următoare.
    • Bytecode- Codul de funcționare EVM (mașină virtuală Ethereum), logica contractului inteligent este convertită în bytecode la compilare.

8. Pentru a testa contractul inteligent, trebuie implementat contractul inteligent. Pentru a implementa contractul inteligent, faceți clic pe următoarea pictogramă din meniul din stânga, sub pictograma de compilare. Va apărea următorul ecran. Pentru a testa contractul inteligent, trebuie implementat contractul inteligent. Pentru a implementa contractul inteligent, faceți clic pe pictograma următoare din meniul din stânga, sub pictograma de compilare. Va apărea următorul ecran.

Opțiune de implementare

Ecranul de implementare oferă câteva opțiuni, să ne uităm la ele una câte una.

  • Mediu: Aceasta poate fi gândită la o opțiune similară cu alegerea de a cumpăra un laptop fie de la Amazon, Flipkart, Newegg (toate acestea sunt retailer online), puteți alege de unde doriți să cumpărați, în funcție de cerința dvs. În mod similar, în cazul Remix, avem o opțiune unde să implementăm contractul inteligent și să testăm contractul inteligent. Meniul derulant de lângă eticheta de mediu oferă trei selecții
    • JavaScript VM - un nod local Ethereum unic este înfășurat în memoria browserului și oferă 5 conturi de testare prefinanțate care pot fi utilizate pentru tranzacție (implementare, funcții de invocare)
    • Furnizat Web3 injectat - Acest lucru se bazează pe MetaMask. Metamask este ca un broker sau intermediar, care permite aplicațiilor web să interacționeze cu contractul inteligent. Metamask oferă capacitatea de a gestiona identitățile și, de asemenea, de a semna tranzacțiile care urmează să fie trimise către rețeaua ethereum. Acest intermediar sau 3rdpartea vă va ajuta să determinați rețeaua blockchain în care va fi implementat contractul inteligent.
    • Furnizor Web3 - dacă rulați un nod local Ethereum și punctul final RPC este disponibil, această opțiune poate fi utilizată. Contractul inteligent va fi implementat pe nodul Ethereum local.
  • Conturi: aceste informații sunt completate pe baza mediului selectat. De exemplu. JavaScript VM oferă 5 conturi de testare prefinanțate. În cazul furnizorului Web3 și al Web3 injectat nu furnizează conturi de testare prefinanțate.
  • Limita de gaz: Aceasta definește cantitatea maximă de gaz pe care inițiatorul este dispus să o cheltuiască pentru orice tranzacție. Acesta este locul de protejare împotriva buclei infinite și a epuizării tuturor fondurilor contului în cazul unei condiții de buclă infinită.
  • Valoare: valoarea care poate fi necesară pentru a transmite în timpul implementării contractului inteligent. Aceasta este o valoare opțională.

Pentru a implementa contractul, selectați opțiunea VM JavaScript, selectați primul cont din meniul derulant de conturi, notați soldul contului (100 etere).

Asigurați-vă că numele contractului inteligent care apare este PurchaseOrder, faceți clic pe implementare. Acțiuni cheie care se vor întâmpla

  1. Soldul contului se schimbă de la 100 eter la 99.999999 eter, suma dedusă este costul tranzacției pentru desfășurarea contractului inteligent.
  2. În cadrul contractului implementat, va apărea o nouă țiglă pentru contractul inteligent, care va oferi, de asemenea, adresa noului contract inteligent ceva de genul acesta (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. În fereastra consolei vor apărea următoarele informații
    1. Tranzacție hash - identifică în mod unic implementarea contractului
    2. Costul tranzactiei
    3. Adresa contractului

Interacțiunea cu contractul desfășurat

  1. Conform contractului implementat, sunt disponibile două metode de interacțiune update_quantity și get_quantity.
  2. Ambele metode de interacțiune sunt metode publice definite în contractul „Comandă de cumpărare”.
  3. Metoda de actualizare a cantității „update_quantity” necesită un parametru de intrare, deci caseta de intrare.
  4. Metoda „Obține cantitate” „get_quantity” recuperează valoarea produsului_cantitate.
  5. Să verificăm ce se întâmplă când se invocă get_quantity, este afișată valoarea returnată 100, care a fost inițiată în constructor. Acest lucru nu face ca o tranzacție să se întâmple
  6. Să invocăm update_quantity și să oferim 30 ca intrare. Acest lucru face ca o tranzacție să se întâmple

Pe scurt, orice operațiune care determină operațiunea de scriere la starea contractului (adică modifică variabilele contractului) va duce la o tranzacție.

Orice operațiune care citește doar starea contractului nu provoacă o tranzacție.

Concluzie privind dezvoltarea contractelor inteligente

Cu aceasta, tocmai am creat primul nostru contract inteligent, doar zgâriind suprafața solidității. Tocmai am văzut ce este nevoie pentru a testa contractul inteligent chiar de la implementarea contractului inteligent la inițierea tranzacțiilor.

cum să ieși dintr-un program Java

În următorul blog, care este o continuare a seriei de dezvoltare a contractelor inteligente, vom analiza mai adânc fundamentele de soliditate, luând o adâncime mai profundă în implementarea contractelor inteligente.

Cu aceasta, concluzionez acest lucru Contract inteligent blog de dezvoltare. Sper că v-a plăcut să citiți acest blog și l-ați găsit informativ.

Eudacă doriți să învățați contracte inteligente, să construiți o carieră în domeniul Blockchain și să câștigați expertiză în programarea Ethereum, să vă înscrieți în live-online aici, acesta vine cu suport 24 * 7 pentru a vă ghida pe toată perioada de învățare.

Ai o întrebare pentru noi? Vă rugăm să menționați acest lucru în secțiunea de comentarii din „Dezvoltarea contractelor inteligente” și vă vom contacta la începutSf.