Blockchain-kodning: De många olika språken du behöver!

I den här guiden går vi igenom några av de större Blockchain-kodningarna. Och om du precis börjat kolla in våra omfattande blockchain-kurser.

Blockchain-tekniken är otroligt fascinerande. Det är inte långt ifrån att tänka på en framtid som kommer att byggas helt på den. Så vad behöver du lära dig för att börja utveckla blockchain? Vilka språk ger dig kanten? Låt oss komma igång med blockchain-kodning!

Programmering av blockchain-problem

Innan vi börjar, låt oss kolla in några av de utmaningar som en blockchain-utvecklare står inför. Att skapa och underhålla en offentlig blockchain är inte lätt på grund av ett antal skäl.

(Innan vi fortsätter, ett enormt rop till David Schwartz för hans huvudtala angående C ++ användning i blockchain-mjukvaruutveckling i CPPCON 2016.)

Blockchain-kodning

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

Blockchain Coding Difficulty Challenge # 1: Security

Blockkedjor, som David Schwartz säger det, bör vara fästningar. För det första är koden offentlig och öppen för alla att se. Vem som helst kan titta över koden och söka efter buggar och sårbarheter. Till skillnad från andra öppna kodresurser är nackdelen med att hitta sårbarheter på blockchain-koden enorm. Alla programmerare kan hacka in och komma undan med potentiellt miljoner och miljoner dollar. På grund av dessa legitima säkerhetsproblem är utvecklingen på blockchain vanligtvis mycket långsam.

Blockchain Coding Difficulty Challenge # 2: Resource Management

Det är viktigt att hålla jämna steg med nätverket. Du kan inte hamna för långt efter och inte hålla jämna steg med alla nätverkskrav. Du bör vara väl utrustad för att hantera avlägsna och lokala frågor.

Blockchain Coding Difficulty Challenge # 3: Performance

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

Blockchain måste alltid prestera så högt som möjligt, men för att det ska hända måste det valda språket vara extremt mångsidigt. Saken är att det finns vissa uppgifter i blockchain som kan parallelliseras medan det finns vissa uppgifter som inte kan göras parallellt.

Ett bra exempel på en “parallelliserbar” uppgift är verifiering av digital signatur. Allt du behöver för signaturverifiering är nyckeln, transaktionen och signaturen. Med bara tre data kan du utföra verifieringar parallellt.

Men inte alla funktioner på en blockchain ska göras på det sättet. Tänk på själva transaktionskörningen. Flera transaktioner kan inte utföras parallellt. det måste göras en i taget för att undvika fel som dubbla utgifter. Vissa språk är bra på parallella operationer medan andra är bra i icke-parallella operationer.

Träna för att bli en Blockchain-utvecklare

Börja din gratis testversion idag!

Blockchain Coding Difficulty Challenge # 4: Isolation

Vad är deterministiskt beteende?

  • Om A + B = C, oavsett omständigheterna, kommer A + B alltid att vara lika med C. Det kallas deterministiskt beteende.
  • Hashfunktioner är deterministiska, vilket betyder att A: s hash alltid kommer att vara H (A).

Så vid blockchain-utveckling måste all transaktionsverksamhet vara deterministisk. Du kan inte ha en transaktion som beter sig på ett sätt och sedan uppträder ett annat sätt nästa dag. På samma sätt kan du inte ha smarta kontrakt som fungerar på två olika sätt i två olika maskiner.

Den enda lösningen på detta är isolering. I grund och botten isolerar du dina smarta kontrakt och transaktioner från icke-deterministiska element.

Så vi har diskuterat de största problemen som blockchain-utvecklare står inför. Låt oss nu äntligen kolla in några av de språk som utvecklarna kan använda för att koda på blockchain.

Blockchain-kodningsspråk # 1: C++

Låt oss först och främst börja med farfar till dem alla vintergröna C++. C ++ skapades av Bjarne Stroustrup som en förlängning av C-språket. Språket var utformat för att ha flexibiliteten och effektiviteten hos C men med några stora skillnader. Den största skillnaden mellan C och C ++ är att medan C är processorienterad är C ++ objektorienterad.

