1. Personal FinanceEthereum Smart Contracts: Tips for håndtering av data i soliditet
Ethereum For Dummies

Av Michael Solomon

Soliditet er det mest populære språket for å skrive smarte kontrakter fra Ethereum. Soliditet ble foreslått av Gavin Wood i august 2014. Selv om det ikke er det eneste språket du kan bruke for å skrive smarte kontrakter, er det det mest populære språket for å skrive smarte kontrakter som kjører i Ethereum. Den nyter solid støtte fra Ethereum-samfunnet og ble utviklet av Ethereum-prosjektets soliditetsteam.

Soliditet ble designet for å likne JavaScript og ble påvirket av noen få andre populære programmeringsspråk også, inkludert C ++ og Python. Målet med soliditet er å tilby et språk som er kjent for webapplikasjonsutviklere, men som er målrettet mot smart kontraktutvikling. Soliditet er ikke ment ikke som et generelt språk, men for å støtte blockchain-spesifikke operasjoner med kode som kjører i EVM.

Før koden din kan kjøres i EVM, må du sammenstille den. Derfor var en av komponentene du installerte når du bygde utviklingsmiljøet ditt, en Solidity-kompilator. Du skriver først Solidity-kildekoden i en redaktør. Deretter kompilerer du den til bytekode, som er instruksjonene som kjøres i EVM. Etter at du har distribuert din smarte kontrakt-bykode, kjører den på alle Ethereum-noder.

Fordi smarte kontrakter kjører på alle noder, må soliditet håndheve determinisme, det vil si at resultatene må være de samme for alle noder som kjører din smarte avtalekode med samme input. Hvis du ser på soliditetsdokumentasjonen, finner du ikke en tilfeldig () -funksjon. Denne utelatelsen er spesielt for å støtte Soliditys determinisme. Koden din kjøres først av noden som gruver en ny blokk, men deretter bekrefter alle noder blokken og kjører koden for å sikre at de ikke får et annet resultat.

På mange måter ligner soliditet på andre programmeringsspråk. De største forskjellene er i hvordan programmene kjøres og hvordan Solidity håndterer data. Merk at Solidity kun omhandler data i EVM eller blockchain.

Soliditet samhandler ikke mye med omverdenen, men det er mulig. Soliditet støtter konseptet om et orakel, som er en pålitelig kilde til informasjon fra omverdenen.

Det er enkelt å ringe et orakel. Et problem er å kunne stole på orakelet. Et annet problem er å håndtere orakeledata som kan returnere forskjellige data hver gang de heter. Før du bruker orakler, må du forsikre deg om at datakilden er pålitelig og konsistent. Det er vanlig at orakler returnerer data og et bevis på ektheten.

Konseptet med tillit med hensyn til orakler er bare en utvidelse av blockchain-tillit. Husk at blockchain-teknologien gir en pålitelig hovedbok med data i et miljø med tillitsløse nettverksnoder. Fordi tillit er en slik grunnleggende egenskap for blockchain, er det ikke overraskende at det å stole på et orakel er en viktig bekymring.

Soliditet handler spesielt om hvor du kan lagre data. Du definerer vanligvis to typer variabler i soliditet: tilstandsvariabler og lokale variabler. Du definerer tilstandsvariabler i kontraktsdelen, og disse variablene er tilgjengelige hvor som helst i smartkontrakten. Disse variablene lagrer tilstanden til smartkontrakten din ved å lagre verdiene i en blokk på blockchain. Du definerer lokale variabler i funksjonene. Lokale variabler lagrer ikke verdiene sine mellom funksjonssamtaler. Disse verdiene lagres ikke på blockchain og går bort når funksjonen avsluttes.

Soliditet definerer tre steder for lagring av data:

  • Bunke: Hvor soliditet lagrer lokale enkle variabelverdier definert i funksjoner. Minne: Et minneområde på hver EVM som Solidity bruker for å lagre midlertidige verdier. Verdier som er lagret her blir slettet mellom funksjonssamtaler. Lagring: Der tilstandsvariabler definert i en smart kontrakt. Disse tilstandsvariablene ligger i delen om smarte kontraktsdata på blockchain.

Variabel lagringsplassering er en av de mer forvirrende aspektene ved soliditet. Soliditetsspråket har ikke et stabelnøkkelord, men har nøkkelord for minne og lagring. Soliditet bruker sine egne standarder, avhengig av hvor du definerer variabler og hvordan du bruker dem, men du kan overstyre noen av disse standardverdiene og også bruke nøkkelordene for å endre hvordan soliditet behandler variabler.

