Sådan lærer du soliditet og starter Blockchain-programmering

Blockchain-programmering er blevet en af ​​de bedst betalende og udfordrende softwarekugler i det seneste årti. Selvom blockchains er sprog-agnostiske, og mange af de eksisterende sprog, som C ++ og JavaScript (JS), bruges af blockchain-ingeniører, er der nogle opgaver, der ikke praktisk kunne realiseres af eksisterende sprog, hvilket åbnede efterspørgslen efter nye, kryptospecifikke muligheder. Et sådant sprog er soliditet.

Soliditet blev født som en kerneelement i Ethereum-økosystemet. Det absorberede C ++, JavaScript og Python. Det har mange moderne funktioner som biblioteker og arv. Solidity er designet til at skrive programmer, der interagerer med Ethereum-konti, der kaldes smarte kontrakter. Smarte kontrakter udføres på Ethereum Virtual Machine (EVM), hvilket gør det muligt for brugere, der bruger dem, at udføre opgaver som crowdfunding, blinde auktioner, afstemning og mange andre på en decentral måde. Den mest berømte morder-app af smarte kontrakter var decentraliseret finansiering i ICO’er, som startede tyrefægtningen på kryptomarkederne i 2017.

Uanset om du er en erfaren udvikler eller lige starter i krypto, er det en god ide at begynde at lære Solidity, fordi smarte kontrakter er blevet en vigtig del af blockchain-økosystemet. Bortset fra at blive aktivt implementeret af dApps, integreres de aktivt i blockchain i infrastrukturlag og endda i Bitcoin via udbydere som RSK. Ved at vide, hvordan man bygger smarte kontrakter, vil du gøre din blockchain-karriere mere bæredygtig og være i stand til at producere løsninger af bedre kvalitet. Lad os ikke trække det længere og gøre vores hænder beskidte med kodning!

Forstå det grundlæggende i en smart kontrakt

En smart kontraktkonto består af tre sektioner: saldo, opbevaring og kode. Saldoen repræsenterer hvor meget Ethereum en smart kontrakt har. Opbevaring indeholder data som strenge og arrays, der er specifikke for en applikation. Kodeafsnittet har den rå maskinkode, der er kompileret ud fra det, vi skriver i Soliditet.

I modsætning til brugerkonti er smarte kontraktkonti ikke eksternt for de respektive netværk. Med andre ord kan du bruge din tegnebog med forskellige netværk som Kovan og Ropsten, men du kan ikke gøre dette med en smart kontrakt. Smarte kontrakter er interne.

Hver smart kontrakt har en kilde, der er gemt på en forfatters enhed og forekomster, der er gemt på blockchain. For at oprette en forekomst (konto) af en smart kontrakt er vi nødt til at implementere den på netværket. Det ligner meget forholdet mellem klasser og forekomster i traditionel objektorienteret programmering (OOP) og sprog, der repræsenterer det (JS, Ruby). For at give dig en mere visuel repræsentation, lad os oprette en klasse ‘Bike’ og tilføje en forekomst af den.

Cykel klasse & amp; eksempelBillede af Utoday

Det, vi skriver, er en kontraktdefinition, som derefter kører gennem en kompilator, der producerer to filer: bytecode og applikations binær interface (ABI). Bytecode er, hvad der faktisk vil blive ført til EVM og ABI er et lag mellem bytecode og almindelig JavaScript-kode, der gør det muligt at opbygge en brugergrænseflade (UI).

Valg af IDE & version af Solidity

Før vi starter, har vi brug for et ordentligt integreret udviklingsmiljø (IDE). Med andre ord har vi brug for en praktisk terminal med de nødvendige værktøjer til at skrive vores kode i. Med henblik på denne vejledning vælger vi Remix, en IDE oprettet af Ethereum-stiftelsen, der tillader skrivning, test, fejlretning, lancering af smarte kontrakter og mange flere. Du kan bruge det enten lige i browseren eller downloade det lokalt, hvis du vil.

Når du starter Remix, vil du blive præsenteret med kodeditoren i midten, filhåndteringen til venstre og en kompilator til højre.

Indledende remix-vindueBillede af Utoday

Der vil være en forudskrevet kode – det har vi ikke brug for. For at oprette den første smarte kontrakt nogensinde, lad os trykke på det lille plusikon i terminalens øverste venstre hjørne og give det et navn.

Oprettelse af et nyt projekt i RemixBillede af Utoday

Da vi har blank.sol-dokumentet nu, skal vi specificere den version af Solidity, som compileren kører. På tidspunktet for denne vejledning er den seneste version 0.5.7. Hvis du ikke er sikker på, hvilken version du skal bruge, kan du angive en række versioner.

2 typer specificering af versionen af ​​soliditetBillede af Utoday

Endelig lad os give vores smarte kontrakt et navn efterfulgt af en parentes.

