1 Star 0 Fork 8

Lin/01_bitcoin

forked from duke.du/go_bitcoin_example 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
blockchainiterator.go 946 Bytes
一键复制 编辑 原始数据 按行查看 历史
duke.du 提交于 2018-10-18 16:33 . move bolt to lib/bolt
package main
import (
"./lib/bolt"
"log"
)
type BlockChainIterator struct {
db *bolt.DB
//游标,用于不断索引
currentHashPointer []byte
}
//func NewIterator(bc *BlockChain) {
//
//}
func (bc *BlockChain) NewIterator() *BlockChainIterator {
return &BlockChainIterator{
bc.db,
//最初指向区块链的最后一个区块,随着Next的调用,不断变化
bc.tail,
}
}
//迭代器是属于区块链的
//Next方式是属于迭代器的
//1. 返回当前的区块
//2. 指针前移
func (it *BlockChainIterator) Next() *Block {
var block Block
it.db.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte(blockBucket))
if bucket == nil {
log.Panic("迭代器遍历时bucket不应该为空,请检查!")
}
blockTmp := bucket.Get(it.currentHashPointer)
//解码动作
block = Deserialize(blockTmp)
//游标哈希左移
it.currentHashPointer = block.PrevHash
return nil
})
return &block
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/sherlzp/01_bitcoin.git
[email protected]:sherlzp/01_bitcoin.git
sherlzp
01_bitcoin
01_bitcoin
master

搜索帮助