Kā iemācīties pamatīgumu un sākt blokķēdes programmēšanu

Blokķēdes programmēšana pēdējās desmitgades laikā ir kļuvusi par vienu no vislabāk apmaksātajām un izaicinošākajām programmatūras sfērām. Kaut arī blokķēdes ir valodas agnostikas, un daudzas no esošajām valodām, piemēram, C ++ un JavaScript (JS), izmanto bloku ķēdes inženieri, ir daži uzdevumi, kurus esošās valodas nevarēja ērti realizēt, kas pavēra pieprasījumu pēc jaunām, īpašas kriptogrāfijas iespējas. Viena no šādām valodām ir Soliditāte.

Cietība piedzima kā galvenā Ethereum ekosistēmas sastāvdaļa. Tas absorbēja C ++, JavaScript un Python. Tam ir daudz mūsdienu iezīmju, piemēram, bibliotēkas un mantojums. Solidity ir paredzēts programmu rakstīšanai, kas mijiedarbojas ar Ethereum kontiem, kurus sauc par viedajiem līgumiem. Viedie līgumi tiek izpildīti Ethereum Virtual Machine (EVM), ļaujot lietotājiem, kuri tos izmanto, decentralizēti veikt tādus uzdevumus kā kolektīvais finansējums, aklās izsoles, balsošana un daudzi citi. Slavenākā viedo līgumu slepkava-lietotne bija decentralizēts finansējums ICO, kas 2017. gadā sāka buļļu ralliju kriptogrāfijas tirgos.

Neatkarīgi no tā, vai esat pieredzējis izstrādātājs vai tikai sākat lietot kriptogrāfiju, ieteicams sākt mācīties Solidity, jo viedie līgumi ir kļuvuši par izšķirošu blokķēdes ekosistēmas daļu. Papildus tam, ka dApps tos aktīvi īsteno, tie tiek aktīvi integrēti infrastruktūras slāņa blokķēdēs un pat Bitcoin, izmantojot tādus pakalpojumu sniedzējus kā RSK. Zinot, kā veidot viedus līgumus, jūs padarīsit savu blokķēdes karjeru ilgtspējīgāku un spēsit radīt labākas kvalitātes risinājumus. Nevelksim to ilgāk un netīrīsim rokas ar kodēšanu!

Izpratne par gudra līguma pamatiem

Viedā līguma konts sastāv no trim sadaļām: atlikums, krātuve un kods. Bilance parāda, cik daudz viedā līguma ir Ethereum. Krātuve glabā datus, piemēram, virknes un masīvus, kas raksturīgi lietojumprogrammai. Kodu sadaļā ir neapstrādāts mašīnas kods, kas tiek apkopots no tā, ko mēs rakstām Solidity.

Atšķirībā no lietotāju kontiem, viedo līgumu konti nav ārpus attiecīgajiem tīkliem. Citiem vārdiem sakot, jūs varat izmantot savu maku dažādos tīklos, piemēram, Kovan un Ropsten, taču to nevar izdarīt ar gudru līgumu. Viedie līgumi ir iekšēji.

Katram viedajam līgumam ir avots, kas tiek glabāts autora ierīcē, un gadījumi, kas tiek glabāti blokķēdē. Lai izveidotu viedā līguma instanci (kontu), mums tas jāizvieto tīklā. Tas ļoti līdzinās attiecībām starp klasēm un instancēm tradicionālajā objektorientētajā programmēšanā (OOP) un valodās, kas to pārstāv (JS, Ruby). Lai sniegtu jums vizuālāku attēlojumu, izveidosim klases ‘Bike’ un pievienosim tam tā eksemplāru.

Velosipēdu klase & amp; piemēramUtoday attēls

Tas, ko mēs rakstīsim, ir līguma definīcija, kas pēc tam darbosies caur kompilatoru, kas izveidos divus failus: baitkodu un lietojumprogrammas bināro saskarni (ABI). Bytecode ir tas, kas faktiski tiks ievadīts EVM, un ABI ir slānis starp baitkodu un parasto JavaScript kodu, kas ļauj izveidot lietotāja saskarni (UI).

IDE izvēle & Solidity versija

Pirms sākam, mums ir nepieciešama pienācīga integrēta izstrādes vide (IDE). Citiem vārdiem sakot, mums ir nepieciešams ērts terminālis ar nepieciešamajiem rīkiem, lai ierakstītu kodu. Šīs apmācības vajadzībām mēs izvēlēsimies Remix – IDE, ko izveidojis Ethereum fonds, kas ļauj rakstīt, testēt, atkļūdot, uzsākt viedos līgumus un daudz vairāk. Varat to izmantot tieši pārlūkprogrammā vai, ja vēlaties, lejupielādēt lokāli.

