Codifica Blockchain: le molte lingue diverse di cui hai bisogno!

In questa guida, esamineremo alcuni dei principali codici Blockchain. E se hai appena iniziato, dai un’occhiata ai nostri corsi completi sulla blockchain.

La tecnologia blockchain è incredibilmente affascinante. Non sarà inverosimile pensare a un futuro che sarà costruito interamente su di esso. Allora, cosa devi imparare per iniziare a sviluppare sulla blockchain? Quali lingue ti daranno il vantaggio? Cominciamo con la codifica blockchain!

Problemi di programmazione Blockchain

Prima di iniziare, diamo un’occhiata ad alcune delle sfide che uno sviluppatore blockchain deve affrontare. Creare e mantenere una blockchain pubblica non è facile per una serie di motivi.

(Prima di continuare, un enorme ringraziamento a David Schwartz per il suo discorso principale sull’uso del C ++ nello sviluppo di software blockchain in CPPCON 2016.)

Codifica Blockchain

Blockchain Coding Difficulty Challenge n. 1: sicurezza

Blockchain, come David Schwartz dice, dovrebbero essere fortezze. In primo luogo, il codice è pubblico e visibile a tutti. Chiunque può esaminare il codice e verificare la presenza di bug e vulnerabilità. Tuttavia, a differenza di altre risorse di codice aperto, lo svantaggio di trovare vulnerabilità sul codice blockchain è enorme. Qualsiasi programmatore può hackerare e farla franca con potenzialmente milioni e milioni di dollari. A causa di questi legittimi problemi di sicurezza, lo sviluppo su blockchain è solitamente molto lento.

Blockchain Coding Difficulty Challenge n. 2: gestione delle risorse

È importante tenere il passo con la rete. Non puoi restare troppo indietro e non tenere il passo con tutte le richieste della rete. Dovresti essere ben attrezzato per gestire query remote e locali.

Blockchain Coding Difficulty Challenge # 3: prestazioni

La blockchain deve sempre funzionare al massimo delle sue capacità, ma perché ciò avvenga il linguaggio scelto deve essere estremamente versatile. Il fatto è che ci sono alcune attività nella blockchain che sono parallelizzabili mentre ci sono alcune attività che non possono essere eseguite in parallelo.

Un buon esempio di attività “parallelizzabile” è la verifica della firma digitale. Tutto ciò di cui hai bisogno per la verifica della firma è la chiave, la transazione e la firma. Con solo tre dati è possibile condurre verifiche in modo parallelo.

Tuttavia, non tutte le funzioni su una blockchain dovrebbero essere eseguite in questo modo. Pensa all’esecuzione della transazione stessa. Non è possibile eseguire più transazioni in parallelo; deve essere fatto uno alla volta per evitare errori come le doppie spese. Alcuni linguaggi sono bravi nelle operazioni parallele mentre altri sono bravi nelle operazioni non parallele.

Allenati per diventare uno sviluppatore Blockchain

Inizia oggi la tua prova gratuita!

Blockchain Coding Difficulty Challenge n.4: Isolamento

Cos’è il comportamento deterministico?

  • Se A + B = C, indipendentemente dalle circostanze, A + B sarà sempre uguale a C. Questo è chiamato comportamento deterministico.
  • Le funzioni hash sono deterministiche, il che significa che l’hash di A sarà sempre H (A).

Quindi, nello sviluppo della blockchain, tutte le operazioni di transazione devono essere deterministiche. Non puoi avere una transazione che si comporta in un modo e poi si comporta in un altro modo il giorno successivo. Allo stesso modo, non puoi avere contratti intelligenti che funzionano in due modi diversi su due macchine diverse.

L’unica soluzione a questo è l’isolamento. Fondamentalmente isolate i vostri contratti intelligenti e transazioni da elementi non deterministici.

Quindi, abbiamo discusso i principali problemi che devono affrontare gli sviluppatori di blockchain. Ora esaminiamo finalmente alcuni dei linguaggi che gli sviluppatori possono utilizzare per codificare sulla blockchain.

Linguaggio di codifica Blockchain n. 1: C++

Innanzitutto, iniziamo con il nonno di tutti loro, il sempreverde C++. C ++ è stato creato da Bjarne Stroustrup come estensione del linguaggio C. Il linguaggio è stato progettato per avere la flessibilità e l’efficienza del C ma con alcune differenze importanti. La più grande differenza tra C e C ++ è che mentre C è orientato al processo, C ++ è orientato agli oggetti.

