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

Af Michael Solomon

Soliditet er det mest populære sprog til skrivning af Ethereum-smarte kontrakter. Soliditet blev foreslået af Gavin Wood i august 2014. Selvom det ikke er det eneste sprog, du kan bruge til at skrive smarte kontrakter, er det det mest populære sprog til at skrive smarte kontrakter, der kører i Ethereum. Det nyder solid støtte fra Ethereum-samfundet og blev udviklet af Ethereum-projektets soliditetshold.

Soliditet var designet til at svare til JavaScript og blev også påvirket af et par andre populære programmeringssprog, inklusive C ++ og Python. Målet med soliditet er at levere et sprog, der er velkendt for webapplikationsudviklere, men målrettet mod smart kontraktudvikling. Soliditet er ikke beregnet ikke som et generelt sprog, men skal understøtte blockchain-specifikke operationer med kode, der kører i EVM.

Før din kode kan køre i EVM, skal du sammenstille den. Derfor var en af ​​de komponenter, du installerede, da du byggede dit udviklingsmiljø, en Solidity-kompilator. Du skriver først din soliditetskildekode i en editor. Derefter samler du den til bytekode, som er instruktionerne, der kører i EVM. Når du har installeret din smarte kontrakt-bytekode, kører den på alle Ethereum-knudepunkter.

Da smarte kontrakter kører på alle noder, skal soliditet håndhæve determinisme, det vil sige, at resultaterne skal være de samme for alle noder, der kører din smarte kontraktkode med samme input. Hvis du ser på soliditetsdokumentationen, finder du ikke en tilfældig () funktion. Denne undladelse er specifikt for at understøtte Soliditetens determinisme. Din kode køres først af den node, der miner en ny blok, men derefter verificerer alle noder blokken og kører koden for at sikre, at de ikke får et andet resultat.

På mange måder ligner soliditet andre programmeringssprog. De største forskelle er i, hvordan programmerne køres, og hvordan soliditet håndterer data. Bemærk, at soliditet kun omhandler data i EVM eller blockchain.

Soliditet interagerer ikke meget med omverdenen, men det er muligt. Soliditet understøtter konceptet om et orakel, som er en pålidelig kilde til information fra omverdenen.

Det er nemt at ringe til et orakel. Et problem er at være i stand til at stole på orakelet. Et andet problem er at håndtere oracle-data, der muligvis returnerer forskellige data, hver gang de kaldes. Inden du bruger orakler, skal du sikre dig, at datakilden er pålidelig og konsekvent. Det er almindeligt, at orakler returnerer data og et bevis på ægthed.

Konceptet med tillid med hensyn til orakler er blot en udvidelse af blockchain-tillid. Husk, at blockchain-teknologien giver en pålidelig storbog af data i et miljø med tillidsløse netværksknuder. Da tillid er en sådan grundlæggende egenskab ved blockchain, er det ikke overraskende, at det at stole på et orakel er en vigtig bekymring.

Soliditet handler især om, hvor du kan gemme data. Du definerer generelt to typer variabler i Soliditet: tilstandsvariabler og lokale variabler. Du definerer tilstandsvariabler i kontraktsektionen, og disse variabler er tilgængelige overalt i den smarte kontrakt. Disse variabler gemmer tilstanden for din smarte kontrakt ved at gemme værdierne i en blok på blockchain. Du definerer lokale variabler inden for funktioner. Lokale variabler gemmer ikke deres værdier mellem funktionskald. Disse værdier gemmes ikke på blockchain og forsvinder, når funktionen afsluttes.

Soliditet definerer tre steder til lagring af data:

  • Stak: Hvor soliditet gemmer lokale enkle variabelværdier defineret i funktioner. Hukommelse: Et hukommelsesområde på hver EVM, som Solidity bruger til at gemme midlertidige værdier. Værdier, der er gemt her, slettes mellem funktionsopkald. Opbevaring: Hvor tilstandsvariabler defineret i en smart kontrakt bor. Disse tilstandsvariabler findes i afsnittet om smarte kontraktdata på blockchain.

Variabel lagerplads er en af ​​de mere forvirrende aspekter af soliditet. Soliditetssproget har ikke et stak nøgleord, men har hukommelse og opbevaring nøgleord. Soliditet bruger sine egne standarder, afhængigt af hvor du definerer variabler, og hvordan du bruger dem, men du kan tilsidesætte nogle af disse standarder og også bruge nøgleordene til at ændre, hvordan soliditet behandler variabler.

