Kā uzrakstīt savu pirmo viedo līgumu?



Uzziniet viedās līgumu izstrādes pamatus un sāciet rakstīt savu pirmo viedo līgumu. Jūs arī zināt, kā pārbaudīt viedo līgumu.

Iekš , jūs esat uzzinājis par to, kas ir viedie līgumi, dažādas viedo līgumu valodas un kā izveidot viedu līgumu izstrādes vidi. Šajā rakstā jūs uzzināsiet, kā izveidot savu pirmo viedo līgumu. Es lietošuRemix IDE viedā līguma izstrādei un testēšanai.

Šajā viedo līgumu izstrādes apmācībā ir aplūkotas tālāk norādītās tēmas:





Viedā līguma izveide

Šīs emuāru sērijas ietvaros tiks izstrādāts vienkāršs pirkuma pasūtījuma viedais līgums. Tā kā šī sērija attīstās un tiek ieviesti jauni stingrības programmēšanas valodas jēdzieni, pirkuma pasūtījuma viedais līgums attīstīsies un uzlabosies.



Viedā līguma struktūra

Solidity viedais līgums būtībā ir sekojošo kolekcija

  • dati - kas uztur pašreizējo līguma stāvokli
  • funkciju - kas izmanto loģiku līguma stāvokļa pārejai

Stingrības viedie līgumi notiek pēc standarta struktūras. Jebkurš viedais līgums sākas ar šādu paziņojumu



Pragmas direktīva

Atslēgvārdu “pragma” var izmantot, lai iespējotu noteiktas kompilatora funkcijas vai pārbaudes. Zemāk esošajā paziņojumā ir noteikts, ka avota fails (viedais līgums) netiks apkopots ar kompilatoru agrāk par 0.4.0 un kompilatora versiju pēc 0.6.0. Šī deklarācija nodrošina, ka, ieviešot jaunu kompilatora versiju, netiek ieviesta neparedzēta darbība.

pragmas cietība> = 0,4,0<=0.6.0 

Līguma deklarācija

Līgums tiek deklarēts, izmantojot atslēgvārdu “līgums”. Tas deklarē tukšu līgumu, kuru identificē ar nosaukumu “PurchaseOrder”.

līgums PurchaseOrder {}

Attiecīgo datu glabāšana līgumam

Katrā līgumā vai vispārīgi runājot, katrā programmā var būt nepieciešams glabāt dažus datus. Datu pievienošana programmai nodrošina tās elastību. Svarīga iezīme ir pāreja no programmas stingri kodētām vērtībām uz lietotāju norādītajām vērtībām. Mainīgie ļauj saglabāt datus, iezīmēt tos, iegūt datus un manipulēt ar tiem.

Gudra līguma izstrāde: mainīgo ieviešana

Stingri mainīgie ir divu veidu

  1. Vērtības tips: Šāda veida mainīgie tiek nodoti pēc vērtības, t.i., tie vienmēr tiek kopēti, ja tos izmanto kā funkciju argumentus vai piešķiršanā. Piemēram: veseli skaitļi, loģiskā adrese utt.
  2. Atsauces veidi: Šie mainīgo veidi ir sarežģīti un tiek nodoti ar atsauci, šie mainīgie neietilpst 256 bitos un ir rūpīgi jāpārvalda, jo to kopēšana ir dārga.

Datu pievienošana viedajam līgumam

Pievienosim līgumam kādu datu mainīgo. Katram pirkuma pasūtījumam ir jābūt saistītam ar kādu produkta daudzumu. Pievienosim mainīgo product_quantity, kas būs ar datu tipu vesels skaitlis vai skaitlis.

konvertēt datuma virkni uz datumu

Mainīgais, kuru mēs tagad ieviešam, ir neparakstīts vesels skaitlis, un to attēlo ar uint256, 256 šeit apzīmē 256 bitu krātuvi.

  • U - neparakstīts (tas nozīmē, ka šis tips var attēlot tikai pozitīvos veselos skaitļus, nevis pozitīvos un negatīvos veselos skaitļus)
  • INT - vesels skaitlis
  • 256 - 256 biti
  • minimālā vērtība, ko var piešķirt uint256, ir 0
  • maksimālā vērtība, ko var piešķirt uint256, ir 2 ^ 256-1 [ļoti liels skaits]

Produkta daudzums ir tikai pozitīva vērtība, un pašreizējais pieņēmums ir tas, ka mēs rūpējamies par ļoti lielu produkta daudzuma vērtību.