Ciò significa che, in C ++, i dati e le funzioni sono racchiusi in un piccolo pacchetto ordinato chiamato “oggetti”, il che significa che una volta creato un oggetto, può essere facilmente richiamato e riutilizzato in altri programmi, il che riduce notevolmente il tempo di codifica.

Diamo un’occhiata al programma C ++ più semplice al mondo. Il programma “Hello World”:

#includere

principale()

{

cout << "Ciao mondo!";

return 0;

}

Questo codice stamperà “Hello World!”

Quindi, perché le persone usano ancora C ++ per la codifica? Sicuramente ci sono linguaggi molto più affascinanti ora, perché le persone insistono ancora per tornare a C ++? Perché la blockchain di bitcoin è codificata su C++?

Ebbene, il C ++ ha alcune caratteristiche che lo rendono molto attraente. (Grida a Peter Wiulle e David Schwartz per la seguente spiegazione).

Caratteristica n. 1: controllo della memoria

Ricordi cosa abbiamo detto prima sulle sfide dello sviluppo blockchain? Non solo le blockchain dovrebbero essere fortezze protette, ma dovrebbero anche avere una gestione delle risorse efficace. Si suppone che una blockchain interagisca con molti endpoint non attendibili fornendo comunque un servizio rapido a tutti i nodi.

Questo servizio rapido e tempestivo è fondamentale per il successo di una criptovaluta come il bitcoin. Ricorda, sono tutti basati sul principio del “consenso”, tutti i nodi della rete devono accettare e rifiutare gli stessi identici blocchi, altrimenti potrebbe esserci un fork nella catena.

Per soddisfare tutte queste esigenze ed eseguire al massimo livello, è necessario un controllo stretto e completo sull’utilizzo della CPU e della memoria. Il C ++ lo offre ai suoi utenti.

Caratteristica n. 2: filettatura

Come abbiamo discusso in precedenza, una delle principali sfide della programmazione blockchain è l’integrazione di attività che si parallelizzano bene e le attività che non si parallelizzano. La maggior parte dei linguaggi è specializzata in uno, tuttavia, la capacità di threading di C ++ è abbastanza buona per gestire attività parallele e non parallele. Un thread è un insieme di istruzioni che possono essere eseguite simultaneamente. Il C ++ non solo consente eccellenti funzionalità di multithreading con un’efficace comunicazione tra thread, ma ottimizza anche le prestazioni a thread singolo.

Funzionalità n. 3: sposta semantica

Uno degli aspetti più interessanti del C ++ è la semantica degli spostamenti. La semantica di spostamento fornisce un modo per spostare i contenuti tra gli oggetti piuttosto che copiarli completamente. Esaminiamo le differenze tra la semantica della copia e la semantica dello spostamento. (I seguenti dati sono tratti dalla risposta di Peter Alexander in “Stackoverflow”).

Copia semantica:

  • asserire (b == c);
  • a = b;
  • asserire (a == b && b == c);

Allora cosa sta succedendo qui? Il valore di b va in a e b rimane invariato alla fine dell’intera cosa.

Ora, considera questo.

Sposta semantica:

  • asserire (b = = c);
  • spostare (a, b);
  • asserire (a = = c);

Cosa sta succedendo qui?

Riesci a vedere la differenza tra i due blocchi di codici?

Quando si utilizza la semantica del movimento, il valore di “b” non deve essere modificato. Questa è la differenza tra la semantica della copia e la semantica dello spostamento. Il più grande vantaggio della semantica di spostamento è che puoi ottenere copie di determinati dati solo quando ne hai bisogno, il che riduce notevolmente la ridondanza nel codice e offre un enorme aumento delle prestazioni. Quindi, come puoi vedere, questa gestione efficiente della memoria e prestazioni elevate sono entrambe desiderabili per la blockchain.

Caratteristica n. 4: polimorfismo del tempo di compilazione

Cos’è il polimorfismo?

Ricordi quando abbiamo chiamato C ++ un “linguaggio di programmazione orientata agli oggetti (OOP)”? Il polimorfismo sembra essere una proprietà OOP. Usando il polimorfismo, usi una caratteristica particolare in più di un modo. In C ++ il polimorfismo può essere utilizzato in due modi:

  • Polimorfismo in fase di compilazione.
  • Polimorfismo a tempo di esecuzione.

