Hvordan skriver jeg din første smarte kontrakt?

Lær det grundlæggende i Smart Contract Development og begynd at skrive din første smart contract. Du vil også vide, hvordan du tester den smarte kontrakt.

I , har du lært om, hvad smarte kontrakter er, forskellige smarte kontraktsprog, og hvordan du opretter et smart kontraktudviklingsmiljø. I denne artikel lærer du, hvordan du bygger din første smarte kontrakt. Jeg brugerRemix IDE til udvikling og test af en smart kontrakt.



Nedenstående emner er dækket i denne smarte vejledning til udvikling af kontrakter:



Opbygning af din smarte kontrakt

En simpel indkøbsordre smart kontrakt vil blive udviklet som en del af denne blog-serie. Efterhånden som denne serie skrider frem, og efterhånden som nye koncepter for soliditetsprogrammeringssprog introduceres, vil indkøbsordres smarte kontrakt udvikle sig og forbedres.



Struktur af smart kontrakt

Soliditetskontrakt er i bund og grund en samling af følgende

  • data - som opretholder kontraktens aktuelle tilstand
  • fungere - som anvender logikken til at overføre kontraktens tilstand

Soliditetskontrakter følger en standardstruktur. Enhver smart kontrakt begynder med følgende erklæring



Pragma-direktivet

Nøgleordet 'pragma' kan bruges til at aktivere bestemte kompilatorfunktioner eller -kontroller. Udtalelsen nedenfor definerer, at kildefilen (smart kontrakt) ikke kompileres med kompilator tidligere end 0.4.0 og compilerversion efter 0.6.0. Denne erklæring sikrer, at der ikke introduceres utilsigtet adfærd, når en ny compilerversion introduceres.

pragmasoliditet> = 0,4,0<=0.6.0 

Kontraktserklæring

Kontrakten erklæres ved hjælp af nøgleordet 'kontrakt'. Dette erklærer en tom kontrakt, der er identificeret ved navnet “PurchaseOrder”.

kontrakt Købsordre {}

Lagring af relevante data i kontrakten

Enhver kontrakt eller i generelle vendinger kan ethvert program kræve for at gemme nogle data. Tilføjelse af data til programmet giver det et niveau af fleksibilitet. At flytte væk fra hårdkodede værdier i programmet til brugernes værdier er en vigtig funktion. Variabler giver dig mulighed for at gemme dataene, mærke dataene, hente dataene og manipulere dataene.

Smart kontraktudvikling: Introduktion af variabler

I soliditet er variablerne af to typer

  1. Værditype: Denne type variabler sendes efter værdi, dvs. de kopieres altid, når de bruges som funktionsargumenter eller i opgaver. For eksempel: heltal, booleanske adresse osv.
  2. Referencetyper: Denne type variabler er af komplekse typer og sendes som reference, disse variabler passer ikke ind i 256 bit og skal styres omhyggeligt, da det er dyrt at kopiere dem.

Tilføjelse af data til Smart Contract

Lad os tilføje nogle datavariabler til kontrakten. For hver indkøbsordre skal der være en mængde produkt tilknyttet. Lad os tilføje en variabel produktmængde, der vil være af datatypen heltal eller antal.

bedste java ide til ubuntu

Den variabel, vi introducerer nu, er et usigneret heltal og er repræsenteret af uint256, 256 betyder her 256 bit lager.

  • U - usigneret (hvilket betyder, at denne type kun kan repræsentere positive heltal, ikke positive og negative heltal)
  • INT - heltal
  • 256 - 256 bits i størrelse
  • minimumsværdien uint256 kan tildeles er 0
  • maksimumsværdi uint256 kan tildeles er 2 ^ 256-1 [et meget stort antal]

Produktmængde er kun en positiv værdi, og den nuværende antagelse er, at vi skal imødekomme en meget stor værdi for produktmængde.

Den deklarerede variabel 'product_quantity' er en del af kontrakttilstanden og er derfor vedvarende eller gemt i kontraktområdet. I øjeblikket vil denne variabel være standard 0.

kontrakt PurchaseOrder {uint256 product_quantity}

Definition af konstruktøren

Konstruktøren kaldes, når kontrakten er implementeret. Konstruktøren initialiserer kontrakten med nogle værdier. I det aktuelle scenarie indstilles produktmængden til 100, når kontrakten implementeres. En parameteriseret konstruktør kan også oprettes ved at sende en variabel og initialisere produkt_mængde ved hjælp af den videregivne værdi.

Det nøglepunkt, der skal bemærkes her, er adgangsmodifikatoren 'offentlig', der er knyttet til konstruktøren. Offentligt nøgleord angiver, at alle kan få adgang til denne funktion, dette er ikke en begrænset funktion.

konstruktør () offentlig {product_quantity = 100}

Tilføjelse af funktioner

Lad os nu tilføje funktion for at gøre vores program interaktivt. Funktioner er kontrollerede funktioner, der kan føjes til et program. Enhver funktion indledes med nøgleordsfunktion. Samlet set ser funktionserklæringen ud' fungere ”.

Få funktion