Vad detta betyder är att data och funktioner i C ++ är inslagna i ett snyggt litet paket som kallas “objekt” vilket innebär att när ett objekt har skapats kan det enkelt anropas och återanvändas i andra program, vilket kraftigt minskar kodningstiden.

Låt oss titta på det enklaste C ++ – programmet i världen. Programmet “Hello World”:

#omfatta

huvud ()

{

cout << "Hej världen!";

returnera 0;

}

Den här koden kommer att skriva ut ”Hello World!”

Så varför använder människor fortfarande C ++ för kodning? Visst finns det mycket mer glamorösa språk nu, varför insisterar folk fortfarande på att gå tillbaka till C ++? Varför kodas bitcoin blockchain på C++?

Som det händer har C ++ vissa funktioner som gör det väldigt tilltalande. (Ropa ut Peter Wiulle och David Schwartz för följande förklaring).

Funktion # 1: Minneskontroll

Kom ihåg vad vi sa tidigare om utmaningarna med blockchain-utveckling? Blockchains bör inte bara vara säkrade fästningar utan de bör också ha effektiv resurshantering. En blockchain ska interagera med många otillförlitliga slutpunkter samtidigt som de fortfarande ger snabb service till alla noder.

Denna snabba och snabba tjänst är avgörande för framgången för en kryptovaluta som bitcoin. Kom ihåg att de alla är baserade på principen om “konsensus”, alla noder i nätverket måste acceptera och avvisa exakt samma block, annars kan det finnas en gaffel i kedjan.

För att tillgodose alla dessa krav och prestera på högsta nivå behöver du noggrann och fullständig kontroll över CPU- och minnesanvändning. C ++ ger det till sina användare.

Funktion nr 2: Trådning

Som vi har diskuterat tidigare är en av de viktigaste utmaningarna med blockchain-programmeringen integrationen av uppgifter som parallelliseras väl och de uppgifter som inte parallelliseras. De flesta språk är specialiserade på ett, men C ++: s trådförmåga är tillräckligt bra för att hantera både parallella och icke-parallella uppgifter. En tråd är en uppsättning instruktioner som kan köras samtidigt. C ++ möjliggör inte bara fantastiska multithreading-anläggningar med effektiv inter-thread-kommunikation, utan optimerar också single-thread-prestanda.

Funktion # 3: Flytta semantik

En av de mest intressanta aspekterna av C ++ är flytta semantik. Flytta semantik ger ett sätt för innehållet att flyttas mellan objekt snarare än att kopieras direkt. Låt oss kolla skillnaderna mellan kopiera semantik och flytta semantik. (Följande data hämtas från Peter Alexanders svar i “Stackoverflow”).

Kopiera semantik:

  • hävda (b == c);
  • a = b;
  • hävda (a == b && b == c);

Så vad händer här? Värdet på b går in i a och b förblir oförändrat i slutet av det hela.

Tänk på detta nu.

Flytta semantik:

  • hävda (b = = c);
  • flytta (a, b);
  • hävda (a = = c);

Vad är det som händer här?

Kan du se skillnaden mellan de två kodblocken?

När vi använder flyttningssemantiken behöver inte värdet “b” vara oförändrat. Det är skillnaden mellan kopiera semantik och flytta semantik. Den största fördelen med move semantics är att du bara kan få kopior av viss data när du behöver dem, vilket kraftigt minskar redundansen i koden och ger en enorm prestationsuppgång. Så som du kan se är denna effektiva minneshantering och höga prestanda önskvärda för blockchain.

Funktion # 4: Kompilera tidspolymorfism

Vad är polymorfism?

Kommer du ihåg när vi kallade C ++ för ett ”objektorienterat programmeringsspråk” (OOP)? Polymorfism är en OOP-egenskap. Med polymorfism använder du en viss funktion på mer än ett sätt. I C ++ kan polymorfism användas på två sätt:

  • Sammanställningstidspolymorfism.
  • Körtidspolymorfism.

Här kommer vi bara att fokusera på polymorfism under sammanställningstid. Det finns två sätt som C ++ implementerar kompileringspolymorfism:

  • Funktion Överbelastning.
  • Överbelastning av operatören.

Funktionsöverbelastning:

Funktionsöverbelastning är när du har många funktioner med samma namn men med olika parameterintag.

Tänk på det här programmet:

#omfatta

använder namnrymd std;

klass A

