Introducere în contractele inteligente
Ce este un contract inteligent?
Un „contract inteligent” este un program care rulează pe blockchain-ul Ethereum. Este o colecție de cod (funcțiile sale) și date (starea sa) care se află la o anumită adresă din blockchain-ul Ethereum.
Contractele inteligente sunt un tip de cont Ethereum. Aceasta înseamnă că au un sold și pot trimite tranzacții prin rețea. Cu toate acestea, ele nu sunt controlate de un utilizator, ci sunt implementate în rețea și funcționează conform programării. Conturile de utilizator pot apoi interacționa cu un contract inteligent prin trimiterea de tranzacții care execută o funcție definită în contractul inteligent. Contractele inteligente pot defini reguli, cum ar fi un contract regulat, și le pot aplica automat prin intermediul codului.
Condiții prealabile
Asigură-te că ai citit despre conturi, tranzacții și mașina virtuală Ethereum înainte de a sări în lumea contractelor inteligente.
Un distribuitor automat digital
Poate că cea mai bună metaforă pentru un contract inteligent este un distribuitor automat, așa cum este descris de Nick Szabo. Cu intrările potrivite, o anumită ieșire este garantată.
Pentru a obține o gustare de la un distribuitor automat:
1bani + selecție gustare = gustare distribuită2
Această logică este programată în automat.
Un contract inteligent, ca un distribuitor automat, are o logică programată în el. Iată un simplu exemplu de cum acest distribuitor automat ar putea arăta ca un contract inteligent:
1pragma solidity 0.6.11;23contract VendingMachine {45 // Declararea variabilelor de stare ale contractului6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // Când contractul 'VendingMachine' este implementat:10 // 1. setează adresa de implementare ca proprietar al contractului11 // 2. setează soldul de brioșe al contractului inteligent implementat la 10012 constructor() public {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Permite proprietarului să mărească soldul de brioșe al contractului inteligent18 function refill(uint amount) public {19 require(msg.sender == owner, „Numai proprietarul îl poate umple din nou.”);20 cupcakeBalances[address(this)] += amount;21 }2223 // Permite oricui să cumpere brioșe24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, „Trebuie să plătești cel puțin 1 ETH pe brioșă”);26 require(cupcakeBalances[address(this)] >= amount, „Nu avem suficiente brioșe în stoc pentru a finaliza această achiziție”);27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}31Afișează totCopiere
Asemenea unui distributor automat, care elimină necesitatea unui angajat al vânzătorului, contractele inteligente pot înlocui intermediarii din multe industrii.
Fără permisiune
Oricine poate scrie un contract inteligent și îl poate implementa în rețea. Trebuie doar să înveți să programezi într-un limbaj de contract inteligent și să ai suficient ETH pentru a implementa contractul. Implementarea unui contract inteligent este din punct de vedere tehnic o tranzacție, astfel încât trebuie să plătești Gas în același mod în care trebuie să plătești gaz pentru un simplu transfer ETH. Cu toate acestea, costul de gaz pentru implementarea contractelor este mult mai ridicat.
Ethereum are limbaje prietenoase-programator pentru scrierea contractelor inteligente:
- Solidity
- Vyper
Cu toate acestea, ele trebuie să fie compilate înainte de a putea fi implementate, astfel încât mașina virtuală Ethereum să poată interpreta și stoca aceste contracte. Mai multe despre compilare
Combinabilitatea
Contractele inteligente sunt publice pe Ethereum și pot fi considerate API-uri deschise. Acest lucru înseamnă că poți apela alte contracte inteligente în propriul contract pentru a extinde foarte mult posibilitățile lor. Contractele pot chiar implementa alte contracte.
Află mai multe informații despre combinabilitatea contractului inteligent.
Limitări
Contractele inteligente singure nu pot obține informații despre evenimentele din „lumea reală”, deoarece nu pot trimite cereri HTTP. Acest lucru este prin design, deoarece bazarea pe informații externe ar putea periclita consensul, care este important pentru securitate și descentralizare.
Există modalități de a evita acest lucru folosind oracole.
Resurse pentru contractele inteligente
Contracte OpenZeppelin - Bibliotecă pentru dezvoltare de contracte inteligente securizate.
DappSys - Blocuri de construcții sigure, simple, flexibile pentru contracte inteligente.
Referințe suplimentare
- Contracte inteligente: Tehnologia blockchain care va înlocui avocații – Blockgeeks
- Cele mai bune practici pentru dezvoltarea contractelor inteligente – 10 noiembrie 2019 - Yos Riady