Deklarētais mainīgais “product_quantity” ir līguma stāvokļa sastāvdaļa, un tāpēc tas tiek saglabāts vai glabāts līguma telpā. Pašlaik šī mainīgā vērtība noklusējuma būs 0.

līgums PurchaseOrder {uint256 product_quantity}

Konstruktora noteikšana

Konstruktors tiek izsaukts, kad tiek izvietots līgums. Konstruktors inicializē līgumu ar dažām vērtībām. Pašreizējā scenārijā produkta daudzums tiek iestatīts uz 100, kad tiek izvietots līgums. Parametrētu konstruktoru var izveidot arī, nododot mainīgo un inicializējot produkta daudzumu, izmantojot nodoto vērtību.

Galvenais aspekts, kas jāņem vērā, ir piekļuves modifikators “publisks”, kas saistīts ar konstruktoru. Publiskais atslēgvārds norāda, ka ikviens var piekļūt šai funkcijai, tā nav ierobežota funkcija.

kas ir maināms un nemainīgs

konstruktors () public {product_quantity = 100}

Funkciju pievienošana

Ļaujiet mums tagad pievienot funkciju, lai padarītu mūsu programmu interaktīvu. Funkcijas ir kontrolētas iespējas, kuras var pievienot programmai. Pirms jebkuras funkcijas tiek ievadīta atslēgvārda funkcija. Kopumā šādi izskatās funkciju deklarācija' funkciju ”.

Iegūt funkciju

Viena no izplatītākajām prasībām jebkurai programmai ir nolasītās vērtības nolasīšana. Nākamajā līgumā mums būs jāizlasa vērtība “produkta_ daudzums”. Lai nodrošinātu šo iespēju, tiek pievienota lasīšanas vai iegūšanas funkcija. Šajā funkcijā mēs neveicam nekādas manipulācijas ar saglabāto vērtību, mēs tikai izgūstam saglabāto vērtību.

Ļaujiet mums tagad sadalīt mūsu get funkciju (get_quantity)

Nē. Atslēgvārds Vērtība
viens get_quantity (){netiek pārsūtīti parametri}
2 publiski{funkcijai var piekļūt ikviens}
3 skats{apzīmē, ka funkcija nolasa tikai līguma stāvokli, nemaina līguma stāvokli, līdz ar to skats}
4 atgriež mainīgo tipa uint256 {definēts, ko funkcija atgriež}
funkcija get_quantity () publiskais skats atgriež (uint256) {return product_quantity}

Setter funkcijas

Datu lasīšana ir nepieciešama, un mēs to esam paveikuši pēdējā sadaļā, taču lielākajai daļai scenārija ir nepieciešama arī spēja rakstīt / atjaunināt datus. Šī īpašā iespēja tiek nodrošināta, pievienojot iestatītāja funkciju. Šī funkcija ievada parametru veidā no lietotāja vērtību. Izmantojot lietotāja piešķirto funkcijas funkciju, mainīgā “product_quantity” vērtība tiek ierakstīta / atjaunināta.

Ļaujiet mums tagad sadalīt mūsu iestatīto funkciju (update_quantity)

Pievienojot funkciju, lai atjauninātu produkta daudzuma vērtību

Nē. Atslēgvārds Vērtība
viens update_quantity (uint256 vērtība){ir nodota parametra uint256 tipa vērtība}
2 publiski{funkcijai var piekļūt ikviens}
3 Nav nepieciešams, jo funkcijas tiek atjauninātas stāvoklī
4 atgriež mainīgo tipa uint256 (definēts, ko funkcija atgriež)
funkcija update_quantity (uint256 vērtība) public {product_quantity = product_quantity + value}

Savienojot to visu, šādi jāizskatās kopējam līgumam.

pragmas cietība> = 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 } } 

Viedā līguma ieviešana

Laiks pārbaudīt viedo līgumu. Lai pārbaudītu šo viedo līgumu, mēs to izmantosim Remiksēt tiešsaistes IDE .

Remix ir tiešsaistes spēļu laukums ethereum viedais līgums . Remix ir pilnībā balstīts uz pārlūku. Remix nodrošina tiešsaistes IDE (Integrētā izstrādes vide), kurā varat rakstīt savus viedos līgumus. Remix nodrošina tiešsaistes stabilitātes kompilatora iespējas. Remix IDE viedo līgumu var sastādīt, nemanāmi izmantojot noteiktu kompilatora versiju.

