Kuidas kirjutada oma esimene tark leping?



Õppige nutika lepingu arendamise põhitõdesid ja alustage oma esimese nutika lepingu kirjutamist. Samuti saate teada, kuidas nutikat lepingut testida.

Aastal , olete õppinud, mis on nutikad lepingud, erinevad nutikad lepingute keeled ja kuidas luua nutika lepingu arendamise keskkond. Selles artiklis saate teada, kuidas luua oma esimene nutikas leping. Ma kasutanRemix IDE nutika lepingu arendamiseks ja testimiseks.

Allpool olevaid teemasid käsitletakse selles nutika lepingu arendamise õpetuses:





Aruka lepingu loomine

Selle ajaveebisarja osana töötatakse välja lihtne ostutellimuse nutikas leping. Selle seeria edenedes ja uute usaldusväärsuse programmeerimiskeele kontseptsioonide kasutamisel areneb ja paraneb ostutellimuse nutikas leping.



Nutika lepingu struktuur

Solidity nutikas leping on sisuliselt järgmiste kogum

  • andmed - mis säilitab lepingu praeguse seisu
  • funktsioon - mis kasutavad lepingu oleku üleminekuks loogikat

Tugevusega nutikad lepingud järgivad standardset struktuuri. Iga tark leping algab järgmise avaldusega



Pragma direktiiv

Märksõna “pragma” saab kasutada teatud kompilaatori funktsioonide või kontrollide lubamiseks. Allpool olev väide määratleb, et lähtefaili (nutikas leping) ei kompileerita varem kui 0.4.0 kompilaatoriga ja kompilaatori versiooniga pärast 0.6.0. See deklaratsioon tagab, et uue kompilaatori versiooni kasutamisel ei toimu soovimatut käitumist.

pragma tahkus> = 0,4,0<=0.6.0 

Lepingu deklaratsioon

Leping deklareeritakse märksõnaga “leping”. See deklareerib tühja lepingu, mis on tähistatud nimega “PurchaseOrder”.

leping PurchaseOrder {}

Asjakohaste andmete säilitamine lepingus

Igas lepingus või üldises plaanis võib iga programm nõuda andmete salvestamist. Andmete lisamine programmile tagab selle teatud paindlikkuse. Programmis kõvasti kodeeritud väärtustest eemaldumine kasutaja poolt pakutavatele väärtustele on oluline funktsioon. Muutujad võimaldavad teil andmeid salvestada, neid sildistada, andmeid hankida ja andmetega manipuleerida.

Nutikas lepingute väljatöötamine: muutujate tutvustamine

Tugevuse mõttes on muutujaid kahte tüüpi

  1. Väärtuse tüüp: Seda tüüpi muutujad edastatakse väärtuse järgi, st need kopeeritakse alati, kui neid kasutatakse funktsiooni argumentidena või määramistena. Näiteks: täisarvud, booleansi aadressid jne.
  2. Viite tüübid: Seda tüüpi muutujad on keerukat tüüpi ja edastatakse viitena, need muutujad ei mahu 256 bitisse ja neid tuleb hoolikalt hallata, kuna nende kopeerimine on kallis.

Andmete lisamine nutikasse lepingusse

Lisame lepingule mõne andmemuutuja. Iga ostutellimuse jaoks peab olema seotud teatud kogus toodet. Lisagem muutuja product_quantity, mis on andmetüübiks täisarv või arv.

andmete segamine tabelis 10

Muutuja, mille me praegu kasutusele võtame, on märkimata täisarv ja seda tähistab uint256, 256 tähistab siin 256-bitist salvestusruumi.

  • U - allkirjastamata (see tähendab, et see tüüp võib tähistada ainult positiivseid täisarvusid, mitte positiivseid ja negatiivseid täisarvusid)
  • INT - täisarv
  • 256 - 256 bitti
  • minimaalne väärtus uint256, mida saab määrata, on 0
  • Uint256 maksimaalne väärtus on 2 ^ 256-1 [väga suur arv]

