Hur skriver jag ditt första smarta kontrakt?



Lär dig grunderna i Smart Contract Development och börja skriva ditt första smarta kontrakt. Du kommer också att veta hur man testar det smarta kontraktet.

I har du lärt dig vad smarta kontrakt är, olika smarta kontraktspråk och hur du skapar en smart kontraktsutvecklingsmiljö. I den här artikeln lär du dig hur du bygger ditt första smarta kontrakt. Jag kommer att användaRemix IDE för att utveckla och testa ett smart kontrakt.

Nedanstående ämnen behandlas i den här smarta utvecklingshandledningen för kontrakt:





Bygg ditt smarta kontrakt

Ett enkelt inköpsorder smartt kontrakt kommer att utvecklas som en del av denna bloggserie. När den här serien fortskrider och när nya koncept för soliditetsprogrammeringsspråk introduceras kommer det smarta kontraktet på inköpsordern att utvecklas och förbättras.



Struktur av smart kontrakt

Soliditet smart kontrakt, i huvudsak, är en samling av följande

  • data - som bibehåller det aktuella läget för kontraktet
  • fungera - som tillämpar logiken för att överföra kontraktets tillstånd

Smarta avtal med soliditet följer en standardstruktur. Alla smarta kontrakt börjar med följande uttalande



Pragmadirektivet

Nyckelordet 'pragma' kan användas för att aktivera vissa kompilatorfunktioner eller kontroller. Uttalandet nedan definierar att källfilen (smart kontrakt) inte kompileras med kompilatorn tidigare än 0.4.0 och kompilatorversionen efter 0.6.0. Denna deklaration säkerställer att inget oavsiktligt beteende införs när en ny kompilatorversion introduceras.

pragmasoliditet> = 0,4,0<=0.6.0 

Kontraktsdeklaration

Kontraktet deklareras med nyckelordet ”kontrakt”. Detta förklarar ett tomt kontrakt som identifieras av namnet “PurchaseOrder”.

kontrakt Orderbeställning {}

Lagring av relevanta uppgifter i kontraktet

Varje kontrakt eller i allmänna termer kan varje program kräva för att lagra viss information. Att lägga till data i programmet ger det en flexibilitetsnivå. Att flytta bort från hårdkodade värden i programmet till användarnas värden är en viktig funktion. Med variabler kan du lagra data, märka data, hämta data och manipulera data.

Smart kontraktutveckling: Introduktion av variabler

I soliditet är variablerna av två typer

  1. Värde typ: Denna typ av variabler skickas med värde, dvs. de kopieras alltid när de används som funktionsargument eller i tilldelningar. Till exempel: heltal, booleans adress etc.
  2. Referens Typer: Denna typ av variabel är av komplexa typer och skickas genom referens, dessa variabler passar inte in i 256 bitar och måste hanteras noggrant eftersom det är dyrt att kopiera dem.

Lägga till data till Smart Contract

Låt oss lägga till en del variabel i kontraktet. För varje inköpsorder måste det finnas en viss mängd produkt kopplad till den. Låt oss lägga till en variabel produktkvantitet som kommer att vara av datatyp heltal eller antal.

skillnad mellan redskap och förlänger java

Variabeln vi introducerar nu är ett osignerat heltal och representeras av uint256, 256 betyder här 256 bitars lagring.

  • U - osignerad (vilket betyder att denna typ endast kan representera positiva heltal, inte positiva och negativa heltal)
  • INT - heltal
  • 256 - 256 bitar i storlek
  • minimivärdet uint256 kan tilldelas är 0
  • maximalt värde uint256 kan tilldelas är 2 ^ 256-1 [ett mycket stort antal]

Produktkvantitet är bara ett positivt värde och nuvarande antagande är att vi ska tillgodose ett mycket stort värde för produktkvantitet.

Den deklarerade variabeln 'product_quantity' är en del av kontraktstillståndet och är därför kvarhållen eller lagrad i kontraktsutrymme. För närvarande kommer denna variabel att vara värd 0.

kontrakt Orderbeställning {uint256 product_quantity}

Definiera konstruktören

Konstruktören anropas när kontraktet distribueras. Konstruktören initialiserar kontraktet med några värden. I det aktuella scenariot sätts produktkvantiteten till 100 när kontraktet distribueras. En parametrerad konstruktör kan också skapas genom att skicka en variabel och initialisera produktens kvantitet med det skickade värdet.

Den viktigaste punkten som ska noteras här är åtkomstmodifieraren 'offentlig' associerad med konstruktören. Offentligt nyckelord anger att vem som helst kan komma åt den här funktionen, detta är inte en begränsad funktion.

en sorteringsalgoritm kan användas för att ordna en uppsättning ________ i ________-ordning.

konstruktör () public {product_quantity = 100}

Lägga till funktioner

Låt oss nu lägga till funktion för att göra vårt program interaktivt. Funktioner är kontrollerade funktioner som kan läggas till i ett program. Alla funktioner föregås av nyckelordsfunktionen. Sammantaget så ser funktionsdeklarationen ut' fungera ”.