Et af de mest almindelige krav til ethvert af programmet er at læse den gemte værdi. I den følgende kontrakt skal vi læse 'produkt_mængde' -værdien. For at give denne mulighed tilføjes en læse-funktion eller en get-funktion. I denne funktion udfører vi ikke den lagrede værdi manipulation, vi henter bare den lagrede værdi.

hvordan man konverterer dobbelt til int java

Lad os nu nedbryde vores get-funktion (get_quantity)

Ingen. Nøgleord Værdi
en get_quantity (){ingen parametre overføres}
2 offentlig{enhver kan få adgang til funktionen}
3 udsigt{betyder, at funktionen kun læser kontraktens tilstand, ændrer ikke kontraktens tilstand, dermed visning}
4 returnerer en variabel af typen uint256 {defineret hvad der returneres af funktionen}
funktion get_quantity () offentlig visning returnerer (uint256) {return product_quantity}

Setterfunktioner

Læsning af data er nødvendig, og vi har opnået det i sidste afsnit, men det meste af scenariet kræver også evnen til at skrive / opdatere dataene også. Denne specifikke kapacitet leveres ved at tilføje en setter-funktion. Denne funktion tager en værdi fra brugeren i form af en inputparameter. Ved hjælp af den værdi, der leveres til funktionen af ​​brugeren, skrives / opdateres værdien af ​​variablen 'product_quantity'.

Lad os nu nedbryde vores indstillede funktion (update_quantity)

Tilføjelse af en funktion for at opdatere værdien af ​​produktmængden

Ingen. Nøgleord Værdi
en update_quantity (værdi uint256){parameterværdi af typen uint256 videregives}
2 offentlig{enhver kan få adgang til funktionen}
3 Kræves ikke, da staten bliver opdateret af funktionerne
4 returnerer en variabel af typen uint256 (defineret hvad der returneres af funktionen)
funktion update_quantity (uint256 værdi) offentlig {product_quantity = product_quantity + værdi}

Tilslut alt dette sammen, sådan skal den samlede kontrakt se ud.

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 af den smarte kontrakt

Tid til at teste den smarte kontrakt. For at teste denne smarte kontrakt bruger vi Remix Online IDE .

Remix er en online legeplads til ethereum smart kontrakt . Remix er helt browserbaseret. Remix giver dig et online IDE (integreret udviklingsmiljø), hvor du kan skrive dine smarte kontrakter. Remix giver dig en online soliditet kompilator kapacitet. Den smarte kontrakt i Remix IDE kan kompileres ved hjælp af en bestemt compiler-version problemfrit.

Remix giver også mulighed for hurtigt at teste den smarte kontrakt.

Remix leverer et komplet værktøjssæt til at starte udviklingen af ​​smart kontrakt og enhedstest af den smarte kontrakt uden at foretage nogen installation på din lokale maskine. Dette er enormt nyttigt i starten med soliditet, da udviklere bare skal fokusere på at skrive en smart kontrakt, snarere bekymre dig om infrastrukturen.

spørgsmål om salgsstyrke-service til cloudinterview

Med Remix IDE er alt hvad du behøver, en browser og en internetforbindelse for at komme i gang med smart kontraktudvikling. Hurtig udvikling, test og validering af en idé til en smart kontrakt.

Remix har for nylig opgraderet deres brugergrænseflade.

Remix-UI-Smart-Contracts-Edureka

Klik på filikonet som fremhævet i ovenstående billede, filudforsker åbner op.

  1. Ved at klikke på plusikonet kan en ny fil oprettes, navngiv filen PurchaseOrder.sol
  2. Dette opretter en tom fil ved navn PurchaseOrder.sol, klik og åbn denne fil.
  3. Lad os kopiere og indsætte hele kontrakten i PurchaseOrder.sol.
  4. Klik på det andet ikon, i menuen til venstre lige under filikonet, skal soliditetscompiler-indstillingen vises.
  5. Vælg compilerversionen under Compiler-etiketten. Den aktuelt valgte version er 0.5.8.
  6. Efter valg af compilerversion skal du klikke på “Compile PurchaseOrder.sol”. Dette vil kompilere den smarte kontrakt.

7. Når den smarte kontrakt er kompileret med succes, skal du klikke på knappen 'Kompileringsoplysninger', og følgende detaljer skal komme op. Efter kompilering stilles to vigtige oplysninger til rådighed

    • ABI - Application binær interface. Dette er en json-fil, der beskriver alle de metoder, der er eksponeret i den smarte kontrakt, sammen med metadata om metoderne. Mere om dette vil blive diskuteret i de efterfølgende blogs.
    • Bytecode- EVM (Ethereum virtual machine) operationskode, Smart kontraktlogik bliver konverteret til bytekoden ved kompilering.

8. For at teste den smarte kontrakt skal den smarte kontrakt udrulles. For at implementere den smarte kontrakt skal du klikke på det næste ikon i menuen til venstre under ikonet for kompilering. Følgende skærmbillede vises. For at teste den smarte kontrakt skal den smarte kontrakt implementeres. For at implementere den smarte kontrakt skal du klikke på det næste ikon i menuen til venstre, under kompileringsikonet. Følgende skærmbillede vises.