Smart kontraktnavnBillede af Utoday

Skriv din første smarte kontrakt

Når vi har vores lærred klar, er det tid til at definere de grundlæggende byggesten – variabler. Mens erfarne softwareingeniører ikke har problemer med at forstå dette koncept, introducerer vi det kort for begyndere. Variabler er pladsholdere for klumper af information, der senere henvises til af et program, der kører dem.

Lad os oprette et par variabler: en streng (en sekvens af symboler) og et heltal (et tal). I Ethereums tilfælde gemmes variabler i blockchain sammen med resten af ​​kontrakterne og kan derfor tilgås og opdateres hvor som helst. Et andet nøgleegenskab ved soliditetsvariabler er, at du kan gøre dem private ved at skrive ‘privat’ ud for variablerne. Endelig har soliditet to helter for heltalene: signeret (kan være positiv & negativ) og usigneret (kan kun være positiv). For at specificere en usigneret variabel skal vi bare sætte ‘u’ foran den.

En privat streng og et heltalBillede af Utoday

Når vi først har ‘navn’-variablen, skal vi skrive metoderne til indstilling og hentning ud. Dette ligner en JS-funktion. Husk, at fasthed er statisk skrevet, så vi er nødt til at definere variable typer. Nu vil enhver værdi, vi lægger i ‘setName’, definere ‘name’ -strengen. For getter bruger vi ‘getName’ og specificerer hvilken variabel vi forventer at se. Nu er det tid til at gøre det samme med variablen ‘alder’. Metoden er konstrueret på samme måde som ‘getName’.

Navn / alderssættere og gettersBillede af Utoday

Lad os teste vores lille stykke kode. Gå til fanen “Kør” i compileren, og tryk på “Implementer” under din kontrakts navn. Nederst i compileren vil du nu se afsnittet ‘Implementerede kontrakter’, hvor vores metoder er tilgængelige. For at videregive et navn til ‘newName’ -værdien skal vi sørge for, at vores streng er skrevet i JSON, ellers returnerer ‘getName’ intet. For ‘setAge’ skal du bare sætte din alder uden citater. Som du ser, kan vi nu indstille og modtage variablerne ‘navn’ og ‘alder’ gennem vores smarte kontrakt.

Kompilator med navn og alderBillede af Utoday

Definition af Wei og gas

Et af de mest bemærkelsesværdige træk ved smarte kontraster er, at for at implementere dem i Ethereum-netværket skal du starte en transaktion, der koster en vis sum penge, der betales i Ether. Det er afgørende at forstå, hvordan gebyrerne bruges i systemet, da de trækkes hver gang du interagerer med EVM.

Hvad er Wei?

Lad os antage, at du har brugt Bitcoin mindst én gang, når du læser dette langt ind i vores tutorial. Du lavede sandsynligvis en lille transaktion, der var langt mindre end 1 BTC. I så fald brugte du Satoshier, som er noget som øre for en dollar. Wei er som en Satoshi – det er den mindste del af 1 Ether. Hvis vi tænker på det i programmeringsbetingelser, er det det laveste usignerede heltal i netværket. Mens du interagerer med netværket, vil du for det meste støde på Gwei, som refererer til Gigawei og svarer til 1 milliard Wei.

Hvad er gas?

Gas er en væsentlig del af mekanismen til smart kontraktudførelse. Den har to værdier for hver transaktion: forbrugt gas og dens pris. Det er værd at nævne, at en bruger, der starter en transaktion, definerer disse værdier. Men hvis den indstillede værdi af gas ikke er tilstrækkelig til at behandle en bestemt operation, forbruges gassen, men transaktionen mislykkes. Desuden, hvis prisen for gas vil blive sat for lavt for netværket på et givet tidspunkt, vil transaktionen ikke blive behandlet af noderne, hvilket i sidste ende gør det mislykket. Der er flere tjenester til kontrol af optimale værdier for dine transaktioner, hvoraf den ene er ethgasstation.info. For at få en bedre forståelse af gas og hvorfor det koster penge, lad os selv kode noget af det.

Gå tilbage til dit Remix-vindue og start en ny fil. I vores eksempel kalder vi det ‘gas’ og opretter en kontrakt med samme navn. Husk, at jo flere data, vi har brug for at gemme på blockchain, jo mere gas har vi brug for. Når det er sagt, med henblik på denne vejledning opretter vi en billig kontrakt; jo mere du vil føje til det, jo højere vil gebyret være.

Der vil være en funktion, der returnerer et heltal, der er en sum af to input. For at gøre det så let som muligt, vil vi specificere, at vores kontrakt ikke gemmer noget på blockchain, og for det vil vi sætte ‘ren’ ud for funktionen.

Billig kontraktBillede af Utoday

