七. 查询余额

其实这个章节的一些知识点在转账交易那一章节均有所涉及,所以,查询余额这个功能相对而言比较简单,只要熟悉了UTXO模型,加上对交易流程的了解之后,对查询余额基本上已经有了思路。

1.命令行代码


func (cli *CLI) GetBalance(address string) {bc := GetBlockChainObject()if bc == nil {fmt.Println("没有BlockChain,无法查询。。")os.Exit(1)}defer bc.DB.Close()utxoSet :=&UTXOSet{bc}total:=utxoSet.GetBalance(address)fmt.Printf("%s,余额是:%d\n", address, total)
}
  • 获取区块链对象
  • 获取utxoSet对象
  • 通过utxoSet的GetBalance方法获得对应的余额

2. 查询余额代码

GetBalance

func (utxoSet *UTXOSet) GetBalance(address string) int64 {utxos := utxoSet.FindUnspentUTXOsByAddress(address)var total int64for _, utxo := range utxos {total += utxo.Output.Value}return total
}
  • 通过FindUnspentUTXOsByAddress获得utxo的数组对象utxos
  • 通过对utxos进行遍历得到utxo对象
  • 将utxo对象的Output的Value属性值进行累加得到余额

3.通过地址获取未花费utxo数组

FindUnspentUTXOsByAddress

