Blockchain programiranje: Čvrstoća. Programiranje pametnih ugovora

Tijekom više od 10 godina svog razvoja, blockchain se značajno proširio iz izravnog sustava prijenosa vrijednosti putem kovanica na osnovu za Web 3.0 i decentralizirane aplikacije. To se dogodilo uglavnom zbog izbijanja novih projekata nakon što je Ethereum predstavio svoj ERC20 standard i pametne ugovore.

Pametni ugovori široko su korišteni u prikupljanju sredstava za međunarodne organizacije kako bi se osigurala transparentnost za sudionike. To ih je proslavilo, ali to nije bila jedina provedba. Postoje uspješni slučajevi pametnih ugovora u stvaranju distribuiranih autonomnih organizacija, upravljanju pravima i upravljanju. Potreba za njima toliko je očita da čak postoje pokušaji stvaranja pametnih ugovora za Bitcoin.

Ako želite to postići u blockchain inženjeringu, morat ćete znati kako pametni ugovori rade i kako ih graditi. Srećom, Ethereum za njega nudi sve što je potrebno, uključujući vlastiti programski jezik – Solidity. Ovaj je jezik posebno stvoren za rad s Ethereum Virtual Machine. Prilično je lako razumjeti, ali postoje neke prepoznatljive značajke koje ćete morati imati na umu. Danas ćemo zaroniti duboko u svijet pametnih ugovora i kodirati neke od njih. Idemo!

Kako Ethereum djeluje?

Prvo i najvažnije, moramo razumjeti osnove Ethereumova blockchaina i kako on funkcionira. To će nam pomoći u razumijevanju razlike između kodiranja centraliziranih aplikacija i decentraliziranih (što u osnovi jesu pametni ugovori).

U svojoj jezgri Ethereum ima virtualni stroj. Vjerojatno ste se s njima susretali ranije prilikom pokretanja starih igara u emulatoru ili pokretanja softvera specifičnog za OS na nesrodnom OS-u. Jednostavno rečeno, virtualni stroj je računalo unutar računala koje koristi hardver izvornog stroja. U slučaju Ethereuma, EVM koristi resurse računala povezanih na mrežu (čvorove). Kao i svaki drugi VM, i Ethereum ima vlastiti RAM i ROM, koje koriste programi koji se izvode na njemu. Jedina značajna iznimka je da je EVM-ova ROM memorija blockchain, pa kad jednom nešto stigne, to se ne može ukloniti.

Zašto je ovo važno? Stvaranje pametnih ugovora nevjerojatna je odgovornost jer u slučaju da postoji ranjivost novac korisnika može biti ukraden ili izgubljen. Iako možete izmijeniti ili u potpunosti zamijeniti kôd na centraliziranom poslužitelju, to ne možete učiniti na decentraliziranom VM-u. Uz to, svaka radnja izvedena pametnim ugovorom zahtijeva plaćanje naknade mreži. Zašto? Budući da EVM mora obraditi zadani zadatak, a to može učiniti samo koristeći procesorsku snagu nekih čvorova. Naknade se nazivaju Plin i plaćaju se u Gweiju, koji su slični Bitcoinovim Satoshi.

Kako funkcionira pametni ugovor?

Ako ste ikada koristili Ethereum, barem ste jednom stvorili novčanik u mreži. Novčanik je u osnovi račun koji je predstavljen adresom. Pametni ugovor također je račun, ali se razlikuje od redovnog računa.

Jednom kada stvorite novčanik, možete ga povezati s bilo kojom dostupnom mrežom, a jedino što će se promijeniti je vaše stanje. To je zato što adrese korisnika nisu unutarnje niti u jednoj mreži – one postoje paralelno. S druge strane, primjerak pametnog ugovora uključen je u zadani blockchain i ne može se gledati u drugom lancu. Da bi mogao pokrenuti ugovor na Glavnoj mreži nakon što ga testira, recimo Rinkeby, njegov će tvorac trebati rasporediti novu instancu ugovora. To će trebati još jednom sastaviti izvorni kod. Tvorac ugovora može napraviti onoliko primjeraka koda koliko želi, sve dok ima dovoljno ETH da plati plinu za interakciju s mrežom.

Baš kao i centralizirana aplikacija, pametni ugovor ima posebno mjesto za pohranu svojih resursa i rezervirano mjesto za kôd (zamislite ga kao web stranicu koju preuzmete s interneta, imat će a.html datoteku i neke mape sa slikama i drugim stvari). Također se ukazuje na to koliko ETH ugovor ima na stanju; to je presudno za razne slučajeve upotrebe poput prikupljanja sredstava, oporuka itd. Cjelokupna shema predstavljena je na donjoj slici.