Qui ci concentreremo solo sul polimorfismo in fase di compilazione. Esistono due modi in cui C ++ implementa il polimorfismo in fase di compilazione:

  • Funzione sovraccarico.
  • Sovraccarico dell’operatore.

Sovraccarico di funzioni:

Il sovraccarico di funzioni è quando si hanno molte funzioni con lo stesso nome ma con un’assunzione di parametri diversa.

Considera questo programma:

#includere

using namespace std;

classe A

{

void func (int x) // la prima istanza della funzione accetta solo un valore intero

{

cout<<X<<endl;

}

void func (double x) // la seconda istanza della funzione accetta solo un valore double

{

cout<<X<<endl;

}

void func (int x, int y) // la terza istanza della funzione accetta due valori interi

{

cout<<x = y<<endl;

}

}

int main ()

{

Un obj1 // che crea un oggetto della classe A

// ora chiameremo le funzioni

obj1.func (2);

obj1.func (2,65);

obj1.func (2,5);

return 0;

}

Ora quando esegui questa funzione l’output sarà:

  • 2
  • 2.65
  • 7

Quindi, come puoi vedere, la stessa funzione func () è stata utilizzata in 3 modi diversi.

Sovraccarico dell’operatore:

In C ++ lo stesso operatore può avere più di un significato.

  • Per esempio. “+” Può essere utilizzato sia per l’addizione matematica che per la concatenazione.
  • Concatenazione significa fondamentalmente prendere due stringhe e combinarle come una.
  • Quindi 3 + 4 = 7.

E

  • Block + geeks = Blockgeeks.
  • Lo stesso operatore ha svolto due funzioni diverse, questo è il sovraccarico dell’operatore.

Il polimorfismo in fase di compilazione aiuta molto nello sviluppo della blockchain. Aiuta a mettere le responsabilità separatamente in varie funzioni e, a sua volta, a migliorare le prestazioni dell’intero sistema.

Caratteristica n. 5: isolamento del codice

C ++ ha caratteristiche dello spazio dei nomi che possono essere importate da un programma a un altro. Lo spazio dei nomi aiuta a evitare collisioni di nomi. Inoltre, poiché il C ++ ha classi, può fungere da confine tra varie API e aiutare a fare una chiara separazione.

Una classe in C ++ è un tipo definito dall’utente o una struttura di dati dichiarata con una classe di parole chiave che ha dati e funzioni come membri. È possibile accedere alle funzioni dichiarate nella classe dichiarando gli oggetti di quella particolare classe.

Caratteristica n. 6: maturità

La lingua è sia matura che regolarmente aggiornata. Ci sono almeno 3 compilatori solidi, come dice David Schwartz, e le nuove funzionalità mirano a risolvere problemi reali. Debugger e strumenti analitici di tutti i tipi sono disponibili per qualsiasi cosa, dalla profilazione delle prestazioni al rilevamento automatico di problemi di ogni tipo. Ciò significa che la lingua è in costante crescita per incorporare funzionalità più nuove e migliori.

A causa delle caratteristiche di cui sopra, Satoshi Nakamoto ha scelto C ++ come linguaggio di base del codice sorgente bitcoin.

Linguaggio di codifica Blockchain n. 2: Javascript

Successivamente abbiamo Javascript.

Insieme a HTML e CSS, è una delle tre tecnologie principali nella produzione di contenuti sul Web. Javascript viene solitamente utilizzato per creare pagine Web altamente interattive. Quindi, ora vedremo come creare una blockchain molto semplice usando Javascript. Enorme ringraziamento a savjee.be per il contenuto di questa sezione.

Supponiamo di voler creare una semplice blockchain in Javascript. Prima di farlo, ci sono alcune cose che dobbiamo affrontare.

Che cos’è una blockchain e come funziona esattamente … dal punto di vista del codice?

Una blockchain è fondamentalmente una catena di blocchi che contengono dati. È fondamentalmente un elenco collegato glorificato. Tuttavia, cosa lo rende così speciale? Una blockchain è immutabile. Ciò significa che una volta che un dato entra in un blocco, non può mai essere modificato. In che modo una blockchain raggiunge l’immutabilità? È a causa di un meccanismo semplice ma ingegnoso chiamato “hashing”. Guarda il diagramma qui sotto:

Codifica Blockchain: le molte lingue diverse di cui hai bisogno!

Cortesia dell’immagine: articolo medio di Lauri Hartikka

