Hoe schrijf je je eerste slimme contract?



Leer de basisprincipes van slimme contractontwikkeling en begin met het schrijven van uw eerste slimme contract. Je weet ook hoe je het slimme contract moet testen.

In de hebt u geleerd wat slimme contracten zijn, verschillende slimme contracttalen en hoe u een slimme contractontwikkelingsomgeving opzet. In dit artikel leer je hoe je je eerste slimme contract opbouwt. Ik zal gebruikenRemix IDE voor het ontwikkelen en testen van een slim contract.

De onderstaande onderwerpen worden behandeld in deze tutorial over slimme contractontwikkeling:





Bouwen aan uw slimme contract

Als onderdeel van deze blogserie zal een eenvoudig smart contract voor inkooporders worden ontwikkeld. Naarmate deze serie vordert en nieuwe concepten van solidity-programmeertaal worden geïntroduceerd, zal het slimme contract voor inkooporders evolueren en verbeteren.



Structuur van Smart Contract

Solidity smart contract is in wezen een verzameling van volgende

  • gegevens - die de huidige staat van het contract handhaaft
  • functie - die de logica toepassen om de staat van het contract te veranderen

Slimme contracten voor soliditeit volgen een standaardstructuur. Elk slim contract begint met de volgende verklaring



Pragma-richtlijn

Het sleutelwoord 'pragma' kan worden gebruikt om bepaalde compileerfuncties of controles in te schakelen. De onderstaande verklaring definieert dat het bronbestand (smart contract) niet compileert met compilerversie eerder dan 0.4.0 en compilerversie na 0.6.0. Deze verklaring zorgt ervoor dat er geen onbedoeld gedrag wordt geïntroduceerd wanneer een nieuwe compilerversie wordt geïntroduceerd.

pragma stevigheid> = 0.4.0<=0.6.0 

Contractverklaring

Het contract wordt gedeclareerd met het trefwoord 'contract'. Dit verklaart een leeg contract dat wordt aangeduid met de naam 'PurchaseOrder'.

contract PurchaseOrder {}

Relevante gegevens voor het contract opslaan

Elk contract of in algemene termen elk programma kan vereisen dat bepaalde gegevens worden opgeslagen. Het toevoegen van gegevens aan het programma biedt het een zekere mate van flexibiliteit. De overgang van hardgecodeerde waarden in het programma naar door de gebruiker verstrekte waarden is een belangrijke functie. Met variabelen kunt u de gegevens opslaan, de gegevens labelen, de gegevens ophalen en de gegevens manipuleren.

Slimme contractontwikkeling: variabelen introduceren

In soliditeit zijn de variabelen van twee soorten

  1. Waarde type: Dit soort variabelen worden doorgegeven op waarde, d.w.z. ze worden altijd gekopieerd wanneer ze worden gebruikt als functieargumenten of in toewijzingen. Bijvoorbeeld: gehele getallen, booleaans adres, etc.
  2. Referentietypes: Dit type variabelen is van complexe typen en wordt door middel van referentie doorgegeven. Deze variabelen passen niet in 256 bit en moeten zorgvuldig worden beheerd omdat het kopiëren ervan duur is.

Gegevens toevoegen aan Smart Contract

Laten we een gegevensvariabele aan het contract toevoegen. Voor elke inkooporder moet er een bepaalde hoeveelheid product aan zijn gekoppeld. Laten we een variabele product_quantity toevoegen die van het gegevenstype integer of getal is.

beste java ide voor ubuntu

De variabele die we nu introduceren is een geheel getal zonder teken en wordt weergegeven door uint256, 256 betekent hier de opslag van 256 bits.

  • U - ongetekend (wat betekent dat dit type alleen positieve gehele getallen kan vertegenwoordigen, niet positieve en negatieve gehele getallen)
  • INT - geheel getal
  • 256 - 256 bits groot
  • de minimumwaarde die uint256 kan worden toegewezen, is 0
  • maximale waarde die uint256 kan worden toegewezen is 2 ^ 256-1 [een zeer groot aantal]