Remix nodrošina arī iespēju ātri pārbaudīt viedo līgumu.

Remix nodrošina pilnīgu rīku kopu, lai sāktu viedā līguma izstrādi un viedā līguma testēšanu, neveicot instalēšanu vietējā mašīnā. Sākot ar pārliecību, tas ir ārkārtīgi noderīgs, jo izstrādātājiem vienkārši jākoncentrējas uz viedā līguma sastādīšanu, drīzāk jāuztraucas par infrastruktūru.

Izmantojot Remix IDE, jums ir nepieciešams tikai pārlūks un interneta savienojums, lai sāktu darbu ar viedo līgumu izstrādi. Gudra līguma idejas ātra izstrāde, testēšana un apstiprināšana.

Remix nesen ir jauninājis viņu lietotāja saskarni.

Remix-UI-Smart-Contracts-Edureka

Noklikšķiniet uz faila ikonas, kā iezīmēts iepriekšējā attēlā, tiks atvērts failu pārlūks.

  1. Noklikšķinot uz pluszīmes ikonas, var izveidot jaunu failu, nosauciet failu PurchaseOrder.sol
  2. Tas izveidos tukšu failu ar nosaukumu PurchaseOrder.sol, noklikšķiniet un atveriet šo failu.
  3. Nokopēsim visu līgumu PurchaseOrder.sol.
  4. Noklikšķiniet uz otrās ikonas, kreisajā izvēlnē tieši zem faila ikonas vajadzētu parādīties opcijai Solidity Compiler.
  5. Zem etiķetes Kompilators atlasiet kompilatora versiju. Pašreiz izvēlētā versija ir 0.5.8.
  6. Pēc kompilatora versijas izlikšanas noklikšķiniet uz “Compile PurchaseOrder.sol”. Tas apkopos viedo līgumu.

7. Kad viedais līgums ir veiksmīgi sastādīts, noklikšķiniet uz pogas “Kompilācijas detaļas”, un vajadzētu parādīties šādai informācijai. Pēc kompilācijas ir pieejama divi galvenie dati

    • ABI - lietojumprogrammas binārā saskarne. Šis ir JSON fails, kurā ir sīki aprakstītas visas viedajā līgumā atklātās metodes, kā arī metožu metadati. Vairāk par to tiks apspriests nākamajos emuāros.
    • Bites kods- EVM (Ethereum virtuālā mašīna) darbības kods, viedā līguma loģika tiek pārveidota kompilācijas baitkodā.

8. Lai pārbaudītu viedo līgumu, ir jāizvieto viedais līgums. Lai izvērstu viedo līgumu, noklikšķiniet uz nākamās ikonas kreisajā izvēlnē, zem kompilēšanas ikonas. Parādīsies šāds ekrāns. Lai pārbaudītu viedo līgumu, ir jāizvieto viedais līgums. Lai izvietotu viedo līgumu, noklikšķiniet uz nākamās ikonas kreisajā izvēlnē, zem kompilēšanas ikonas. Parādīsies šāds ekrāns.

Izvietošanas iespēja

Izvietošanas ekrāns nodrošina pāris izvēles iespējas, apskatīsim tās pa vienai.