Nu kan du distribuere det i compileren og indtaste et hvilket som helst to tal for at få heltalet ‘c’. For at kontrollere prisen på vores transaktion skal vi kigge på terminalen under kodesektionen. Der er en transaktionsomkostning og en eksekveringsomkostning. Den første henviser til, hvor mange data en transaktion har. Den anden henviser til, hvor meget af EVMs kraft, der kræves af transaktionen.

Billig kontraktomkostningBillede af Utoday

Dette er en ekstremt grundlæggende transaktion, der næsten ikke koster noget for netværket. Ved at skrive meningsfulde smarte kontrakter vil du tilføje flere detaljer, som øger deres vægt og dermed transaktionsgebyrer.

Opretter & implementerer dit eget ERC20-token

Lad os indse det, at flertallet af blockchain-udviklerne, der lige er begyndt, er ivrige efter at spille stort og oprette deres egne blockchains og tokens. Selv om dette er et ekstremt vanskeligt emne, der tiltrak nogle af de bedste softwareingeniører fra andre områder, er det ikke raketvidenskab at opbygge et grundlæggende ERC20-token..

Først skal vi oprette en anden fil i Remix og uploade ERC20-grænsefladen, som er følgende:

ERC20 standardBillede af Utoday

Funktionen ‘totalSupply’ lader os se, hvor mange tokens vi har i alt. Funktionen ‘balanceOf’ bruges til at få mængder af tokens på bestemte adresser. Funktionen ‘overførsel’ tillader brugere at udføre transaktioner mellem hinanden. Funktionerne ‘transferFrom’, ‘allowance’ og ‘approve’ er der for at give folk mulighed for at lade nogle andre brugere starte transaktioner på deres vegne. Begivenheder er logføringsværktøjerne til hovedbogen.

Ud over selve grænsefladen har vi brug for en separat.sol-fil til vores nye token. Her importerer vi ERC20-grænsefladen og specificerer vores tokens symbol, navn og decimaler.

uI dag tokenBillede af Utoday

Før vi kompilerer det, skal vi specificere begrænsninger.

  • Lad os starte med den samlede forsyning – det er en konstant heltalsvariabel, som vi vil gøre private. Den samlede levering af vores tokens vil være 1 million, vi skriver også en funktion til at returnere denne værdi.

  • For det andet skal vi gemme vores token et eller andet sted. Til dette bliver vi nødt til at skitsere den kortlægning, der returnerer en saldo for enhver angivet adresse.

  • For det tredje skal der være en funktion til tokenoverførsler, som i det væsentlige vil have en modtageradresse og et antal token overført. Denne funktion skal også være i stand til at kontrollere, om en afsender har nok tokens på deres balance, hvilket kan realiseres ved hjælp af en simpel hvis / så-udsagn. Derudover vil vi indstille betingelserne for ‘_value’ på en måde, der forhindrer brugere i at sende transaktioner med 0 tokens, da dette kun ville oversvømme netværket med junk.

  • For det fjerde skal vi oprette kortlægningen for de resterende funktioner, som er en kortlægning af kortlægning til et heltal.

  • Derefter specificerer vi et par brikker i funktionerne ‘godkende’ og ‘godtgørelse’ og sætter betingelser for ‘overførsel fra’.

  • Endelig vil ikke alle tokens være tilgængelige på markedet. Nogle af tokens er normalt udeladt til hold, fonde, rådgivere og andre formål. Derfor er det vigtigt, at vi gør det klart, hvor mange tokens der vil cirkulere. Da vi oprettede tokens, svarer den cirkulerende forsyning til vores balance.

uDagens token-begrænsningerBillede af Utoday

Koden er klar, så lad os teste den. Fortsæt til fanen ‘Kør’ i compileren og implementer vores token-kontrakt. Du vil se, at vi har vores token-data sammen med den samlede forsyning, saldi og kvoter. Tillykke, du fortjener et klapp på ryggen!

For at få vores token til at fungere på netværket er vi nødt til at implementere den smarte kontrakt (bemærk, at dette er forskelligt fra at implementere det til test i Remix). Af hensyn til denne vejledning bruger vi Remix og Metamask, men der er andre måder at gøre det på. Metamask er et simpelt, men effektivt Ethereum-tegnebogsprogram med en flot brugergrænseflade, der integreres som en udvidelse til nogle af de mest populære browsere. I vores tilfælde bruger vi Opera. Gå først til metamask.io og download udvidelsen. Når det er gjort, vil du se et ræveikon øverst til højre i din browser.

Downloader metamask & amp; placering af ikonetBillede af Utoday

Tryk på ikonet og fortsæt gennem de tilbudte instruktioner for at oprette en tegnebog. Glem ikke at gemme den hemmelige sætning! Når du har din tegnebog, skal du trykke på Metamask-ikonet og ændre netværket til ‘Ropsten’, fordi vi ikke ønsker at rode med Ethereums mainnet.

