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
标签:网络测绘, 逆向工具