八. 打印区块
以上的转账交易中,我们共计创建了四个区块,其中一个区块为创世区块,另外三个区块都是对我们的交易进行打包后产生的新区块,本文将介绍如何将区块信息打印出来。
1.命令行代码
获取区块链对象
调用PrintChains方法
2.创建迭代器
在上文中,我们将所有生成的区块均存储至BoltDB中,我们需要通过操作数据对区块进行获取,此处,我们创建一个迭代器用于对数据库进行遍历查询。
2.1 迭代器结构体
迭代器属性有两个,DB对象以及当前Hash
通过Iterator方法获取一个BlockChainIterator的对象
2.2 结构体方法
我们定义一个结构体方法Next用于对区块链进行遍历操作
根据bcIterator,操作DB对象,读取数据库
打开存储区块的Bucket表名
根据current获取对应的区块的数据
对获取到的数据进行反序列化得到block对象
更新bcIterator的CurrentHash属性为上一个区块,方便进行对上一个区块(因为对区块链的遍历是从后往前知直至创世区块的)的获取操作.
3.创建打印区块函数
获取迭代器对象
通过for循环对迭代器对象的Next方法获取到的区块进行遍历
高度
上一个区块的哈希
区块自己的哈希
交易数组Txs
随机数
时间戳
对交易数组Txs进行遍历
获取交易输入数组
获取交易输出数组
对交易输入数组进行遍历
对交易输出数组进行遍历
判断区块的上一个区块哈希是否为0 (bigInt的Cmp方法进行对比),结束循环
4.代码测试
4.1 命令行测试
返回结果
4.2 区块关联图
上图整合了区块的相关属性以及关联信息,希望能帮助大家,功能实现模块暂时告一段落,后期我不定期更新一些比特币原理中其他比较重要的知识点跟大家一起学习,谢谢大家。
领取专属 10元无门槛券
私享最新 技术干货