Kad palaidīsit Remix, centrā tiks parādīts kodu redaktors, kreisajā pusē – failu pārvaldnieks un labajā pusē – kompilators..

Sākotnējais remiksēšanas logsUtoday attēls

Būs kāds iepriekš uzrakstīts kods – tas mums nebūs vajadzīgs. Lai izveidotu pirmo viedo līgumu, nospiediet termināļa augšējā kreisajā stūrī esošo mazo ikonu un piešķiriet tai nosaukumu.

Jauna projekta izveide RemixUtoday attēls

Tā kā mums tagad ir blank.sol dokuments, mums jānorāda Solidity versija, kuru palaidīs kompilators. Šīs apmācības laikā jaunākā versija ir 0.5.7. Ja neesat pārliecināts, kuru versiju izmantot, varat norādīt versiju diapazonu.

2 veidi, kā norādīt Solidity versijuUtoday attēls

Visbeidzot, piešķiriet mūsu viedajam līgumam nosaukumu, aiz kura ir iekavas.

Gudra līguma nosaukšanaUtoday attēls

Raksti savu pirmo viedo līgumu

Kad mūsu audekls būs gatavs, ir pienācis laiks definēt pamatelementus – mainīgos. Kaut arī pieredzējušiem programmatūras inženieriem nebūs problēmu izprast šo koncepciju, mēs to īsi iepazīstināsim iesācējiem. Mainīgie ir vietturi informācijas daļām, uz kurām vēlāk atsaucas programma, kas tos vada.

Izveidosim pāris mainīgos: virkni (simbolu secību) un veselu skaitli (skaitli). Ethereum gadījumā mainīgie tiek glabāti blokķēdē kopā ar pārējām līgumu daļām, un tāpēc tiem var piekļūt un tos atjaunināt no jebkuras vietas. Vēl viena pamatelementa Solidity mainīgo īpašība ir tā, ka tos var padarīt privātus, blakus mainīgajiem ierakstot “private”. Visbeidzot, attiecībā uz veseliem skaitļiem Solidity ir divu veidu: parakstīts (var būt pozitīvs & negatīvs) un neparakstīts (var būt tikai pozitīvs). Lai norādītu neparakstītu mainīgo, pirms tā vienkārši jānovieto ‘u’.

Privāta virkne un vesels skaitlisUtoday attēls

Kad mums ir mainīgais ‘name’, mums jāizraksta tā iestatīšanas un iegūšanas metodes. Tas izskatās kā JS funkcija. Atcerieties, ka pamatīgums tiek ierakstīts statiski, tāpēc mums ir jādefinē mainīgo veidi. Tagad jebkura vērtība, ko mēs ievietosim ‘setName’, definēs virkni ‘name’. Lai iegūtu getter, mēs izmantosim ‘getName’ un norādīsim, kādu mainīgo mēs sagaidām redzēt. Tagad ir pienācis laiks darīt to pašu mainīgajam ‘vecums’. Metode ir konstruēta līdzīgi kā ‘getName’.

Nosaukuma / vecuma noteicēji un geteriUtoday attēls

Pārbaudīsim mūsu mazo koda gabalu. Dodieties uz kompilatora cilni “Palaist” un zem līguma nosaukuma nospiediet “Izvietot”. Sastādītāja pašā apakšā tagad redzēsiet sadaļu “Izvietotie līgumi”, kurā ir pieejamas mūsu metodes. Lai nosaukumu piešķirtu vērtībai ‘newName’, mums jāpārliecinās, vai mūsu virkne ir rakstīta JSON, pretējā gadījumā ‘getName’ neko neatgriezīs. “SetAge” vienkārši norādiet savu vecumu bez pēdiņām. Kā redzat, mēs tagad varam iestatīt un saņemt mainīgos “nosaukums” un “vecums”, izmantojot mūsu viedo līgumu.

Sastādītājs ar vārdu un vecumuUtoday attēls

Vei un gāzes definēšana

Viena no ievērojamākajām viedo kontrastu īpašībām ir tā, ka, lai tos izvietotu Ethereum tīklā, jums būs jāuzsāk darījums, kas maksā zināmu naudas summu, kas tiek maksāta Ēterā. Ir ļoti svarīgi saprast, kā maksas tiek izmantotas sistēmā, jo tās tiks atskaitītas katru reizi, kad sazināties ar EVM.

Kas ir Vei?