Ethereum EVM & amp; Shema novčanikaSlika U.Today

Kako izgraditi pametni ugovor?

Sad kad znamo principe kako Ethereum funkcionira i kako se u njemu odvijaju pametni ugovori, možemo ga stvoriti sami. Prvo, trebat ćemo uspostaviti odgovarajuće okruženje. Možete ići na dvije rute, bilo pisanjem koda u preglednik pomoću Remix IDE-a koji pruža Ethereum Foundation ili preuzimanjem aplikacije za kodiranje po vašem izboru, zajedno s nekim paketima za nju. U svrhu ovog vodiča pokazat ćemo vam i Remix i Atom (univerzalnu aplikaciju za kodiranje za Mac & Windows).

Prvi pametni ugovor koji ćemo sklopiti preuzet će imena različitih modela automobila i njihove konjske snage. Ono što želimo vidjeti su dva ulazna i dva izlazna polja za vrijednosti koje imamo. Budući da ćemo promijeniti ulaze, trebamo postaviti varijable dvije vrste: niz za imena i cijeli broj za konjske snage.

Prije našeg ugovora stavit ćemo redak koji navodi jezičnu verziju, jer će to pomoći prevoditelju da pravilno prilagodi kôd. Sastavljanje koda je neophodno, jer kad dođemo do faze implementacije, kôd će se prilagoditi strojnom kodu koji će EVM moći čitati i obrađivati. Uz to, stvorit će se binarno sučelje aplikacije koje bi se moglo dalje koristiti u stvaranju punopravne decentralizirane aplikacije. Najnoviju verziju Solidityja uvijek možete provjeriti na njegovoj službenoj web stranici. Da biste je odredili, upišite “pragma solidity” i verziju iza znaka “^”.

Da bismo postavili granice za naš ugovor, dajmo mu ime praćeno zagradom. Prvo ćemo proglasiti dvije varijable: ‘model’ i ‘HP’. Prvi će biti niz koji predstavlja model automobila, a drugi će biti cijeli broj koji predstavlja konjsku snagu određenog modela automobila. Dvije su stvari koje treba spomenuti u vezi s varijablama u smislu Solidnosti. Prvo je da bismo trebali izjasniti trebaju li ih treće strane moći vidjeti, stavljajući pored njih „javno“ ili „privatno“. Potonje je da cijeli brojevi u Solidity mogu biti potpisani ili nepotpisani. Nepotpisani cijeli broj može biti moguć i zapisan je kao ‘uint’. Potpisani cijeli broj može biti i pozitivan & negativan i zapisan je kao “int”.

Nakon što smo naveli svoje varijable, vrijeme je da napišemo neke funkcije koje će naš pametni ugovor obavljati. Prvo, moramo napraviti rezervirana mjesta za naš model i HP. Upotrijebit ćemo nekoliko postavljenih javnih funkcija i pridružiti im svoje varijable. Kao drugo, moramo iznijeti nekoliko javnih funkcija koje će vratiti ulaz. Pogledajte kako izgleda naš pametni ugovor.

Model vozila & amp; konjski snage pametni ugovorSlika U.Today

Kako napraviti žeton na Ethereumu?

Mnoge je ljude blockchain industrija privukla zbog nečuvenog dobitka na kripto tržištu krajem 2017. To je uglavnom bio rezultat pojave novog standarda tokena ERC20 koji je ogroman broj startupa koristio za pokretanje svojih tokena i podizanje novac za razvoj. Unatoč padu hipe, neke tvrtke i dalje lansiraju svoje tokene na Ethereum i prodaju suradnicima, dokazujući da potražnja još uvijek postoji. Ako ste oduvijek sanjali o izgradnji startupa i pokretanju svog tokena, ovaj će dio biti vrlo zanimljiv.

Stvaranje tokena znači korištenje standarda ERC20, koji se može brzo guglati. Ne zaboravite postaviti verziju Solidity prije samog standarda. Bit će postavljen niz funkcija i nekoliko događaja koji bi trebali prijaviti radnje u knjigu Ethereuma. Među funkcijama naći ćete niz potrebnih: jednu za definiranje ukupne zalihe, jednu za provjeru stanja određenog novčanika i jednu za prijenos žetona između novčanika. Kako Ethereum omogućuje kontrolu novčanika iz drugih novčanika, pronaći ćete i funkcije koje definiraju ciljni novčanik i omogućuju saldo za prijenos i odobravanje transakcije. Spremite ovo u zasebnu datoteku.sol.

