Sari la conținut Treci la bara laterală Sari la subsol

Termenul „blockchain” a fost desfășurat destul de mult în ultimul deceniu. Multe criptomonede sunt construite pe baza acestei tehnologii fundamentale, care este considerată una dintre cele mai semnificative descoperiri ale secolului XXI.

Este ok dacă ați auzit de blockchain, dar nu sunteți sigur ce este? Folosind doar 40 de linii de cod, voi demonstra cum funcționează Blockchain-ul în acest articol.

Este esențial să înțelegem procesul prin care sunt create și menținute blockchain-urile.

Fiecare bloc conține următoarele informații:

  • Date: ar putea fi ceva asemănător cu datele tranzacției
  • Valoarea hash: acesta este practic ID-ul blocului
  • Valoarea hash anterioară: aceasta ține evidența ID-ului blocului anterior. Pentru moment, trebuie doar să știți că folosim această valoare pentru a forma un lanț între blocul curent și blocul anterior
  • Timestamp-ul: aceasta ne spune când este creat blocul
  • Dovada Muncii: acesta este un număr care arată efortul de a găsi valoarea hash a blocului curent. Dacă ați auzit de minerit, această valoare reprezintă cât timp durează (sub formă de număr) mașinilor să calculeze valoarea hash.

Crearea clasei Block

Să creăm o clasă numită „Block” în interiorul unui fișier index.js gol.

class Block { constructor(poreviousHash,data) { this.data = data; this.hash = this.calculateHash(); this.previousHash = precedentHash; this.timeStamp = data noua(); this.proofOfWork = 0; } }

Constructorul acestei clase acceptă 2 argumente. Prima este valoarea hash a blocului anterior, iar a doua este datele blocului curent.


În interiorul constructorului, inițializam datele blocului cu argumentele constructorului. Am setat timeStamp la ora curentă și proofOfWork la 0.
Valoarea hash nu este doar un șir aleator, trebuie să găsim valoarea hash curentă atât pe datele curente, cât și pe hash-ul anterior, din motive de securitate.


Dacă un hacker modifică datele unui bloc, trebuie, de asemenea, să recalculeze valorile hash ale tuturor blocurilor înainte pentru a face lanțul valabil (acest lucru ar putea dura mii de ani dacă folosesc același computer ca mine).
Pentru cei care nu știu despre hashing, practic acesta este modul în care ne convertim datele într-o grămadă de caractere aleatorii.

De exemplu, cuvântul „bună ziua” poate fi transformat în „e2d48e7bc…”. Deoarece hashingul funcționează doar într-o singură direcție, este ușor să găsiți rezultatul hash având în vedere intrarea, dar este foarte greu să preziceți intrarea din ieșirea hash.


Să aruncăm o privire la funcția calculateHash.

const hash = require("crypto-js/sha256"); class Block { constructor(previousHash, data) { } calculateHash() { return hash( this.previousHash + JSON.stringify(this.data) + this.timeStamp + this.proofOfWork ).toString(); }

Această funcție generează practic o valoare hash bazată pe combinația dintre hash-ul anterior, datele curente, marcajul de timp actual și dovada de lucru.


Folosim funcția hash din pachetul crypto-js npm. Acest pachet ne permite practic să folosim mai multe metode de hashing. Utilizăm Secure Hash Algorithm 256 (SHA 256) în acest tutorial. După cum puteți vedea, importăm hash în partea de sus a fișierului.


Să ne uităm la funcția finală a clasei Block. Funcția de mină.

class Block { constructor(previousHash, data) { } calculateHash() { } mine(dificultate) { // găsiți hash-ul while (!this.hash.startsWith("0".repeat(dificulty))) { this.proofOfWork++; this.hash = this.calculateHash(); } } }

Acest A mea funcția continuă să crească proofOfWork până când am găsit un hash care începe cu numărul dorit de 0 (l-am numit dificultate). Cu cât este mai mare dificultatea, cu atât este nevoie de mai mult pentru ca hash-ul să fie creat. Acest lucru se datorează faptului că singura modalitate de a găsi intrarea din ieșirea hash este să încercați diferite intrări una câte una.

Fapt distractiv: valoarea hash a unui bloc Bitcoin necesită 18 zerouri, ceea ce durează aproximativ 10 minute pentru crearea tuturor computerelor din rețeaua blockchain.

Dacă ați auzit oameni vorbind despre minerit cripto, așa funcționează sub capotă. Ei investesc în mașini puternice pentru a calcula hash-ul pentru un nou bloc și pentru a primi cripto ca recompensă.

Imaginați-vă dacă crearea unui hash ar fi simplă și rapidă, datele stocate în blockchain ar fi ușor modificate. Prin urmare, valoarea hash este creată într-un mod atât de complex încât, chiar dacă un bloc este piratat, actualizarea tuturor blocurilor următoare va dura o veșnicie. Acesta este motivul pentru care Blockchain este atât de sigur.

Următoarea parte este crearea Blockchain-ului pentru a stoca toate blocurile.

Crearea clasei Blockchain

class Blockchain { constructor() { let genesisBlock = new Block("0", { isGenesis: true }); this.chain = [genesisBlock]; }

Magazinul nostru Blockchain 1 numit lanţ . Vom adăuga și un genesisBlock la lanţ. Blocul genezei este practic primul bloc din lanț. Prin urmare, am putea trece „0” ca valoare hash anterioară, deoarece nu există niciun bloc anterior.

În continuare, vom implementa addBlock funcție care adaugă un nou bloc la lanț.

class Blockchian { constructor() { } addBlock(data) { let lastBlock = this.chain[this.chain.length - 1]; let newBlock - new Block (lastBlock.hash, date); newBlock.mine(2); this.chain.push(newBlock); }

Această funcție acceptă noi date ca parametru și creează un bloc nou pe baza datelor respective și a hash-ului blocului anterior.

Când creăm un bloc nou, trebuie să calculăm valoarea hash a acestuia folosind A mea funcţie. Pentru a fi rapid, am setat doar dificultatea la 2, deci noua valoare hash trebuie să înceapă cu 2 zerouri.

După ce găsim valoarea hash, trebuie doar să adăugăm noul bloc în lanț.

În sfârșit, avem nevoie este valabil funcție pentru a valida dacă lanțul curent este valid sau nu.

class Blockchain { constructor() { } addBlock(data) { } isValid() { for (let i = 1; i < this.chain.length; i++) { const currentBlock = this.chain[i]; const previousBlock = this.chain[i - 1]; if (currentBlock.hash != currentBlock.calculateHash()) returnează fals; if (currentBlock.previousHash != previousBlock.hash) returnează false; } returnează adevărat; } }

Această funcție trece practic prin fiecare bloc (cu excepția celui de geneza) și verifică dacă există vreo încălcare a valorii hash. Se întoarce Adevărat dacă nu există încălcare.

Felicitări, ați construit cu succes un blockchain 🙂

Exemplu de utilizare

Să încercăm să adăugăm 2 blocuri noi care conțin informații de tranziție în blockchain-ul nostru.

let blockchain = new Blockchain(); blockchain.addBlock({ de la: „Alex”, la: „Bobes”, suma: 1000, }); blockchain.addBlock({ de la: "Alex2", la: "Bobes2", suma: 100, });

Adauga un Comentariu

> Newsletter <
Vă interesează Știrile tehnice și multe altele?

Abonati-va