De producthoeveelheid is slechts een positieve waarde en de huidige veronderstelling is dat we een zeer grote waarde voor de producthoeveelheid gaan verzorgen.

De gedeclareerde variabele 'product_quantity' maakt deel uit van de contractstatus en wordt daarom bewaard of opgeslagen in de contractruimte. Momenteel heeft deze variabele standaard de waarde 0.

contract PurchaseOrder {uint256 product_quantity}

De constructor definiëren

De constructeur wordt gebeld wanneer het contract wordt ingezet. De constructor initialiseert het contract met enkele waarden. In het huidige scenario wordt de producthoeveelheid ingesteld op 100 wanneer het contract wordt geïmplementeerd. Een constructor met parameters kan ook worden gemaakt door een variabele door te geven en product_quantity te initialiseren met behulp van de doorgegeven waarde.

Het belangrijkste punt dat hier moet worden opgemerkt, is de toegangsmodificator 'public' die is gekoppeld aan de constructor. Het openbare sleutelwoord geeft aan dat iedereen toegang heeft tot deze functie, dit is geen beperkte functie.

constructor () openbaar {product_quantity = 100}

Functies toevoegen

Laten we nu een functie toevoegen om ons programma interactief te maken. Functies zijn gecontroleerde mogelijkheden die aan een programma kunnen worden toegevoegd. Elke functie wordt voorafgegaan door een trefwoordfunctie. Over het algemeen is dit hoe de functieverklaring eruit ziet' functie ”.

Krijg functie

Een van de meest voorkomende vereisten voor elk programma is het lezen van de opgeslagen waarde. In het volgende contract moeten we de waarde 'product_quantity' lezen. Om deze mogelijkheid te bieden, wordt een leesfunctie of een get-functie toegevoegd. In deze functie doen we geen enkele manipulatie aan de opgeslagen waarde, we halen alleen de opgeslagen waarde op.

Laten we nu onze get-functie opsplitsen (get_quantity)

Nee. Trefwoord Waarde
een get_quantity (){er zijn geen parameters doorgegeven}
2 openbaar{iedereen heeft toegang tot de functie}
3 visie{betekent dat de functie alleen de staat van het contract leest, verandert de staat van het contract niet, dus weergave}
4 geeft een variabele terug van het type uint256 {gedefinieerd wat wordt geretourneerd door de functie}
functie get_quantity () publieke weergave retourneert (uint256) {retourneer product_quantity}

Setter functies

Het lezen van de gegevens is noodzakelijk en we hebben het in de laatste sectie gedaan, maar het grootste deel van het scenario vereist ook de mogelijkheid om de gegevens te schrijven / bij te werken. Deze specifieke mogelijkheid wordt geboden door een setterfunctie toe te voegen. Deze functie ontvangt een waarde van de gebruiker in de vorm van een invoerparameter. Met behulp van de waarde die door de gebruiker aan de functie is verstrekt, wordt de waarde van de variabele 'product_quantity' geschreven naar / bijgewerkt.

Laten we nu onze set-functie (update_quantity) opsplitsen

Een functie toevoegen om de waarde van de producthoeveelheid bij te werken

Nee. Trefwoord Waarde
een update_quantity (uint256 waarde){parameterwaarde van het type uint256 is doorgegeven}
2 openbaar{iedereen heeft toegang tot de functie}
3 Niet vereist omdat de staat wordt bijgewerkt door de functies
4 geeft een variabele terug van het type uint256 (gedefinieerd wat wordt geretourneerd door de functie)
functie update_quantity (uint256 waarde) openbaar {product_quantity = product_quantity + waarde}

Als je dit allemaal samenvoegt, zo zou het algehele contract eruit moeten zien.

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

Het slimme contract implementeren

python zet decimaal om in binair

Tijd om het slimme contract te testen. Om dit slimme contract te testen, zullen we gebruiken Remix online IDE .

Remix is ​​een online speeltuin voor ethereum slim contract . Remix is ​​volledig browsergebaseerd. Remix biedt u een online IDE (Integrated Development Environment) waar u uw slimme contracten kunt schrijven. Remix biedt u de mogelijkheid om online soliditeit te compileren. Het slimme contract in Remix IDE kan naadloos worden samengesteld met behulp van een specifieke compilerversie.

