Kuinka kirjoittaa ensimmäinen älykäs sopimus?



Opi älykkään sopimuksen kehittämisen perusteet ja aloita ensimmäisen älykkään sopimuksen kirjoittaminen. Opit myös testaamaan älykkään sopimuksen.

vuonna , olet oppinut mitä älykkäät sopimukset ovat, erilaisista älykkäistä sopimuskielistä ja kuinka perustaa älykäs sopimusten kehitysympäristö. Tässä artikkelissa opit rakentamaan ensimmäisen älykkään sopimuksen. Aion käyttääRemix IDE älykkään sopimuksen kehittämiseksi ja testaamiseksi.

Seuraavat aiheet käsitellään tässä älykkään sopimuksen kehittämisoppaassa:





Älykkään sopimuksen rakentaminen

Yksinkertainen ostotilauksen älykäs sopimus kehitetään osana tätä blogisarjaa. Tämän sarjan edetessä ja kun otetaan käyttöön uusia vakauden ohjelmointikielen käsitteitä, ostotilausten älykäs sopimus kehittyy ja paranee.



Älykkään sopimuksen rakenne

Vakavuuden älykäs sopimus on pohjimmiltaan joukko seuraavia

  • tiedot - joka ylläpitää sopimuksen nykytilaa
  • toiminto - jotka soveltavat logiikkaa siirtämään sopimuksen tilaa

Vakaa älykkäät sopimukset noudattavat vakiorakennetta. Mikä tahansa älykäs sopimus alkaa seuraavalla lausunnolla



Pragma-direktiivi

”Pragma” -avainsanaa voidaan käyttää tiettyjen kääntäjän ominaisuuksien tai tarkistusten käyttöönottoon. Alla oleva lauseke määrittää, että lähdetiedosto (älykäs sopimus) ei käänny kääntäjän kanssa aikaisemmin kuin 0.4.0 ja kääntäjän versio 0.6.0 jälkeen. Tämä vakuutus varmistaa, ettei tahatonta toimintaa esiinny, kun uusi kääntäjäversio otetaan käyttöön.

käytännön kiinteys> = 0,4,0<=0.6.0 

Sopimusilmoitus

Sopimus ilmoitetaan avainsanalla ”sopimus”. Tämä julistaa tyhjän sopimuksen, joka tunnistetaan nimellä 'PurchaseOrder'.

sopimus PurchaseOrder {}

Asiaankuuluvien tietojen tallentaminen sopimukseen

Jokainen sopimus tai yleisesti ottaen jokainen ohjelma saattaa vaatia jonkin verran tietojen tallentamista. Tietojen lisääminen ohjelmaan tarjoaa joustavuutta. Siirtyminen ohjelman kovakoodatuista arvoista käyttäjän antamiin arvoihin on tärkeä ominaisuus. Muuttujien avulla voit tallentaa tietoja, merkitä niitä, hakea tietoja ja käsitellä niitä.

Älykäs sopimusten kehittäminen: muuttujien esittely

Vakiona muuttujat ovat kahden tyyppisiä

  1. Arvon tyyppi: Tämän tyyppiset muuttujat välitetään arvon mukaan, ts. Ne kopioidaan aina, kun niitä käytetään funktion argumentteina tai tehtävissä. Esimerkiksi: kokonaisluvut, boolean osoitteet jne.
  2. Viitetyypit: Tämäntyyppiset muuttujat ovat monimutkaisia ​​ja ne välitetään viitteenä, nämä muuttujat eivät sovi 256-bittisiin ja niitä on hallittava huolellisesti, koska niiden kopioiminen on kallista.

Tietojen lisääminen älykkääseen sopimukseen

Lisätään sopimukseen tietomuuttuja. Jokaista ostotilausta varten siihen on oltava jonkin verran tuotetta. Lisätään muuttuja product_quantity, joka on tietotyyppinen kokonaisluku tai luku.

java addactionlistener (tämä)

Muuttuja, jonka nyt esitämme, on allekirjoittamaton kokonaisluku ja sitä edustaa uint256, 256 merkitsee tässä 256 bitin tallennustilaa.

  • U - allekirjoittamaton (eli tämä tyyppi voi edustaa vain positiivisia kokonaislukuja, ei positiivisia ja negatiivisia kokonaislukuja)
  • INT - kokonaisluku
  • 256-256 bittiä
  • uint256: n vähimmäisarvo voidaan määrittää on 0
  • uint256: n suurin arvo voidaan määrittää on 2 ^ 256-1 [erittäin suuri määrä]

