Ziņa Blokķēdes lietojumprogrammas izveide ar JavaScript pirmo reizi parādījās vietnē Coinpedia Fintech News

Ievads

Blockchain tehnoloģijai ir ietekme uz daudziem mūsdienu jauninājumiem, kas maina spēli, sākot no kriptovalūtām, piemēram, Bitcoin, līdz decentralizētām lietotnēm (DApps) dažādās jomās. Blokķēde ir koplietojama virsgrāmata, kas reģistrē darījumus daudzos datoros, lai ierakstu pēc tam nevarētu mainīt. Katrs ieraksts jeb “bloks” ir savienots ar iepriekšējo, veidojot bloku ķēdi, tāpēc to sauc par “blokķēdi”. Šī iestatīšana nodrošina, ka dati ir atvērti, droši un tos nevar mainīt, kas ir ļoti svarīgi daudzos gadījumos.

JavaScript blokķēdē

Javascript ir daudzpusīga un slavena valoda, kas īpaši piemērota blokķēdes izstrādei. Ar savu plašo ekosistēmu un spēcīgu kopienas atbalstu JavaScript vienkāršo blokķēdes izstrādi vairākos veidos:

  • Plaša pieņemšana: tā kā Javascript ir galvenā valoda, ko izmanto tīmekļa izstrādē, ir ļoti acīmredzams, ka to var izmantot blokķēdes ainavā ar tīmekļa lietojumprogrammām.

  • Asinhronā apstrāde: JavaScript asinhronās iespējas, ko veicina Node.js, ir ideāli piemērotas vairāku darījumu un mijiedarbību apstrādei blokķēdes vidē.

  • Bagātīga ekosistēma: rīki un bibliotēkas JavaScript ekosistēmā, piemēram, Node.js servera puses izstrādei un Express.js API, racionalizē blokķēdes lietojumprogrammu izstrādi.

Auditorija

Šis raksts ir paredzēts izstrādātājiem, kuri pārzina JavaScript un vēlas iedziļināties blokķēdes tehnoloģijā. Tas palīdzēs jums izveidot izstrādes vidi, izprast blokķēdes pamatus, izveidot pamata blokķēdes lietojumprogrammu un atklāt to, izmantojot vienkāršu API.

1. nodaļa: Attīstības vides iestatīšana

Node.js instalēšana

  • Lejupielādējiet node js savā sistēmā no oficiālās vietnes un dodiet priekšroku LTS (Long Term Support) versijai, jo tā ir ieteicama vislabākā visām operētājsistēmām un saglabāt stabilitāti.

  •  Izpildiet instalēšanas norādījumus, kas attiecas uz jūsu OS. Instalācija ietver npm (Node Package Manager), kas ir būtiska projektu atkarību pārvaldībai.

  • Pārbaudiet, vai instalēšana ir veikta pareizi, palaižot šādas komandas bash:

    1. mezgls -v

    2. npm -v

Ja iestatīšana ir veiksmīga, pēc komandu izpildīšanas jums vajadzētu iegūt attiecīgās instalēto pakotņu versijas.

IDE izvēle

Izvēloties JavaScript kā savu programmēšanas valodu, vislabākais partneris visu izstrādes vajadzību apmierināšanai ir VsCode, tā robustās funkcijas un daudzpusīgā vide ir vislabāk piemērota.

  • Visual Studio kods:

    1. Lejupielādējiet VsCode no oficiālās vietnes

    2. Instalējiet paplašinājumus šādi:

      1. ESLint: lai identificētu un novērstu problēmas JavaScript kodā.

      2. Skaistāks: konsekventai koda formatēšanai.

      3. Atkļūdotājs pārlūkam Chrome: lai atkļūdotu JavaScript kodu, kas darbojas pārlūkprogrammā Google Chrome.

      4. Node.js: Node.js atkļūdošanas iespējām.

Nepieciešamo bibliotēku instalēšana

JavaScript bibliotēkas tiek pārvaldītas, izmantojot npm. Inicializējiet savu projektu un instalējiet vajadzīgās bibliotēkas ar:

npm init -ynpm install express body-parser crypto//express ir mezgla ietvars //body-parser ir starpprogrammatūra ienākošo pieprasījumu parsēšanai//šifrēšanas funkcija, ko izmanto jaukšanai

