piano1112/blockchain-node
GitHub: piano1112/blockchain-node
用 Python 实现的点对点区块链网络模拟,支持 Ed25519 交易签名、最低哈希分布式共识和实时 Web 监控仪表板。
Stars: 0 | Forks: 0
# 区块链节点
一个用 Python 实现的点对点区块链网络模拟。节点通过 TCP 进行通信,使用 Ed25519 加密签名验证交易,并达成共识以维护一个共享账本。包含一个用于监控和交互的实时 Web 仪表板。
本项目作为悉尼大学 COMP3221(分布式系统)课程的一部分构建。
## 工作原理
每个节点作为独立进程运行。当一个签名交易到达时,节点会对其进行验证,将其添加到本地的 mempool 中,并广播给其他节点。节点会定期进入一个**共识轮次**:每个节点从其 mempool 中提议一个区块,通过 TCP 与其他节点交换提议,随后所有节点就会对追加到链上的同一个区块(哈希值最低的那个)达成共识。
交易使用 **Ed25519 签名**进行身份验证 —— 每个发送者使用私钥对其消息进行签名,节点在接受该交易之前,会根据发送者的公钥对签名进行验证。
## 架构
```
node.py → Main entry point, consensus loop orchestration
network.py → TCP server/client, peer connections, message framing
consensus.py → Block proposal, validation, and commit logic
blockchain.py → Chain state, genesis block, chain validation
block.py → Block data structure, serialisation
mempool.py → Transaction pool with nonce tracking and eviction
transaction.py → Transaction model, Ed25519 signature verification
utils.py → Canonical JSON hashing (SHA-256)
api.py → FastAPI web dashboard and REST API
blockchain.sh → Lifecycle management script
```
## 快速开始
### 前置条件
- Python 3.8+
### 快速入门
```
git clone https://github.com/piano1112/blockchain-node.git
cd blockchain-node
./blockchain.sh setup
./blockchain.sh start 3
```
这将设置虚拟环境,安装依赖项,并启动一个 3 节点网络。每个节点都会配备一个 Web 仪表板:
- 节点 8000 → http://localhost:9000
- 节点 8001 → http://localhost:9001
- 节点 8002 → http://localhost:9002
### 生命周期管理
```
./blockchain.sh setup # Create venv and install dependencies
./blockchain.sh start # Start N nodes
./blockchain.sh status # Show running nodes
./blockchain.sh logs # Tail logs for a specific node
./blockchain.sh stop # Stop all nodes
./blockchain.sh clean # Stop nodes, remove venv and logs
```
## Web 仪表板
每个节点在其端口 + 1000 的位置提供一个实时仪表板。仪表板显示:
- **区块链状态** — 包含哈希值、索引和交易数量的区块列表
- **Mempool** — 等待共识的待处理交易
- **节点状态** — 每个节点的连接状态(已连接 / 连接中 / 已崩溃)
- **交易提交** — 直接从浏览器发送签名交易
### REST API
仪表板还提供了一个 JSON API:
| Endpoint | Method | 描述 |
|---|---|---|
| `/api/node` | GET | 节点信息(端口、链长度、公钥) |
| `/api/blockchain` | GET | 包含所有区块的完整区块链 |
| `/api/mempool` | GET | 待处理交易 |
| `/api/peers` | GET | 节点连接状态 |
| `/api/transaction` | POST | 提交签名交易 |
## 关键设计决策
- **最低哈希共识**:当存在多个有效的区块提议时,节点会确定性地选择具有最低 SHA-256 哈希值的区块,从而确保所有节点在没有 leader 的情况下收敛到同一条链。
- **基于 Nonce 的排序**:每个发送者的交易必须按顺序到达(即 nonce 为 0, 1, 2, ...),以防止重放攻击并确保交易排序。
- **每个节点一个线程的网络模型**:每个节点连接都在其独立的线程中运行,并采用长度前缀的消息分帧以确保可靠传输。
- **节点自动重连**:系统会定期重试连接已崩溃的节点,允许节点在停机后重新加入网络。
## 技术亮点
- **加密验证**:交易使用 Ed25519(通过 PyNaCl/libsodium)进行签名,并在进入 mempool 之前进行验证
- **线程安全的 mempool**:通过锁机制管理来自网络处理程序和共识循环的并发访问
- **规范化哈希**:区块哈希是对确定性的序列化 JSON 进行计算得出的,以确保跨节点的一致性
- **容错性**:通过超时检测已崩溃的节点,将其排除在共识轮次之外,并自动重新连接
- **实时监控**:由 FastAPI 驱动的仪表板,带有自动刷新的 UI 和用于编程访问的 REST API
标签:网络测绘, 逆向工具