Toote kogus on ainult positiivne väärtus ja praegune eeldus on, et me kavatseme rahuldada toote koguse väga suurt väärtust.

Deklareeritud muutuja „product_quantity” on osa lepingu olekust ja seega püsib või salvestatakse lepinguruumis. Praegu on selle muutuja väärtuseks vaikimisi 0.

leping PurchaseOrder {uint256 product_quantity}

Konstruktori määratlemine

Ehitaja kutsutakse lepingu kasutusele võtmisel. Konstruktor lähtestab lepingu mõne väärtusega. Praeguse stsenaariumi korral määratakse toote kasutuselevõtuks toote kogus 100-le. Parameetrilise konstruktori saab luua ka muutuja edastamise ja toote_koguse initsialiseerimise kaudu, kasutades edastatud väärtust.

Siinkohal tuleb märkida võtmepunkt, mis on konstruktoriga seotud juurdepääsu modifikaator „avalik”. Avalik märksõna täpsustab, et kõik saavad sellele funktsioonile juurde pääseda, see pole piiratud funktsioon.

konstruktor () public {product_quantity = 100}

Funktsioonide lisamine

Lisagem nüüd funktsioon, et muuta meie programm interaktiivseks. Funktsioonid on juhitavad võimalused, mida saab programmile lisada. Igale funktsioonile eelneb märksõna funktsioon. Üldiselt näeb see funktsiooni deklaratsioon välja' funktsioon ”.

Hangi funktsioon

Üks levinumaid nõudeid mis tahes programmi jaoks on salvestatud väärtuse lugemine. Järgmises lepingus peame lugema väärtuse „toote_kogus”. Selle võimaluse pakkumiseks lisatakse lugemis- või hankimisfunktsioon. Selles funktsioonis ei tehta me salvestatud väärtusega mingeid manipuleerimisi, me lihtsalt toome salvestatud väärtused kätte.

klassi objektide massiiv java

Jaotagem nüüd oma hankimisfunktsioon (get_quantity)

Ei Märksõna Väärtus
üks get_quantity (){parameetreid ei edastata}
2 avalik{funktsioonile pääsevad juurde kõik}
3 vaade{tähistab, et funktsioon loeb ainult lepingu olekut, ei muuda lepingu olekut, seega vaade}
4 tagastab muutuja tüüpi uint256 {määratles funktsiooni tagastatava}
funktsioon get_quantity () avalik vaade tagastab (uint256) {return product_quantity}

Setteri funktsioonid

Andmete lugemine on vajalik ja viimases osas oleme sellega hakkama saanud, kuid suurem osa stsenaariumi eeldab ka andmete kirjutamise / värskendamise võimet. Selle konkreetse võimaluse pakub setter-funktsiooni lisamine. See funktsioon võtab kasutajalt väärtuse sisendparameetri kujul. Kasutades kasutaja poolt funktsioonile antud väärtust, kirjutatakse / värskendatakse muutuja „product_quantity” väärtus.

Jaotagem nüüd meie määratud funktsioon (update_quantity)

Funktsiooni lisamine toote koguse väärtuse värskendamiseks

Ei Märksõna Väärtus
üks update_quantity (väärtus uint256){tüübi uint256 parameetri väärtus on edastatud}
2 avalik{funktsioonile pääsevad juurde kõik}
3 Pole vajalik, kuna olek funktsioone värskendab
4 tagastab muutuja tüüpi uint256 (määratletud, mida funktsioon tagastab)
funktsiooni update_quantity (väärtus uint256) public {product_quantity = product_quantity + value}

Kui kõik see kokku ühendada, peaks üldine leping välja nägema.

pragma tahkus> = 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 } } 

Nutika lepingu juurutamine

Aeg nutika lepingu testimiseks. Selle nutika lepingu testimiseks kasutame Remix Online IDE .

Remix on veebisaidi mänguväljak ethereumi tark leping . Remix on täielikult brauseripõhine. Remix pakub teile veebipõhist IDE-d (integreeritud arenduskeskkond), kuhu saate kirjutada oma nutikad lepingud. Remix pakub veebipõhist usaldusväärsuse kompilaatori võimalust. Remix IDE-s asuva nutika lepingu saab koostada sujuvalt konkreetse kompilaatori versiooni abil.

