vikramkrishna1705-beep/BlockJS

GitHub: vikramkrishna1705-beep/BlockJS

一个生产级教学型区块链框架,用 Node.js 实现了 UTXO 模型、PoW 动态难度调整、P2P 网络和 LevelDB 持久化,帮助开发者深入理解区块链底层原理。

Stars: 0 | Forks: 0

# 🚀 BlockJS [![Node.js CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/81/81404e629a66141938f819e4cbfcd16f654ef0ee912c87db2ae116bb1318ffaa.svg)](https://github.com/vikramkrishna1705-beep/BlockJS/actions/workflows/test.yml) [![Testing](https://img.shields.io/badge/Tested_with-Jest-orange.svg)](https://jestjs.io/) [![Docker](https://img.shields.io/badge/Dockerized-Yes-blue.svg)](https://www.docker.com/) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) **BlockJS** 是一个使用 JavaScript 从头编写的、达到生产级别的教学型区块链框架。它的构建旨在展示对分布式系统、密码学和现代后端工程原理的深刻理解。 与典型的简单区块链教程不同,BlockJS 实现了真实的、行业标准机制,包括**真正的 UTXO 模型**、**动态难度调整 (DDA)**、**椭圆曲线密码学 (ECDSA)** 以及**持久化 LevelDB 存储**。 ## ✨ 核心功能 * 🔐 **椭圆曲线密码学**:使用 `secp256k1`(与 Bitcoin 使用的曲线相同)生成钱包密钥对并对交易进行数字签名。 * 💸 **真正的 UTXO 财务模型**:摒弃了简单的账户余额模型,采用未花费交易输出 (UTXO) 池。交易严格根据密码学签名和可用资金验证输入。 * ⛏️ **工作量证明与 DDA**:具有动态 PoW 共识算法,可自动调高或调低挖矿难度,以确保一致且可预测的出块率。 * 🌐 **P2P WebSocket 网络**:实现了一个健壮的 Socket.io 点对点网络,用于广播交易、同步链并实时解决 mempool 冲突。 * 💾 **LevelDB 持久化**:账本和 UTXO 状态被持久化保存到磁盘,确保数据在节点重启和崩溃后依然存在。 * 🐳 **Docker Swarm / Compose**:完全容器化的环境,能够毫不费力地启动一个互联的 3 节点集群,开箱即用地模拟去中心化网络。 * 🌳 **Merkle 树**:在区块头中将交易哈希加密聚合为单个根哈希,从而实现高效验证和 SPV(简化支付验证)功能。 * 📊 **可视化区块浏览器**:内置的轻量级 Web 仪表板,用于实时监控区块链状态、mempool 和节点数据。 * 🧪 **全面的测试覆盖率**:具有健壮的 Jest 测试套件,确保数据不可变性、状态转换和密码学完整性。 ## 🏗️ 架构 ``` graph TD A[Client App / Block Explorer] -->|HTTP / WebSockets| B(Express.js API) B --> C{P2P Network Node} C -->|Gossip Protocol| D[Other Peer Nodes] C --> E[Mempool] C --> F[(LevelDB Storage)] subgraph Consensus & Mining E --> G(Proof of Work Miner) G -->|Validates UTXOs| H[New Block] H -->|Broadcasts| C end ``` - **`src/blockchain`**:管理区块生成、PoW 哈希(`SHA-256`)、链验证和共识规则。 - **`src/wallet`**:处理密钥对、交易签名和 UTXO 状态机。 - **`src/network`**:用于客户端交互的 Express HTTP API 和用于节点间通信的 Socket.io 服务器。 - **`src/utils`**:配置、密码学封装和 LevelDB 数据库适配器。 ## 🚀 快速开始 ### 🐳 选项 1:Docker(推荐) 使用 Docker Compose 立即启动一个全连接的 3 节点集群。 ``` docker-compose up --build ``` * **节点 1**:`http://localhost:3001`(创世节点) * **节点 2**:`http://localhost:3002` * **节点 3**:`http://localhost:3003` ### 💻 选项 2:本地 Node.js 需要 Node.js 18+。 ``` # 安装依赖 npm install # 启动第一个 node npm start # 在单独的终端中,启动连接到第一个节点的第二个 node HTTP_PORT=3001 PEERS=ws://localhost:3000 npm start ``` ## 🎮 与网络交互 一旦您的节点运行起来,您就可以使用内置的可视化浏览器或 `cURL`/Postman 与 HTTP API 进行交互。 **1. 可视化区块浏览器** 打开您的浏览器并访问: ``` http://localhost:3001 ``` *(如果您正在端口 3000 上运行单个本地节点,请访问 `http://localhost:3000`)* **2. 查看区块链 (API)** ``` curl http://localhost:3001/blocks ``` **3. 创建交易** ``` curl -X POST -H "Content-Type: application/json" -d '{ "outputPublicKey": "recipient-public-key-here", "amount": 50, "fee": 1 }' http://localhost:3001/transact ``` **4. 挖掘区块(处理 Mempool 并奖励 Coinbase)** ``` curl http://localhost:3002/mine ``` ## 🧪 测试 该框架使用 Jest 进行了严格的测试。测试套件涵盖了密码学签名验证、恶意链拒绝和难度调整边界。 ``` npm run test ``` ## 💡 为什么选择 BlockJS?(致面试官) 如果您正在审查这个代码库,您可能会想为什么我构建这个项目,而不是一个标准的 CRUD 应用程序。 我设计 BlockJS 是因为从头构建一个区块链会迫使开发人员面对复杂的、底层的计算机科学问题: 1. **并发与状态管理**:在没有竞态条件的情况下处理并发的 P2P 事件、mempool 同步和 UTXO 状态推导。 2. **应用密码学**:超越标准的 JWT,利用原始椭圆曲线签名和哈希算法进行无需信任的验证。 3. **去中心化共识**:设计一种架构,在这种架构中,节点必须在没有中央权威或数据库的情况下独立就“真相”达成一致。 4. **数据结构**:实现密码学链接列表和不可变账本。 BlockJS 展示了我设计复杂分布式架构、编写测试驱动整洁代码以及应对典型 Web 开发范围之外挑战的能力。
标签:GNU通用公共许可证, LevelDB, MITM代理, Node.js, P2P网络, UTXO模型, 区块链, 密码学, 手动系统调用, 数据可视化, 自定义脚本, 请求拦截