{

void func (int x) // första instansen av funktionen tar bara ett heltal

{

cout<<x<<endl;

}

void func (dubbel x) // andra instans av funktionen tar bara ett dubbelvärde

{

cout<<x<<endl;

}

void func (int x, int y) // tredje instans av funktionen tar två heltal värden

{

cout<<x = y<<endl;

}

}

int main ()

{

En obj1 // gör ett objekt av klass A

// nu ska vi kalla funktionerna

obj1.func (2);

obj1.func (2.65);

obj1.func (2,5);

returnera 0;

}

Nu när du kör den här funktionen kommer utmatningen att vara:

  • 2
  • 2,65
  • 7

Så, som du kan se, användes samma funktion func () på tre olika sätt.

Överbelastning av operatören:

I C ++ kan samma operatör ha mer än en betydelse.

  • T.ex. “+” Kan användas både för matematisk addition och för sammanfogning.
  • Sammankoppling innebär i grunden att man tar två strängar och kombinerar dem som en.
  • Så 3 + 4 = 7.

OCH

  • Block + geeks = Blockgeeks.
  • Samma operatör gjorde två olika funktioner, detta är operatörens överbelastning.

Kompileringstidspolymorfism hjälper mycket i blockchain-utveckling. Det hjälper till att placera ansvarsområden separat i olika funktioner och i sin tur öka prestanda för hela systemet.

Funktion # 5: Kodisolering

C ++ har namnområdesfunktioner som kan importeras från ett program till ett annat. Namespace hjälper till att undvika namnkollisioner. Eftersom C ++ har klasser kan det också fungera som gränser mellan olika API: er och hjälpa till att göra en klar separation.

En klass i C ++ är en användardefinierad typ eller datastruktur som deklareras med nyckelordsklass som har data och fungerar som sina medlemmar. Du kan komma åt de funktioner som deklarerats i klassen genom att deklarera objekt från den specifika klassen.

Funktion # 6: Mognad

Språket är både moget och uppdateras regelbundet. Det finns minst 3 solida kompilatorer, som David Schwartz säger, och de nya funktionerna syftar till att lösa verkliga problem. Felsökare och analysverktyg av alla slag finns tillgängliga för allt från prestandaprofilering till automatisk upptäckt av alla slags problem. Detta innebär att språket växer ständigt för att införliva nyare och bättre funktioner.

På grund av ovanstående funktioner valde Satoshi Nakamoto C ++ för att vara basspråket för bitcoin-källkoden.

Blockchain Coding Language # 2: Javascript

Nästa steg har vi Javascript.

Tillsammans med HTML och CSS är det en av de tre kärnteknikerna inom produktion av webbinnehåll. Javascript används vanligtvis för att skapa mycket interaktiva webbsidor. Så nu kommer vi att se hur man skapar en mycket enkel blockchain med Javascript. Stort rop till savjee.be för innehållet i detta avsnitt.

Antag att vi vill skapa en enkel blockchain i Javascript. Innan vi gör det finns det vissa saker som vi måste ta itu med.

Vad är en blockchain och hur exakt fungerar det … kodmässigt?

En blockkedja är i grunden en kedja av block som innehåller data. Det är i grunden en förhärligad länkad lista. Men vad gör det så speciellt? En blockchain är oföränderlig. Menande, när en gång data går in i ett block kan det aldrig ändras. Hur uppnår en blockchain oföränderlighet? Det beror på en enkel men genial mekanism som kallas ”hashing”. Kolla in diagrammet nedan:

Blockchain-kodning: De många olika språken du behöver!

Bild med tillstånd: Lauri Hartikka medium artikel

Varje block är anslutet till det föregående blocket via en hashpekare som innehåller hashen från det föregående blocket. Så, hur gör detta kedjan oföränderlig?

En av de mest fascinerande egenskaperna hos kryptografiska hashfunktioner är att om du ens ändrar ingången lite kan det påverka utdatahashen kraftigt. T.ex. Kolla in det här:

Blockchain-kodning: De många olika språken du behöver!

Bara att ändra den första “T” från stora till små bokstäver förändrade utmatnings hash så mycket.

Så, hur påverkar detta blockchain?