Pieņemsim, ka tik tālu lasot mūsu apmācību, jūs vismaz vienu reizi esat izmantojis Bitcoin. Jūs, iespējams, veicāt nelielu darījumu, kas bija mazāks par 1 BTC. Tādā gadījumā jūs izmantojāt Satoshis, kas ir kaut kas līdzīgs santīmiem par dolāru. Vei ir kā Satoshi – tā ir mazākā 1 ētera daļa. Ja mēs to domājam programmēšanas ziņā, tas ir mazākais neparakstītais vesels skaitlis tīklā. Mijiedarbojoties ar tīklu, jūs lielākoties sastapsieties ar Gwei, kas attiecas uz Gigawei un ir vienāds ar 1 miljardu Wei.

Kas ir gāze?

Gāze ir būtiska gudras līguma izpildes mehānisma sastāvdaļa. Katram darījumam ir divas vērtības: patērētā gāze un tās cena. Ir vērts pieminēt, ka lietotājs, kurš uzsāk darījumu, definē šīs vērtības. Tomēr, ja noteiktā gāzes vērtība nebūs pietiekama, lai apstrādātu konkrētu darbību, gāze tiks patērēta, bet darījums neizdosies. Turklāt, ja gāzes cena noteiktā laikā tiks iestatīta par zemu tīklam, mezgli neapstrādās darījumu, kas galu galā padarīs to neveiksmīgu. Ir vairāki pakalpojumi, lai pārbaudītu jūsu darījumu optimālās vērtības, no kuriem viens ir ethgasstation.info. Lai labāk izprastu gāzi un to, kāpēc tā maksā naudu, paši to kodēsim.

Atgriezieties savā Remix logā un iniciējiet jaunu failu. Šajā piemērā mēs to nosauksim par “Gas” un izveidosim līgumu ar tādu pašu nosaukumu. Paturiet prātā, ka jo vairāk datu mums būs nepieciešams uzglabāt blokķēdē, jo vairāk gāzes mums būs nepieciešams. Tas nozīmē, ka šīs apmācības vajadzībām mēs izveidosim lētu līgumu; jo vairāk jūs tam pievienosiet, jo lielāka būs maksa.

Būs funkcija, kas atgriež veselu skaitli, kas ir divu ievadu summa. Lai padarītu to pēc iespējas vieglāku, mēs norādīsim, ka mūsu līgums neko nesaglabās blokķēdē, un tāpēc mēs blakus funkcijai ievietosim “tīru”.

Lēts līgumsUtoday attēls

Tagad jūs varat to izvietot kompilatorā un ievadīt jebkurus divus skaitļus, lai iegūtu veselu skaitli “c”. Lai pārbaudītu mūsu darījuma cenu, mums vajadzētu apskatīt termināli, kas atrodas zem koda sadaļas. Ir darījuma izmaksas un izpildes izmaksas. Pirmais attiecas uz to, cik daudz darījumam ir datu. Otrais attiecas uz to, cik daudz EVM jaudas prasīja darījums.

Lēta līguma izmaksasUtoday attēls

Šis ir ārkārtīgi vienkāršs darījums, kas tīklam nemaksā gandrīz neko. Rakstot jēgpilnus viedos līgumus, jūs pievienosiet sīkāku informāciju, kas palielinās to svaru un līdz ar to darījumu maksu.

Radīšana & ievietojot savu ERC20 marķieri

Pieņemsim, ka lielākā daļa no blokķēdes izstrādātājiem, kas tikko sākuši darboties, vēlas spēlēt daudz un izveidot paši savus blokķēdes un žetonus. Lai gan šī ir ārkārtīgi grūta tēma, kas piesaistīja dažus labākos programmatūras inženierus no citām sfērām, pamata ERC20 marķiera veidošana nav raķešu zinātne.

Pirmkārt, mums ir jāizveido cits fails Remix un augšupielādējiet ERC20 saskarni, kas ir šāda:

ERC20 standartsUtoday attēls

Funkcija ‘totalSupply’ ļauj mums redzēt, cik daudz žetonu mums kopumā ir. Funkcija ‘balanceOf’ tiek izmantota, lai iegūtu marķieru daudzumu noteiktās adresēs. Funkcija ‘pārsūtīšana’ ļauj lietotājiem veikt darījumus savā starpā. Funkcijas ‘transferFrom’, ‘kompensācija’ un ‘apstiprināt’ ir paredzētas, lai ļautu citiem ļaut citiem lietotājiem sākt darījumus viņu vārdā. Notikumi ir virsgrāmatas reģistrēšanas rīki.

Papildus pašam interfeisam mūsu jaunajam marķierim būs nepieciešams atsevišķs.sol fails. Šeit mēs importēsim ERC20 saskarni un norādīsim marķiera simbolu, vārdu un decimāldaļas.

