前言:学习区块链的过程中在想怎么管理区块链呢
📌 推荐项目回顾:
👉 Jeiwan 的 blockchain_go
项目
GitHub 地址:https://github.com/Jeiwan/blockchain_go
❓它是怎么存储区块 & 找前一个区块的?
项目分为多个阶段(chapter),随着学习进度逐步完善。不同阶段用的方式也不一样:
✅ 前期(基础阶段)
使用的是数组([]*Block
)模拟链式结构:
go
type Blockchain struct {
blocks []*Block
}
每个区块中有字段:
go
type Block struct {
PrevBlockHash []byte
Hash []byte
Data []byte
}
查找前一个区块靠数组下标操作(blocks[i-1]
),或手动遍历匹配 PrevBlockHash == Block.Hash
。
🔄 中期(带持久化)
项目引入了 BoltDB(一个嵌入式的 key-value 数据库) 来持久化区块数据:
go
type Blockchain struct {
tip []byte // 当前最新区块的哈希
db *bolt.DB
}
所有区块用 Hash -> Block
存储在数据库中:
go
db.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(blocksBucket))
err := b.Put(newBlock.Hash, newBlock.Serialize())
// ...
})
查找前一个区块的时候,就用:
go
prevHash := currentBlock.PrevBlockHash
prevBlockData := db.Get(prevHash)
✔️ 也就是说:是通过"哈希查找 + 数据库"来定位前一个区块的!