Få funktion

Ett av de vanligaste kraven för något av programmet är att läsa det lagrade värdet. I följande kontrakt kommer vi att behöva läsa värdet 'produkt_kvantitet'. För att tillhandahålla denna kapacitet läggs en läsfunktion eller en get-funktion till. I den här funktionen gör vi ingen manipulation av det lagrade värdet, vi hämtar bara det lagrade värdet.

Låt oss nu bryta ner vår get-funktion (get_quantity)

Nej. Nyckelord Värde
ett get_quantity (){inga parametrar skickas}
2 offentlig{vem som helst kan komma åt funktionen}
3 se{betyder att funktionen bara läser kontraktets tillstånd, ändrar inte kontraktets tillstånd, därav vy}
4 returnerar en variabel av typen uint256 {definierad vad som returneras av funktionen}
funktion get_quantity () public view returnerar (uint256) {return product_quantity}

Setterfunktioner

Att läsa data är nödvändigt och vi har åstadkommit det i det sista avsnittet, men det mesta av scenariot kräver också förmågan att skriva / uppdatera data också. Denna specifika kapacitet tillhandahålls genom att lägga till en setterfunktion. Denna funktion tar ett värde från användaren i form av en inmatningsparameter. Med hjälp av det värde som användaren tillhandahåller funktionen skrivs / uppdateras värdet på variabeln 'product_quantity'.

Låt oss nu bryta ner vår inställda funktion (update_quantity)

Lägga till en funktion för att uppdatera värdet på produktkvantiteten

Nej. Nyckelord Värde
ett update_quantity (värde uint256){parametervärde av typen uint256 passeras}
2 offentlig{vem som helst kan komma åt funktionen}
3 Krävs inte eftersom staten uppdateras av funktionerna
4 returnerar en variabel av typen uint256 (definieras vad som returneras av funktionen)
funktion update_quantity (uint256 värde) offentligt {product_quantity = product_quantity + värde}

Att koppla ihop allt detta, så ska det övergripande kontraktet 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 } } 

Implementera det smarta kontraktet

Dags att testa det smarta kontraktet. För att testa detta smarta kontrakt kommer vi att använda Remix Online IDE .

Remix är en online lekplats för ethereum smart kontrakt . Remix är helt webbläsarbaserat. Remix ger dig en online-IDE (integrerad utvecklingsmiljö) där du kan skriva dina smarta kontrakt. Remix ger dig en kompilatorfunktion för online soliditet. Det smarta kontraktet i Remix IDE kan sammanställas med en specifik kompilatorversion sömlöst.

Remix ger också möjlighet att snabbt testa det smarta kontraktet.

Remix tillhandahåller en komplett verktygssats för att starta utvecklingen av smarta kontrakt och enhetstestning av det smarta kontraktet utan att göra någon installation på din lokala maskin. Detta är till stor nytta för att börja med soliditet eftersom utvecklare bara behöver fokusera på att skriva ett smart kontrakt, snarare oroa sig för infrastrukturen.

Med Remix IDE behöver du bara en webbläsare och en internetanslutning för att komma igång med smart kontraktutveckling. Snabb utveckling, testning och validering av en idé för ett smart kontrakt.

Remix har nyligen uppgraderat deras användargränssnitt.

Remix-UI-Smart-Contracts-Edureka

Klicka på filikonen som markerad i bilden ovan, filutforskaren öppnas.

  1. Genom att klicka på plusikonen kan en ny fil skapas, namnge filen PurchaseOrder.sol
  2. Detta skapar en tom fil med namnet PurchaseOrder.sol, klicka och öppna den här filen.
  3. Låt oss kopiera och klistra in hela kontraktet i PurchaseOrder.sol.
  4. Klicka på den andra ikonen, i den vänstra menyn strax under filikonen ska alternativet för soliditetskompilator visas.
  5. Välj kompilatorversion under etiketten Compiler. Den aktuella valda versionen är 0.5.8.
  6. Lägg upp valet av kompilatorversion, klicka på “Compile PurchaseOrder.sol”. Detta kommer att sammanställa det smarta kontraktet.

7. När det smarta kontraktet har kompilerats framgångsrikt klickar du på knappen ”Sammanställningsdetaljer” och följande information ska komma upp. Efter sammanställning görs två viktig information

    • ABI - Binärt applikationsgränssnitt. Detta är en json-fil som beskriver alla metoder som exponeras i det smarta kontraktet tillsammans med metadata för metoderna. Mer om detta kommer att diskuteras i de efterföljande bloggarna.
    • Bytkod- EVM-operationskod (Ethereum virtual machine), Smart contract-logik omvandlas till bytkoden vid sammanställning.

8. För att testa det smarta kontraktet måste det smarta kontraktet distribueras. För att distribuera det smarta kontraktet klickar du på nästa ikon i menyn till vänster, nedanför kompileringsikonen. Följande skärm visas. För att testa det smarta kontraktet måste det smarta kontraktet distribueras. För att distribuera det smarta kontraktet klickar du på nästa ikon i den vänstra menyn, nedanför kompileringsikonen. Följande skärm visas.