Tuotemäärä on vain positiivinen arvo ja nykyinen oletus on, että aiomme palvella erittäin suurta arvoa tuotemäärälle.

Ilmoitettu muuttuja ”product_quantity” on osa sopimuksen tilaa ja siten pysyy voimassa tai tallennetaan sopimusalueeseen. Tällä hetkellä tämän muuttujan oletusarvo on 0.

sopimus PurchaseOrder {uint256 product_quantity}

Rakentajan määrittely

Rakentaja kutsutaan, kun sopimus otetaan käyttöön. Rakentaja alustaa sopimuksen joillakin arvoilla. Nykyisessä skenaariossa tuotemääräksi asetetaan 100, kun sopimus otetaan käyttöön. Parametroitu konstruktori voidaan myös luoda välittämällä muuttuja ja alustamalla tuotemäärä käyttämällä välitettyä arvoa.

Avainkohta, joka tässä yhteydessä on huomioitava, on konstruktoriin liittyvä pääsymodifikaattori “public”. Julkinen avainsana määrittää, että kuka tahansa voi käyttää tätä toimintoa, tämä ei ole rajoitettu toiminto.

rakentaja () public {product_quantity = 100}

Funktioiden lisääminen

Lisää nyt toiminto, jotta ohjelmastamme tulisi interaktiivinen. Toiminnot ovat ohjattuja ominaisuuksia, jotka voidaan lisätä ohjelmaan. Mitä tahansa toimintoa edeltää avainsanatoiminto. Kaiken kaikkiaan toimintoilmoitus näyttää tältä' toiminto ”.

Hanki toiminto

Yksi yleisimmistä vaatimuksista mille tahansa ohjelmalle on lukea tallennettu arvo. Seuraavassa sopimuksessa meidän on luettava 'tuotteen_määrä' -arvo. Tämän ominaisuuden tarjoamiseksi lisätään luku- tai hakutoiminto. Tässä toiminnossa emme tee mitään manipulointia tallennettuun arvoon, haemme vain tallennettua arvoa.

Hajotetaan nyt get-funktiomme (get_quantity)

Ei. Avainsana Arvo
yksi get_quantity (){parametreja ei välitetä}
2 julkinen{kuka tahansa voi käyttää toimintoa}
3 näkymä{tarkoittaa funktiota vain lukee sopimuksen tilan, ei muuta sopimuksen tilaa, joten näkymä}
4 palauttaa muuttujan, jonka tyyppi on uint256 {määritetty, mitä funktio palauttaa}
funktio get_quantity () julkinen näkymä palauttaa (uint256) {return product_quantity}

Setterin toiminnot

Tietojen lukeminen on välttämätöntä ja olemme saavuttaneet sen viimeisessä osassa, mutta suurin osa skenaariosta vaatii myös kykyä kirjoittaa ja päivittää tietoja myös. Tämä erityisominaisuus saadaan lisäämällä asetintoiminto. Tämä toiminto ottaa käyttäjältä arvon syöttöparametrin muodossa. Käyttämällä käyttäjän funktiolle antamaa arvoa muuttujan 'product_quantity' arvo kirjoitetaan / päivitetään.

Hajotetaan nyt asetettu toiminto (päivitys_määrä)

Lisäämällä toiminto tuotemäärän arvon päivittämiseksi

Ei. Avainsana Arvo
yksi update_quantity (uint256-arvo){tyypin uint256 parametriarvo välitetään}
2 julkinen{kuka tahansa voi käyttää toimintoa}
3 Ei vaadita, koska toiminnot päivittävät tilaa
4 palauttaa muuttujan, jonka tyyppi on uint256 (määritetään funktion palauttama)
function update_quantity (uint256-arvo) public {product_quantity = product_quantity + value}

Yhdistämällä kaikki tämä yhteen, näin koko sopimuksen pitäisi näyttää.

käytännön kiinteys> = 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 } } 

Älykkään sopimuksen käyttöönotto

miten kääntää Java-koodi

Aika testata älykäs sopimus. Tämän älykkään sopimuksen testaamiseksi käytämme Remix Online IDE .

Remix on verkkopeli ethereum älykäs sopimus . Remix on täysin selainpohjainen. Remix tarjoaa sinulle online-IDE: n (integroitu kehitysympäristö), johon voit kirjoittaa älykkäät sopimuksesi. Remix tarjoaa sinulle online-vakauden kääntäjäominaisuuden. Remix IDE: n älykäs sopimus voidaan kääntää saumattomasti käyttämällä tiettyä kääntäjäversiota.