Implementeringsmulighed

Implementeringsskærmen giver et par valg, lad os se på dem en efter en.

  • Miljø: Dette kan tænkes på en mulighed svarende til at vælge at købe en bærbar computer fra enten Amazon, Flipkart, Newegg (alle disse er onlineforhandlere), du foretager et valg, hvor du vil købe fra, baseret på dit krav. På samme måde har vi i tilfælde af Remix en mulighed, hvor vi skal implementere den smarte kontrakt og teste den smarte kontrakt. Rullelisten ved siden af ​​miljøetiketten giver tre valg
    • JavaScript VM - en lokal Ethereum-enkeltnode spindes op i browserhukommelsen og giver 5 forudfinansierede testkonti, der kan bruges til transaktionen (implementering, påkald af funktioner)
    • Injiceret Web3 giver - Dette er afhængig af MetaMask. Metamask er som en mægler eller mellemmand, der giver webapplikationerne mulighed for at interagere med den smarte kontrakt. Metamask giver mulighed for at styre identiteterne og også underskrive de transaktioner, der skal sendes til ethereum-netværket. Denne mellemmand eller 3rdpart giver dig hjælp til at bestemme det blockchain-netværk, den smarte kontrakt vil blive implementeret til.
    • Web3-udbyder - hvis du kører en lokal Ethereum-node, og RPC-slutpunkt er tilgængeligt, kan denne mulighed bruges. Smart kontrakt vil blive implementeret på den lokale Ethereum-knude.
  • Konti: Disse oplysninger udfyldes baseret på det valgte miljø. For eksempel. JavaScript VM leverer 5 forudbetalte testkonti. I tilfælde af Web3-udbyder og Injected Web3 skal du ikke levere forudfinansierede testkonti.
  • Gasgrænse: Dette definerer den maksimale mængde gas, som initiativtager er villig til at bruge til enhver transaktion. Dette er stedet at beskytte mod uendelig sløjfe og udtømme alle midler på kontoen i tilfælde af uendelig sløjfe.
  • Værdi: Den værdi, der muligvis kræves for at sende over, mens du implementerer den smarte kontrakt. Dette er en valgfri værdi.

For at implementere kontrakten skal du vælge JavaScript VM-indstilling, vælge den første konto fra rullelisten for konti. Bemærk kontoens saldo (100 ether).

Sørg for, at det smarte kontraktnavn, der vises, er PurchaseOrder, klik på implementer. Nøgleaktioner, der vil ske

  1. Kontosaldo skifter fra 100 ether til 99,999999 ether, det fratrukkede beløb er transaktionsomkostningerne ved implementering af den smarte kontrakt.
  2. Under implementeret kontrakt vises en ny flise til smart kontrakt, som også vil give adressen til den nye smarte kontrakt noget som dette (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. I konsolvinduet vises følgende oplysninger
    1. Transaktionshash - identificerer entydigt kontraktinstallationen
    2. Transaktionsomkostninger
    3. Kontraktadresse

Interagerer med den implementerede kontrakt

  1. Under den implementerede kontrakt er følgende to interaktionsmetoder tilgængelige opdateringsmængde og get_mængde.
  2. Begge disse interaktionsmetoder er de offentlige metoder, der er defineret i 'indkøbsordre' -kontrakten.
  3. Opdateringsmængde “update_quantity” -metoden kræver en inputparameter, deraf inputboksen.
  4. Få kvantitet 'get_quantity' metode henter værdien af ​​product_quantity.
  5. Lad os kontrollere, hvad der sker, når get_quantity påberåbes, returværdi 100 vises, som blev initialiseret i konstruktøren. Dette får ikke en transaktion til at ske
  6. Lad os påberåbe update_quantity og give 30 som input. Dette får en transaktion til at ske

I en nøddeskal vil enhver handling, der forårsager skrivning til kontraktens tilstand (dvs. ændrer kontraktvariablerne) resultere i en transaktion.

Enhver operation, der bare læser kontraktens tilstand, forårsager ikke en transaktion.

Konklusion om intelligent kontraktudvikling

Med dette har vi lige oprettet vores første smarte kontrakt, bare skrabe overfladen af ​​soliditet. Vi har lige set, hvad der kræves for at teste den smarte kontrakt lige fra implementering af den smarte kontrakt til igangsættelse af transaktioner.

I den næste blog, der er en fortsættelse af den smarte kontraktudviklingsserie, vil vi komme nærmere ind på soliditetsfundamentalerne og tage et dybere dykke ned i implementeringen af ​​smarte kontrakter.

Med det konkluderer jeg dette Smart kontrakt udviklingsblog. Jeg håber du nød at læse denne blog og fandt den informativ.

jegf du ønsker at lære smarte kontrakter, opbygge en karriere inden for Blockchain-domænet og få ekspertise inden for Ethereum-programmering, tilmeld dig live-online her kommer der 24 * 7 support til at guide dig gennem din læringsperiode.

Har du et spørgsmål til os? Nævn det i kommentarfeltet i “Smart kontraktudvikling”, og vi vender tilbage til dig på earlieSt.