Mini Chain 是一个用 Go 语言编写的教育性区块链项目,展示了区块链技术的核心概念和实现原理。该项目包含了多种不同的实现方式,适合学习和研究区块链技术。
本项目旨在提供一个完整但简化的区块链实现,涵盖以下核心概念:
- 分布式账本技术
- 工作量证明共识机制
- P2P 网络通信
- 密码学基础
- UTXO 交易模型
- REST API 接口
详细的内容介绍全在微信公众号中。干货持续更新,敬请关注「代码扳手」微信公众号:
mini_chain/
├── cmd/ # 命令行应用程序
│ └── node/ # 主节点应用程序
├── gossip/ # 基于 Gossip 协议的区块链实现
│ ├── core/ # 核心区块链功能模块
│ │ ├── README.md # 核心模块文档
│ │ ├── blockchain.go # 核心区块链实现
│ │ ├── blockchain_test.go # 核心区块链测试
│ │ ├── example_test.go # 示例测试
│ │ └── integration_test.go # 集成测试
│ └── main.go # Gossip 主程序
├── internal/ # 内部包
│ ├── api/ # REST API 和 WebSocket 接口
│ │ ├── api.go # API 实现
│ │ └── ws.go # WebSocket 管理
│ ├── blockchain/ # 区块链核心实现
│ │ ├── block.go # 区块数据结构
│ │ ├── blockchain.go # 区块链管理
│ │ ├── mempool.go # 内存池管理
│ │ ├── pow.go # 工作量证明算法
│ │ ├── transaction.go # 交易处理
│ │ └── utxo.go # UTXO 模型实现
│ ├── p2p/ # P2P 网络层
│ │ ├── discovery.go # 节点发现
│ │ ├── message.go # 消息格式
│ │ └── p2p.go # P2P 网络实现
│ └── wallet/ # 钱包功能
│ ├── account.go # 账户管理
│ ├── keystore.go # 密钥存储
│ └── wallet.go # 钱包工具
├── libp2p/ # 基于 libp2p 的实现
│ └── main.go # libp2p 主程序
├── p2p/ # 简单 TCP P2P 实现
│ ├── README.md # P2P 实现文档
│ └── main.go # P2P 主程序
├── TESTING.md # 测试指南
├── main.go # 主程序入口
├── start_nodes.bat # Windows 多节点启动脚本
├── start_nodes.sh # Linux/Mac 多节点启动脚本
└── test_network.py # 网络测试脚本
- Simple P2P: 基于原始 TCP 连接的简单点对点网络
- Gossip Protocol: 基于 Gossip 协议的消息传播机制
- libp2p: 使用工业级 libp2p 库构建的现代 P2P 网络
- 工作量证明 (PoW): 基于哈希难题的共识算法
- UTXO 模型: 比特币风格的未花费交易输出模型
- 密码学安全: ECDSA 签名验证和 SHA256 哈希算法
- 内存池管理: 交易缓存和去重机制
- 区块验证: 完整的区块头和工作量证明验证
- 节点发现: mDNS 局域网发现和 DHT 分布式发现
- 消息传播: GossipSub 消息广播机制
- 数据同步: 区块链状态同步和冲突解决
- REST API: HTTP 接口用于外部系统交互
- WebSocket: 实时事件推送和订阅
- 密钥管理: ECDSA 密钥对生成和管理
- 地址生成: 公钥到地址的转换
- 交易签名: 数字签名和验证功能
- 密钥存储: 加密密钥存储机制
- Go 1.15 或更高版本
- Python 3.6+ (仅用于测试脚本)
# 克隆项目
git clone <repository-url>
cd mini_chain
# 安装依赖
go mod tidy# 运行主节点
go run main.go 3000 8080
# 运行多个节点进行测试
python test_network.py# Windows
start_nodes.bat
# Linux/Mac
chmod +x start_nodes.sh
./start_nodes.sh# 运行核心区块链测试
cd gossip/core
go test -v
# 查看测试覆盖率
go test -cover# 运行基准测试
cd gossip/core
go test -bench=.参考 TESTING.md 文件了解详细的网络测试方法。
- 遵循 Go 语言标准格式
- 提供详细的中文注释
- 保持完整的单元测试覆盖
- 添加持久化存储(如 BadgerDB 或 LevelDB)
- 实现更复杂的共识机制(如 PoS 或 DPoS)
- 添加智能合约支持(类似 Ethereum)
- 实现更完善的网络安全机制
- 添加区块浏览器功能
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Wallet │ │ Blockchain │ │ P2P │
│ │◄──►│ │◄──►│ │
│ - Accounts │ │ - Blocks │ │ - Network │
│ - Keys │ │ - UTXO Set │ │ - Messages │
│ - Signing │ │ - Mempool │ │ - Discovery │
└─────────────┘ └──────────────┘ └─────────────┘
▲
│
┌──────▼──────┐
│ API │
│ │
│ - REST │
│ - WebSocket │
└─────────────┘
- 交易创建: 用户通过钱包创建并签名交易
- 交易广播: 交易通过 P2P 网络广播到所有节点
- 交易池: 节点将交易放入内存池等待处理
- 区块挖掘: 矿工从交易池中选择交易进行区块挖掘
- 区块验证: 其他节点验证新区块并添加到本地链
- 状态同步: 网络中的所有节点保持状态一致
该项目适合作为以下学习目的:
- 区块链基础概念理解
- Go 语言分布式系统开发
- P2P 网络编程实践
- 密码学在区块链中的应用
- 共识算法实现原理
注意:此项目仅供学习和研究使用,不应在生产环境中部署。
