Hvordan skriver jeg din første smarte kontrakt?



Lær det grunnleggende om Smart Contract Development og begynn å skrive din første smarte kontrakt. Du vil også vite hvordan du tester den smarte kontrakten.

I , har du lært om hva smarte kontrakter er, forskjellige smarte kontraktsspråk og hvordan du setter opp et smart kontraktsutviklingsmiljø. I denne artikkelen vil du lære hvordan du bygger din første smarte kontrakt. Jeg skal brukeRemix IDE for å utvikle og teste en smart kontrakt.

Følgende emner er dekket i denne smarte veiledningen for utvikling av kontrakter:





Bygg din smarte kontrakt

En enkel kjøpsordre smart kontrakt vil bli utviklet som en del av denne bloggserien. Etter hvert som denne serien utvikler seg og etter hvert som nye konsepter om soliditetsprogrammeringsspråk introduseres, vil den smarte kontrakten for innkjøpsordren utvikle seg og forbedre seg.



Struktur av smart kontrakt

Soliditet smart kontrakt, i hovedsak, er en samling av følgende

  • data - som opprettholder den nåværende tilstanden til kontrakten
  • funksjon - som bruker logikken for å overføre kontraktsstaten

Soliditetskontrakter følger en standard struktur. Enhver smart kontrakt begynner med følgende uttalelse



Pragmadirektivet

Nøkkelordet 'pragma' kan brukes til å aktivere visse kompilatorfunksjoner eller sjekker. Uttalelsen nedenfor definerer at kildefilen (smart kontrakt) ikke vil kompileres med kompilator tidligere enn 0.4.0 og kompilatorversjon etter 0.6.0. Denne erklæringen sikrer at det ikke innføres utilsiktet oppførsel når en ny kompilatorversjon introduseres.

pragmasoliditet> = 0.4.0<=0.6.0 

Kontraktserklæring

Kontrakten er erklært ved hjelp av nøkkelordet 'kontrakt'. Dette erklærer en tom kontrakt som er identifisert med navnet “PurchaseOrder”.

kontrakt PurchaseOrder {}

Lagring av relevante data i kontrakten

Hver kontrakt eller generelt sett kan hvert program kreve for å lagre noen data. Å legge til data i programmet gir det en grad av fleksibilitet. Å bevege seg bort fra hardkodede verdier i programmet til brukerverdier er en viktig funksjon. Variabler lar deg lagre dataene, merke dataene, hente dataene og manipulere dataene.

Smart kontraktutvikling: Introduksjon av variabler

I soliditet er variablene av to typer

  1. Verditype: Denne typen variabler sendes etter verdi, dvs. de kopieres alltid når de brukes som funksjonsargumenter eller i oppgaver. For eksempel: heltall, booleans adresse, etc.
  2. Referansetyper: Denne typen variabler er av komplekse typer og sendes som referanse. Disse variablene passer ikke inn i 256 bit og må håndteres nøye da det er dyrt å kopiere dem.

Legge til data i Smart Contract

La oss legge til noen datavariabler i kontrakten. For hver innkjøpsordre må det være noen mengde produkt tilknyttet. La oss legge til en variabel produktkvantitet som vil være av datatypen heltall eller tall.

løft et tall til en makt i java

Variabelen vi introduserer nå er et usignert heltall og er representert av uint256, 256 betyr her 256 bits lagring.

  • U - usignert (som betyr at denne typen bare kan representere positive heltall, ikke positive og negative heltall)
  • INT - heltall
  • 256 - 256 bits i størrelse
  • minimumsverdien uint256 kan tildeles er 0
  • maksimumsverdi uint256 kan tildeles er 2 ^ 256-1 [et veldig stort antall]

Produktmengde er bare en positiv verdi, og nåværende antagelse er at vi skal imøtekomme en veldig stor verdi for produktmengde.

Variabelen “product_quantity” som er erklært, er en del av kontraktsstatusen og er derfor vedvarende eller lagret i kontraktsområdet. For tiden vil denne variabelen være standard 0.

kontrakt PurchaseOrder {uint256 product_quantity}

Definere konstruktøren

Konstruktøren blir ringt når kontrakten blir distribuert. Konstruktøren initialiserer kontrakten med noen verdier. I det nåværende scenariet er produktmengden satt til 100 når kontrakten distribueres. En parameterisert konstruktør kan også opprettes ved å sende en variabel og initialisere produkt_mengde ved å bruke den passerte verdien.

Nøkkelpunktet som skal bemerkes her er tilgangsmodifikatoren 'offentlig' assosiert med konstruktøren. Offentlige nøkkelord angir at alle kan få tilgang til denne funksjonen, dette er ikke en begrenset funksjon.

hva er de 6 måtene å bruke dette nøkkelordet på?

konstruktør () offentlig {product_quantity = 100}

Legge til funksjoner

La oss nå legge til funksjon for å gjøre programmet vårt interaktivt. Funksjoner er kontrollerte funksjoner som kan legges til et program. Enhver funksjon innledes med søkeordfunksjon. Totalt sett ser funksjonserklæringen ut' funksjon ”.

Få funksjon