Remix biedt ook de mogelijkheid om het slimme contract snel te testen.

Remix biedt een complete toolset om de ontwikkeling van smart contract te starten en het smart contract te testen, zonder enige installatie op uw lokale machine. Dit is van enorm nut voor het starten met degelijkheid, aangezien ontwikkelaars zich alleen hoeven te concentreren op het schrijven van een slim contract, in plaats van zich zorgen te maken over de infrastructuur.

Met Remix IDE heb je alleen een browser en een internetverbinding nodig om aan de slag te gaan met slimme contractontwikkeling. Snelle ontwikkeling, testen en validatie van een idee voor een slim contract.

Remix heeft onlangs hun gebruikersinterface geüpgraded.

Remix-UI-Smart-Contracts-Edureka

Klik op het bestandspictogram zoals gemarkeerd in de bovenstaande afbeelding, de bestandsverkenner wordt geopend.

  1. Door op het plus-pictogram te klikken, kan een nieuw bestand worden gemaakt, noem het bestand PurchaseOrder.sol
  2. Hierdoor wordt een leeg bestand gemaakt met de naam PurchaseOrder.sol, klik en open dit bestand.
  3. Laten we het hele contract kopiëren en plakken in de PurchaseOrder.sol.
  4. Klik op het tweede pictogram, in het linkermenu net onder het bestandspictogram, zou de solidity-compileroptie moeten verschijnen.
  5. Selecteer de compilerversie onder het label Compiler. De huidige geselecteerde versie is 0.5.8.
  6. Plaats de selectie van de compilerversie en klik op “Compile PurchaseOrder.sol”. Dit zal het slimme contract samenstellen.

7. Zodra het slimme contract met succes is gecompileerd, klikt u op de knop 'Compilatiedetails' en de volgende details zouden moeten verschijnen. Na de compilatie worden twee belangrijke gegevens beschikbaar gesteld

    • ABI - Application binaire interface. Dit is een json-bestand dat alle methoden beschrijft die in het slimme contract worden weergegeven, samen met metagegevens van de methoden. In de volgende blogs zal hierover meer worden besproken.
    • Bytecode- EVM (Ethereum virtual machine) bewerkingscode, slimme contractlogica wordt bij compilatie omgezet in de bytecode.

8. Om het slimme contract te testen, moet het slimme contract worden ingezet. Om het slimme contract te implementeren, klikt u op het volgende pictogram in het linkermenu, onder het compileerpictogram. Het volgende scherm verschijnt. Om het slimme contract te testen, moet het slimme contract worden ingezet. Om het slimme contract te implementeren, klikt u op het volgende pictogram in het linkermenu, onder het compileerpictogram. Het volgende scherm verschijnt.

Implementatie-optie

Het implementatiescherm biedt een aantal keuzes, laten we ze een voor een bekijken.

  • Omgeving: dit kan worden gezien als een optie die vergelijkbaar is met het kopen van een laptop bij Amazon, Flipkart of Newegg (dit zijn allemaal online winkels), u maakt een keuze waar u wilt kopen, op basis van uw behoefte. Evenzo hebben we in het geval van Remix een optie om het slimme contract in te zetten en het slimme contract te testen. De vervolgkeuzelijst naast omgevingslabel biedt drie selecties
    • JavaScript VM - een lokaal Ethereum-enkel knooppunt wordt in het browsergeheugen opgestart en biedt 5 vooraf gefinancierde testaccounts die kunnen worden gebruikt voor de transactie (implementatie, aanroepen van functies)
    • Injected Web3 Provide - Dit is afhankelijk van MetaMask. Metamask is als een makelaar of tussenpersoon, waardoor de webapplicaties kunnen communiceren met het slimme contract. Metamask biedt de mogelijkheid om de identiteiten te beheren en ook de transacties te ondertekenen die naar het ethereum-netwerk moeten worden verzonden.rdpartij biedt u hulp bij het bepalen van het blockchain-netwerk waarop het slimme contract zal worden geïmplementeerd.
    • Web3-provider - als u een lokaal Ethereum-knooppunt gebruikt en een RPC-eindpunt beschikbaar is, kan deze optie worden gebruikt. Smart contract wordt geïmplementeerd op het lokale Ethereum-knooppunt.
  • Accounts: deze informatie wordt ingevuld op basis van de geselecteerde omgeving. Bijvoorbeeld. JavaScript VM biedt 5 vooraf gefinancierde testaccounts. Geef in het geval van de Web3-provider en Injected Web3 geen vooraf gefinancierde testaccounts.
  • Gaslimiet: dit definieert de maximale hoeveelheid gas die de initiator bereid is te besteden voor een transactie. Dit is de plek om je te beschermen tegen oneindige lus en uitputting van al het geld van de rekening in het geval van een oneindige lus.
  • Waarde: de waarde die mogelijk moet worden verzonden tijdens het implementeren van het slimme contract. Dit is een optionele waarde.