uToday marķierisUtoday attēls

Pirms mēs to apkopojam, mums jānorāda ierobežojumi.

  • Sāksim ar kopējo piedāvājumu – tas ir nemainīgs vesela skaitļa mainīgais, kuru mēs padarīsim privātu. Mūsu žetonu kopējais daudzums būs 1 miljons, mēs arī ierakstām funkciju, lai atgrieztu šo vērtību.

  • Otrkārt, mums kaut kur ir jāuzglabā sava žetons. Lai to izdarītu, mums būs jāiezīmē kartēšana, kas atgriezīs atlikumu jebkurai norādītajai adresei.

  • Treškārt, marķieru pārsūtīšanai vajadzētu būt funkcijai, kurai būtībā būs saņēmēja adrese un pārsūtīta marķiera summa. Šai funkcijai vajadzētu arī būt iespējai pārbaudīt, vai sūtītāja bilancē ir pietiekami daudz marķieru, ko var realizēt, izmantojot vienkāršu paziņojumu if / then. Turklāt mēs iestatīsim nosacījumus ‘_value’ tādā veidā, kas neļauj lietotājiem sūtīt darījumus ar 0 žetoniem, jo ​​tas tikai pārpludinātu tīklu ar nevēlamu saturu.

  • Ceturtkārt, mums vajadzētu izveidot pārējo funkciju kartēšanu, kas ir kartēšanas kartēšana ar veselu skaitli.

  • Tad mēs norādīsim dažus pārbaudītājus funkcijās “Apstiprināt” un “Atbalsts” un izvirzīsim nosacījumus “TransferFrom”.

  • Visbeidzot, ne visi marķieri būs pieejami tirgū. Daži žetoni parasti tiek izlaisti komandām, fondiem, padomdevējiem un citiem mērķiem. Tādēļ ir svarīgi, lai mēs skaidri norādītu, cik daudz žetonu būs apgrozībā. Kad mēs izveidojām žetonus, apgrozībā esošais krājums ir vienāds ar mūsu līdzsvaru.

uToday marķieru ierobežojumiUtoday attēls

Kods ir gatavs, tāpēc pārbaudīsim to. Pārejiet uz kompilatora cilni “Palaist” un izvietojiet mūsu marķiera līgumu. Jūs redzēsiet, ka mums ir mūsu marķētie dati kopā ar kopējo piegādi, atlikumiem un piemaksām. Apsveicu, jūs esat pelnījis glāstu!

Lai mūsu marķieris faktiski darbotos tīklā, mums ir jāizvieto viedais līgums (ņemiet vērā, ka tas atšķiras no tā izvietošanas testēšanai Remix). Šīs apmācības labad mēs izmantosim Remix un Metamask, taču ir citi veidi, kā to izdarīt. Metamask ir vienkārša, bet efektīva Ethereum seifa programma ar jauku lietotāja interfeisu, kas integrējas kā paplašinājums dažām populārākajām pārlūkprogrammām. Mūsu gadījumā mēs izmantosim Opera. Pirmkārt, dodieties uz metamask.io un lejupielādējiet paplašinājumu. Kad tas būs izdarīts, pārlūkprogrammas augšējā labajā stūrī redzēsiet lapsas ikonu.

Lejupielādē Metamask & amp; ikonas atrašanās vietaUtoday attēls

Nospiediet ikonu un veiciet piedāvātās instrukcijas, lai izveidotu seifu. Neaizmirstiet saglabāt slepeno frāzi! Kad jums ir seifs, nospiediet ikonu Metamask un nomainiet tīklu uz ‘Ropsten’, jo mēs nevēlamies sajaukt ar Ethereum mainnet.

Metamask nomaiņa uz RopstenUtoday attēls

Pēdējais solis ir nedaudz ēteru ģenerēšana (diemžēl tos nevarēsit izmantot reāliem pirkumiem, taču tie ir nepieciešami testēšanai). Dodies uz krāns.metamask.io un pieprasīt 1 ēteri.

Tagad jums viss ir gatavs. Atgriezieties savā Remix logā un kompilatorā mainiet vidi uz ‘Injected Web3’. Apskatiet arī konta cilni – jūsu adresei jābūt tādai pašai kā tai, kuru esat izveidojis, izmantojot Metamask. Atlasiet viedo līgumu, kuru vēlaties izvietot, kas ir jūsu pilnvarojuma līgums, nevis ERC20 saskarne, un nospiediet attiecīgo pogu. Tiks parādīts Metamask logs ar darījumu, tā detaļām un iespējām mijiedarboties ar to. Iesniedziet darījumu, un mūsu simbols ienāks dzīvē.