Vrijeme je da ocrtamo vlastiti žeton. Započnite sa specifikacijama verzije Solidity. Zatim uvezite sučelje i priložite ga novom pametnom ugovoru putem ‘je’. Dalje ćemo:

  • Prvo navedite simbol, ime i broj decimala u varijablama. Broj decimala omogućuje korisniku prijenos i pohranu dijelova tokena, najčešći broj decimala je 18. Sve će to biti vidljivo korisnicima, pa ih javno objavljujemo.

  • Drugo, definirat ćemo ukupnu ponudu. U slučaju ovog vodiča, on će biti fiksan i iznositi milijardu.

  • Treće, napravimo mapiranja za provjeru stanja na novčaniku i dodataka u slučaju da će bilo koja treća strana kontrolirati adresu.

  • Četvrto, postavit ćemo funkciju koja će se izvršiti samo jednom po uvođenju ugovora (konstruktor) koja će našoj adresi dati sve tokene koje ćemo stvoriti.

  • Peto, moramo stvoriti brojne funkcije koje ograničavaju ono što imamo u sučelju. Ukupna ponuda uzima se iz varijable koju smo prethodno deklarirali. Vage će se provjeravati prema mapiranju. Prijenos će biti dopušten samo ako korisnik ima nešto ETH-a i pošalje manje ili jednako onome što zapravo ima. Kontrola drugog novčanika izvršit će se prema prethodno definiranom mapiranju i provjera dopuštenog iznosa. Provjerite kod koji smo dobili u nastavku.

UTD ERC20 tokenSlika U.Today

Kako pokrenuti pametni ugovor?

Sada znate kodirati jednostavne pametne ugovore na Solidity. Pokušajmo shvatiti kako se mogu pokrenuti na mreži Ethereum. Prvo, moramo sastaviti kod. U tu svrhu možete koristiti Remixov integrirani kompajler ili to učiniti na vašem stroju uz pomoć truffle okvira. Krenimo prvo laganim putem.

Prije nego što započnemo, potrebno je stvoriti Ethereum račun ako to niste učinili do sada. U tu svrhu preporučujemo upotrebu proširenja Metamask koje se može instalirati na preglednike Chrome, Opera, Firefox i Brave. Jednom kada stvorite novčanik, obavezno spremite sjeme frazu jer će to biti jedini način pristupa novčaniku s drugih strojeva ili u slučaju da morate ponovno instalirati proširenje. Prednost Metamaska ​​je u tome što se možete prebacivati ​​između različitih mreža. Ovo će nam dobro doći jer ćemo za svoje eksperimente koristiti ispitnu mrežu. Otvorite proširenje i odaberite mrežu Ropsten. Zatim idite do slavine i zatražite ETH, sjetite se da svaka operacija s EVM-om košta Wei.

Otvorite remix.ethereum.org. Vidjet ćete kod za glasački listić – zatvorite karticu s njim. Remix ima namjenski preglednik za .sol datoteke i integrirani prevoditelj. Na vrhu preglednika nalazi se ikona križa koja omogućuje stvaranje novih datoteka. Stvorimo datoteku i kopirajmo svoj prvi pametni ugovor s vozilima i njihovom snagom. Na desnom dijelu zaslona vidjet ćete kompajler s nekoliko kartica. Na prvoj kartici odaberite verziju kompajlera koja odgovara verziji Solidity koju ste naveli i pokrenite postupak kompilacije. Ako nema pogrešaka, prikazat će vam se poruka “uspjeh”. Odaberite drugu karticu i vidjet ćete odjeljak u kojem biste trebali odrediti odgovarajuće okruženje (u našem slučaju Web3) i provjeriti je li adresa ispravna (trebala bi se spustiti s Metamaske). Ako je sve točno, pritisnite ‘implementacija’ i dobit ćete skočni prozor s Metamaske s transakcijom. Potvrdite i voila, vaš je pametni ugovor postavljen na mrežu.

Sad na nešto zanimljivije. Ako ste za pisanje koda koristili uređivač teksta na računalu, možete ga lokalno rasporediti pomoću Node.js. Prvo ga preuzmite sa službenog web mjesta ili instalirajte putem naredbenog retka (Windows) ili terminala (OSX). U našem ćemo slučaju koristiti OSX, ali postupak je sličan.

Instaliranje Node.js.Slika U.Today

