这是一个用于学习目的的简单区块链实现。
该项目使用 Go 语言实现了区块链的基本功能,包含:
- 区块和交易数据结构
- 地址和钱包管理
- 挖矿和工作量证明
- 链式存储区块
- 简单的网络通信
- 命令行界面
该区块链具有以下关键功能:
- 实现基本的工作量证明算法
- 支持创建交易
- 维护交易池
- 验证和挖掘块
- 实现简单的P2P网络用于块和交易传播
- 提供与命令行交互的CLI
-
安装Go 1.19或更高版本
-
下载代码
git clone https://github.com/Alan-333333/simple-blockchain.git
- 进入项目目录
cd simple-blockchain
- 安装依赖
go mod tidy
- 运行节点
go run main.go
支持以下命令:
printBlockChain- 打印区块链中的所有块printBlock <hash>- 打印块createGenesisBlock- 创建创世块createWallet- 创建一个新的钱包getWalletBalance <address>- 获取钱包地址的余额addWalletBalance <address> <amount>- 向钱包添加余额sendTransaction <from> <to> <amount>- 创建并发送交易connectNode <ip> <port>- 连接到节点
- 运行区块链节点:
go run main.go
- 运行另一个节点并连接到第一个节点:
go run main.go -port 3001
connectNode 127.0.0.1 3000
- 创建钱包:
createWallet
createWallet
- 添加余额:
addWalletBalance 1K4nFZNxmHRRwfM4E9S8SXPQcTcayxaeKj 50
addWalletBalance 1JLfCguhUBui6MWQ4vNFgEktn87E9V6F8Q 100
- 验证余额:
getBalance 1K4nFZNxmHRRwfM4E9S8SXPQcTcayxaeKj
getBalance 1JLfCguhUBui6MWQ4vNFgEktn87E9V6F8Q
- 发送交易:
sendTransaction 1K4nFZNxmHRRwfM4E9S8SXPQcTcayxaeKj 1JLfCguhUBui6MWQ4vNFgEktn87E9V6F8Q 50
该区块链将数据存储在本地的 dat 目录下,主要包含以下文件:
- blockchain/chain.dat - 存储所有区块的数据
- blockchain/genesis.blk - 创世区块
- blockchain/meta.json - 区块链元数据
- wallet/ - 存放钱包文件,每个钱包一个文件
欢迎提 issue 和 PR 为项目作出贡献!
该项目采用 MIT 许可证,详情请参阅 LICENSE 文件。