Remix tarjoaa myös mahdollisuuden testata älykäs sopimus nopeasti.

Remix tarjoaa täydellisen työkalupaketin älykkään sopimuksen kehittämiseen ja älykkään sopimuksen testaamiseen ilman asennusta paikalliselle koneellesi. Tästä on valtava hyöty aloittaessa vakavuudella, koska kehittäjien on vain keskityttävä älykkään sopimuksen kirjoittamiseen, pikemminkin huolehdittava infrastruktuurista.

Remix IDE: n avulla tarvitset vain selaimen ja Internet-yhteyden, jotta pääset alkuun älykkään sopimusten kehittämisen kanssa. Nopea kehitys, testaus ja validointi älykkääseen sopimukseen.

Remix on äskettäin päivittänyt käyttöliittymänsä.

Remix-UI-Smart-Contracts-Edureka

Napsauta tiedostokuvaketta, kuten yllä olevassa kuvassa korostetaan, File Explorer avautuu.

  1. Napsauttamalla plus-kuvaketta voidaan luoda uusi tiedosto, nimetä tiedosto PurchaseOrder.sol
  2. Tämä luo tyhjän tiedoston nimeltä PurchaseOrder.sol, napsauta ja avaa tämä tiedosto.
  3. Kopioi koko sopimus PurchaseOrder.sol-tiedostoon.
  4. Napsauta toista kuvaketta, vasemmassa valikossa juuri tiedostokuvakkeen alapuolella, solidity compiler -vaihtoehdon pitäisi näkyä.
  5. Valitse Kääntäjä-otsikon alla kääntäjän versio. Nykyinen valittu versio on 0.5.8.
  6. Lähetä käännös kääntäjäversiosta, napsauta 'Compile PurchaseOrder.sol'. Tämä kokoaa älykkään sopimuksen.

7. Kun älykäs sopimus on koottu onnistuneesti, napsauta 'Kokoamisen tiedot' -painiketta ja seuraavien yksityiskohtien pitäisi tulla esiin. Jälkikokoamisen jälkeen saatavilla on kaksi keskeistä tietoa

    • ABI - Sovelluksen binaarinen käyttöliittymä. Tämä on JSON-tiedosto, joka kertoo kaikki älykkäässä sopimuksessa paljastetut menetelmät sekä niiden metatiedot. Lisää tästä keskustellaan seuraavissa blogeissa.
    • Bytecode- EVM (Ethereum virtual machine) -toimintakoodi, älykäs sopimuslogiikka muunnetaan kääntämisen tavuiksi.

8. Älykkään sopimuksen testaamiseksi älykäs sopimus on otettava käyttöön. Ota älykäs sopimus käyttöön napsauttamalla seuraavaa kuvaketta vasemmassa valikossa, kääntökuvakkeen alla. Seuraava näyttö tulee näkyviin. Älykkään sopimuksen testaamiseksi älykäs sopimus on otettava käyttöön. Ota älykäs sopimus käyttöön napsauttamalla seuraavaa kuvaketta vasemmassa valikossa, kääntökuvakkeen alla. Seuraava näyttö tulee näkyviin.

Käyttöönottovaihtoehto

Käyttöönottonäyttö tarjoaa pari valintaa, katsotaanpa niitä yksi kerrallaan.

  • Ympäristö: Tätä voidaan ajatella samanlaisena vaihtoehtona kuin kannettavan tietokoneen ostaminen joko Amazonista, Flipkartista, Neweggistä (kaikki nämä ovat verkkokauppiaita), joista valitset vaatimuksen mukaan, mistä haluat ostaa. Samoin Remixin tapauksessa meillä on mahdollisuus ottaa käyttöön älykäs sopimus ja testata älykäs sopimus. Ympäristötarran vieressä olevassa avattavassa valikossa on kolme valintaa
    • JavaScript VM - paikallinen Ethereum-yksisolmu kehrätään selaimen muistiin ja tarjoaa 5 ennakkorahoitettua testitiliä, joita voidaan käyttää tapahtumaan (käyttöönotto, toimintojen kutsuminen)
    • Injected Web3 Provide - Tämä perustuu MetaMaskiin. Metamask on kuin välittäjä tai välittäjä, jonka avulla verkkosovellukset voivat olla vuorovaikutuksessa älykkään sopimuksen kanssa. Metamask tarjoaa mahdollisuuden hallita identiteettejä ja allekirjoittaa myös ethereum-verkkoon lähetettävät tapahtumat.rdosapuoli auttaa sinua määrittämään blockchain-verkon, johon älykäs sopimus otetaan käyttöön.
    • Web3-palveluntarjoaja - jos sinulla on paikallinen Ethereum-solmu ja RPC-päätepiste on käytettävissä, tätä vaihtoehtoa voidaan käyttää. Älykäs sopimus otetaan käyttöön paikalliseen Ethereum-solmuun.
  • Tilit: Nämä tiedot täytetään valitun ympäristön perusteella. Esimerkiksi. JavaScript VM tarjoaa 5 ennakkorahoitettua testitiliä. Jos Web3-palveluntarjoaja ja Injected Web3 eivät tarjoa ennakkorahoitettuja testitilejä.
  • Kaasuraja: Tämä määrittää enimmäismäärän kaasua, jonka aloittaja on valmis käyttämään mihinkään tapahtumaan. Tämä on paikka suojautua loputtomalta silmukalta ja tilin kaikkien varojen ehtymiseltä äärettömän silmukan kunnossa.
  • Arvo: Arvo, jota voidaan tarvita lähettämään älykästä sopimusta käytettäessä. Tämä on valinnainen arvo.