Remix pakub ka nutika lepingu kiiret testimist.

Remix pakub täielikku tööriistakomplekti nutika lepingu väljatöötamiseks ja nutika lepingu testimiseks, ilma et installiksite oma kohalikku masinat. See on tohutult kasulik alustades kindlusest, sest arendajad peavad lihtsalt keskenduma nutika lepingu kirjutamisele, pigem muretsema infrastruktuuri pärast.

kuidas lõpetada programm javas

Remix IDE-ga on targa lepingu arendamise alustamiseks vaja ainult brauserit ja Interneti-ühendust. Nutika lepingu idee kiire väljatöötamine, testimine ja kinnitamine.

Remix on hiljuti nende kasutajaliidest täiendanud.

Remix-UI-Smart-Contracts-Edureka

Klõpsake ülaltoodud pildil esile tõstetud failiikoonil, avaneb failide uurija.

  1. Plussikoonil klõpsates saab luua uue faili, nimetage fail PurchaseOrder.sol
  2. See loob tühja faili nimega PurchaseOrder.sol, klõpsake ja avage see fail.
  3. Kopeerime kogu lepingu kleepimiseks PurchaseOrder.sol.
  4. Klõpsake teisel ikoonil, vasakpoolses menüüs failiikooni all peaks ilmuma solidaarsuse kompilaatori valik.
  5. Valige sildi Compiler alt kompilaatori versioon. Praegune valitud versioon on 0.5.8.
  6. Postitage kompilaatori versiooni valik, klõpsake nuppu 'Koosta PurchaseOrder.sol'. See koostab nutika lepingu.

7. Kui nutikas leping on edukalt kompileeritud, klõpsake nuppu „Koostamise üksikasjad” ja järgmised üksikasjad peaksid ilmnema. Koostamise järel tehakse kättesaadavaks kaks põhiteavet

    • ABI - rakenduse binaarne liides. See on JSON-fail, mis kirjeldab üksikasjalikult kõiki nutilepingus eksponeeritud meetodeid koos meetodite metaandmetega. Lisateavet selle kohta arutatakse järgmistes ajaveebides.
    • Bytecode- EVM-i (Ethereumi virtuaalmasina) toimingukood, tark lepingu loogika teisendatakse kompileerimisel baidekoodiks.

8. Nutika lepingu testimiseks tuleb arukas leping juurutada. Nutika lepingu juurutamiseks klõpsake ikooni kompileerimine all vasakul olevas menüüs järgmisel ikoonil. Ilmub järgmine ekraan. Nutika lepingu testimiseks tuleb nutikas leping juurutada. Nutika lepingu juurutamiseks klõpsake ikooni kompileerimine all vasakul olevas menüüs järgmist ikooni. Ilmub järgmine ekraan.

Kasutusvõimalus

Juurutusekraan pakub paar valikut, vaatame neid ükshaaval.

  • Keskkond: seda võib mõelda sarnaselt valikule osta sülearvuti Amazonist, Flipkartist või Neweggist (kõik need on Interneti-jaemüüjad), kellelt saate oma soovist lähtuvalt valida, kust soovite osta. Samamoodi on meil Remixi puhul võimalus nutilepingut juurutada ja nutilepingut testida. Keskkonnasildi kõrval olev rippmenüü pakub kolme valikut
    • JavaScripti VM - kohalik Ethereumi üksik sõlme keritakse brauseri mällu ja pakub 5 ettemakstud testkontot, mida saab tehingu jaoks kasutada (juurutamine, funktsioonide kutsumine)
    • Injected Web3 Provide - see tugineb MetaMaskile. Metamask on nagu maakler või vahendaja, mis võimaldab veebirakendustel nutika lepinguga suhelda. Metamask pakub võimalust hallata identiteete ja allkirjastada ka Ethereumi võrku saadetavad tehingud. See vahendaja või 3rdosapool annab teile abi plokiahelavõrgu määramiseks, kuhu nutikas leping juurutatakse.
    • Web3 pakkuja - kui teil on kohalik Ethereumi sõlm ja RPC lõpp-punkt on saadaval, saab seda valikut kasutada. Nutikas leping juurutatakse kohalikku Ethereumi sõlme.
  • Kontod: see teave täidetakse valitud keskkonna põhjal. Näiteks. JavaScripti VM pakub 5 ettemakstud testkontot. Kui Web3 pakkuja ja Injected Web3 ei anna ettemakstud testkontosid.
  • Gaasilimiit: see määrab maksimaalse gaasikoguse, mille algataja on nõus iga tehingu jaoks kulutama. See on koht, kus kaitsta lõpmatu ahela ja konto kõigi vahendite ammendamise eest lõpmatu ahela olukorra korral.
  • Väärtus: väärtus, mida võib vaja minna nutika lepingu juurutamisel. See on valikuline väärtus.

