Создание блокчейн-приложения с помощью JavaScript

Самые главные криптоновости в Телеграм-канале CryptoMoon, присоединяйтесь!👇

Cryptomoon Telegram


Создание блокчейн-приложения с помощью JavaScript

Введение

Хорошо, мой дорогой компаньон по программированию! Позвольте мне провести вас через это приключение с блокчейном, используя мой многолетний опыт программирования и немного юмора.

Современные революционные достижения, такие как цифровые валюты, такие как Биткойн, и различные децентрализованные приложения (DApps) в различных отраслях, находятся под значительным влиянием технологии блокчейн. По сути, блокчейн представляет собой коллективную базу данных, которая записывает транзакции на многочисленных устройствах, гарантируя, что данные не могут быть изменены после их регистрации. Каждая транзакция или «блок» связана с предыдущей, образуя непрерывную последовательность, отсюда и термин «блокчейн». Эта структура гарантирует прозрачность, безопасность и неизменность данных — качества, которые имеют решающее значение для многих приложений.

JavaScript в блокчейне

JavaScript выделяется как универсальный и известный язык программирования, особенно полезный для создания блокчейн-решений. Его обширная экосистема и надежная поддержка сообщества упрощают разработку приложений блокчейна, предлагая несколько преимуществ:

  • Широкое распространение. Поскольку Javascript является основным языком, используемым для веб-разработки, вполне очевидно, что он найдет применение в блокчейне с веб-приложениями.
  • Асинхронная обработка. Асинхронные возможности JavaScript, поддерживаемые Node.js, идеально подходят для обработки нескольких транзакций и взаимодействий в среде блокчейна.
  • Богатая экосистема.Инструменты и библиотеки в экосистеме JavaScript, такие как Node.js для разработки на стороне сервера и Express.js для API, упрощают разработку приложений блокчейна.

Аудитория

Как опытный разработчик JavaScript с многолетним опытом работы за плечами, я могу искренне рекомендовать эту статью всем, кто хочет расширить свои навыки и погрузиться в увлекательный мир технологии блокчейн. Это руководство проведет вас через процесс настройки среды разработки, разложит сложные концепции на понятные основы, поможет вам создать базовое приложение блокчейна и, в конечном итоге, предоставит его через удобный API. Если вы хотите учиться или хотите добавить еще одну струну в свой лук разработчика, эта статья станет бесценным ресурсом для вашего путешествия.

Глава 1. Настройка среды разработки

Установка Node.js

  • Загрузите node js в свою систему с официального сайта и отдайте предпочтение версии LTS (долгосрочная поддержка), поскольку она рекомендуется как лучшая для всех операционных систем и обеспечивает стабильность.
  •  Следуйте инструкциям по установке, специфичным для вашей ОС. В состав установки входит npm (диспетчер пакетов узлов), который необходим для управления зависимостями проекта.
  • Убедитесь, что установка выполнена правильно или нет, выполнив следующие команды в bash:
    <ол>

  • узел -v
  • npm -v

После выполнения данных команд вы должны найти соответствующие версии установленных пакетов в вашей системе, при условии, что процесс установки прошел успешно.

Выбор IDE

Выбрав JavaScript в качестве языка программирования, Visual Studio Code (VSCode) станет отличным компаньоном для удовлетворения всех ваших требований к разработке. Его мощные возможности и адаптируемая среда делают его идеальным для разработки на JavaScript.

  • Код Visual Studio:
    <ол>

  • Загрузить VsCode с официального сайта
  • Установите расширения следующим образом:
    <ол>

  • ESLint: для выявления и устранения проблем в коде JavaScript.
  • Улучшение: для единообразного форматирования кода.
  • Отладчик для Chrome: для отладки кода JavaScript, работающего в Google Chrome.
  • Node.js: для возможностей отладки Node.js.

Установка необходимых библиотек

Управление библиотеками JavaScript осуществляется через npm (менеджер пакетов узлов). Чтобы запустить проект и установить необходимые пакеты, используйте следующую команду:

npm init -y
npm install express body-parser crypto

//express — это платформа узлов 
//body-parser — это промежуточное ПО для анализа входящих запросов.
//криптофункция, используемая для хеширования.