java saņem datumu no virknes
  • Vide: to var iedomāties par iespēju, kas līdzīga izvēlei iegādāties klēpjdatoru no Amazon, Flipkart, Newegg (visi šie ir tiešsaistes mazumtirgotāji), un jūs izvēlaties, kur vēlaties iegādāties, pamatojoties uz jūsu prasībām. Tāpat arī Remix gadījumā mums ir iespēja izvietot viedo līgumu un pārbaudīt viedo līgumu. Nolaižamajā izvēlnē blakus vides etiķetei ir trīs atlases
    • JavaScript VM - vietējais Ethereum viens mezgls tiek izvērsts pārlūkprogrammas atmiņā un nodrošina 5 priekšfinansētus testa kontus, kurus var izmantot darījumam (izvietošana, funkciju izsaukšana)
    • Injected Web3 Provide - tas balstās uz MetaMask. Metamask ir kā starpnieks vai starpnieks, kas ļauj tīmekļa lietojumprogrammām mijiedarboties ar viedo līgumu. Metamask nodrošina iespēju pārvaldīt identitātes un arī parakstīt darījumus, kas jānosūta ethereum tīklam. Šis starpnieks vai 3rdpuse sniedz jums palīdzību, lai noteiktu blokķēdes tīklu, kurā viedais līgums tiks izvietots.
    • Web3 nodrošinātājs - ja izmantojat vietējo Ethereum mezglu un ir pieejams RPC galapunkts, šo opciju var izmantot. Viedais līgums tiks izvietots vietējā Ethereum mezglā.
  • Konti: šī informācija tiek aizpildīta, pamatojoties uz izvēlēto vidi. Piemēram. JavaScript VM nodrošina 5 priekšfinansētus testa kontus. Web3 nodrošinātāja un Injected Web3 gadījumā nenodrošina priekšfinansētus testa kontus.
  • Gāzes limits: Tas nosaka maksimālo gāzes daudzumu, ko iniciators ir gatavs tērēt jebkuram darījumam. Šī ir vieta, kur pasargāties no bezgalīgas cilpas un visu konta līdzekļu iztērēšanas bezgalīgas cilpas stāvokļa gadījumā.
  • Vērtība: vērtība, kas, iespējams, būs nepieciešama nosūtīšanai, ieviešot viedo līgumu. Šī ir neobligāta vērtība.

Lai izvietotu līgumu, atlasiet JavaScript VM opciju, nolaižamajā kontu sarakstā atlasiet pirmo kontu, atzīmējiet konta atlikumu (100 ēteru).

Pārliecinieties, vai viedā līguma nosaukums ir PurchaseOrder, noklikšķiniet uz izvietot. Galvenās darbības, kas notiks

  1. Konta atlikums mainās no 100 ēteriem uz 99,999999 ēteriem, atskaitītā summa ir darījuma izmaksas viedā līguma ieviešanai.
  2. Saskaņā ar izvietoto līgumu parādīsies jauna viedā līguma sadaļa, kas arī norādīs jaunā viedā līguma adresi.0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. Konsoles logā parādīsies šāda informācija
    1. Transaction hash - unikāli identificē līguma izvietošanu
    2. Darījuma izmaksas
    3. Līguma adrese

Mijiedarbība ar izvietoto līgumu

  1. Saskaņā ar izvietoto līgumu ir pieejamas divas mijiedarbības metodes: update_quantity un get_quantity.
  2. Abas šīs mijiedarbības metodes ir publiskās metodes, kas noteiktas “Pirkuma pasūtījuma” līgumā.
  3. Atjaunināšanas daudzums “update_quantity” metodei nepieciešams ievades parametrs, tātad ievades lodziņš.
  4. Iegūt daudzumu “get_quantity” metode izgūst produkta_apjoma vērtību.
  5. Pārbaudīsim, kas notiek, kad tiek izsaukts get_quantity, tiek parādīta atgriešanās vērtība 100, kas tika inicializēta konstruktorā. Tas neizraisa darījumu
  6. Izmantosim update_quantity un kā ievadi norādīsim 30. Tas izraisa darījumu

Īsumā, jebkura darbība, kas izraisa rakstīšanas darbību līdz līguma stāvoklim (t.i., maina līguma mainīgos), radīs darījumu.

Jebkura darbība, kas tikai nolasa līguma stāvokli, neizraisa darījumu.

Gudra līguma izstrādes secinājums

Ar to mēs tikko esam izveidojuši savu pirmo viedo līgumu, tikai saskrāpējot cietības virsmu. Mēs tikko redzējām, kas nepieciešams viedā līguma pārbaudei, sākot no viedā līguma ieviešanas līdz darījumu uzsākšanai.

Nākamajā emuārā, kas ir viedo līgumu izstrādes sērijas turpinājums, mēs iedziļināsimies pamatīgākajos pamatos, dziļāk ienirstot viedo līgumu ieviešanā.

Ar to es to secinu Gudrs līgums attīstības emuārs. Es ceru, ka jums patika lasīt šo emuāru un atradāt to informatīvu.

EsJa vēlaties apgūt viedos līgumus, veidot karjeru Blockchain domēnā un iegūt zināšanas Ethereum programmēšanā, reģistrējieties tiešsaistē tiešsaistē šeit ir pieejams 24 * 7 atbalsts, kas palīdzēs jums visu mācību laiku.

Vai mums ir jautājums? Lūdzu, pieminējiet to komentāru sadaļā “Viedā līguma izstrāde”, un mēs ar jums sazināsimiessv.