快速入门
这是一个5分钟的快速教程,带您体验SimpleBTC的核心功能。
第一个区块链程序
创建一个新的Rust项目并添加SimpleBTC依赖:
use bitcoin_simulation::{
blockchain::Blockchain,
wallet::Wallet,
};
fn main() {
println!("🚀 SimpleBTC 快速入门\n");
// 1. 创建区块链
let mut blockchain = Blockchain::new();
println!("✓ 区块链已初始化");
// 2. 创建钱包
let alice = Wallet::new();
let bob = Wallet::new();
println!("✓ 创建了两个钱包");
println!(" Alice: {}", alice.address);
println!(" Bob: {}\n", bob.address);
// 3. Alice获得初始资金(从创世区块)
let tx1 = blockchain.create_transaction(
&Wallet::from_address("genesis_address".to_string()),
alice.address.clone(),
10000, // 1万 satoshi
0, // 无手续费(创世交易)
).unwrap();
blockchain.add_transaction(tx1).unwrap();
blockchain.mine_pending_transactions(alice.address.clone()).unwrap();
println!("💰 Alice的余额: {} satoshi", blockchain.get_balance(&alice.address));
// 4. Alice向Bob转账
let tx2 = blockchain.create_transaction(
&alice,
bob.address.clone(),
3000, // 转账3000
10, // 手续费10
).unwrap();
blockchain.add_transaction(tx2).unwrap();
blockchain.mine_pending_transactions(bob.address.clone()).unwrap();
// 5. 查看最终余额
println!("\n💼 最终余额:");
println!(" Alice: {} satoshi", blockchain.get_balance(&alice.address));
println!(" Bob: {} satoshi\n", blockchain.get_balance(&bob.address));
// 6. 验证区块链
if blockchain.is_valid() {
println!("✅ 区块链验证通过!");
}
// 7. 打印区块链信息
blockchain.print_chain();
}
运行结果
🚀 SimpleBTC 快速入门
✓ 区块链已初始化
✓ 创建了两个钱包
Alice: a3f2d8c9e4b7...
Bob: b9e4c7d2a3f1...
区块已挖出: 0003ab4f9c2d...
💰 Alice的余额: 10050 satoshi
区块已挖出: 0007c3e8d1a9...
💼 最终余额:
Alice: 6990 satoshi
Bob: 3060 satoshi
✅ 区块链验证通过!
核心概念速览
1. 区块链(Blockchain)
区块链是区块的链式数据结构,每个区块包含多笔交易。
#![allow(unused)]
fn main() {
let mut blockchain = Blockchain::new();
}
关键方法:
create_transaction()- 创建交易add_transaction()- 添加到待处理池mine_pending_transactions()- 挖矿打包交易get_balance()- 查询余额is_valid()- 验证区块链
2. 钱包(Wallet)
钱包管理公钥、私钥和地址。
#![allow(unused)]
fn main() {
let wallet = Wallet::new();
println!("地址: {}", wallet.address);
println!("公钥: {}", wallet.public_key);
// 私钥应保密!
}
关键方法:
new()- 创建新钱包sign()- 签名数据verify_signature()- 验证签名
3. 交易(Transaction)
交易是价值转移的基本单位,使用UTXO模型。
#![allow(unused)]
fn main() {
let tx = blockchain.create_transaction(
&sender, // 发送者钱包
receiver_addr, // 接收者地址
amount, // 金额(satoshi)
fee, // 手续费(satoshi)
)?;
}
交易包含:
- 输入(Inputs): 花费的UTXO
- 输出(Outputs): 创建的新UTXO
- 手续费: 输入总额 - 输出总额
4. 挖矿(Mining)
挖矿是通过工作量证明(PoW)将交易打包成区块。
#![allow(unused)]
fn main() {
blockchain.mine_pending_transactions(miner_address)?;
}
挖矿过程:
- 收集待处理交易
- 创建Coinbase交易(奖励+手续费)
- 计算Merkle根
- 找到满足难度的哈希(调整nonce)
- 将区块添加到链上
- 更新UTXO集合
进阶示例
多笔交易
#![allow(unused)]
fn main() {
// 创建多笔交易
for i in 1..=5 {
let tx = blockchain.create_transaction(
&alice,
bob.address.clone(),
100 * i,
i, // 不同的手续费
)?;
blockchain.add_transaction(tx)?;
}
// 一次性打包所有交易
blockchain.mine_pending_transactions(miner.address.clone())?;
}
交易费率优先级
#![allow(unused)]
fn main() {
// 低手续费交易
let slow_tx = blockchain.create_transaction(&alice, bob.address.clone(), 1000, 1)?;
// 高手续费交易
let fast_tx = blockchain.create_transaction(&alice, charlie.address.clone(), 1000, 50)?;
blockchain.add_transaction(slow_tx)?;
blockchain.add_transaction(fast_tx)?;
// 矿工会优先打包fast_tx(更高费率)
blockchain.mine_pending_transactions(miner.address)?;
}
余额查询
#![allow(unused)]
fn main() {
let balance = blockchain.get_balance(&alice.address);
println!("余额: {} satoshi ({:.8} BTC)", balance, balance as f64 / 100_000_000.0);
}
REST API 使用
启动API服务器:
cargo run --bin btc-server
创建钱包
curl -X POST http://localhost:3000/api/wallet/create
响应:
{
"address": "a3f2d8c9e4b7...",
"public_key": "04f9a...",
"private_key": "私钥请妥善保管"
}
创建交易
curl -X POST http://localhost:3000/api/transaction/create \
-H "Content-Type: application/json" \
-d '{
"from": "alice_address",
"to": "bob_address",
"amount": 5000,
"fee": 10
}'
查询余额
curl http://localhost:3000/api/balance/alice_address
挖矿
curl -X POST http://localhost:3000/api/mine \
-H "Content-Type: application/json" \
-d '{
"miner_address": "miner_address"
}'
查看区块链信息
curl http://localhost:3000/api/blockchain/info
响应:
{
"chain_length": 3,
"difficulty": 3,
"pending_transactions": 2,
"latest_block": {
"index": 2,
"hash": "0003ab4f...",
"timestamp": 1703001234,
"transaction_count": 5
}
}
Electron GUI
启动图形界面:
cd frontend
npm install
npm start
GUI功能:
- 📊 区块链浏览器: 可视化查看所有区块
- 👛 钱包管理: 创建、导入钱包
- 💸 发送交易: 图形化创建交易
- ⛏️ 挖矿: 点击按钮开始挖矿
- 🎮 Demo模式: 一键运行完整演示
实战案例
SimpleBTC提供了三个完整的实战案例:
1. 企业多签钱包(2-of-3)
cargo run --example enterprise_multisig
学习内容:
- 创建多签地址
- 收集签名
- 企业资金管理
2. 托管服务
cargo run --example escrow_service
学习内容:
- 买卖双方交易
- 仲裁机制
- 争议解决
3. 定期存款
cargo run --example timelock_savings
学习内容:
- 时间锁设置
- 到期检查
- 强制储蓄
下一步学习
现在您已经掌握了基础使用,可以继续深入学习:
-
理解原理 - 基本概念
- UTXO模型详解
- 工作量证明原理
- Merkle树结构
-
核心功能 - 核心模块指南
- 钱包深入使用
- 交易高级特性
- 区块链操作
-
高级特性 - 高级功能
- Merkle树与SPV
- 多重签名
- Replace-By-Fee
- 时间锁
-
API文档 - API参考
- 完整的API文档
- 函数签名
- 使用示例
小贴士
💡 提示:
- 挖矿难度3-4适合演示,6+更接近真实
- 手续费越高,交易越快被确认
- 定期调用
is_valid()验证区块链完整性 - 使用
print_chain()查看详细信息
⚠️ 注意:
- 私钥一旦丢失无法恢复
- 本项目仅用于学习,不要用于生产
- 简化的密码学实现不如真实比特币安全
准备好深入探索了吗?继续阅读基本概念!