Varje block är anslutet till det föregående via hashpekaren. Så, om någon skulle manipulera data i ett block, skulle det förändra hashen drastiskt och som ett resultat hamna på att påverka hela kedjan (eftersom alla block är länkade). Detta skulle frysa kedjan vilket är en omöjlighet och därmed kvarstår blocken oförändrade.

Så, hur gör vi ett block? Vad består ett enkelt block av? I vårt enkla kryptokoin som vi ska göra (Låt oss kalla det “BlockGeeksCoin”) kommer varje block att ha följande information:

  • Index: Att veta blocknummer.
  • Tidsstämpel: Att veta tidpunkten för skapelsen.
  • Data: Data inuti blocket.
  • Previous Hash: Hashet från det föregående blocket.
  • Hash: Hashen för det aktuella blocket.

Innan vi fortsätter. Du måste förstå vissa termer som vi ska använda i vårt program:

  • detta: Nyckelordet “detta” anropas inuti en funktion och gör att du kan komma åt värdena i ett specifikt objekt som anropar just den funktionen.
  • Konstruktör: En konstruktör är en speciell funktion som kan hjälpa till att skapa och initiera ett objekt inom en klass. Varje klass är begränsad till endast en konstruktör.

Nu när det är klart, låt oss börja göra vårt block.

Skapa blocket

const SHA256 = kräver ("crypto-js / sha256");

klass Block

{

konstruktör (index, tidsstämpel, data, tidigareHash = ”)

{

this.index = index;

this.previousHash = tidigareHash;

this.timestamp = tidsstämpel;

detta. data = data;

this.hash = this.calculateHash ();

}

räkna ut hash ()

{

returnera SHA256 (this.index + this.previousHash + this.timestamp + JSON.stringify (this.data)). toString ();

}

}

Kodanalys

Okej, så här här är ut block. Så i den första raden i koden kallade vi crypto-js-biblioteket eftersom sha256-hashfunktionen inte är tillgänglig i JavaScript.

Därefter anropade vi en konstruktör inuti klassen för att kalla efter objekt som har vissa värden. Det som troligen fångar ditt öga är funktionen CalcHash (). Låt oss se vad exakt det gör.

I ett block tar vi allt innehåll och hasar dem för att få hash för det specifika blocket. Vi använder JSON.stringify-funktionen för att förvandla blockdata till sträng för att hash det.

Okej, så vi har blocket klart och klart. Låt oss nu ansluta blocken till en blockchain.

Skapa blockchain

klass Blockchain