Sopimuksen käyttöönottamiseksi valitse JavaScript VM -vaihtoehto, valitse ensimmäinen tili avattavasta tileistä, huomioi tilin saldo (100 eetteriä).

Varmista, että älykkään sopimuksen nimi on PurchaseOrder, napsauta käyttöönottoa. Avaintoiminnot, joita tapahtuu

  1. Tilin saldo muuttuu 100 eetteristä 99,999999 eetteriin, vähennetty summa on älykkään sopimuksen käyttöönoton transaktiokustannus.
  2. Käyttöönotetun sopimuksen mukaan uusi ruutu älykkääseen sopimukseen ilmestyy, mikä myös antaa uuden älykkään sopimuksen osoitteen tältä (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. Seuraavat tiedot ilmestyvät konsoli-ikkunaan
    1. Transaction hash - yksilöi sopimuksen käyttöönoton
    2. Siirtomaksu
    3. Sopimusosoite

Vuorovaikutus käyttöönotetun sopimuksen kanssa

  1. Käyttöönotetun sopimuksen mukaan seuraavat kaksi vuorovaikutustapaa ovat käytettävissä päivitysmäärä ja get_määrä.
  2. Molemmat näistä vuorovaikutustavoista ovat 'Ostotilaus' -sopimuksessa määriteltyjä julkisia menetelmiä.
  3. Päivitä määrä ”update_quantity” -menetelmä vaatii syöttöparametrin, joten syöttöruutu.
  4. Hae määrä 'get_quantity' -menetelmä hakee tuotemäärän arvon.
  5. Tarkistetaan, mitä tapahtuu, kun get_quantity kutsutaan, näytetään palautusarvo 100, joka alustettiin konstruktorissa. Tämä ei aiheuta tapahtumaa
  6. Käynnistetäänpä päivitysmäärä ja annetaan syötteenä 30. Tämä aiheuttaa tapahtuman

Pähkinänkuoressa kaikki operaatiot, jotka aiheuttavat kirjoitusoperaation sopimuksen tilaan (ts. Muuttavat sopimuksen muuttujia), johtavat tapahtumaan.

minun sql-oppaat aloittelijoille

Mikään operaatio, joka vain lukee sopimuksen tilan, ei aiheuta liiketointa.

Älykäs sopimuskehitys

Tällä tavoin olemme juuri luoneet ensimmäisen älykkään sopimuksen, joka vain raapii vakauden pintaa. Olemme juuri nähneet, mitä älykkään sopimuksen testaaminen vaatii heti älykkään sopimuksen käyttöönotosta liiketoimien aloittamiseen.

Seuraavassa blogissa, joka on jatkoa älykkäiden sopimusten kehittämissarjalle, aiomme syventyä vakavaraisuuden perusteisiin ja syventyä älykkääseen sopimusten käyttöönottoon.

Siten päätän tämän Älykäs sopimus kehitysblogi. Toivottavasti nautit tämän blogin lukemisesta ja pidit siitä informatiivisena.

MinäJos haluat oppia älykkäitä sopimuksia, rakentaa uraa Blockchainin toimialueella ja hankkia asiantuntemusta Ethereum-ohjelmoinnista, ilmoittaudu live-online-verkkoon tässä mukana tulee 24 * 7 -tuki, joka ohjaa sinua koko oppimisjaksosi ajan.

Onko sinulla kysymys meille? Mainitse se ”Älykkäiden sopimusten kehittäminen” -osiossa, niin otamme sinuun yhteyttä aluksist.