Глава 2. Понимание концепций блокчейна с помощью JavaScript

Основы блокчейна в JavaScript

Блокчейн состоит из блоков, которые содержат:

  • Индекс: положение блока в цепи.
  • Временная метка: дата и время создания блока.
  • Данные: данные транзакции или другая информация, хранящаяся в блоке.
  • Предыдущий хеш: хеш предыдущего блока в цепочке, связывающий блоки вместе.
  • Хэш: уникальный идентификатор блока, созданный путем хеширования его содержимого.
const crypto = require(‘crypto’);

class Block {    
constructor(index, timestamp, data, previousHash = ”) {        
this.index = index;        
this.timestamp = метка времени;        
this.data = данные;        
this.previousHash = previousHash;        
this.hash = this.calculateHash;    

    calculateHash {        
return crypto.createHash(‘sha256’)             < br/>.update(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data))           
 .digest(‘hex’);    

Важность децентрализации, неизменности и механизмов консенсуса:

Децентрализация

В системах блокчейна вместо того, чтобы полагаться на центральный орган хранения данных и проверки транзакций, ответственность распределяется между всеми участвующими узлами. Это означает, что каждый узел хранит свою собственную запись (или копию) реестра, устраняя потенциальные проблемы, вызванные единой точкой контроля.

Прозрачность:

Как исследователь, изучающий Ethereum, я могу с уверенностью сказать, что каждый узел и участник сети имеют доступ к реестру, обеспечивая непоколебимую прозрачность всей системы. Транзакции в Ethereum публично отображаются для всех в обозревателе блокчейна, обеспечивая открытую и прозрачную среду для всех участников.

Неизменяемость:

Крайне важно тщательно подумать перед завершением транзакции, поскольку изменения или аннулирование обычно невозможны постфактум. Эта функция полезна для предотвращения мошенничества и дублирования транзакций.

Механизм консенсуса:

В сети механизмы консенсуса служат для узлов руководством для коллективного принятия решения о текущем статусе распределенного реестра. Эти механизмы играют важную роль в проверке и аутентификации транзакций. Они гарантируют, что все участвующие узлы в технологии распределенного реестра (DLT) согласны с состоянием реестра.

Компоненты приложения Blockchain

Блочная структура в JavaScript:

const crypto = require(‘crypto’);

class Block {    
constructor(index, timestamp, data, previousHash = ”) {        
this.index = index;        
this.timestamp = метка времени;        
this.data = данные;        
this.previousHash = previousHash;        
this.hash = this.calculateHash;        
this.nonce = 0; // Для доказательства работы    
}

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

mineBlock(difficulty) {        
while (this.hash.substring(0, сложность ) !== Array(difficulty + 1).join(“0”)) {             
this.nonce++;            
this.hash = this.calculateHash;        
}        
console.log(“Блок добыт: ” + this.hash);    

Создание и проверка транзакций с помощью JavaScript:

В блокчейне каждая транзакция служит фундаментальной единицей данных, отражающей изменение стоимости, выполнение соглашения или любое изменение общего состояния блокчейна. Система собирает эти транзакции в блоки, а затем добавляет их в блокчейн.

Подробности транзакции:

  • Отправитель: Открытый ключ или конкретный идентификатор отправителя.
  • Получатель: Открытый ключ или конкретный идентификатор счастливчика, который получит транзакцию.
  • Сумма: Что передается, будь то деньги или какая-то информация.
  • Отметка времени: Когда они решили нажать «Отправить».
  • Подтверждение подлинности/подпись. Некоторые сверхсекретные коды, подтверждающие законность сделки и не подделанные. Тот, кто отправляет его, использует свой секретный ключ для заключения сделки, а все остальные могут проверить его подлинность с помощью открытого ключа.

Фрагмент кода для транзакции:

class Transaction {    
constructor(fromAddress, toAddress, sum) {        
this.fromAddress = fromAddress;        
this.toAddress = toAddress;        
this.amount = сумма;        
this.timestamp = новый Date.toISOString;    

    calculateHash {        
return crypto.createHash(‘sha256’)             < br/>.update(this.fromAddress + this.toAddress + this.amount + this.timestamp)            
.digest(‘hex’);    
}

signTransaction(signingKey) {        
if (signingKey.getPublic(‘hex’) !== this.fromAddress) {            
throw new Error(‘Вы не можете подписывать транзакции для других кошельков!’);        
}

 const hashTx = this.calculateHash;        
const sig = SigningKey.sign(hashTx, ‘base64’);        
this.signature = sig.toDER(‘hex’);    
    isValid {        
if (this.fromAddress === null) возвращает true;

if (!this.signature || this.signature.length === 0) {            
throw new Error(‘No подпись в этой сделке’);       

const publicKey = ec.keyFromPublic(this.fromAddress, ‘hex’);        
return publicKey.verify(this.calculateHash, this.signature);    

Проверка транзакции гарантирует ее подлинность, подтверждая, что подписавшая сторона является законной и обладает достаточными средствами. Этот процесс обычно включает в себя проверку целостности цифровой подписи и проверку того, что баланс счета отправителя равен или превышает сумму транзакции.

класс Blockchain {    
конструктор {        
this.chain = [this.createGenesisBlock];        
this.pendingTransactions = [];        
this.miningReward = 100;    
}

createGenesisBlock {        
вернуть новый блок (Date.parse(‘2024-01-01’), [], ‘0’);    
}
    getLatestBlock {        
return this.chain[this.chain.length — 1];    
}

minePendingTransactions(miningRewardAddress) {        
пусть блок = новый блок (Date.now, this.pendingTransactions, this.getLatestBlock.hash);        
block.mineBlock(this.difficulty);

console.log(‘Заблокировать успешно добытый !’);        
this.chain.push(block);
        this.pendingTransactions = [            
новая транзакция( null, MiningRewardAddress, this.miningReward)        
];   

    addTransaction(transaction) {        
if (!transaction.fromAddress || !transaction. toAddress) {            
throw new Error(‘Транзакция должна включать адрес отправителя и адреса’);        

if (!transaction.isValid) {                  
выдать новую ошибку(‘Невозможно добавить недействительный транзакция в цепочку’);        

        this.pendingTransactions.push(transaction);    
}

getBalanceOfAddress(address) {        
let Balance = 0;

for (const блок this.chain) {            
for ( const trans of block.data) {               
 if (trans.fromAddress === адрес) {                    
 balance -= trans.amount;               

if (trans.toAddress === адрес) {                    < br/> баланс += сумма транзакции;                
}           
 }       

        возвратный баланс;    
}
    isChainValid {        
for (let i = 1; i < this.chain.length ; i++) {            
const currentBlock = this.chain[i];            
const previousBlock = this.chain[i — 1];
             if (!currentBlock.hasValidTransactions) {                  
вернуть ложь;            
}
             if (currentBlock.hash !== currentBlock.calculateHash) {                 
вернуть false;            

             if (currentBlock.previousHash !== previousBlock.hash) {                
вернуть false;            
}        

        возвращает true;    

Обзор алгоритмов консенсуса, совместимых с JavaScript:

Доказательство работы (PoW):

Проще говоря, доказательство работы (часто называемое майнингом) — это метод, используемый для проверки транзакций и создания новых блоков в блокчейне. Пользователи соревнуются в решении сложных математических задач или «криптографических головоломок». Тот, кто первым решит головоломку, добавит в цепочку следующий блок. Этот процесс защищен с помощью алгоритмов хеширования, которые обеспечивают целостность и безопасность блокчейна.

Проще говоря, когда дело доходит до внедрения Proof-of-Work (PoW), инструменты для этой цели предлагаются в пакете разработки Bitcoin, который включает в себя Bitcoin Core.

Доказательство доли (PoS):

Проще говоря, Proof of Stake выбирает валидаторов не только на основе количества монет, которые они держат в качестве залога, но также учитывает такие факторы, как возраст монет и доля случайности. В процессе отбора отдаются предпочтение валидаторам, которые держат монеты в течение более длительных периодов времени, и тем, у кого более высокая ставка, а также обеспечивается справедливость за счет низкого хэш-значения и высокой общей суммы ставок. Затем этим предпочтительным валидаторам поручается добавить новый блок в блокчейн.

Реализация разработчика: инструменты и библиотеки для PoS предоставляются Ethereum 2.0 SDK.

Делегированное подтверждение доли (DPoS):

Проще говоря, в этой системе используется демократичный подход к подтверждению транзакций и созданию новых блоков. Это достигается за счет того, что голоса участников (называемых «делегатами») позволяют аутентифицировать транзакции и создавать новые блоки в блокчейне.

Реализация разработчика: EOSIO SDK предоставляет инструменты и библиотеки для DPoS.

Глава 3. Создание простой цепочки блоков с помощью JavaScript

В этом уроке мы углубимся в архитектуру блокчейна, рассмотрим создание основных классов, таких как блоки, определение их атрибутов и понимание того, как эти блоки и их параметры связаны между собой.

Создание класса блока

Блокчейн, как следует из названия, состоит из блоков и атрибутов каждого класса блоков, таких как:

  • Индекс: числовой идентификатор позиции блока в блокчейне.
  • Временная метка: время создания блока.
  • Данные: данные или транзакции, хранящиеся в блоке. Это может включать в себя такую ​​информацию, как сведения о транзакциях, пользовательские данные и т. д.
  • ПредыдущийHash: хеш предыдущего блока в цепочке, обеспечивающий непрерывность и безопасность.
  • Хэш: уникальный идентификатор блока, созданный путем хеширования содержимого блока.
  • Nonce: число, используемое для алгоритма Proof of Work, которое корректируется до тех пор, пока не будет найден действительный хэш.

Реализовать методы для вычисления хеша блока с использованием синтаксиса JavaScript:

  • createGenesisBlock: Создает первый блок в блокчейне, известный как блок генезиса.
  • getLatestBlock: извлекает самый последний блок в блокчейне.
  • adBlock: добавляет новый блок в блокчейн после его майнинга.
  • isChainValid: проверяет целостность блокчейна, гарантируя совпадение хэшей каждого блока и согласованность предыдущих хешей.

Создание класса Blockchain

Определите класс Blockchain для управления цепочкой и реализуйте методы для добавления новых блоков:

класс Blockchain {    
конструктор {        
this.chain = [this.createGenesisBlock];        
this.difficulty = 4;  // Уровень сложности майнинга    

    // Метод создания генезис-блока    
createGenesisBlock {
вернуть новый блок(0, «01.01.2024», «Блок Бытия», «0»);    
}

 // Метод для получения последнего блока в цепочке    < br/>getLatestBlock {        
return this.chain[this.chain.length — 1];    
}

// Метод добавления нового блока в цепочку после его добычи    
addBlock(newBlock) {        
newBlock.previousHash = this.getLatestBlock.hash;        
newBlock.mineBlock(this.difficulty);        
this.chain.push(newBlock);    
}

 // Метод проверки целостности блокчейна    
isChainValid {        
for (let i = 1; i < this.chain.length; i++) {            
const currentBlock = эта.цепочка[я];            
const previousBlock = this.chain[i — 1];

// Проверяем, хэш текущего блока правильный            
if (currentBlock.hash !== currentBlock.calculateHash) {                 
return false;           

             // Проверяем, совпадает ли предыдущий хеш текущего блока с хэшем предыдущего блока            
if (currentBlock.previousHash !== previousBlock.hash) {                
return false;            
}       
 }        
возвратить true;    

Глава 4: Реализация механизмов консенсуса в JavaScript

Доказательство работы

Проще говоря, Proof of Work (часто называемый майнингом) — это система, в которой участники сети или майнеры соревнуются в решении сложных математических задач, похожих на головоломки с криптографическими кодами. Майнер, который первым решает головоломку, добавляет следующий блок в цепочку данных, известную как блокчейн, и получает вознаграждение. Этот процесс включает использование хеширования для обеспечения безопасности блокчейна. Сложность этих головоломок помогает поддерживать безопасность блокчейна и регулирует скорость добавления новых блоков в цепочку.

Давайте включим в класс Block концепцию Proof of Work, создав функцию mineBlock. Эта функция будет постоянно корректировать nonce до тех пор, пока закодированный хэш блока не будет удовлетворять определенному стандарту сложности (например, хэш должен начинаться с указанного количества нулей).

Фрагмент кода:

class Block {    
constructor(index, timestamp, data, previousHash = ”) {        
this.index = index;        
this.timestamp = метка времени;        
this.data = данные;        
this.previousHash = previousHash;        
this.hash = this.calculateHash;        
this.nonce = 0;   

 // Вычисляем хэш блока с помощью SHA-256    
calculateHash {        
return crypto.createHash(‘sha256’)            
.update(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data) + this.nonce)            
.digest(‘hex’);    
}

    // Реализация доказательства работы    
mineBlock(difficulty) {        
while (this.hash.substring(0, сложность) !== Array(difficulty +
1).join(“0”)) {            
this.nonce++;            
this.hash = this.calculateHash;       
 }        
console.log(`Блок добыт: ${this.hash}`);    

Обновите класс Blockchain, чтобы проверить доказательства перед добавлением новых блоков.

класс Blockchain {    
конструктор {        
this.chain = [this.createGenesisBlock];        
this.difficulty = 4;    
}

 // Создание блока генезиса    createGenesisBlock {        
вернуть новый блок(0, «01.01.2024», «Блок Бытия», «0»);    
}

// Получить последний блок в цепочке    
getLatestBlock {        
return this.chain[this.chain.length — 1];    
}

// Добавляем новый блок в цепочку    
addBlock(newBlock) {        
newBlock.previousHash = this.getLatestBlock.hash;        
newBlock.mineBlock(this.difficulty);  // Реализация доказательства работы        
this.chain.push(newBlock);    
}

// Проверьте, действителен ли блокчейн    
isChainValid {        
for (let i = 1; i < this.chain.length; i++) {            
const currentBlock = this. цепочка[я];            
const previousBlock = this.chain[i — 1];
             if (currentBlock.hash !== currentBlock.calculateHash) {                
вернуть ложь;           

             if (currentBlock.previousHash !== previousBlock.hash) {                 
вернуть false;           
 }        
}        
вернуть true;    



Глава 5. Создание простого API блокчейна с помощью JavaScript

Разработка блокчейна — это всего лишь первый шаг; он также должен быть практичным для повседневного использования. Для достижения этой цели мы должны разработать удобный интерфейс, например простой API (интерфейс прикладного программирования), который позволит легко взаимодействовать.

Настройка среды API

Для создания эффективного API крайне важно сначала подготовить рабочее пространство, установив все необходимые инструменты и фреймворки, необходимые для его разработки.

  • Установите узел и npm 
  • Инициализируйте проект с помощью команды: npm init -y.
  • Экспресс-установка: npm install express -save (Express — это фреймворк Node JS, который помогает быстрее создавать API)
  • Установите парсер Body для обработки входящего запроса: npm install body-parser -save

Создание API

После того, как вы подготовили настройку, приступим к созданию интерфейса прикладного программирования (API). Этот интерфейс позволит пользователям взаимодействовать с блокчейном, наблюдать за текущим состоянием цепочки и даже добавлять к ней новые блоки.

Создайте сервер с помощью Express:

const express = require(‘express’);
const bodyParser = require(‘body-parser’);
const Blockchain = требуется(‘./блокчейн’);  // Импортируем класс Blockchain

const app = express;
app.use(bodyParser.json);

let demoBlockchain = новый блокчейн;  // Инициализируем новый экземпляр Blockchain

Определение конечных точек API

app.get(‘/blocks’, (req, res) => {     //конечная точка для получения блокчейна    
res.json(demoBlockchain.chain);});

//это конечная точка для создания нового блока

app.post(‘/mine’, ( req, res) => {    
const newBlock = new Block(        
demoBlockchain.chain.length,        
Date.now,        
req.body.data,        
demoBlockchain.getLatestBlock.hash   
);    
demoBlockchain.addBlock(newBlock);
    res.send(`Блок успешно добыт: ${newBlock.hash}`);
});

Запустить сервер

app.listen(3000, => {    
console.log(‘API блокчейна, работающий на порту 3000’);
}) ;
узел server.js

Глава 6. Запуск и тестирование приложения

Я не могу переоценить важность этого этапа для обеспечения бесперебойной работы вашего блокчейна и достижения ожидаемых вами результатов. Как человек, который годами работал с различными технологиями блокчейна, я видел, как бесчисленное количество проектов терпело неудачу из-за игнорирования этого важного шага. Не совершайте той же ошибки — потратьте время на тщательное тестирование и доработку вашего блокчейна, прежде чем запускать его в эксплуатацию. Поверьте мне; ваши пользователи будут вам за это благодарны!

Запуск приложения

  1. Запустите сервер: перейдите в каталог вашего проекта, а затем запустите целевой узел: node server.js.
  2. Получите подтверждение сервера: API Blockchain работает на порту 3000
  3. Доступ к приложению: ваше приложение теперь работает локально на http://localhost:3000, что позволяет ему принимать HTTP-запросы.

Тестирование с помощью Postman

Как криптоинвестор, я часто полагаюсь на такие инструменты, как Postman, чтобы обеспечить оптимальную работу моих API-интерфейсов блокчейна. С помощью Postman я могу легко отправлять HTTP-запросы и анализировать возвращаемые ответы. Этот инструмент неоценим, когда дело доходит до тестирования и проверки производительности моего API, обеспечивая безопасность и эффективность моих инвестиций.

  • Установить Почтальон
  • Тестирование конечной точки блокчейна
  • Проверьте конечную точку майнинга
  • Подтвердить блокчейн
(Step1)node server.js
API Blockchain, работающий на порту 3000

//http://localhost: 3000/блок

(Шаг 2)[    
{        
“index”: 0 ,        
“timestamp”: 1636568887994,        
“data”: “Genesis Block”,       
 “ previousHash»: «0»,       
 “хеш”:
“81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9”   

]

(Шаг 3){    
“данные”: {        < br/>“сумма”: 100,        
“отправитель”: “Джон Доу”,        
“получатель”: “Джейн Смит ”   

}

(Шаг 4){   
 “сообщение”: “Заблокировать успешно добыто”,    
“блокировать”: {        
“индекс”: 1,        
«метка времени»: 1636578990123,        
«данные»: {             
“сумма”: 100,            
«отправитель»: «Джон Доу»,            
«получатель»: «Джейн Смит»        
},
«Предыдущий Хэш»: «81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9»,       
 “хеш”
“5a1cdd657c8d0 d3c0f12c2bb2c9fdf32a7d2d4ad13fcb78170a8caa82ff4a9a2”    

 (Шаг 5)[    {
“index”: 0,        “timestamp”: 1636568887994,        “data”: “Genesis Block”,        “previousHash”: “0”,        “hash”:“81f1a4ab4d484c64f1b4c524b1d8f2fef8 f2bca7853d44682e12022fb2d803b9”    },    {        “индекс”: 1,        “метка времени ”: 1636578990123,        “data”: {            “количество”: 100,            “отправитель”: “Джон Доу”,            “получатель”: “Джейн Смит”        },        «previousHash» : «81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9»,       «хэш»: «5a1cdd657c8d0d3c0f12c2bb2c9fdf32a7d2d4ad13fcb7817 0a8caa82ff4a9a2”    } ]

curl http://localhost:3000/blocks //Просмотр блокчейна
[   
 {       
 “индекс”: 0,        
“временная метка”: 1636568887994,       
 “данные”: “Genesis Block”,       
 “previousHash”: “0”,       
 “хэш”:
“81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9”    

]

//Извлечение нового блока Curl -X POST -H «Content-Type: application /json» -d ‘{«data»: {«количество»: 100, «отправитель»: «Джон Доу», «получатель»: «Джейн Смит»}}’ http://localhost:3000/mine

//проверьте блокировку http://localhost:3000/blocks

[   
 {       
 “индекс”: 0,        
“временная метка”: 1636568887994,       
 “ data»: «Genesis Block»,       
 “previousHash”: “0”,       
 “hash”: “81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9”    < br/>},    
{       
 “индекс”: 1,       
 “метка времени ”: 1636578990123,        
“данные”: {           
 “сумма”: 100,            
“отправитель ”: “Джон Доу”,            
“приемник”: “Джейн Смит”       
 },        
«ПредыдущийHash»: «81f1a4ab4d484c64f1b4c524b1d8f2fef8f2bca7853d44682e12022fb2d803b9»,        
 “хэш”:
“5a1cdd657c8d0d3c0f12c2 bb2c9fdf32a7d2d4ad13fcb78170a8caa82ff4a9a2”    
}
]

Глава 7: Реальный пример создания блокчейн-приложения с помощью JavaScript

Пошаговое выполнение

  • Шаг 1. Создайте класс Block с необходимыми атрибутами, используя синтаксис JavaScript.
class Block {    
constructor(index, timestamp, data, previousHash = ”) {        
this.index = index;        
this.timestamp = метка времени;        
this.data = данные;        
this.previousHash = previousHash;        
this.hash = this.calculateHash;        
this.nonce = 0;    

  • Шаг 2. Реализуйте метод CalculationHash.
calculateHash {   
 return crypto.createHash(‘sha256’)        
.update(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data) + this.nonce)       
 .digest(‘hex’);
  • Шаг 3. Определите класс Blockchain и инициализируйте его с помощью исходного блока.
класс Blockchain {    
конструктор {        
this.chain = [this.createGenesisBlock];    

  • Шаг 4. Реализуйте методы для добавления новых блоков и получения последнего блока с помощью 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. Добавьте функциональность Proof of Work в класс Block и обновите класс Blockchain.
mineBlock(difficulty) {    
while (this.hash.substring(0, сложность) !== Array(difficulty + 1).join(“0”)) {        
this.nonce++;        
this.hash = this.calculateHash;    

  • Шаг 6. Настройте среду API для обработки запросов с помощью Express.
npm init -y
npm install express -save                         //Настройка проекта и
каталога

const express = require(‘express’);      //Настройка экспресс-сервераconst bodyParser = require(‘body-parser’);
const Blockchain = require(‘./blockchain’); // Предполагая, что у вас есть класс Blockchain из предыдущих глав

const app = express;app.use(bodyParser.json);

const demoBlockchain = новый блокчейн;
app.get(‘/blocks’, (req, res) => {    res.json(demoBlockchain.chain); b>});

app.post(‘/mine’, (req, res) => {            // создание нового блока             const newBlock = new Block(
demoBlockchain.chain.length,
        Date.now,
        req.body.data ,
        demoBlockchain.getLatestBlock.hash
);
    newBlock.mineBlock(2); // Предполагая сложность 2 для PoW    demoBlockchain.addBlock(newBlock);    
res.send(`Блок успешно добыт: ${newBlock.hash}`);
});
app.listen(3000, => {                               //запуск сервера    console.log(‘Blockchain API работает на порту 3000’);});

узел server.js

  • Шаг 7. Протестируйте приложение, извлекая новый блок и проверяя блокчейн с помощью Postman или Curl.
В почтальоне отправьте запрос:
GET-запрос на http://localhost:3000/blocks.
{    < br/>“данные”: {       
 “сумма”: 10,       
 “отправитель”: “Алиса”,       
 “получатель”: “Боб”   

В curl:curl
http://localhost:3000/blocks

Кратко суммируем описанные выше шаги.

Давайте шаг за шагом пройдемся по процессу воплощения в жизнь вашего блокчейн-приложения:

  1. Начните с определения классов Block и Blockchain, чтобы установить базовую структуру вашего блокчейна.
  2. Включите доказательство работы, добавив метод mineBlock в класс Block, чтобы гарантировать, что каждый блок соответствует требуемой сложности перед добавлением в цепочку.
  3. Настройте API с помощью Express, который позволит вам взаимодействовать с вашим блокчейном, позволяя выполнять такие операции, как просмотр цепочки и добавление новых блоков.
  4. Выполните и протестируйте свое приложение с помощью Postman или Curl, чтобы убедиться, что все работает должным образом, от добычи блоков до получения данных блокчейна.

Приятного кодирования!!

Смотрите также

2024-08-14 21:30