{

// Avsnitt 1 Genesis block skapande

konstruktör()

{

this.chain = [this.createGenesisBlock ()];

}

createGenesisBlock ()

{

returnera nytt block (0, "2017-01-01", "Genesis-blocket", "0");

}

// avsnitt 2 lägga till nya block

getLatestBlock ()

{

returnera denna.kedja [denna.kedja.längd – 1];

}

addBlock (newBlock) {

newBlock.previousHash = this.getLatestBlock (). hash;

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

// avsnitt 3 som validerar kedjan

isChainValid ()

{

för (låt i = 1; i < denna.kedja.längd; i ++)

{

const currentBlock = this.chain [i];

const previousBlock = this.chain [i – 1];

om (currentBlock.hash! == currentBlock.calculateHash ()) {

returnera falsk;

}

if (currentBlock.previousHash! == previousBlock.hash)

{

returnera falsk;

}

}

återvänd sant;

}

}

Kodanalys

Okej, så många saker händer i kedjan ovan, låt oss dela upp det i sektioner.

Avsnitt 1: Genesis Block

Vad är Genesis-blocket?

Genesis-blocket är det första blocket i blockchain, och anledningen till att det är speciellt är att medan varje bock pekar på blocket före det, pekar inte Genesis-blocket på någonting. Så när en ny kedja skapas åberopas genusblocket omedelbart. Du kan också se en “createGenesisBlock ()” -funktion där vi har gett blockets data manuellt:

createGenesisBlock ()

{

returnera nytt block (0, “01/01/2017”, “Genesis block”, “0”);

}

Nu när vi har byggt genesblocket, låt oss bygga resten av kedjan.

Avsnitt 2: Lägga till blocken

För det första måste vi veta vad det sista blocket i blockchain för närvarande är. För det använder vi funktionen getLatestBlock ().

getLatestBlock ()

{

returnera denna.kedja [denna.kedja.längd – 1];

}

Nu när vi har bestämt det senaste blocket, låt oss se hur vi ska lägga till nya block.

addBlock (newBlock) {

newBlock.previousHash = this.getLatestBlock (). hash;

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

Så, vad händer här? Hur lägger vi till blocken? Hur kontrollerar vi om det angivna blocket är giltigt eller inte?

Kom ihåg innehållet i ett block?

Ett block har hash från föregående block till höger?

Så vad vi ska göra här är enkelt. Jämför det tidigare blockets tidigare värde med det senaste blockets hash-värde.

Blockchain-kodning: De många olika språken du behöver!

Bild med tillstånd: Lauri Hartikka medium artikel

Om dessa två värden matchar betyder det att det nya blocket är legitimt och det läggs till blockchain.

Avsnitt 3: Validera kedjan

Nu måste vi kontrollera att ingen har trasslat med vår blockchain och att allt är stabilt.

Vi använder ”for” -slingan för att gå från block 1 till det sista blocket. Genesis-blocket är block 0.

för (låt i = 1; i < denna.kedja.längd; i ++)

{

const currentBlock = this.chain [i];

const previousBlock = this.chain [i – 1];

I denna del av koden definierar vi två termer, nuvarande block och tidigare block. Och nu ska vi helt enkelt hitta hash av dessa två värden.

om (currentBlock.hash! == currentBlock.calculateHash ()) {

returnera falsk;

}

if (currentBlock.previousHash! == previousBlock.hash)

{

returnera falsk;

}

}

återvänd sant;

}

Om “previousHash” för det aktuella blocket inte är lika med “Hash” för det föregående blocket, kommer denna funktion att returnera False, annars returnerar den True.

Använda blockchain

Nu ska vi äntligen använda blockchain för att skapa vår BlockGeeksCoin.

  • låt BlockGeeksCoin = ny Blockchain ();
  • BlockGeeksCoin.addBlock (nytt block (1, “20/07/2017”, {belopp: 4}));
  • BlockGeeksCoin.addBlock (nytt block (2, “20/07/2017”, {belopp: 8}));

Och det är allt!

Så vad hände här?

Vi skapade en ny kryptovaluta baserad på blockchain och gav den namnet BlockGeeksCoin. Genom att åberopa detta nya objekt aktiverade jag konstruktören, som i sin tur skapade Genesis-blocket automatiskt.

Vi lade helt enkelt till ytterligare två block och gav dem lite data.

Det är så enkelt.

(Tack savjee.be för den fantastiska och enkla förklaringen.)

Blockchain Coding Language # 3: Python

Guido van Rossum, en holländsk programmerare, skapade Python redan 1991. Python bygger på en enkel filosofi: Enkelhet och minimalism. Ett av de mer anmärkningsvärda sätten att de införlivade enkelhet i sitt språk är att använda vita blanksteg för att beteckna kodblock istället för lockiga parenteser eller nyckelord. Låt oss se vad det här betyder.

Låt oss kolla in ett enkelt “Hello World” -program.

skriva ut (”Hej världen!”)

Yup, det är det!

Jämför det med C ++ “Hello World” -programmet.

Se hur mindre komplicerat det är i jämförelse? Vad sägs om att vi gör något lite mer komplicerat? Låt oss säga att vi lägger till två siffror och skriver ut resultatet.

num1 = 1,5

num2 = 6,3

summa = float (num1) + float (num2)

skriva ut (”Summan av {0} och {1} är {2}”. format (num1, num2, sum))

Och det är allt.

Resultatet av detta program kommer att vara:

  • Summan av 1,5 och 6,3 är 7,8

Så, låt oss göra det. Hur ska vi programmera en hel blockchain med Python? Följande data och kod är hämtad från Gerald Nashs artikel i Medium.

Skapa blocket

Låt oss först göra vårt block:

importera hashlib som hasher

klass Block:

def __init __ (själv, index, tidsstämpel, data, tidigare_hash):

self.index = index

self.timestamp = tidsstämpel

självdata = data

self.previous_hash = tidigare_hash

self.hash = self.hash_block ()

def hash_block (själv):

sha = hasher.sha256 ()

sha.update (str (self.index) +

str (självtidsstämpel) +

str (självdata) +

str (self.previous_hash))

returnera sha.hexdigest ()

Kodanalys

Vi börjar med att importera hashbiblioteket för att använda SHA 256-hashfunktionerna (precis som Javascript).

Precis som tidigare har blocket samma värde:

  • Index.
  • Tidsstämpel.
  • Data.
  • Tidigare hash.
  • Hash.

En gång emot fyller vi upp hash-värdena via en funktion, samma som tidigare.

Skapa genesblocket

Nu ska vi skapa Genesis-blocket:

importera tid som datum

def create_genesis_block ():

return Block (0, date.datetime.now (), “Genesis Block”, “0”)

Kodanalys

Vi har importerat datetime för att sätta i tidsstämpeln.

Vi genererade helt enkelt Genesis-blocket och gav det manuellt data att arbeta med. Det tidigare hashvärdet är “0” eftersom det inte pekar på något annat block.

Skapa resten av blocken

Låt oss nu definiera hur de efterföljande blocken kommer att skapas.

def next_block (last_block):

this_index = last_block.index + 1

this_timestamp = date.datetime.now ()

denna_data = "Hallå! Jag är block " + str (this_index)

this_hash = last_block.hash

returnera Block (denna_index, denna_tidsstämpel, denna_data, denna_hash)

Kodanalys

Så, hur ska vi bestämma värdena för varje bit data i varje block?

Blockindexet är helt enkelt indexet för det sista blocket + 1.

Tidsstämpeln är aktuellt datum och tid.

Uppgifterna om blocket är ett enkelt meddelande: ”Hej! Jag är block ”.

Hash vi beräknar med funktionen vi definierade tidigare.

Och i slutändan returnerar vi alla dessa värden till blocket.

Skapa blockchain

Slutligen, låt oss skapa blockchain.

blockchain = [create_genesis_block ()]

previous_block = blockchain [0]

num_of_blocks_to_add = 15

för jag inom intervallet (0, num_of_blocks_to_add):

block_to_add = nästa_block (föregående_block)

blockchain.append (block_to_add)

previous_block = block_to_add

# Berätta för alla om det!

skriva ut "Block # {} har lagts till blockchain!".format (block_to_add.index)

skriva ut "Hash: {} n".format (block_to_add.hash)

Kodanalys

För det första skapar vi genesblocket och ger dess värde till “previous_block”.

Sedan bestämmer vi hur många block som ska läggas till, i det här exemplet går vi med 15.

Så vi kör en slinga som går till 15 och lägger till varje block i blockchain. I slutet av utseendet skriver vi ut vilket nummerblock som har lagts till i blockkedjan genom att visa deras indexnummer. Dessutom skriver vi också ut Hash.

Så här ser utgången ut:

Blockchain-kodning: De många olika språken du behöver!

Bild med tillstånd: Gerald Nash Medium Article

Uppenbarligen i både detta och javascriptet kan du lägga till mer komplicerade funktioner som Proof Of Work. Om du vill lära dig att implementera det rekommenderas det starkt att gå igenom Gerald Nashs artikel. Men för tillfället vet du åtminstone hur man skapar en enkel blockchain i Python.

Språk # 4: Fasthet

Slutligen kommer vi till fasthet. För alla som vill lära sig att skapa DAPPs (Decentralized Applications) eller komma in i ICO-spelet är att lära sig soliditet ett absolut måste. Vi har redan en detaljerad guide om den som du kan läsa här. Men här kommer vi att ge dig en grundläggande översikt. Solidity utvecklades av Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai och flera tidigare ethereum-kärnbidragare för att möjliggöra att skriva smarta kontrakt på blockchain-plattformar som Ethereum.

Soliditet är ett målmedvetet slankat, löst skrivet språk med en syntax som mycket liknar ECMAScript (Javascript). Det finns några viktiga punkter att komma ihåg från Ethereum Design Rationale-dokumentet, nämligen att vi arbetar inom en stack-och-minnesmodell med en 32-bitars instruktionsordstorlek, EVM (Ethereum Virtual Machine) ger oss tillgång till programmet ” stack ”som är som ett registerutrymme där vi också kan hålla minnesadresser för att göra Program Counter-loop / hopp (för sekventiell programstyrning), ett expanderbart tillfälligt“ minne ”och ett mer permanent“ lagring ”som faktiskt skrivs in i det permanenta blockchain, och viktigast av allt, EVM kräver total determinism inom smarta kontrakt.

Så innan vi fortsätter, låt oss kolla in ett grundläggande exempel på soliditetskontrakt. (Koder hämtade från github).

Låt oss köra en enkel stund i soliditet:

kontrakt BasicIterator

{

adressskapare; // reservera en "adress"-typ plats

uint8 [10] heltal; // reservera en bit lagringsutrymme för 10 8-bitars osignerade heltal i en array

funktion BasicIterator ()

{

skapare = msg.sender;

uint8 x = 0;

// Avsnitt 1: Tilldela värden

medan (x < heltal.längd) {

heltal [x] = x;

x ++;

}}

funktion getSum () konstant returnerar (uint) {

uint8 summa = 0;

uint8 x = 0;

// Avsnitt 2: Lägga till heltal i en matris.

medan (x < heltal.längd) {

sum = summa + heltal [x];

x ++;

}

returbelopp;

}

// Avsnitt 3: Döda kontraktet

funktionsdöd ()

{

if (msg.sender == skapare)

{

självmord (skapare);

}

}

}

Så, låt oss analysera.

Avsnitt 1: Tilldela värden

I det första steget fyller vi i en array som kallas “heltal” som tar in 10 8-bitars osignerade heltal. Hur vi gör det är via en stund-slinga. Låt oss titta på vad som händer i stundslingan.

medan (x < heltal.längd) {

heltal [x] = x;

x ++;

}

Kom ihåg att vi redan har tilldelat värdet “0” till heltalet x. While-slingan går från 0 till heltal. Längd. Integers.length är en funktion som returnerar arrayens maxkapacitet. Så om vi bestämde oss för att en matris kommer att ha 10 heltal, returnerar arrayname.length värdet 10. I slingan ovan går x-värdet från 0 – 9 (<10) och tilldelar också värdet av sig själv till heltalarrayen. Så i slutet av slingan kommer heltal att ha följande värde:

0,1,2,3,4,5,6,7,8,9.

Avsnitt 2: Lägga till matrisinnehåll

Inuti getSum () -funktionen ska vi lägga till innehållet i själva arrayen. Sättet kommer att göras genom att upprepa samma while-loop som ovan och använda variabeln “sum” för att lägga till innehållet i arrayen.

Avsnitt 3: Döda kontraktet

Denna funktion dödar kontraktet och skickar återstående medel i kontraktet tillbaka till kontraktets skapare.

På frågan om vad som var inspiration och motivation bakom att skapa soliditet sa Dr. Gavin Woods detta:

”Det [Solidity] var tänkt att vara ett sofistikerat verktyg för att utveckla kontrakt som i slutändan skulle kunna ge både utvecklare och användare bra information om vad koden gjorde. För att hjälpa till med detta utformade jag NatSpec, ett kontraktsvänligt dokumentationsformat, och gjorde det till en förstklassig medborgare i Solidity. Jag föreslog också en formell korrekturspråkundersättning (ännu inte implementerad) för att maximera de typer av korrekthetsgarantier som kan göras.

Jag introducerade händelser som en förstklassig medborgare i fasthetsspråket för att ge en trevlig abstraktion för LOGgar som liknar funktionssamtal. Inspiration för detta kom från Qt-meta-objektsystemets “signaler”.

Ett senare inslag som Christian R. och jag tänkte på tillsammans var funktionsmodifierare; som gör att attribut placerade som en del av en funktionssignatur kan göra vissa ändringar i den uppenbara funktionskroppen. Att vara ett mycket deklarativt uttrycksmedel är det ett idiom som faller snyggt in i det kontraktsorienterade programmeringsutrymmet. ”

Blockchain-kodning: slutsats

I den här artikeln har vi endast täckt fyra språk för blockchain-kodning som används för att utvecklas i och runt blockchain. I verkligheten finns det många fler språk som du kan använda (Java, Go). Om du är programmerare är möjligheterna för dig verkligen oändliga. När världen blir mer och mer decentraliserad och blockchain blir mer och mer mainstream, är framtiden för dig definitivt gränslös.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me