Her er et par regler, der hjælper med at holde tingene lige, når du lærer om lagring af data i soliditet:

  • Tilstandsvariabler er som standard lagring (værdier gemmes i blockchain). Lokale variabler i funktioner er som standard hukommelse (værdier gemmes midlertidigt i hukommelsen). Strukturer gemmes som standard (værdier gemmes i blockchain).

Soliditet kan håndtere forskellige typer data og giver forskellige typer variabler til at håndtere hver type. Når du definerer variabler, skal du specificere datatypen for variablen. Datatypen fortæller soliditet, hvor meget plads der skal tildeles for den værdi, du vil gemme i variablen, og hvordan man skal behandle dataene. Følgende tabel viser de datatyper, som soliditet understøtter.

Når dine smarte kontrakter bliver mere komplekse, bliver du sandsynligvis nødt til at repræsentere mere komplekse datatyper. F.eks. Ønsker du måske at definere en fysisk adressetype, der indeholder adskillige oplysninger, herunder gadeadresse, by, stat og postnummer.

Det kan også være nødvendigt at gemme tabeller eller lister med data. Soliditet giver dig mulighed for at oprette dine egne datastrukturer med strukturen kompleks datatype. Du kan også definere arrays, der gemmer grupper af lignende dataelementer. Soliditetsarrays kan være grupper af enkle datatyper eller grupper af strukturer.

Her er en smart kontrakt, der demonstrerer nogle af Soliditys enkle datatyper. I dette eksempel bruger du kun tilstandsvariabler, hvilket betyder, at du skriver til blockchain. At definere alle dine variabler som tilstandsvariabler er ikke en god ide, medmindre du vil gemme data for evigt. Data, der er gemt i blockchain, kræver dyre operationer og bør ikke bruges, medmindre du er nødt til at gemme dine data vedvarende. I øjeblikket bruger du tilstandsvariabler.

Åbn VS-kode for myProject-projektet:

For at åbne VS-kode i myProject-projektet skal du åbne en Windows-kommandoprompt eller PowerShell (min favorit) og bruge cd-kommandoen til at navigere til dit projektmappe (myProject.) Herfra skal du bare indtaste følgende kommando og trykke på Enter:

kode.

Skriv derefter følgende kode, eller download Ethereum-projektfilerne fra Dummies.

pragma-soliditet 0,4,24;
/ *
* @ titlen Soliditet datatyper
* @ Forfatter Michael Solomon
* @ note En simpel smart kontrakt til at demonstrere enkle datatyper, der er tilgængelige i soliditet
*
* /
kontrakt DataTypes {
uint x = 9;
int i = -68;
uint8 j = 17;
bool isEthereumCool = sandt;
adresseejer = msg.sender; // Ethereum-adresse til meddelelsessenderen
bytes32 bMsg = "hej";
string sMsg = "hej";
funktion getStateVariables () offentlig visning returnerer (uint, int, uint8, bool, adresse, bytes32, string) {
return (x, i, j, isEthereumCool, ejer, bMsg, sMsg);
}
} <

Inden du kan distribuere og teste din nye smarte kontrakt, skal du tilføje den til JavaScript-scriptet til overførsel. Åbn filen 2_contracts_migrations.js i VS-kode i mappen Migrations. Tilføj derefter de to linjer med kommentarer, så din fil ser sådan ud:

var HelloWorld = artifacts.require ("HelloWorld");
var DataTypes = artifacts.require ("DataTypes"); // Tilføj denne linje
module.exports = funktion (deployer) {
deployer.deploy (HelloWorld);
deployer.deploy (DataTypes); // Tilføj denne linje
};

Glem ikke at gemme din fil, når du har tilføjet den nye tekst!

Her er de trin, du kan bruge til at implementere og teste din nye smarte kontrakt:

  1. Sørg for, at du har Ganache i gang. I VS-kode skal du klikke på eller trykke på fanen Terminal, skriv følgende, og tryk derefter på Enter: truffle-distribution - reset Skriv trøffelkonsol, og tryk på Enter. I prompten Truffle-konsol skal du skrive følgende og trykke på Enter: DataTypes.deployed (). Derefter (funktion (instans) {return instance.getStateVariables ()});

Følgende billede viser de værdier, som din nye smarte kontrakt returnerer. Truffle viser returværdierne på en interessant måde. Tal returneres som BigNumber-objekter. Du kan ringe til funktioner i et BigNumber-bibliotek for at konvertere dem, men lige nu skal du bare læse værdierne direkte.

For de numeriske returnerede værdier er den første værdi, s: tegnet på tallet, og den tredje værdi, c: er den usignerede værdi, som funktionen returneres. Bemærk også, at adresse- og bytes32-værdierne er i hexadecimal format.

Ethereum smart kontrakt