Ogni blocco è connesso al blocco precedente tramite un puntatore hash che contiene l’hash del blocco precedente. Quindi, in che modo questo rende la catena immutabile?

Una delle proprietà più affascinanti delle funzioni hash crittografiche è che se si modifica anche solo un po ‘l’input, può influire notevolmente sull’hash di output. Per esempio. Controllalo:

Codifica Blockchain: le molte lingue diverse di cui hai bisogno!

Basta cambiare la prima “T” da maiuscolo a minuscolo drasticamente cambiato così tanto l’hash di output.

Quindi, in che modo questo influisce sulla blockchain?

Ogni blocco è connesso al precedente tramite il puntatore hash. Quindi, se qualcuno dovesse manomettere i dati in un blocco, cambierebbe l’hash drasticamente e, di conseguenza, finirà per influenzare l’intera catena (poiché tutti i blocchi sono collegati). Ciò congelerebbe la catena, il che è impossibile e quindi i blocchi rimangono invariati.

Allora, come creiamo un blocco? In cosa consiste un semplice blocco? Nella nostra semplice criptovaluta che creeremo (chiamiamola “BlockGeeksCoin”), ogni blocco avrà le seguenti informazioni:

  • Indice: per conoscere il numero del blocco.
  • Timestamp: per conoscere l’ora della creazione.
  • Dati: i dati all’interno del blocco.
  • Hash precedente: l’hash del blocco precedente.
  • Hash: l’hash del blocco corrente.

Prima di continuare. È necessario comprendere alcuni termini che utilizzeremo nel nostro programma:

  • Questo: La parola chiave “this” viene richiamata all’interno di una funzione e consente di accedere ai valori all’interno di un oggetto specifico che chiama quella particolare funzione.
  • Costruttore: Un costruttore è una funzione speciale che può aiutare a creare e inizializzare un oggetto all’interno di una classe. Ogni classe è limitata a un solo costruttore.

Ora che è fatto, iniziamo a creare il nostro blocco.

Creazione del blocco

const SHA256 = require ("crypto-js / sha256");

blocco di classe

{

costruttore (indice, timestamp, dati, previousHash = ”)

{

this.index = index;

this.previousHash = previousHash;

this.timestamp = timestamp;

this.data = data;

this.hash = this.calculateHash ();

}

calcolaHash ()

{

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

}

}

Analisi del codice

Ok, quindi questo qui è fuori blocco. Quindi, nella prima riga del codice abbiamo chiamato la libreria crypto-js perché la funzione hash sha256 non è disponibile in JavaScript.

Successivamente, abbiamo invocato un costruttore all’interno della classe per chiamare oggetti che avranno determinati valori. La cosa che probabilmente attira la tua attenzione è la funzione calcolaHash (). Vediamo cosa sta facendo esattamente.

In un blocco, prendiamo tutti i contenuti e li sottoponiamo ad hashing per ottenere l’hash di quel particolare blocco. Stiamo usando la funzione JSON.stringify per trasformare i dati del blocco in una stringa per hash.

Ok, quindi abbiamo il blocco pronto e a posto. Ora colleghiamo i blocchi insieme in una blockchain.

Creare la blockchain

classe Blockchain

{

// Sezione 1 Creazione del blocco Genesis

costruttore()

{

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

}

createGenesisBlock ()

{

restituire nuovo blocco (0, "2017/01/01", "Blocco Genesis", "0");

}

// sezione 2 aggiunta di nuovi blocchi

getLatestBlock ()

{

return this.chain [this.chain.length – 1];

}

addBlock (newBlock) {

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

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

// sezione 3 convalida della catena

isChainValid ()

{

per (sia i = 1; i < this.chain.length; i ++)

{

const currentBlock = this.chain [i];

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

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

return false;

}

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

{

return false;

}

}

restituire vero;

}

}

Analisi del codice

Ok, quindi molte cose stanno accadendo nella catena sopra, suddividiamola in sezioni.

Sezione 1: Il blocco Genesis

Qual è il blocco genesi?

Il blocco genesis è il primo blocco della blockchain e il motivo per cui è speciale è che mentre ogni bock punta al blocco precedente, il blocco genesis non punta a nulla. Quindi, nel momento in cui viene creata una nuova catena, il blocco genesis viene richiamato immediatamente. Inoltre, puoi vedere una funzione “createGenesisBlock ()” in cui abbiamo fornito manualmente i dati del blocco:

createGenesisBlock ()