Driftsättningsalternativ

Driftsättningsskärmen ger ett par val, låt oss titta på dem en efter en.

java till makten av
  • Miljö: Detta kan tänkas på ett alternativ som liknar att välja att köpa en bärbar dator från antingen Amazon, Flipkart, Newegg (alla dessa är online-återförsäljare) du gör ett val där du vill köpa från, baserat på dina krav. På samma sätt, i fallet med Remix, har vi ett alternativ var att distribuera det smarta kontraktet och testa det smarta kontraktet. Listrutan bredvid miljömärket ger tre val
    • JavaScript VM - en lokal Ethereum-enda nod spunnas upp i webbläsarminnet och tillhandahåller 5 förfinansierade testkonton som kan användas för transaktionen (distribution, anropande funktioner)
    • Injected Web3 Provide - Detta är beroende av MetaMask. Metamask är som en mäklare eller mellanhand, vilket gör att webbapplikationerna kan interagera med det smarta kontraktet. Metamask ger möjlighet att hantera identiteterna och även underteckna de transaktioner som ska skickas till ethereum-nätverket. Denna mellanhand eller 3rdpart kan hjälpa dig att bestämma blockchain-nätverket som det smarta kontraktet kommer att distribueras till.
    • Web3-leverantör - om du kör en lokal Ethereum-nod och RPC-slutpunkt är tillgänglig kan detta alternativ användas. Smart kontrakt kommer att distribueras till den lokala Ethereum-noden.
  • Konton: Denna information fylls ut baserat på vald miljö. Till exempel. JavaScript VM tillhandahåller 5 förfinansierade testkonton. I fallet med Web3-leverantör och Injected Web3 tillhandahåller inte förfinansierade testkonton.
  • Gasgräns: Detta definierar den maximala mängd gas som initiativtagaren är villig att spendera för alla transaktioner. Det här är platsen att skydda mot oändlig slinga och att tömma alla konton i händelse av oändlig slinga.
  • Värde: Det värde som kan krävas för att skicka över när du distribuerar det smarta kontraktet. Detta är ett valfritt värde.

För att distribuera kontraktet, välj JavaScript VM-alternativet, välj det första kontot från rullgardinsmenyn, notera kontosaldot (100 eter).

Se till att det smarta kontraktsnamnet som visas är PurchaseOrder, klicka på deploy. Viktiga åtgärder som kommer att hända

  1. Kontosaldot ändras från 100 eter till 99,999999 eter, det avdragna beloppet är transaktionskostnaden för att distribuera det smarta kontraktet.
  2. Under distribuerat kontrakt kommer en ny sida för smart kontrakt att visas, som också kommer att ge adressen till det nya smarta kontraktet ungefär så här (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. I konsolfönstret visas följande information
    1. Transaktionshash - identifierar entydigt kontraktsdistributionen
    2. Transaktions kostnad
    3. Kontraktsadress

Interagerar med det utplacerade kontraktet

  1. Under det distribuerade kontraktet finns följande två interaktionsmetoder tillgängliga update_quantity och get_quantity.
  2. Båda dessa interaktionsmetoder är de offentliga metoderna som definieras i kontraktet 'Inköpsorder'.
  3. Uppdatera kvantitet 'update_quantity' -metoden kräver en inmatningsparameter, därav inmatningsrutan.
  4. Få kvantitet 'get_quantity' -metoden hämtar värdet på product_quantity.
  5. Låt oss kontrollera vad som händer när get_quantity åberopas, returvärdet 100 visas, vilket initialiserades i konstruktorn. Detta gör inte att en transaktion sker
  6. Låt oss åberopa update_quantity och ge 30 som input. Detta gör att en transaktion sker

I ett nötskal kommer varje operation som orsakar skrivoperation till kontraktets tillstånd (dvs. ändrar kontraktvariablerna) resultera i en transaktion.

Alla operationer som bara läser kontraktets tillstånd orsakar inte en transaktion.

Slutsats för smart kontraktutveckling

Med detta har vi precis skapat vårt första smarta kontrakt, bara repa ytan av soliditet. Vi har precis sett vad som krävs för att testa det smarta kontrakten från att distribuera det smarta kontraktet till att initiera transaktioner.

I nästa blogg, som är en fortsättning på utvecklingen av smarta kontraktsserier, kommer vi att fördjupa oss mer i soliditetsfundamenten och ta ett djupare dyk in i smart kontraktdistribution.

Med det avslutar jag detta Smart kontrakt utvecklingsblogg. Jag hoppas att du gillade att läsa den här bloggen och tyckte att den var informativ.

Jagom du vill lära dig smarta kontrakt, bygga en karriär inom Blockchain-området och få expertis inom Ethereum-programmering, bli registrerad i live-online här kommer det med 24 * 7 support för att vägleda dig under hela din inlärningsperiod.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i 'Smart kontraktutveckling' så återkommer vi till earliest.