Drugo, instalirajte Solidity framework Truffle putem “npm install”.

Instaliranje tartufaSlika U.Today

Treće, napravite novu mapu i stvorite repo putem naredbe ‘init’.

Izrada repoa za tartufeSlika U.Today

Četvrto, instalirajte HDWalletProvider u ovaj repo i putem Node.js.

Instaliranje HDWalletProvider-aSlika U.Today

Peto, kopirajte datoteke s ERC20 sučeljem i ugovor o tokenu u mapu ‘ugovori’ u svom repo-u. Šesto, stvorite sljedeću JavaScript datoteku u mapi „Migracije“ u repo-u.

JS datoteka za postavljanjeSlika U.Today

Sedmo, morate izmijeniti svoju datoteku za konfiguriranje tartufa. Međutim, prije toga je potreban jedan dodatni korak. Upisat ćete mnemoniku novčanika (koju ste ranije spremili) i API za Ropsten testnet. Da biste dobili ovo drugo, idite na Infuru i prijavite projekt. Na stranici projekta vidjet ćete njegov ID. Koristite ga kao API.

Konfiguracija tartufaSlika U.Today

Napokon, spremni ste za pokretanje vašeg pametnog ugovora. Evo kako izgleda naredba i postupak. Ako bude bilo kakvih problema, oni će vam ih umjesto toga predstaviti.

Pametni ugovor se implementira lokalnoSlika U.Today

Što možete učiniti s pametnim ugovorom?

Dobar posao, primijenili ste prva dva pametna ugovora. Što sad? Za početak ih morate provjeriti i objaviti. Pronađimo ih prvo u bilo kojem od istraživača blokova Ethereuma. Koristit ćemo Etherscan.

Najbrži način pristupa ugovorima je putem transakcija iz novčanika. Pristupite Metamaski, pritisnite tri točke i ona će vam omogućiti da pregledate svoj račun u Etherscanu. Vaša adresa sada ima barem jednu transakciju za stvaranje ugovora. Pristupajući transakciji, pronaći ćete odredišnu adresu, koja je u osnovi adresa ugovora. Kad završite na stranici ugovora, vidjet ćete nekoliko kartica. Idite na karticu “Kôd” i nastavite na stranicu za provjeru. Ovdje unesite sve relevantne informacije i pritisnite gumb za početak postupka provjere.

Provjera kodaSlika U.Today

Nakon što potvrdite prvi pametni ugovor koji smo stvorili, sada možete komunicirati s njim. Idite na karticu “Napišite ugovor” i vidjet ćete rezervirana mjesta koja smo naveli. Spojimo Etherscan s Metamaskom i unesite Toyota Soarer i 280 KS. Osvježite stranicu i vidjet ćete podatke u odjeljku ‘Čitaj’.

Pametni ugovor djelujeSlika U.Today

Sažetak

Da rezimiramo, izgradnja pametnih ugovora neophodna je vještina za svakog inženjera blockchaina. Prva platforma za uvođenje pametnih ugovora bio je Ethereum; Zaklada je zajednici također predstavila posebno napisani jezik nazvan Solidity. Unatoč novosti koncepta i samog jezika, izgradnja pametnih ugovora za sebe nema ništa iznimno. Ljudi koji imaju prethodno iskustvo s objektno orijentiranim programskim jezicima, posebno JavaScriptom, osjećati će se ugodno u kretanju.

Pametni ugovori su samo programi, ali oni imaju prepoznatljive značajke koje bi svaki programer trebao imati na umu. Na primjer, budući da se pametni ugovori izvode na vrhu decentraliziranog VM-a, njihovi se podaci nepromjenjivo bilježe u blockchain. Stoga nema mjesta za pogreške, a testiranje pametnog ugovora presudno je prije nego što se postavi na glavnu mrežu. Sljedeća karakteristika pametnog ugovora je da se svaka radnja vrši putem transakcija koje zahtijevaju procesorsku snagu EVM-a. Kao posljedica toga, postavljanje pametnih ugovora i interakcija s njima košta.

Danas smo objasnili principe funkcioniranja za Ethereum Main i testne mreže, pokazali vam razne alate za stvaranje pametnih ugovora i izložili postupak sklapanja dviju vrsta ugovora. Također smo demonstrirali različite načine pokretanja pametnih ugovora na mreži i daljnju interakciju s njima. Vjerujemo da ćete s tim znanjem biti spremni započeti posao blockchain inženjera i na temelju njih graditi iznimne pametne ugovore i decentralizirane aplikacije. Uživati!