{

restituire nuovo blocco (0, “01/01/2017”, “Genesis block”, “0”);

}

Ora che abbiamo costruito il blocco genesis, costruiamo il resto della catena.

Sezione 2: Aggiungere i blocchi

In primo luogo, dovremo sapere qual è attualmente l’ultimo blocco nella blockchain. Per questo usiamo la funzione getLatestBlock ().

getLatestBlock ()

{

return this.chain [this.chain.length – 1];

}

Ora che abbiamo determinato l’ultimo blocco, vediamo come aggiungeremo nuovi blocchi.

addBlock (newBlock) {

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

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

Allora, cosa sta succedendo qui? Come aggiungiamo i blocchi? Come stiamo controllando se il blocco dato è valido o meno?

Ricorda il contenuto di un blocco?

Un blocco ha l’hash del blocco precedente a destra?

Quindi, quello che faremo qui è semplice. Confronta il valore hash precedente del nuovo blocco con il valore hash dell’ultimo blocco.

Codifica Blockchain: le molte lingue diverse di cui hai bisogno!

Cortesia dell’immagine: articolo medio di Lauri Hartikka

Se questi due valori corrispondono, significa che il nuovo blocco è legittimo e viene aggiunto alla blockchain.

Sezione 3: convalida della catena

Ora, dobbiamo controllare che nessuno abbia interferito con la nostra blockchain e che tutto sia stabile.

Stiamo usando il ciclo “for” per andare dal blocco 1 all’ultimo blocco. Il blocco Genesis è il blocco 0.

per (sia i = 1; i < this.chain.length; i ++)

{

const currentBlock = this.chain [i];

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

In questa parte del codice stiamo definendo due termini, blocco corrente e blocco precedente. E ora troveremo semplicemente l’hash di questi due valori.

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

return false;

}

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

{

return false;

}

}

restituire vero;

}

Se l ‘”hash precedente” del blocco corrente non è uguale all’ “hash” del blocco precedente, questa funzione restituirà False, altrimenti restituirà True.

Utilizzando la blockchain

Ora useremo finalmente la blockchain per creare il nostro BlockGeeksCoin.

  • lascia BlockGeeksCoin = new Blockchain ();
  • BlockGeeksCoin.addBlock (nuovo blocco (1, “20/07/2017”, {amount: 4}));
  • BlockGeeksCoin.addBlock (nuovo blocco (2, “20/07/2017”, {amount: 8}));

E questo è tutto!

Allora cosa è successo qui?

Abbiamo creato una nuova criptovaluta basata sulla blockchain e l’abbiamo chiamata BlockGeeksCoin. Invocando questo nuovo oggetto, ho attivato il costruttore, che a sua volta ha creato automaticamente il blocco Genesis.

Abbiamo semplicemente aggiunto altri due blocchi e fornito loro alcuni dati.

È così semplice.

(Grazie savjee.be per la sorprendente e semplice spiegazione.)

Linguaggio di codifica Blockchain n. 3: Python

Guido van Rossum, un programmatore olandese, ha creato Python nel 1991. Python si basa su una filosofia semplice: semplicità e minimalismo. Uno dei modi più notevoli in cui hanno incorporato la semplicità nel loro linguaggio è l’uso di spazi bianchi per indicare blocchi di codice invece di parentesi graffe o parole chiave. Vediamo cosa significa.

Diamo un’occhiata a un semplice programma “ciao mondo”.

print (“Hello, world!”)

Sì, è tutto!

Confrontalo con il programma C ++ “hello world”.

Vedi quanto è meno complicato in confronto? Che ne dici di fare qualcosa di un po ‘più complicato? Supponiamo di aggiungere due numeri e di stampare il risultato.

num1 = 1.5

num2 = 6,3

somma = float (num1) + float (num2)

print (“La somma di {0} e {1} è {2}”. format (num1, num2, sum))

E questo è tutto.

L’output di questo programma sarà:

  • La somma di 1,5 e 6,3 è 7,8

Quindi, alziamo la posta. Come programmeremo un’intera blockchain usando Python? I dati e il codice seguenti sono tratti dall’articolo di Gerald Nash su Medium.

Creazione del blocco

In primo luogo, facciamo il nostro blocco:

importa hashlib come hasher

blocco classe:

def __init __ (self, index, timestamp, data, previous_hash):

self.index = index

self.timestamp = timestamp

self.data = data

self.previous_hash = previous_hash