En av de vanligste kravene, for noe av programmet, er å lese den lagrede verdien. I den følgende kontrakten trenger vi å lese verdien 'product_quantity'. For å tilveiebringe denne muligheten legges en lese-funksjon eller en get-funksjon til. I denne funksjonen gjør vi ikke noen manipulering av den lagrede verdien, vi henter bare den lagrede verdien.

La oss nå bryte ned get-funksjonen vår (get_quantity)

Nei. Nøkkelord Verdi
en get_quantity (){ingen parametere overføres}
2 offentlig{alle kan få tilgang til funksjonen}
3 utsikt{betyr at funksjonen bare leser kontrakttilstanden, endrer ikke kontrakttilstanden, derav visning}
4 returnerer en variabel av typen uint256 {definert hva som returneres av funksjonen}
funksjon get_quantity () offentlig visning returnerer (uint256) {return product_quantity}

Setter funksjoner

Det er nødvendig å lese dataene, og vi har oppnådd det i den siste delen, men det meste av scenariet krever også muligheten til å skrive / oppdatere dataene også. Denne spesifikke muligheten er gitt ved å legge til en setterfunksjon. Denne funksjonen tar en verdi fra brukeren i form av en inndataparameter. Ved å bruke verdien som er gitt til funksjonen av brukeren, blir verdien av variabelen 'product_quantity' skrevet til / oppdatert.

La oss nå bryte ned vår innstilte funksjon (update_quantity)

Legge til en funksjon for å oppdatere verdien av produktmengden

Nei. Nøkkelord Verdi
en update_quantity (uint256 verdi){parameterverdi av typen uint256 er overført}
2 offentlig{alle kan få tilgang til funksjonen}
3 Ikke nødvendig da staten blir oppdatert av funksjonene
4 returnerer en variabel av typen uint256 (definert hva som returneres av funksjonen)
funksjon update_quantity (uint256 verdi) offentlig {product_quantity = product_quantity + verdi}

Koble alt dette sammen, slik skal den totale kontrakten se ut.

pragmasoliditet> = 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 } } 

Implementering av den smarte kontrakten

På tide å teste den smarte kontrakten. For å teste denne smarte kontrakten, vil vi bruke Remix Online IDE .

Remix er en online lekeplass for ethereum smart kontrakt . Remix er helt nettleserbasert. Remix gir deg et online IDE (integrert utviklingsmiljø) der du kan skrive smarte kontrakter. Remix gir deg en online soliditets kompilatorfunksjon. Den smarte kontrakten i Remix IDE kan kompileres ved hjelp av en spesifikk kompilatorversjon sømløst.

Remix gir også muligheten til raskt å teste smartkontrakten.

Remix gir et komplett verktøysett for å starte utviklingen av smart kontrakt og enhetstesting av smartkontrakten, uten å gjøre noen installasjon på din lokale maskin. Dette er veldig nyttig for å starte med soliditet, ettersom utviklere bare trenger å fokusere på å skrive en smart kontrakt, heller bekymre deg for infrastrukturen.

Med Remix IDE er alt du trenger en nettleser og en internettforbindelse for å komme i gang med smart kontraktutvikling. Rask utvikling, testing og validering av en idé for en smart kontrakt.

Remix har nylig oppgradert brukergrensesnittet.

Remix-UI-Smart-Contracts-Edureka

Klikk på filikonet som fremhevet i bildet ovenfor, filutforskeren åpnes.

  1. Ved å klikke på pluss-ikonet, kan en ny fil opprettes, gi filen navnet PurchaseOrder.sol
  2. Dette vil opprette en tom fil med navnet PurchaseOrder.sol, klikk og åpne denne filen.
  3. La oss kopiere og lime inn hele kontrakten i PurchaseOrder.sol.
  4. Klikk på det andre ikonet, i menyen til venstre rett under filikonet, skal soliditets kompilatoralternativet vises.
  5. Velg kompilatorversjonen under Compiler-etiketten. Den nåværende valgte versjonen er 0.5.8.
  6. Legg ut valg av kompilatorversjon, klikk på “Compile PurchaseOrder.sol”. Dette vil kompilere den smarte kontrakten.

7. Når den smarte kontrakten er kompilert, klikker du på “Kompileringsdetaljer” -knappen, og følgende detaljer skal komme opp. Innleggssammensetning, to viktige opplysninger blir gjort tilgjengelig

    • ABI - Application binært grensesnitt. Dette er en json-fil som beskriver alle metodene som er eksponert i smartkontrakten sammen med metadata om metodene. Mer om dette vil bli diskutert i de påfølgende bloggene.
    • Bytecode- Operasjonskode for EVM (Ethereum virtual machine), Smart kontraktlogikk blir konvertert til bytekoden ved kompilering.

8. For å teste smartkontrakten, må den smarte kontrakten distribueres. For å distribuere den smarte kontrakten, klikk på neste ikon i menyen til venstre, under kompileringsikonet. Følgende skjermbilde vises. For å teste den smarte kontrakten, må den smarte kontrakten distribueres. For å distribuere den smarte kontrakten, klikk på neste ikon i menyen til venstre, under kompileringsikonet. Følgende skjermbilde vises.