Lepingu juurutamiseks valige JavaScripti VM-i valik, valige rippmenüüst Kontod esimene konto, märkige konto saldo (100 eetrit).

Veenduge, et kuvatakse nutika lepingu nimi PurchaseOrder, klõpsake juurutamisel. Peamised toimingud, mis juhtuvad

  1. Konto saldo muutub eetrilt 100 eetrilt 99,999999 eetrile, mahaarvatud summa on nutika lepingu kasutuselevõtu tehingukulu.
  2. Juurutatud lepingu järgi ilmub uus nutika lepingu lepingupaneel, mis annab ka uue nutika lepingu aadressi (näiteks see) (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. Konsooliaknas kuvatakse järgmine teave
    1. Tehingu räsi - tuvastab unikaalselt lepingu juurutamise
    2. Tehingu maksumus
    3. Lepingu aadress

Suhtlemine juurutatud lepinguga

  1. Juurutatud lepingu kohaselt on saadaval järgmised kaks suhtlusmeetodit: update_quantity ja get_quantity.
  2. Mõlemad koostoimemeetodid on „Ostutellimuse“ lepingus määratletud avalikud meetodid.
  3. Värskenduskogus „update_quantity” meetod nõuab sisendparameetrit, seega sisendkasti.
  4. Hangi kogus „get_quantity“ meetod hankib toote_koguse väärtuse.
  5. Kontrollime, mis juhtub, kui kutsutakse get_quantity, kuvatakse tagastusväärtus 100, mis initsialiseeriti konstruktoris. See ei põhjusta tehingu toimumist
  6. Käivitame update_quantity ja sisestame sisendiks 30. See põhjustab tehingu toimumise

Lühidalt, mis tahes toiming, mis põhjustab kirjutamise toimingu lepingu olekusse (st muudab lepingu muutujaid), toob kaasa tehingu.

Ükski toiming, mis lihtsalt loeb lepingu olekut, ei põhjusta tehingut.

Nutika lepingu arendamise järeldus

Sellega oleme just loonud oma esimese nutika lepingu, kraapides lihtsalt soliidsuse pinna. Oleme just näinud, mida on targa lepingu testimiseks vaja alates nutika lepingu kasutuselevõtmisest kuni tehingute algatamiseni.

Järgmises ajaveebis, mis on arukate lepingute väljatöötamise seeria jätk, peatume põhjalikumalt usaldusväärsuse alustaladel, süvenedes põhjalikumalt nutika lepingute kasutuselevõtuga.

Sellega järeldan ma seda Nutikas leping arengublogi. Loodan, et teile meeldis seda blogi lugeda ja pidasite seda informatiivseks.

MinaKui soovite õppida nutikaid lepinguid, luua karjääri Blockchaini domeenis ja omandada teadmisi Ethereumi programmeerimise kohta, registreeruge otseülekandes veebis siin on 24 * 7 tugi, mis juhendab teid kogu õppeperioodi vältel.

Kas teil on meile küsimus? Palun mainige seda märkuste jaotises „Nutika lepingute väljatöötamine” ja võtame teiega varakult ühendustst.