Metamask uznirstošais logsUtoday attēls

Tagad jūs varat spēlēt ar visām funkcijām, kuras mēs norādījām iepriekš. Apskatīsim mūsu līgumu no citas puses, lai pārbaudītu, vai tas darbojas pareizi. Tāpat kā jebkurai citai blokķēdei, arī Ethereum ir vairāki bloku pētnieki, kas kalpo galvenajam mērķim uzraudzīt, kas notiek tīklā. Mūsu gadījumā mēs paliksim pie ētera skenēšana, lai gan ir nedaudz citu lielisku alternatīvu. Ņemiet vērā, ka, vienkārši dodoties uz etherscan, redzēsit galveno tīklu. Tā kā mums ir jāredz Ropsten tīkls, pirms vietnes adreses jums būs jāievieto “ropsten.”. Meklējiet savu adresi, un jūs redzēsiet divus darījumus – viens ir par brīvu saņemto ēteri, bet otrs – par līguma izpildi.

Lietotāja adrese EtherscanUtoday attēls

Lai atrastu līguma adresi, nospiediet TxHash un dodieties uz lauku “Kam”. Šeit varat pārbaudīt viedā līguma darījumus, kodu un notikumus. Šajā brīdī mums ir jāpārbauda un jāpublicē mūsu līgums. Atveriet sadaļu Kods un noklikšķiniet uz saites Pārbaudīt un publicēt. Šeit jums atkal būs jānorāda marķiera nosaukums, kompilatora versija (mūsu gadījumā jaunākā izmantotā Solidity versija bija 0.5.7, tāpēc mēs paliksim pie saistītās kompilatora versijas). Tagad jums ir jākopē marķiera viedā līguma kods kopā ar ERC20 saskarnes kodu no remiksa loga uz etherscan un ekrāna apakšdaļā jānospiež ‘Verificēt un publicēt’..

Viedā līguma pārbaudeUtoday attēls

Ir pienācis laiks atgriezties pie sava līguma adreses. Tagad kods cilnē “Kods” tiks pārbaudīts. Turklāt tagad jums būs vēl divas cilnes: “Lasīt līgumu” & ‘Rakstīt līgumu’. Lasīšanas sadaļā mēs varam pārbaudīt mūsu marķiera funkcionalitāti. Ievadiet savu (nevis līguma) adresi laukā ‘balanceOf’, lai redzētu, cik žetonu jums ir; tam vajadzētu parādīt 1 miljonu, ko mēs stingri kodējām kā kopējo piegādi un nodevām to apgrozībā mūsu maciņā. Tas nozīmē, ka mūsu marķieris tagad pareizi darbojas testnetā.

Atlikuma saņemšanaUtoday attēls

Kopsavilkums

Ja jūs vēlaties sākt karjeru kriptogrāfijas nozarē, jums jāsaprot, ka, neraugoties uz relatīvo vienkāršību pamatos, blokķēdei ir neticami dziļi. Kopš 2017. gada bloku ķēdes ir ievērojami attīstījušās, un to izmantošanas gadījumi pārsniedza tikai finanšu darījumus. Ar Ethereum parādīšanos parādījās pilnīgi jauns tīklu slānis, kurā mitina dažādus dApps un uz blockchain balstītus risinājumus. Šīs evolūcijas rīks bija gudrs līgums, un, ja vēlaties padarīt savu pieredzi vērtīgāku un drošāku par nākotni, jums jāzina, kā tā darbojas.

Lai gan viedos līgumus var kodēt, izmantojot citas valodas, Solidity šim mērķim ir piemērotāks. Turklāt, ja vēlaties kļūt par Ethereum izstrādātāju vai izveidot savam projektam ICO / ERC20 marķieri, tā ir jūsu izvēle. Ja jums bija zināma pieredze ar C ++ vai JavaScript, kodēšanai uz Solidity jābūt samērā vienkāršai. Jums būs jāsaprot dažas atšķirības starp klienta-servera un decentralizētiem programmatūras palaišanas modeļiem. Pateicoties Ethereum Foundation un dažām trešo pušu organizācijām, izstrādātājiem tiek parādīts ērtu rīku komplekts, piemēram, Remix un Etherscan, lai kodētu un izvietotu viedos līgumus.

Mēs ceram, ka mūsu apmācība jums palīdzēja apiet lielāko daļu Solidity koncepciju, lai varētu sākt savu blokķēdes braucienu. Atcerieties, ka vienmēr varat pārbaudīt jaunāko Solidity dokumentāciju. Novēlam jums veiksmi un labprāt kādreiz izmantosim dažus jūsu dApps!