Implementeringsalternativ

Distribusjonsskjermen gir et par valg, la oss se på dem en etter en.

overbelastning vs overordnet c ++
  • Miljø: Dette kan tenkes på et alternativ som ligner på å velge å kjøpe en bærbar datamaskin fra enten Amazon, Flipkart, Newegg (alle disse er online forhandler) du tar et valg hvor du vil kjøpe fra, basert på dine krav. På samme måte har vi i tilfelle Remix et alternativ hvor vi skal distribuere den smarte kontrakten og teste den smarte kontrakten. Rullegardinmenyen ved siden av miljøetiketten gir tre valg
    • JavaScript VM - en lokal Ethereum-enkeltnode blir spunnet opp i nettleserminnet og gir 5 forhåndsfinansierte testkontoer som kan brukes til transaksjonen (distribusjon, påkallingsfunksjoner)
    • Injisert Web3 gir - Dette er avhengig av MetaMask. Metamask er som en megler eller mellommann, som lar webapplikasjonene samhandle med den smarte kontrakten. Metamask gir mulighet til å administrere identitetene og også signere transaksjonene som skal sendes til ethereum-nettverket. Denne mellommannen eller 3rdParty gir deg hjelp til å bestemme blockchain-nettverket smartkontrakten skal distribueres til.
    • Web3-leverandør - hvis du kjører en lokal Ethereum-node og RPC-endepunkt er tilgjengelig, kan dette alternativet brukes. Smart kontrakt vil bli distribuert til den lokale Ethereum-noden.
  • Kontoer: Denne informasjonen fylles ut basert på det valgte miljøet. For eksempel. JavaScript VM gir 5 forhåndsfinansierte testkontoer. I tilfelle Web3-leverandør og Injected Web3, må du ikke gi forhåndsfinansierte testkontoer.
  • Gassgrense: Dette definerer den maksimale mengden gass initiativtakeren er villig til å bruke for enhver transaksjon. Dette er stedet å beskytte mot uendelig sløyfe og tømme alle midlene på kontoen i tilfelle uendelig sløyfetilstand.
  • Verdi: Verdien som kan være nødvendig å sende over mens du distribuerer smartkontrakten. Dette er en valgfri verdi.

For å distribuere kontrakten, velg JavaScript VM-alternativet, velg den første kontoen fra rullegardinmenyen, noter kontosaldoen (100 eter).

Forsikre deg om at det smarte kontraktsnavnet som vises er PurchaseOrder, klikker du på deploy. Nøkkelhandlinger som vil skje

  1. Kontosaldoen endres fra 100 eter til 99,999999 eter, beløpet som er trukket er transaksjonskostnaden for å distribuere den smarte kontrakten.
  2. Under distribuert kontrakt vil en ny flis for smart kontrakt vises, som også vil gi adressen til den nye smarte kontrakten noe som dette (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. I konsollvinduet vises følgende informasjon
    1. Transaksjonshash - identifiserer unik distribusjon av kontrakten
    2. Transaksjonskostnad
    3. Kontraktsadresse

Samhandler med den utplasserte kontrakten

  1. I henhold til den distribuerte kontrakten er følgende to interaksjonsmetoder tilgjengelige update_quantity og get_quantity.
  2. Begge disse samhandlingsmetodene er de offentlige metodene som er definert i 'Innkjøpsordre' -kontrakten.
  3. Oppdateringsmengde “update_quantity” -metoden krever en inndataparameter, derav inndataboksen.
  4. Få kvantitet “get_quantity” -metoden henter verdien av product_quantity.
  5. La oss sjekke hva som skjer når get_quantity påkalles, returverdien 100 vises, som ble initialisert i konstruktøren. Dette fører ikke til at en transaksjon skjer
  6. La oss påkalle update_quantity og gi 30 som input. Dette får en transaksjon til å skje

I et nøtteskall vil enhver operasjon som forårsaker skriveoperasjon til kontraktens tilstand (dvs. endrer kontraktvariablene) resultere i en transaksjon.

Enhver operasjon som bare leser kontrakten, forårsaker ikke en transaksjon.

Konklusjon om smart kontraktutvikling

Med dette har vi nettopp opprettet vår første smarte kontrakt, bare skrape overflaten av soliditet. Vi har nettopp sett hva som skal til for å teste den smarte kontrakten helt fra å distribuere den smarte kontrakten til å starte transaksjoner.

I neste blogg, som er en fortsettelse av utviklingen av smarte kontraktserier, skal vi dype dypere inn i soliditetsgrunnlaget, og ta et dypere dykk i distribusjon av smarte kontrakter.

Med det konkluderer jeg med dette Smart kontrakt utviklingsblogg. Jeg håper du likte å lese denne bloggen og syntes den var informativ.

Jeghvis du ønsker å lære smarte kontrakter, bygge en karriere innen Blockchain og få ekspertise innen Ethereum-programmering, bli registrert i live-online her, som kommer med 24 * 7 støtte for å veilede deg gjennom hele læringsperioden.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet i “Smart kontraktutvikling”, så vil vi komme tilbake til deg på earlieSt.