self.hash = self.hash_block ()

def hash_block (self):

sha = hasher.sha256 ()

sha.update (str (self.index) +

str (self.timestamp) +

str (self.data) +

str (self.previous_hash))

return sha.hexdigest ()

Analisi del codice

Stiamo iniziando importando la libreria hash per utilizzare le funzioni hash SHA 256 (proprio come Javascript).

Proprio come prima, il blocco ha lo stesso valore:

  • Indice.
  • Timestamp.
  • Dati.
  • Hash precedente.
  • Hash.

Una volta contro, stiamo riempiendo i valori hash tramite una funzione, come prima.

Creazione del blocco genesi

Ora, creiamo il blocco Genesis:

importa datetime come data

def create_genesis_block ():

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

Analisi del codice

Abbiamo importato datetime per inserire il timestamp.

Abbiamo semplicemente generato il blocco genesis e gli abbiamo fornito manualmente alcuni dati con cui lavorare. Il valore hash precedente è “0” perché non punta a nessun altro blocco.

Creazione del resto dei blocchi

Ora definiamo come verranno creati i blocchi successivi.

def next_block (last_block):

this_index = last_block.index + 1

this_timestamp = date.datetime.now ()

this_data = "Hey! Sono bloccato " + str (this_index)

this_hash = last_block.hash

return Block (this_index, this_timestamp, this_data, this_hash)

Analisi del codice

Quindi, come determineremo i valori di ogni singolo dato all’interno di ogni singolo blocco?

L’indice del blocco è semplicemente l’indice dell’ultimo blocco + 1.

Il timestamp è la data e l’ora correnti.

I dati del blocco sono un semplice messaggio: “Hey! Sono bloccato “.

Hash che stiamo calcolando utilizzando la funzione definita in precedenza.

E alla fine, stiamo restituendo tutti questi valori al blocco.

Creare la blockchain

Infine, creiamo la blockchain.

blockchain = [create_genesis_block ()]

previous_block = blockchain [0]

num_of_blocks_to_add = 15

for i in range (0, num_of_blocks_to_add):

block_to_add = next_block (previous_block)

blockchain.append (block_to_add)

previous_block = block_to_add

# Raccontalo a tutti!

Stampa "Il blocco n. {} È stato aggiunto alla blockchain!".formato (block_to_add.index)

Stampa "Hash: {} n".formato (block_to_add.hash)

Analisi del codice

In primo luogo, creiamo il blocco genesis e diamo il suo valore a “previous_block”.

Quindi determiniamo quanti blocchi aggiungere, in questo esempio andiamo con 15.

Quindi stiamo eseguendo un ciclo che va fino a 15 e aggiunge ogni blocco alla blockchain. Alla fine del look, stiamo stampando quale blocco numerico è stato aggiunto alla blockchain mostrando il loro numero di indice. Inoltre, stiamo stampando anche l’hash.

Ecco come apparirà l’output:

Codifica Blockchain: le molte lingue diverse di cui hai bisogno!

Cortesia dell’immagine: articolo medio di Gerald Nash

Ovviamente sia in questo che in javascript potresti aggiungere funzionalità più complicate come Proof Of Work. Se vuoi imparare come implementarlo, ti consigliamo vivamente di leggere l’articolo di Gerald Nash. Ma per ora, almeno sai come creare una semplice blockchain in Python.

Linguaggio n. 4: solidità

Infine, arriviamo a Solidity. Per chiunque desideri imparare a creare DAPP (applicazioni decentralizzate) o entrare nel gioco ICO, imparare Solidity è un must assoluto. Abbiamo già una guida dettagliata su di esso che puoi leggere qui. Tuttavia, qui ti forniremo una panoramica di base. Solidity è stato sviluppato da Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai e diversi ex collaboratori principali di Ethereum per consentire la scrittura di contratti intelligenti su piattaforme blockchain come Ethereum.

Solidity è un linguaggio volutamente snellito e digitato in modo approssimativo con una sintassi molto simile a ECMAScript (Javascript). Ci sono alcuni punti chiave da ricordare dal documento Ethereum Design Rationale, vale a dire che stiamo lavorando all’interno di un modello stack-and-memory con una dimensione della parola di istruzione di 32 byte, l’EVM (Ethereum Virtual Machine) ci dà accesso al programma ” stack “che è come uno spazio di registro in cui possiamo anche inserire indirizzi di memoria per eseguire il loop / salto del contatore di programma (per il controllo sequenziale del programma), una” memoria “temporanea espandibile e una” memoria “più permanente che viene effettivamente scritta nella memoria permanente blockchain e, soprattutto, l’EVM richiede un determinismo totale all’interno degli smart contract.