func (utxoSet *UTXOSet) FindUnspentUTXOsByAddress(address string) []*UTXO {var utxos []*UTXOerr := utxoSet.BlockChian.DB.View(func(tx *bolt.Tx) error {b := tx.Bucket([]byte(utxosettable))if b != nil {/*获取表中的所有的数据key,valuekey:TxIDvalue:TxOuputs*/c := b.Cursor()for k, v := c.First(); k != nil; k, v = c.Next() {txOutputs := DeserializeTxOutputs(v)for _, utxo := range txOutputs.UTXOs { //txid, index,outputif utxo.Output.UnlockWithAddress(address) {utxos = append(utxos, utxo)}}}}return nil})if err != nil {log.Panic(err)}return utxos
}

4.代码测试

4.1 获取所有地址

$ ./mybtc  getaddresslists

返回结果

钱包地址列表为:1DHPNHKfk9uUdog2f2xBvx9dq4NxpF5Q4Q1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq

4.2 查询余额

$ ./mybtc getbalance -address 1DHPNHKfk9uUdog2f2xBvx9dq4NxpF5Q4Q

返回结果

1DHPNHKfk9uUdog2f2xBvx9dq4NxpF5Q4Q,余额是:12

分析

1.创建创世区块,该地址获得10元
2.第一笔转账,给地址1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq转账2元, 剩余8元,得到10元奖励,余额为18元
3.第二笔转账,给地址1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq转账3元, 剩余15元,得到10元奖励,余额为25元
4.第三笔转账,给地址1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq转账23元,剩余2元,得到10元奖励,余额为12元

10元奖励是代码中设定每个区块的CoinBase交易给转账用户的,实际比特币场景是给矿工的,这里是测试场景,请大家勿要混淆。

./mybtc getbalance -address 1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq

返回结果

1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq,余额是:28

分析

2 + 3 + 23 = 28元

到此,我们查询余额的功能基本完毕。

转载于:https://blog.51cto.com/clovemfong/2163109

从0到1简易区块链开发手册V0.5-实现余额查询相关推荐

  1. 从0到1简易区块链开发手册V0.3-数据持久化与创世区块

    Author: brucefeng Email: brucefeng@brucefeng.com 编程语言:Golang 1.BoltDB简介 Bolt是一个纯粹Key/Value模型的程序.该项目的 ...

  2. 从0到1简易区块链开发手册V0.6-实现打印区块

    八. 打印区块 以上的转账交易中,我们共计创建了四个区块,其中一个区块为创世区块,另外三个区块都是对我们的交易进行打包后产生的新区块,本文将介绍如何将区块信息打印出来. 1.命令行代码 func (c ...

  3. 区块链开发公司 区块链应用落地为何能成为焦点?

    自区块链开发技术步入3.0时代以来,区块链开发公司的落地应用进程逐渐加快!在国家鼓励下,提供实体区块链项目的减税.场地.资源等支持政策!区块链开发公司的技术可以应用于商业民生的各种领域!深具潜力的市场 ...

  4. 区块链开发之搭建以太坊私有链

    (一)区块链开发之搭建以太坊私有链 本文链接:https://blog.csdn.net/rwdxll/article/details/82929417 1.安装ethereum/Go client( ...

  5. 5分钟学会区块链 - 开发一条区块链 Develop BlockChain with Tendermint

    本文攻略:解惑区块链开发,学习 Tendermint,给自己造一条区块链 建议玩家等级:技术小白,学生党,初级码农 阅读此文先解锁技能: 一点点命令行基础 一点点 GO 基础:三天包学会 一点点区块链 ...

  6. 《Node.js区块链开发》——1.6 参考

    本节书摘来自华章计算机<Node.js区块链开发>一书中的第1章,第1.6节,作者 朱志文,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.6 参考 < ...

  7. 区块链应用开发人员_每个区块链开发人员都应该了解这些Web3和Metamask用例

    区块链应用开发人员 by Igor Yalovoy 由Igor Yalovoy 每个区块链开发人员都应该了解这些Web3和Metamask用例 (Every blockchain developer ...

  8. 《Node.js区块链开发》

    <Node.js区块链开发> [注]基于ES6的最新版,正在筹划中. 特别说明 亿书,让有知识的人富起来.我们的产品,将全部基于P2P网络进行开发设计,面向未来进行技术研发. 纸质书籍:h ...

  9. 收藏贴 :2019年必备43种区块链开发工具

    2019独角兽企业重金招聘Python工程师标准>>> 本文列出2019年最新整理的用于区块链开发的43种流行的开发库.开发工具与开发框架. 原文:43个区块链开发工具 - 汇智网 ...

最新文章

  1. 在虚拟机中安装Ubuntu Server 15.04
  2. 【算法导论学习笔记】第3章:函数的增长
  3. 41、应用如何签名以及签名的意义(转载)
  4. Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”
  5. wex5 教程 前端UI编译原理与记事本编辑
  6. XenApp_XenDesktop_7.6实战篇之十五:StoreFront的配置
  7. python3 eval代码示例
  8. C语言重新定位文件,C语言代码重定位 (原创)
  9. shrio的rememberMe不起作用
  10. 机器学习算法(5)——决策树(ID3、C4.5、CART)
  11. 第三代测序技术的兴起
  12. 突然发现自己的虚拟VMNET8 没有了,不要慌
  13. java获取京东token_京东宙斯平台使用方法(accesstoken,appkey,appsecret参数和SDK的获取)...
  14. iOS3DTouch功能实现
  15. ArcGIS,CC(Smart3D),ENVI....工作中常用软件的汉化包都在这,随你下载
  16. 基于opencv的手势识别(HSV)控制鼠标
  17. 用心去爱那些爱过我们的人
  18. 桌面图标有阴影,教给你怎么去掉
  19. 【图论】关于邻接表建图
  20. 预测大盘最准确的指标_一辈子死记一个指标,完全弄透彻,即可预测一个月的股市升跌!...

热门文章

  1. 大龄程序员怎样渡过中年危机?
  2. Serverlet具体解释
  3. POJ 3050 - Hopscotch
  4. 关于vs2013中不能输入中文的问题解决方法
  5. 论文学习笔记(4):Intrinsic and Isotropic Resampling for 3D Point Clouds(内在控制的各向同性3D点云重采样)
  6. VBS基础篇 - 对象(3) - FileSystemObject对象
  7. cad特性匹配快捷键命令_CAD中特性匹配(格式刷)的运用
  8. 博士3年前被判定学术不端、失去工作!如今发Nature子刊证明自己是对的!
  9. MATLAB转置矩阵乘,【MATLAB】线性代数矩阵基本运算(转置,乘法,求逆)
  10. css实现的图片悬停旋转弹出文本框html页面前端源码