Her er noen regler som hjelper deg med å holde ting rett når du lærer om lagring av data i soliditet:

  • Tilstandsvariabler lagres som standard (verdiene lagres i blockchain). Lokale variabler i funksjoner er minne som standard (verdier lagres midlertidig i minnet). Strukturer lagres som standard (verdiene lagres i blockchain).

Soliditet kan håndtere forskjellige typer data og gir forskjellige typer variabler for å håndtere hver type. Når du definerer variabler, må du spesifisere datatypen til variabelen. Datatypen forteller soliditet hvor mye plass du skal fordele for verdien du vil lagre i variabelen og hvordan du behandler dataene. Tabellen nedenfor viser datatypene som Solidity støtter.

Etter hvert som smarte kontrakter blir mer komplekse, vil du sannsynligvis trenge å representere mer komplekse typer data. Det kan for eksempel være lurt å definere en fysisk adressetype som inneholder flere opplysninger, inkludert gateadresse, by, stat og postnummer.

Det kan også hende du må lagre tabeller eller lister med data. Soliditet lar deg lage dine egne datastrukturer med struktkompleks datatype. Du kan også definere matriser som lagrer grupper med lignende dataelementer. Soliditetsmatriser kan være grupper av enkle datatyper eller grupper av strukturer.

Her er en smart kontrakt som demonstrerer noen av Soliditys enkle datatyper. I dette eksemplet bruker du bare tilstandsvariabler, noe som betyr at du skriver til blockchain. Å definere alle variablene dine som tilstandsvariabler er ikke en god idé med mindre du vil lagre data for alltid. Data som er lagret i blockchain krever dyre operasjoner og skal ikke brukes med mindre du trenger å lagre dataene dine vedvarende. Foreløpig bruker du tilstandsvariabler.

Åpne VS-kode for myProject-prosjektet:

For å åpne VS-kode i myProject-prosjektet, åpner du en Windows Command-ledetekst eller PowerShell (min favoritt) og bruker cd-kommandoen til å navigere til prosjektkatalogen (myProject.) Herfra skriver du bare følgende kommando og trykker Enter:

kode.

Skriv deretter inn følgende kode eller last ned Ethereum-prosjektfilene fra Dummies.

pragma-soliditet 0,4,24;
/ *
* @title Soliditet datatyper
* @ forfatter Michael Solomon
* @ notice En ganske smart kontrakt for å demonstrere enkle datatyper som er tilgjengelige i Solidity
*
* /
kontrakt DataTypes {
uint x = 9;
int i = -68;
uint8 j = 17;
bool isEthereumCool = sant;
adresseeier = msg.sender; // Ethereum-adresse til meldingssenderen
bytes32 bMsg = "hei";
string sMsg = "hei";
funksjon getStateVariables () offentlig visning returnerer (uint, int, uint8, bool, address, bytes32, string) {
retur (x, i, j, isEthereumCool, eier, bMsg, sMsg);
}
} <

Før du kan distribuere og teste den nye smarte kontrakten, må du legge den til i JavaScript-skriptet for overføring. Åpne filen 2_contracts_migrations.js i VS-kode i Migrations-katalogen. Legg deretter til de to linjene med kommentarer slik at filen din ser slik ut:

var HelloWorld = artifacts.require ("HelloWorld");
var DataTypes = artifacts.require ("DataTypes"); // Legg til denne linjen
module.exports = funksjon (deployer) {
deployer.deploy (Hello);
deployer.deploy (DataTypes); // Legg til denne linjen
};

Ikke glem å lagre filen etter at du har lagt til den nye teksten!

Her er trinnene du kan bruke for å distribuere og teste den nye smarte kontrakten:

  1. Forsikre deg om at du har Ganache i gang. I VS-kode, klikk eller trykk på kategorien Terminal, skriv inn følgende, og trykk deretter Enter: trøffeldistribusjon - reset Skriv trøffelkonsoll og trykk Enter. Skriv inn følgende ved Truffle-konsoll-ledeteksten og trykk Enter: DataTypes.deployed (). Deretter (funksjon (instans) {return-instans.getStateVariables ()});

Følgende bilde viser verdiene som den nye smarte kontrakten din returnerer. Truffle viser returverdiene på en interessant måte. Tall returneres som BigNumber-objekter. Du kan ringe funksjoner i et BigNumber-bibliotek for å konvertere dem, men foreløpig er det bare å lese verdiene direkte.

For de numeriske returnerte verdiene er den første verdien, s: tegnet på tallet, og den tredje verdien, c: er den usignerte verdien funksjonen returnerte. Vær også oppmerksom på at adresse- og bytes32-verdiene er i heksadesimal format.

Ethereum smart kontrakt