從零開始:如何用Node.js構建一個簡單的區塊鏈證書系統

更新於 發佈於 閱讀時間約 9 分鐘

區塊鏈技術的應用範圍正在不斷擴大,從加密貨幣到供應鏈管理,再到身份驗證系統。今天,我們將探索如何利用Node.js構建一個基礎的區塊鏈應用——數字證書系統。這個項目不僅能幫助我們理解區塊鏈的核心概念,還能為未來開發更複雜的分佈式應用奠定基礎。


區塊鏈的核心特性包括去中心化、透明性、安全性和不可篡改性。這些特性使得區塊鏈成為存儲和驗證重要信息的理想選擇。在我們的證書系統中,這些特性將確保證書的真實性和可靠性。


讓我們開始動手實踐。首先,確保你的電腦已安裝Node.js。你可以從Node.js官方網站(https://nodejs.org/)下載並安裝。


接下來,創建一個新的項目目錄,並在終端中運行以下命令初始化項目:


```

npm init -y

npm install express crypto-js body-parser ejs

```


這些命令將創建一個package.json文件並安裝必要的依賴。


現在,讓我們創建核心的區塊鏈類。在項目根目錄下創建一個名為blockchain.js的文件,並添加以下代碼:


```javascript

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


class Block {

constructor(index, timestamp, data, previousHash = "") {

this.index = index;

this.timestamp = timestamp;

this.data = data;

this.previousHash = previousHash;

this.hash = this.calculateHash();

}


calculateHash() {

return SHA256(

this.index +

this.previousHash +

this.timestamp +

JSON.stringify(this.data)

).toString();

}

}


class Blockchain {

constructor() {

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

}


createGenesisBlock() {

return new Block(0, new Date().toString(), "Genesis Block", "0");

}


getLatestBlock() {

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

}


addBlock(newBlock) {

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

newBlock.hash = newBlock.calculateHash();

this.chain.push(newBlock);

}


isChainValid() {

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()) {

return false;

}

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

return false;

}

}

return true;

}

}


module.exports.Blockchain = Blockchain;

module.exports.Block = Block;

```


這段代碼定義了區塊鏈的基本結構。每個區塊包含索引、時間戳、數據、前一個區塊的哈希值以及自身的哈希值。Blockchain類管理整個鏈,包括添加新區塊和驗證鏈的完整性。


接下來,創建index.js文件作為應用的入口點:


```javascript

const express = require("express");

const bodyParser = require("body-parser");

const { Blockchain, Block } = require("./blockchain");


const app = express();

const port = 3000;


app.use(express.static(__dirname + "/public"));

app.set("view engine", "ejs");

app.use(bodyParser.urlencoded({ extended: true }));


let blockchain = new Blockchain();


app.get("/", (req, res) => {

res.render("index", { certificateId: null });

});


app.post("/issue-certificate", (req, res) => {

const { recipient, certificateName } = req.body;

const certificateId = generateCertificateId();

const newBlock = new Block(blockchain.chain.length, new Date().toString(), {

certificateId,

recipient,

certificateName,

});

blockchain.addBlock(newBlock);

res.render("index", { certificateId });

});


app.get("/verify-certificate", (req, res) => {

res.render("verify", { isValid: null });

});


app.post("/verify-certificate", (req, res) => {

const { certificateId } = req.body;

const block = blockchain.chain.find(

(block) => block.data.certificateId === certificateId

);

const isValid = block !== undefined;

res.render("verify", { certificateId, isValid });

});


function generateCertificateId() {

return Math.random().toString(36).substring(2, 10);

}


app.listen(port, () => {

console.log(`App listening at http://localhost:${port}`);

});

