区块链是怎么存储块怎么找到前一个块
前言:学习区块链的过程中在想怎么管理区块链呢
📌 推荐项目回顾:
👉 Jeiwan 的 blockchain_go
项目
GitHub 地址:https://github.com/Jeiwan/blockchain_go
❓它是怎么存储区块 & 找前一个区块的?
项目分为多个阶段(chapter),随着学习进度逐步完善。不同阶段用的方式也不一样:
✅ 前期(基础阶段)
使用的是数组([]*Block
)模拟链式结构:
type Blockchain struct {
blocks []*Block
}
每个区块中有字段:
type Block struct {
PrevBlockHash []byte
Hash []byte
Data []byte
}
查找前一个区块靠数组下标操作(blocks[i-1]
),或手动遍历匹配 PrevBlockHash == Block.Hash
。
🔄 中期(带持久化)
项目引入了 BoltDB(一个嵌入式的 key-value 数据库) 来持久化区块数据:
type Blockchain struct {
tip []byte // 当前最新区块的哈希
db *bolt.DB
}
所有区块用 Hash -> Block
存储在数据库中:
db.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(blocksBucket))
err := b.Put(newBlock.Hash, newBlock.Serialize())
// ...
})
查找前一个区块的时候,就用:
prevHash := currentBlock.PrevBlockHash
prevBlockData := db.Get(prevHash)
✔️ 也就是说:是通过“哈希查找 + 数据库”来定位前一个区块的!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/120671.html
如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!