Ændring af metamask til RopstenBillede af Utoday

Det sidste trin er at generere noget Ether (desværre vil du ikke kunne bruge disse til reelle køb, men de er nødvendige til test). Gå over til vandhane.metamask.io og anmod 1 Ether.

Nu er du klar. Gå tilbage til dit Remix-vindue, og skift miljøet til ‘Injiceret Web3’ i compileren. Se også på fanen konto – din adresse skal være den samme som den, du genererede med Metamask. Vælg den smarte kontrakt, du vil distribuere, hvilket er din token-kontrakt og ikke ERC20-grænsefladen, og tryk på den respektive knap. Et Metamask-vindue vises med en transaktion, dens detaljer og muligheder for at interagere med den. Indsend transaktionen, så vores token kommer til liv.

Pop op med metamaskBillede af Utoday

Du kan nu lege med alle de funktioner, vi har angivet tidligere. Lad os se på vores kontrakt fra en anden side for at kontrollere, at den fungerer korrekt. Som enhver anden blockchain har Ethereum flere block-opdagelsesrejsende, der tjener det væsentlige formål med at overvåge, hvad der sker på netværket. I vores tilfælde holder vi os til etherscan, selvom der er en håndfuld andre gode alternativer. Bemærk, at hvis du bare går til etherscan, vil du se hovednetværket. Da vi har brug for at se Ropsten-netværket, skal du sætte ‘ropsten.’ Foran webstedets adresse. Søg efter din adresse, og du vil se to transaktioner – en er gratis Ether, du har modtaget, og en anden er til implementering af kontrakten.

Brugerens adresse i EtherscanBillede af Utoday

For at finde adressen på din kontrakt skal du trykke på TxHash og navigere til feltet ‘Til’. Her kan du kontrollere din smarte kontrakts transaktioner, kode og begivenheder. På dette tidspunkt er vi nødt til at kontrollere og offentliggøre vores kontrakt. Gå til afsnittet “Kode” og klik på linket “Bekræft og udgiv”. Her skal du igen angive navnet på dit token, versionen af ​​compileren (i vores tilfælde var den seneste version af Solidity, vi brugte, 0.5.7, så vi holder os til den relaterede compilerversion). Nu skal du kopiere tokens smarte kontraktkode sammen med ERC20-interfacekoden fra dit Remix-vindue til etherscan og trykke på ‘Bekræft og udgiv’ nederst på skærmen.

Bekræftelse af den smarte kontraktBillede af Utoday

Det er tid til at gå tilbage til din kontrakts adresse. Koden i fanen ‘Kode’ bliver nu verificeret. Derudover har du nu to faner mere: ‘Læs kontrakt’ & ‘Skriv kontrakt’. I læsningssektionen kan vi kontrollere funktionaliteten af ​​vores token. Indtast din (ikke kontraktens) adresse i feltet ‘balanceOf’ for at se, hvor mange tokens du har; det skulle vise 1 million, at vi hårdt kodede som den samlede forsyning og gav det til vores tegnebog. Det betyder, at vores token nu fungerer korrekt på testnet.

Modtagelse af saldoenBillede af Utoday

Resumé

Hvis du ønsker at starte en karriere i kryptoindustrien, skal du forstå, at trods sin relative enkelhed i det grundlæggende har blockchain utrolig dybde. Siden 2017 har blockchains udviklet sig markant, og deres brugssager gik ud over bare finansielle transaktioner. Med fremkomsten af ​​Ethereum dukkede et helt nyt lag netværk op, der er vært for forskellige dApp’er og blockchain-baserede løsninger. Værktøjet bag denne udvikling var en smart kontrakt, og hvis du vil gøre din oplevelse mere værdifuld og fremtidssikker, skal du vide, hvordan man fungerer.

Mens du kan kode smarte kontrakter på andre sprog, er soliditet bedre egnet til et sådant formål. Desuden, hvis du vil blive en Ethereum-udvikler eller oprette et ICO / ERC20-token til dit projekt, er dette dit valg. Hvis du havde nogle erfaringer med C ++ eller JavaScript, skulle kodning på Solidity være relativt let. Du bliver dog nødt til at forstå nogle forskelle mellem klientserveren og decentrale modeller for lancering af software. Takket være Ethereum Foundation og nogle tredjepartsorganisationer får udviklere et sæt praktiske værktøjer som Remix og Etherscan til at kode og implementere smarte kontrakter.

Vi håber, at vores vejledning hjalp dig med at komme omkring størstedelen af ​​Solidids koncepter for at kunne starte din blockchain-rejse. Husk at du altid kan tjekke med den nyeste dokumentation om soliditet. Vi ønsker dig held og lykke og vil gerne bruge nogle af dine dApps en dag!