```


這個Express應用程序為我們的證書系統提供了Web界面。它允許用戶頒發新證書和驗證現有證書。


為了完成我們的應用,我們需要創建兩個EJS視圖文件。在views目錄下創建index.ejs和verify.ejs文件,分別用於證書頒發和驗證頁面。


這個簡單的區塊鏈證書系統展示了區塊鏈技術的基本原理。每個證書作為一個區塊被添加到鏈上,確保了其不可篡改性和可追溯性。然而,這只是一個起點。在實際應用中,我們還需要考慮更多因素:


1. 共識機制:在真實的分佈式環境中,需要一個共識算法來確保所有節點對鏈的狀態達成一致。


2. 安全性增強:可以引入更複雜的加密算法和數字簽名來進一步提高系統的安全性。


3. 擴展性:隨著證書數量的增加,需要考慮如何優化存儲和查詢效率。


4. 權限管理:在實際應用中,需要明確定義誰有權限頒發證書,以及如何管理這些權限。


5. 隱私保護:某些情況下,可能需要實現零知識證明等技術來保護證書持有者的隱私。


這個項目為我們提供了一個切入點,讓我們能夠深入理解區塊鏈技術的核心概念。通過親手構建這樣一個系統,我們不僅學習了技術細節,還能更好地理解區塊鏈在現實世界中的潛在應用和挑戰。


隨著技術的不斷發展,我們可以期待看到更多創新的區塊鏈應用出現,為各行各業帶來革命性的變化。無論你是技術愛好者、學生還是專業開發者,深入研究區塊鏈技術都將為你打開一個充滿機遇的新世界。

留言
avatar-img
留言分享你的想法!
avatar-img
币圈小霸王的沙龍
2會員
34內容數
分享最新的幣圈看法和經驗
2024/09/29
愛好和事業,看似是天作之合的組合。畢竟,誰不想把自己熱愛的事情變成謀生的工具呢?但經歷過幾次嘗試後,我不得不承認:將愛好商業化並非易事,有時甚至會適得其反。 以我自己為例,我是一個狂熱的摔角迷,每週至少花5小時觀看摔角比賽。我還喜歡製作頭飾,特別是為墨爾本春季嘉年華定制的那種。此外,我還是一個
2024/09/29
愛好和事業,看似是天作之合的組合。畢竟,誰不想把自己熱愛的事情變成謀生的工具呢?但經歷過幾次嘗試後,我不得不承認:將愛好商業化並非易事,有時甚至會適得其反。 以我自己為例,我是一個狂熱的摔角迷,每週至少花5小時觀看摔角比賽。我還喜歡製作頭飾,特別是為墨爾本春季嘉年華定制的那種。此外,我還是一個
2024/09/29
西班牙,這個充滿陽光、美食和熱情的國度,一直是許多人夢寐以求的移居地。然而,當我們談論在西班牙生活時,大多數人腦海中浮現的可能是巴塞羅那的海灘、馬德里的皇宮,或者安達魯西亞的白色小鎮。但在西班牙的西北角,有一個被人忽視的寶地——加利西亞自治區。 最近,一位名叫Shawn Forno的作家分享了
2024/09/29
西班牙,這個充滿陽光、美食和熱情的國度,一直是許多人夢寐以求的移居地。然而,當我們談論在西班牙生活時,大多數人腦海中浮現的可能是巴塞羅那的海灘、馬德里的皇宮,或者安達魯西亞的白色小鎮。但在西班牙的西北角,有一個被人忽視的寶地——加利西亞自治區。 最近,一位名叫Shawn Forno的作家分享了
2024/09/29
在充滿誘惑的股市投資世界裡,許多人都夢想著一夜暴富。可惜現實往往不如人意,大多數人最終都會虧損離場。但是,如果我告訴你有一個簡單的策略,每天只需操作一次,就有機會穩定賺取50美元左右的收益,你會不會感興趣呢? 這個策略名叫「微型缺口交易」(Micro Gap N' Go),是從傳統的缺口交易策
2024/09/29
在充滿誘惑的股市投資世界裡,許多人都夢想著一夜暴富。可惜現實往往不如人意,大多數人最終都會虧損離場。但是,如果我告訴你有一個簡單的策略,每天只需操作一次,就有機會穩定賺取50美元左右的收益,你會不會感興趣呢? 這個策略名叫「微型缺口交易」(Micro Gap N' Go),是從傳統的缺口交易策
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
加密貨幣是基於區塊鏈技術的數字貨幣,文章介紹了加密貨幣的基本概念、特點、主要加密貨幣、優勢和挑戰、以及在實際應用中的情況。
Thumbnail
加密貨幣是基於區塊鏈技術的數字貨幣,文章介紹了加密貨幣的基本概念、特點、主要加密貨幣、優勢和挑戰、以及在實際應用中的情況。
Thumbnail
區塊鏈有什麼特色? 所有交易(操作資訊)紀錄會儲存在各個節點,因此具有公開性 每個節點遵守一套共識機制,基於這套機制來信任讀取的數據 透過密碼學演算法確保交易紀錄無法被串改 不會有資料中心遭受攻擊導致系統癱瘓問題 可能會對使用者喪失隱私 區塊鏈如何運作的? 節點主要可以被區分為兩種類型
Thumbnail
區塊鏈有什麼特色? 所有交易(操作資訊)紀錄會儲存在各個節點,因此具有公開性 每個節點遵守一套共識機制,基於這套機制來信任讀取的數據 透過密碼學演算法確保交易紀錄無法被串改 不會有資料中心遭受攻擊導致系統癱瘓問題 可能會對使用者喪失隱私 區塊鏈如何運作的? 節點主要可以被區分為兩種類型
Thumbnail
利用區塊鏈技術新認證方式(數位資料)Non–Fungible Token/縮寫NFT,因其獨一無二的價值,因而受到等同藝術品般瘋搶的NFT,也在時尚圈形成一股趨勢。
Thumbnail
利用區塊鏈技術新認證方式(數位資料)Non–Fungible Token/縮寫NFT,因其獨一無二的價值,因而受到等同藝術品般瘋搶的NFT,也在時尚圈形成一股趨勢。
Thumbnail
■什麼是區塊鏈技術? 區塊鏈是透過點對點(P2P)運行的網路,這個網路由分散式節點組成,可以把它想成是共享的數據庫,也就是分散式帳本(DLT),分散式帳本技術是一種去中心化的帳本,儲存著網路上進行的所有交易。 中心化帳本:也稱為集中式帳本,由一個中心化的機構去做驗證、記帳、訂立規則。
Thumbnail
■什麼是區塊鏈技術? 區塊鏈是透過點對點(P2P)運行的網路,這個網路由分散式節點組成,可以把它想成是共享的數據庫,也就是分散式帳本(DLT),分散式帳本技術是一種去中心化的帳本,儲存著網路上進行的所有交易。 中心化帳本:也稱為集中式帳本,由一個中心化的機構去做驗證、記帳、訂立規則。
Thumbnail
進入區塊鏈/Web3的世界,首先需要擁有一個錢包或帳號。本文從重要名詞和觀念入手,介紹公鑰和私鑰的重要性,以及助記詞的作用。探討加密錢包的種類,從私鑰控制權和網路連接的角度進行分類。同時提醒了私鑰保管的重要性,以及在交易所和網路交互中的安全提醒。最後透過實際案例介紹了社交工程和釣魚的危害。
Thumbnail
進入區塊鏈/Web3的世界,首先需要擁有一個錢包或帳號。本文從重要名詞和觀念入手,介紹公鑰和私鑰的重要性,以及助記詞的作用。探討加密錢包的種類,從私鑰控制權和網路連接的角度進行分類。同時提醒了私鑰保管的重要性,以及在交易所和網路交互中的安全提醒。最後透過實際案例介紹了社交工程和釣魚的危害。
Thumbnail
區塊鏈技術的崛起正在深刻改變記帳士的業務模式,將公司登記和設立等流程重新定義,同時帶來新的挑戰和機遇。 公司登記的全新契機 區塊鏈在公司登記中的應用 區塊鏈的去中心化特性為公司登記帶來更高的透明度和安全性。記錄的不可更改性確保了公司信息的真實性,徹底改變了工商登記的現行模式。 註冊公司的區塊
Thumbnail
區塊鏈技術的崛起正在深刻改變記帳士的業務模式,將公司登記和設立等流程重新定義,同時帶來新的挑戰和機遇。 公司登記的全新契機 區塊鏈在公司登記中的應用 區塊鏈的去中心化特性為公司登記帶來更高的透明度和安全性。記錄的不可更改性確保了公司信息的真實性,徹底改變了工商登記的現行模式。 註冊公司的區塊
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News