Quindi, prima di continuare, esaminiamo un esempio di contratto Solidity di base. (Codici presi da GitHub).

Eseguiamo un semplice ciclo while in solidità:

contratto BasicIterator

{

creatore dell’indirizzo; // prenotane uno "indirizzo"-tipo spot

uint8 [10] numeri interi; // riserva una porzione di memoria per 10 interi senza segno a 8 bit in un array

function BasicIterator ()

{

creatore = msg.sender;

uint8 x = 0;

// Sezione 1: Assegnazione di valori

mentre (x < integers.length) {

numeri interi [x] = x;

x ++;

}}

funzione getSum () costante restituisce (uint) {

uint8 sum = 0;

uint8 x = 0;

// Sezione 2: aggiunta degli interi in un array.

mentre (x < integers.length) {

somma = somma + numeri interi [x];

x ++;

}

somma di ritorno;

}

// Sezione 3: soppressione del contratto

funzione kill ()

{

if (msg.sender == creatore)

{

suicidio (creatore);

}

}

}

Quindi, analizziamo.

Sezione 1: Assegnazione di valori

Nella prima fase, stiamo riempiendo un array chiamato “interi” che accetta 10 interi senza segno a 8 bit. Il modo in cui lo stiamo facendo è tramite un ciclo while. Diamo un’occhiata a cosa sta succedendo all’interno del ciclo while.

mentre (x < integers.length) {

numeri interi [x] = x;

x ++;

}

Ricorda, abbiamo già assegnato un valore “0” all’intero x. Il ciclo while va da 0 a integers.length. Integers.length è una funzione che restituisce la capacità massima dell’array. Quindi, se decidessimo che un array avrà 10 numeri interi, arrayname.length restituirà un valore di 10. Nel ciclo sopra, il valore di x va da 0 a 9 (<10) e assegna il valore di se stesso anche all’array di interi. Quindi, alla fine del ciclo, gli interi avranno il seguente valore:

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

Sezione 2: aggiunta del contenuto dell’array

All’interno della funzione getSum () aggiungeremo il contenuto dell’array stesso. Il modo per farloè ripetendo lo stesso ciclo while come sopra e usando la variabile “sum” per aggiungere il contenuto dell’array.

Sezione 3: soppressione del contratto

Questa funzione termina il contratto e invia i fondi rimanenti nel contratto all’autore del contratto.

Alla domanda su quale fosse l’ispirazione e la motivazione alla base della creazione di solidità, il dottor Gavin Woods ha detto questo:

“[Solidity] doveva essere uno strumento sofisticato per lo sviluppo di contratti che alla fine avrebbe potuto fornire sia agli sviluppatori che agli utenti buone informazioni su ciò che il codice ha fatto. Per aiutare questo lungo, ho ideato NatSpec, un formato di documentazione favorevole ai contratti, e l’ho reso un cittadino di prima classe in Solidity. Ho anche proposto un sottoinsieme di linguaggio di correzione formale (non ancora implementato) al fine di massimizzare i tipi di garanzie di correttezza che potrebbero essere fornite.

Ho introdotto eventi come cittadino di prima classe nel linguaggio Solidity per fornire una bella astrazione per i LOG simile nella forma alle chiamate di funzione. L’ispirazione è venuta dai “segnali” del sistema di metaoggetti Qt.

Una caratteristica successiva che Christian R. e io abbiamo scoperto insieme erano i modificatori di funzione; che consente agli attributi inseriti come parte di una firma di funzione di apportare alcune modifiche al corpo della funzione apparente. Essendo un mezzo di espressione molto dichiarativo, è un idioma che rientra perfettamente nello spazio di programmazione orientato al contratto. “

Codifica Blockchain: conclusione

In questo articolo, abbiamo coperto solo 4 lingue per la codifica blockchain che vengono utilizzate nello sviluppo all’interno e intorno alla blockchain. In realtà, ci sono molti molti più linguaggi che puoi potenzialmente usare (Java, Go). Se sei un programmatore, le possibilità per te sono davvero infinite. Man mano che il mondo diventa sempre più decentralizzato e la blockchain diventa sempre più mainstream, il futuro per te è decisamente senza limiti.

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