Om het contract te implementeren, selecteert u de JavaScript VM-optie, selecteert u het eerste account in de vervolgkeuzelijst met accounts en noteert u het saldo van de account (100 ether).

Zorg ervoor dat de smart contractnaam die verschijnt PurchaseOrder is, klik op implementeren. Belangrijkste acties die zullen plaatsvinden

  1. Het rekeningsaldo verandert van 100 ether naar 99,999999 ether, het afgetrokken bedrag zijn de transactiekosten voor het implementeren van het slimme contract.
  2. Onder ingezet contract verschijnt een nieuwe tegel voor smart contract, die ook het adres van het nieuwe smart contract zal geven, zoiets als dit (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. In het consolevenster zal de volgende informatie verschijnen
    1. Transactiehash - identificeert op unieke wijze de contractimplementatie
    2. Transactiekosten
    3. Contract adres

Interactie met het ingezette contract

  1. Onder het geïmplementeerde contract zijn de volgende twee interactiemethoden beschikbaar: update_quantity en get_quantity.
  2. Beide interactiemethoden zijn de openbare methoden die zijn gedefinieerd in het 'Inkoopordercontract'.
  3. Update hoeveelheid 'update_quantity' -methode vereist een invoerparameter, vandaar het invoerveld.
  4. Get hoeveelheid 'get_quantity' -methode haalt de waarde van de product_quantity op.
  5. Laten we eens kijken wat er gebeurt als get_quantity wordt aangeroepen, retourwaarde 100 wordt getoond, die werd geïnitialiseerd in de constructor. Dit veroorzaakt geen transactie
  6. Laten we update_quantity aanroepen en 30 als invoer opgeven. Hierdoor vindt een transactie plaats

In een notendop: elke bewerking die een schrijfbewerking naar de staat van het contract veroorzaakt (d.w.z. de contractvariabelen verandert), zal resulteren in een transactie.

converteer string naar datum in java

Elke bewerking die alleen de staat van het contract leest, veroorzaakt geen transactie.

Conclusie van slimme contractontwikkeling

Hiermee hebben we zojuist ons eerste slimme contract gecreëerd, dat alleen maar het oppervlak van stevigheid krabt. We hebben zojuist gezien wat er nodig is om het slimme contract te testen, vanaf het implementeren van het slimme contract tot het initiëren van transacties.

In de volgende blog, die een voortzetting is van de serie slimme contractontwikkelingen, gaan we dieper in op de basisprincipes van soliditeit en gaan we dieper in op de implementatie van slimme contracten.

Daarmee concludeer ik dit Slim contract ontwikkeling blog. Ik hoop dat je deze blog met plezier gelezen en informatief vond.

ikAls je Smart Contracts wilt leren, een carrière wilt opbouwen in het domein van Blockchain en expertise wilt opdoen in Ethereum-programmering, schrijf je dan in voor live-online hier, dat wordt geleverd met 24 * 7 ondersteuning om u tijdens uw leerperiode te begeleiden.

Heeft u een vraag voor ons? Vermeld het in het commentaargedeelte van “Slimme contractontwikkeling” en we nemen zo spoedig mogelijk contact met u opst.