2. nodaļa: Blockchain jēdzienu izpratne, izmantojot JavaScript

Blockchain pamati JavaScript

Blokķēde sastāv no blokiem, kas satur:

  • Indekss: bloka pozīcija ķēdē.

  • Laika zīmogs: bloka izveides datums un laiks.

  • Dati: Darījuma dati vai cita informācija, kas tiek glabāta blokā.

  • Iepriekšējais jaukums: ķēdes iepriekšējā bloka jaucējvārds, kas savieno blokus kopā.

  • Jaukšana: bloka unikāls identifikators, kas ģenerēts, jaukjot tā saturu.

const crypto = prasīt('crypto');klases bloks {    konstruktors(indekss, laikspiedols, dati, iepriekšējais hash = ) {        this.index = indekss;        this.timestamp = laikspiedols;        this.data = dati;        this.previousHash = previousHash;        this.hash = this.calculateHash();    }    calculateHash() {        atgriezt crypto.createHash('sha256')            .update(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data))            .digest('hex');    }}

Decentralizācijas, nemainīguma un vienprātības mehānismu nozīme:

Decentralizācija: 

Nav nevienas centrālās iestādes, kas glabā visus nepieciešamos datus vai darījumu validāciju, bet gan tas viss tiek izplatīts tīklā. Kā mēs zinām blokķēdē, katrs mezgls uztur virsgrāmatas kopiju, kas nodrošina, ka viena kontroles punkta dēļ nav nekādu neatbilstību. 

Pārredzamība:

Visi mezgli un dalībnieki var skatīt virsgrāmatu, nodrošinot caurspīdīgumu visā tīklā. Programmā Ethrerneum darījumi ir redzami blokķēdes pārlūkā.

Nemainība:

Pirms jebkura darījuma veikšanas jābūt ļoti uzmanīgam, jo, kad tas ir izdarīts, to vairs nevar mainīt. Šis īpašums ir ļoti noderīgs, lai novērstu krāpšanu un dubultu tēriņu.

Vienprātības mehānisms:

Vienprātības mehānismi ir protokolu kopa, kas mezgliem jāievēro tīklā, lai vienotos par virsgrāmatas stāvokli. Šie mehānismi tiek izmantoti darījumu apstiprināšanai un autentifikācijai. Šie mehānismi nodrošina, ka visi DLT mezgli vienojas par virsgrāmatas stāvokli. 

Blockchain lietojumprogrammas sastāvdaļas

Bloķēšanas struktūra JavaScript:

const crypto = prasīt('crypto');klases bloks {    konstruktors(indekss, laikspiedols, dati, iepriekšējais hash = ) {        this.index = indekss;        this.timestamp = laikspiedols;        this.data = dati;        this.previousHash = previousHash;        this.hash = this.calculateHash();        this.nonce = 0; // Darba apliecinājumam    }    calculateHash() {        return crypto.createHash('sha256')            .update(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data) + this.nonce)            .digest ('hex');    }    mineBlock(grūtības) {        while (this.hash.substring(0, grūtības) !== Masīvs(grūtības + 1).join("0") {            this.nonce++;            this.hash = this.calculateHash();        }        console.log(“Block mined:” + this.hash);    }}

Darījumu izveide un pārbaude, izmantojot JavaScript:

Darījumi veido galvenos datu blokus blokķēdē. Tie parāda vērtības maiņu, slēdz līgumu vai veic citas izmaiņas blokķēdes stāvoklī. Sistēma sagrupē šos darījumus blokos un ievieto blokķēdē.

Sīkāka informācija par darījumu:

  • Sūtītājs: publiskā atslēga vai īpaša identifikācija, kas to sūta.

  • Saņēmējs: publiskā atslēga vai īpaša identifikācija laimīgajam, kurš saņem darījumu.

  • Summa: kas tiek nodots, vai tā būtu nauda vai kāda informācija.

  • Laika zīmogs: Kad viņi nolēma nospiest šo lietu, nosūtiet.

  • Autentiskuma apliecinājums/paraksts: daži īpaši slepeni koda elementi, kas parāda darījuma likumīgumu un nav bojāti. Tas, kurš to nosūta, izmanto savu slepeno atslēgu, lai noslēgtu darījumu, un visi pārējie var pārbaudīt, vai tā ir īsta, izmantojot publisko atslēgu.

Koda fragments darījumam:

klase Darījums {    constructor(fromAddress, toAddress, summa) {        this.fromAddress = fromAddress;        this.toAddress = toAdrese;        this.summa = summa;        this.timestamp = new Date().toISOString();    }    calculateHash() {        atgriezt crypto.createHash('sha256')            .update(this.fromAddress + this.toAddress + this.amount + this.timestamp)            .digest('hex');    }    signTransaction(signingKey) {        if (signingKey.getPublic('hex') !== this.fromAddress) {            throw new Error('Jūs nevarat parakstīt darījumus citiem makiem!');        }        const hashTx = this.calculateHash();        const sig = signingKey.sign(hashTx, ‘base64’);        this.signature = sig.toDER('hex');    }    isValid() {        if (this.fromAddress === null) return true;        if (!this.signature || this.signature.length === 0) {            throw new Error('Šajā darījumā nav paraksta');        }        const publicKey = ec.keyFromPublic(this.fromAddress, 'hex');        return publicKey.verify(this.calculateHash(), this.signature);    }}

Darījuma pārbaude apstiprina darījuma likumību, pārbaudot, vai sūtītājs to ir pareizi parakstījis un vai sūtītājam ir pietiekami daudz līdzekļu. Šis process parasti ietver kriptogrāfiskā paraksta apstiprināšanu un pārliecību, ka sūtītāja atlikums ir vienāds ar darījuma summu vai lielāks par to.

klase Blockchain {    konstruktors() {        this.chain = [this.createGenesisBlock()];        this.pendingTransactions = [];        this.miningReward = 100;    }    createGenesisBlock() {        return new Block(Date.parse(‘2024-01-01’), [], ‘0’);    }    getLatestBlock() {        return this.chain[this.chain.length – 1];    }    minePendingTransactions(miningRewardAddress) {        let block = new Block(Date.now(), this.pendingTransactions, this.getLatestBlock().hash);        block.mineBlock(this.difficulty);        console.log ('Bloks veiksmīgi iegūts!');        this.chain.push(bloks);        this.pendingTransactions = [            new Transaction(null, miningRewardAddress, this.miningReward)        ];    }    addTransaction(transaction) {        if (!transaction.fromAddress || !transaction.toAddress) {            throw new Error('Darījumā jāiekļauj adrese no un uz adresi');        }        if (!transaction.isValid()) {            throw new Error('Nevar pievienot ķēdei nederīgu darījumu');        }        this.pendingTransactions.push(transaction);    }    getBalanceOfAddress(adrese) {        let balance = 0;        for (const block of this.chain) {            for (const trans of block.data) {                if (trans.fromAddress === adrese) {                    bilance -= trans.amount;                }                 ja (trans.toAddress === adrese) {                    bilance += trans.amount;                }            }                    atgriešanas atlikums;    }    isChainValid() {        for (lai i = 1; i < this.chain.length; i++) {            const currentBlock = this.ķēde[i];            const previousBlock = this.chain[i – 1];            if (!currentBlock.hasValidTransactions()) {                return false;            }            if (currentBlock.hash !== currentBlock.calculateHash()) {                return false;            }            if (currentBlock.previousHash !== previousBlock.hash) {                return false;            }        }        atgriezt patiesu;    }}

Pārskats par konsensa algoritmiem, kas ir saderīgi ar JavaScript:

Darba apliecinājums (PoW):

Tehniskais skaidrojums: Darba apliecinājums ir pazīstams arī kā kalnrūpniecība. Šajā vienprātības mehānismā lietotājiem ir jāatrisina kriptogrāfijas mīklas, kas viņus atalgo. Tas ir konkurss, kurā pirmais, kurš atrisina, tiek nodots jaunajam blokam. Šis algoritms izmanto jaukšanu, lai nodrošinātu blokķēdi. 

Izstrādātāja ieviešana: rīkus PoW ieviešanai nodrošina Bitcoin izstrādātāju vide, piemēram, Bitcoin Core.

Likmes apliecinājums (PoS):

Tehniskais skaidrojums: Proof of Stake atlasa pārbaudītājus, pamatojoties uz viņiem piederošo monētu skaitu un ķīlu. Atlases process nav atkarīgs tikai no likmes, bet arī no tādiem faktoriem kā monētas vecums un nejaušība. Lai pievienotu jaunu bloku, tiek izvēlēti pārbaudītāji, kuriem ir viszemākā jaucējvērtība un lielākā likmes summa

Izstrādātāja ieviešana: PoS rīkus un bibliotēkas nodrošina Ethereum 2.0 SDK

Deleģētais likmes apliecinājums (DPoS):

Tehniskais skaidrojums: izmanto balsošanu un delegātus, lai apstiprinātu darījumu un izveidotu jaunus blokus.

Izstrādātāja ieviešana: EOSIO SDK nodrošina DPoS rīkus un bibliotēkas.

3. nodaļa: Vienkāršas blokķēdes izveide, izmantojot JavaScript

 Tajā jūs uzzināsit par blokķēdes struktūru, klašu un bloku un bloku parametru definēšanu un to, kā tie ir saistīti.

Bloku klases izveide

Blockchain, kā to attēlo nosaukums, sastāv no blokiem un katra bloka klases pamata atribūtiem, piemēram:

  • Indekss: skaitlisks identifikators bloka pozīcijai blokķēdē.

  • Laikspiedols: laiks, kurā tika izveidots bloks.

  • Dati: blokā saglabātie dati vai transakcijas. Tas varētu ietvert informāciju, piemēram, informāciju par darījumu, lietotāja datus utt.

  • PreviousHash: ķēdes iepriekšējā bloka hash, kas nodrošina nepārtrauktību un drošību.

  • Jaukts: unikāls bloka identifikators, kas ģenerēts, jaukjot bloka saturu.

  • Nonce: skaitlis, kas tiek izmantots darba pierādījuma algoritmam, kas tiek koriģēts, līdz tiek atrasts derīgs hash.

Ieviesiet metodes, lai aprēķinātu bloka jaucējkodu, izmantojot JavaScript sintaksi:

  • createGenesisBlock(): izveido pirmo bloku blokķēdē, kas pazīstams kā ģenēzes bloks.

  • getLatestBlock(): izgūst jaunāko bloku blokķēdē.

  • addBlock(): pievieno jaunu bloku blokķēdei pēc tā ieguves.

  • isChainValid(): apstiprina blokķēdes integritāti, nodrošinot katra bloka jaucējkoda atbilstību un iepriekšējo jaucēju konsekvenci.

Blockchain klases izveide

Definējiet Blockchain klasi, lai pārvaldītu ķēdi un ieviestu metodes jaunu bloku pievienošanai:

klase Blockchain {    konstruktors() {        this.chain = [this.createGenesisBlock()];        šī.grūtības = 4;  // Ieguves sarežģītības pakāpe    }    // Genesis bloka izveides metode    createGenesisBlock() {        return new Block(0, “01/01/2024”, “Genesis Block”, “0”);    }    // Metode jaunākā bloka izgūšanai ķēdē    getLatestBlock() {        return this.chain[this.chain.length – 1];    }    // Metode, kā ķēdei pievienot jaunu bloku pēc tā ieguves    addBlock(newBlock) {        newBlock.previousHash = this.getLatestBlock().hash;        newBlock.mineBlock(this.difficulty);        this.chain.push(newBlock);    }    // Metode blokķēdes integritātes pārbaudei    isChainValid() {        for (lai i = 1; i < this.chain.length; i++) {            const currentBlock = this.chain[i];            const previousBlock = this.chain[i – 1];            // Pārbaudiet, vai pašreizējā bloka hash ir pareizs            if (currentBlock.hash !== currentBlock.calculateHash()) {                return false;            }            // Pārbaudiet, vai pašreizējā bloka iepriekšējais jaucējvārds atbilst iepriekšējā bloka jaukšanai            if (currentBlock.previousHash !== previousBlock.hash) {                return false;            }        }        atgriezt patiesu;    }}

4. nodaļa: Konsensa mehānismu ieviešana JavaScript

Darba apliecinājums

Darba pierādījums, ko bieži dēvē par ieguvi, ir decentralizēta sistēma, kurā tīkla dalībnieki jeb kalnrači sacenšas, lai atrisinātu kriptogrāfijas mīklas. Pirmais kalnracis, kurš atrisina mīklu, pievieno blokķēdei nākamo bloku un saņem atlīdzību. Šis process izmanto jaukšanu, lai nodrošinātu blokķēdi. PoW mīklu sarežģītība nodrošina blokķēdes drošību un kontrolē ātrumu, ar kādu tiek pievienoti jauni bloki.

Block klasē mēs varam ieviest Proof of Work, pievienojot mineBlock metodi. Šī metode pielāgo nonce, līdz bloka hash atbilst noteiktam sarežģītības mērķim (piem., jaukumam jāsākas ar noteiktu nulles skaitu).

Koda fragments:

class Block {    konstruktors(indekss, laikspiedols, dati, iepriekšējā hash = ”) {        this.index = indekss;        this.timestamp = laikspiedols;        this.data = dati;        this.previousHash = previousHash;        this.hash = this.calculateHash();        this.nonce = 0;    }    // Aprēķiniet bloka jaucējvārdu, izmantojot SHA-256    calculateHash() {        return crypto.createHash('sha256')            .update(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data) + this.nonce)            .digest('hex');    }    // Darba apliecinājuma ieviešana    mineBlock(grūtības) {        while (this.hash.substring(0, grūtības) !== Array(grūtības + 1).join("0") {            this.nonce++;            this.hash = this.calculateHash();        }        console.log(`Block mined: ${this.hash}`);    }}

Atjauniniet Blockchain klasi, lai pirms jaunu bloku pievienošanas apstiprinātu pierādījumu.

klase Blockchain {    konstruktors() {        this.chain = [this.createGenesisBlock()];        šī.grūtības = 4;    }    // Izveidojiet ģenēzes bloku    createGenesisBlock() {        return new Block(0, "01/01/2024", "Genesis Block", "0");    }    // Iegūstiet jaunāko bloku ķēdē    getLatestBlock() {        return this.chain[this.chain.length – 1];    }    // Pievienojiet ķēdei jaunu bloku    addBlock(newBlock) {        newBlock.previousHash = this.getLatestBlock().hash;        newBlock.mineBlock(this.difficulty);  // Darba apliecinājuma ieviešana        this.chain.push(newBlock);    }    // Pārbaudiet, vai blokķēde ir derīga    isChainValid() {        for (lai 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;            }        }        atgriezt patiesu;    }}

5. nodaļa: Vienkāršas Blockchain API izveide ar JavaScript

Nepietiek tikai ar blokķēdes izveidi, lai to padarītu izmantojamu reālajā dzīvē. Šim nolūkam mums ir jāizveido mijiedarbības saskarne, kas būs vienkārša API.

API vides iestatīšana

Pirms sākat veidot API, ir jāiestata vide ar visiem nepieciešamajiem rīkiem un ietvariem.

  • Instalējiet mezglu un npm 

  • Inicializējiet projektu ar komandu: npm init -y

  • Instalēt Express: npm install express –save (Express ir mezgla js ietvars, kas palīdz ātrāk izveidot API)

  • Instalējiet Body parseri, lai apstrādātu ienākošo pieprasījumu: npm instalējiet ķermeņa parsētāju – saglabājiet

API izveide

Tagad, kad jūsu vide ir iestatīta, izveidosim API. API ļaus lietotājiem mijiedarboties ar blokķēdi, skatīt ķēdi un pievienot jaunus blokus.

Izveidojiet serveri ar Express:

const express = prasīt('izteikt');const bodyParser = prasīt('body-parser');const Blockchain = prasīt(‘./blockchain');  // Importēt Blockchain classconst app = express();app.use(bodyParser.json());let demoBlockchain = new Blockchain();  // Inicializējiet jaunu Blockchain gadījumu

Definējiet API galapunktus

app.get('/blocks', (req, res) => {     //galapunkts, lai iegūtu blokķēdi    res.json(demoBlockchain.chain);});//šis ir galapunkts, lai izveidotu newblockapp.post(' /mine', (req, res) => {    const newBlock = new Block(        demoBlockchain.chain.length,        Date.now(),        req.body.data,        demoBlockchain.getLatestBlock().hash    );     demoBlockchain.addBlock(newBlock );     res.send(`Bloks veiksmīgi iegūts: ${newBlock.hash}`);});

Sāciet serveri

app.listen(3000, () => {    console.log('Blockchain API, kas darbojas portā 3000');});node server.js

6. nodaļa: Lietojumprogrammas palaišana un testēšana

Šis posms ir ļoti svarīgs, lai nodrošinātu, ka blokķēde darbojas pareizi un visas funkcijas darbojas, kā paredzēts.

Lietojumprogrammas palaišana

  1. Startējiet serveri: dodieties uz sava projekta direktoriju un pēc tam palaidiet mērķi: node server.js

  2. Saņemiet servera apstiprinājumu: Blockchain API, kas darbojas 3000. portā

  3. Piekļuve lietojumprogrammai: jūsu lietojumprogramma tagad darbojas lokāli vietnē http://localhost:3000, padarot to gatavu pieņemt HTTP pieprasījumus

Testēšana ar Pastnieku

Postman ir plaši izmantots API testēšanas rīks, kas ļauj nosūtīt HTTP pieprasījumus un skatīt atbildes. Tas ir īpaši noderīgi, lai pārbaudītu jūsu blokķēdes API funkcionalitāti.

  • Instalējiet Postman

  • Blockchain beigu punkta pārbaude

  • Pārbaudiet Mining galapunktu

  • Pārbaudiet blokķēdi

(Step1)node server.jsBlockchain API, kas darbojas portā 3000//http://localhost:3000/block(Step2)[    {        "indekss": 0,        "laikspiedols": 1636568887994,        "data": "Genesis Block", previousHash”: “0”,        “jaukts”: “81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9”    }](3. darbība){    “             ”:”      uztvērējs”: “Džeina Smita”    }} (4. darbība){    “ziņojums”: “Bloks veiksmīgi iegūts”,    “bloks”: {        “indekss”: 1,        “laikspiedols”: 1636578990123,        “dati”: {            “summa”: 100,            “sūtītājs”: “Džons Dū” ,            "uztvērējs": "Džeina Smita"        },        "iepriekšējais hashs": "81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803bc"        1577fb2d803bc:d 2bb2c9fdf32a7d2d4ad13fcb78170a8caa82ff4a9a2”    }} (5. darbība)[    {        “indekss”: 0,        “laikspiedols”: 1636568887994,        “dati”: “ Genesis Block”,        “previousHash”: “0”,        “jaukts”:“81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9”

 

   },    {

 

       "indekss": 1,        "laikspiedols": 1636578990123,        "dati": {            "summa": 100,            "sūtītājs": "Džons Doe",            "saņēmējs": "Džeina Smita"        },        "iepriekšējaisHash" f2fef8f2bca7853d44682e12022fb2d803b9”, “hash”: “5a1cdd657c8d0d3c0f12c2bb2c9fdf32a7d2d4ad13fcb78170a8caa82ff4a9a2”        }]

curl http://localhost:3000/blocks //Skatīt blokķēdi[    {        "index": 0,        "laikspiedols": 1636568887994,        "data": "Genesis Block",        "previousHash": "0",        "jaucējs": “81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9”    }]//Jauna bloka loka ieguve -X POST -H “Content-Type: Application”:” n stirna”, “ uztvērējs”: “Džeina Smita”}}' http://localhost:3000/mine//verify the blockcurl http://localhost:3000/blocks[    {        “indekss”: 0,        “laikspiedols”: 1636568887994,        “dati” : "Genesis Block",        "iepriekšējais hash": "0",        "jaukts": "81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9"     6"     6 990123,        “dati”: {            “summa”: 100,            “sūtītājs” : "Džons Dū",            "uztvērējs": "Džeina Smita"        },        "iepriekšējais hashs": "81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2cd.d80d c0f12c2bb2c9fdf32a7d2d4ad13fcb78170a8caa82ff4a9a2”    }]

7. nodaļa: Blockchain lietojumprogrammas izveides, izmantojot JavaScript, piemērs

Soli pa solim izpilde

  • 1. darbība. Izveidojiet Block klasi ar nepieciešamajiem atribūtiem, izmantojot JavaScript sintaksi.

class Block {    konstruktors(indekss, laikspiedols, dati, iepriekšējā hash = ”) {        this.index = indekss;        this.timestamp = laikspiedols;        this.data = dati;        this.previousHash = previousHash;        this.hash = this.calculateHash();        this.nonce = 0;    }}

  • 2. darbība. Ieviesiet aprēķinu hash metodi.

CalculateHash() {    return crypto.createHash(‘sha256’)        .update(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data) + this.nonce)        .digest('hex');}

  • 3. darbība: definējiet Blockchain klasi un inicializējiet to ar ģenēzes bloku.

klase Blockchain {    konstruktors() {        this.chain = [this.createGenesisBlock()];    }}

  • 4. darbība. Ieviesiet metodes jaunu bloku pievienošanai un jaunākā bloka izgūšanai, izmantojot JavaScript.

getLatestBlock() {    return this.chain[this.chain.length – 1];}addBlock(newBlock) {    newBlock.previousHash = this.getLatestBlock().hash;    newBlock.hash = newBlock.calculateHash();    this.chain.push(newBlock);}

  • 5. darbība: pievienojiet darba apliecinājuma funkcionalitāti klasei Block un atjauniniet Blockchain klasi.

mineBlock(grūtības) {    while (this.hash.substring(0, grūtības) !== Masīvs(grūtības + 1).join("0") {        this.nonce++;        this.hash = this.calculateHash();    }}

  • 6. darbība: iestatiet API vidi, lai apstrādātu pieprasījumus, izmantojot Express.

npm init -ynpm install express –save                        //Projekta iestatīšana un direktorijaconst express = request('express');      //Ātrā servera iestatīšanaconst bodyParser = request(‘body-parser’);const Blockchain = request(‘./blockchain’); // Pieņemot, ka jums ir Blockchain klase no iepriekšējām Chaptersconst app = express();app.use(bodyParser.json());const demoBlockchain = new Blockchain();app.get('/blocks', (req, res) => {    res.json(demoBlockchain.chain);});      app.post('/mine', (req, res) => {            //jauna bloka izveide             const newBlock = new Block(demoBlockchain.chain.length,        Date.now(),        req.body.data,        demoBlockin. ().hash);     newBlock.mineBlock(2); // Pieņemot, ka PoW demoBlockchain.addBlock(newBlock);     res.send(`Block veiksmīgi iegūts: ${newBlock.hash});}); app.listen(3000, () => {                                 //servera palaišana        console.log('Blockchain API, kas darbojas portā 3000');});node server.js

  • 7. darbība: pārbaudiet lietojumprogrammu, iegūstot jaunu bloku un pārbaudot blokķēdi, izmantojot Postman vai curl.

Pastnieks nosūtiet pieprasījumu: GET pieprasījums uz http://localhost:3000/blocks.{    “dati”: {        “summa”: 10,        “sūtītājs”: “Alise”,        “saņēmējs”: “Bobs”    }}Curl :curl http://localhost:3000/blocks

Īsumā apkoposim iepriekš minētās darbības

Soli pa solim veiksim procesu, lai atdzīvinātu jūsu blokķēdes lietojumprogrammu:

  1. Sāciet ar Block un Blockchain klases definēšanu, lai izveidotu blokķēdes pamatstruktūru.

  2. Iekļaujiet darba pierādījumu, pievienojot mineBlock metodi Block klasei, nodrošinot, ka katrs bloks atbilst nepieciešamajām grūtībām pirms pievienošanas ķēdei.

  3. Iestatiet API, izmantojot Express, kas ļauj mijiedarboties ar blokķēdi, ļaujot veikt tādas darbības kā ķēdes skatīšana un jaunu bloku pievienošana.

  4. Izpildiet un pārbaudiet savu lietojumprogrammu, izmantojot Postman vai curl, lai pārbaudītu, vai viss darbojas, kā paredzēts, sākot no bloku ieguves līdz blokķēdes datu izgūšanai.

Laimīgu kodēšanu!!