CRYPTO.js を使用して独自のブロックチェーン サービスを構築する
だから、インターネットで見るものすべてを信じてはいけないと言われているのです🤭
ここでは、独自のブロックチェーン プログラムを構築するための初心者向けガイドを提供し、EXPRESS.JS を使用してこれを API にデプロイする方法を紹介します (嘘をついていないことがわかります 😓)
始める前に、これから直面する課題を簡単に見てみましょう
1.ブロックチェーンと Crypto.js の紹介 (スキップ可能)
2.開発環境の設定(スキップ可能)
3.ブロックチェーンクラスの作成
4.Crypto.js による暗号化機能の実装
5.ブロックの追加と検証
6.ブロックチェーンサービスの導入
7.結論(スキップ可)
1. ブロックチェーンとCrypto.jsの紹介
ブロックチェーンとは何ですか?
ブロックチェーンは、一連のリンクされたブロックにデータを保存する、分散型の分散型台帳です。各ブロックには前のブロックの暗号化ハッシュが含まれており、チェーン全体の整合性と不変性を保証します。
Crypto.js とは何ですか?
Crypto.js は、ハッシュ、暗号化、復号化などの幅広い暗号化機能を提供する強力な JavaScript ライブラリです。セキュリティと暗号化が不可欠なブロックチェーン アプリケーションの構築に最適です。
2. 開発環境の設定
開始するには、システムに Node.js と npm (Node Package Manager) がインストールされている必要があります。
この手順はすでにご存知でしょうが、まず新しいプロジェクト ディレクトリを作成する必要があります。
mkdir blockchain-service
cd blockchain-service
新しい Node.js プロジェクトを初期化します。
npm init -y
次に、次のコマンドを実行して Crypto.js をインストールします。
npm install crypto-js
次に、ブロックチェーンのコーディングを開始するための新しい JavaScript ファイルを作成します。
touch blockchain.js
3. ブロックチェーンクラスの作成
ファイル内でblockchain.js
、まずクラスを作成しますBlockchain
。このクラスはブロックを管理し、ブロックチェーン サービスの基本機能を処理します。
const CryptoJS = require('crypto-js');
// creating the blockchain chain class to manage blocks
class Blockchain {
constructor() {
this.chain = [];
this.createGenesisBlock();
}
createGenesisBlock() {
const genesisBlock = this.createBlock("0");
this.chain.push(genesisBlock);
}
createBlock(previousHash) {
const block = {
index: this.chain.length + 1,
timestamp: new Date().toISOString(),
data: "This is a new block",
previousHash: previousHash,
hash: ""
};
block.hash = this.hashBlock(block);
return block;
}
hashBlock(block) {
const blockString = JSON.stringify(block);
return CryptoJS.SHA256(blockString).toString();
}
getLastBlock() {
return this.chain[this.chain.length - 1];
}
addBlock(newBlock) {
this.chain.push(newBlock);
}
}
module.exports = Blockchain;
4. Crypto.js による暗号化機能の実装
基本的な構造ができたので、Crypto.js が暗号セキュリティによってブロックチェーンをどのように強化するかを見てみましょう。
ハッシュブロック
このクラスhashBlock
のメソッドはBlockchain
、Crypto.js を使用して各ブロックの SHA-256 ハッシュを作成します。これにより、ブロックの内容が変更されるとハッシュが完全に異なるものとなり、ブロックチェーンが改ざん不可能になります。
hashBlock(block) {
const blockString = JSON.stringify(block);
return CryptoJS.SHA256(blockString).toString();
}
この行はCryptoJS.SHA256()
ブロック データをハッシュするために使用され、各ブロックに一意のハッシュ文字列を提供します。
5. ブロックの追加と検証
次に、新しいブロックを追加してブロックチェーンを検証する関数を実装します。
新しいブロックの追加
ブロックを追加するには、まず最後のブロックのハッシュを取得し、それにリンクされた新しいブロックを作成する必要があります。
const Blockchain = require('./blockchain');
const blockchain = new Blockchain();
const lastBlock = blockchain.getLastBlock();
const newBlock = blockchain.createBlock(lastBlock.hash);
blockchain.addBlock(newBlock);
console.log("New block added: ", newBlock);
ブロックチェーンの検証
ブロックチェーンが有効であることを確認するには、次の 2 つの点を確認する必要があります。
1.各ブロックは、前のブロックの とpreviousHash
一致します。hash
2.各ブロックのはhash
引き続き有効であり、ブロックのデータに対応します。
次の検証メソッドをBlockchain
クラスに追加します。
isChainValid() {
for (let i = 1; i < this.chain.length; i++) {
const currentBlock = this.chain[i];
const previousBlock = this.chain[i - 1];
if (currentBlock.previousHash !== previousBlock.hash) {
return false;
}
if (currentBlock.hash !== this.hashBlock(currentBlock)) {
return false;
}
}
return true;
}
この方法により、ブロックチェーンの整合性が確保され、改ざんに対する耐性が高まります。
6. ブロックチェーンサービスの導入
ブロックチェーンが機能したら、次のステップはそれをサービスとして展開することです。Express.js などのフレームワークを使用して、ブロックチェーンとやり取りするためのシンプルな API を作成できます。
基本的な例を以下に示します。
const express = require('express');
const Blockchain = require('./blockchain');
const app = express();
const blockchain = new Blockchain();
app.get('/blockchain', (req, res) => {
res.json(blockchain.chain);
});
app.post('/mine', (req, res) => {
const lastBlock = blockchain.getLastBlock();
const newBlock = blockchain.createBlock(lastBlock.hash);
blockchain.addBlock(newBlock);
res.json(newBlock);
});
app.listen(3000, () => {
console.log('Blockchain service running on port 3000');
});
7. 結論
おめでとうございます! JavaScript と Crypto.js を使用して、シンプルなブロックチェーン サービスを構築し、デプロイすることができました。このプロジェクトでは、ブロックチェーン テクノロジーの基礎と、Crypto.js が提供する暗号化機能の威力について紹介しました。
次のような機能を追加することで、このサービスを拡張できます。
-スマート コントラクト:ブロックチェーン内でプログラム可能なコントラクトを実装します。
-コンセンサス アルゴリズム:分散型の意思決定を保証します。
-プルーフ・オブ・ワーク:ブロックチェーンにマイニングと難易度の調整を追加します。
役に立つと思われる場合は、Hashnode で私をフォローして、ブロックチェーン、JavaScript、その他の興味深いテクノロジーに関するガイドをさらにご覧ください。
Discussion