中国领先的IT技术网站
|
|

1.4.2 比特币核心程序:中本聪客户端(3)

《白话区块链》第1章初识区块链,本章我们将从区块链的原理及分类、技术组成、技术特点等出发来初步介绍区块链的概念,并通过分析比特币的结构让大家对区块链有一个感性的认识。比特币作为区块链技术的第一个应用,它的原理设计影响深远。本节为大家介绍比特币核心程序:中本聪客户端。

作者:蒋勇/文延/嘉文来源:机械工业出版社|2017-11-24 11:42

开发者大赛路演 | 12月16日,技术创新,北京不见不散


1.4.2 比特币核心程序:中本聪客户端(3)

至此,我们可以发现,bitcoin-qt、bitcoind以及bitcoin-cli都能读取相同格式的配置文件,也拥有一样的命令参数。具体支持的各种参数很多,大家可以自行去查阅。另外,比特币中的很多功能调用都是通过RPC命令提供的,比如区块信息查询、交易事务查询、多重签名使用等,因此要了解完整功能调用的朋友可以去具体了解一下这些RPC命令的使用,笔者这里也推荐一些不错的网站方便大家学习使用:

https://blockchain.info:方便检索各项比特币网络的数据;

https://chainquery.com/bitcoin-api:基于网页的比特币RPC命令使用。

(4)bticoin-tx.exe

这是一个独立的工具程序,可以用来创建、解析以及编辑比特币中的交易事务。我们在通常使用比特币系统的时候,使用上述介绍的钱包功能也就足够了,但是如果需要单独查看或者创建一份交易事务数据,就可以使用这个工具了。既然是用于操作交易事务的,那么我们就来试一试。比特币的交易事务在本质上就是一段二进制数据,我们任意找一段过来,看看bitcoin-tx能解析成什么样子,为了方便,将二进制的交易事务数据转成十六进制的格式来显示,如下:

  1. 0100000001e0772cd81114d0993922a280e2b29209d6c6c5d2f22d807018d1ef0d55cfe4041c0  
  2. 000006a473044022008650b496ea573a2d42efbcbfb49288ab3c7f9968a1fa6072155a028a4de  
  3. b39e02201b2dd03307fcd1fbb2f9928a8904d50a84ae9d600986a3a8a125fe248b4faf1001210  
  4. 354eb6c85025f3abecde8236e86aabf6b819a72154e69d39f7ae591a92436c166ffffffff01d9  
  5. 38890c000000001976a914fe5d8413d80c3d3f9b975f45990cf432455b13ef88ac00000000 

这就是一段交易事务的数据,接下来我们就来解析一下,将这段数据转换成容易阅读的格式,为了方便阅读,我们就转换为JSON格式,命令如下:

  1. bitcoin-tx -json  
  2. 0100000001e0772cd81114d0993922a280e2b29209d6c6c5d2f22d807018d1ef0d55cfe4041c0  
  3. 000006a473044022008650b496ea573a2d42efbcbfb49288ab3c7f9968a1fa6072155a028a4de  
  4. b39e02201b2dd03307fcd1fbb2f9928a8904d50a84ae9d600986a3a8a125fe248b4faf1001210  
  5. 354eb6c85025f3abecde8236e86aabf6b819a72154e69d39f7ae591a92436c166ffffffff01d9  
  6. 38890c000000001976a914fe5d8413d80c3d3f9b975f45990cf432455b13ef88ac00000000 

执行后,可以得到如下的输出:

  1. {  
  2.     "txid": "2aff308e3e1a9b251ecb701762f6f2c1d28952fe6d0d94efc78880e8a62d2cbb",  
  3.     "hash": "2aff308e3e1a9b251ecb701762f6f2c1d28952fe6d0d94efc78880e8a62d2cbb",  
  4.     "version": 1,  
  5.     "locktime": 0,  
  6.     "vin": [  
  7.         {  
  8.             "txid":  
  9. "04e4cf550defd11870802df2d2c5c6d60992b2e280a2223999d01411d82c77e0",  
  10.             "vout": 28,  
  11.             "scriptSig": {  
  12.                 "asm": "3044022008650b496ea573a2d42efbcbfb49288ab3c7f9968a1fa6072155a028a4deb39e02201b2dd03307fcd1fbb2f9928a8904d50a84ae9d600986a3a8a125fe248b4faf10[ALL] 0354eb6c85025f3abecde8236e86aabf6b819a72154e69d39f7ae591a92436c166",  
  13.                 "hex": "473044022008650b496ea573a2d42efbcbfb49288ab3c7f9968a1fa6072155a028a4deb39e02201b2dd03307fcd1fbb2f9928a8904d50a84ae9d600986a3a8a125fe248b4faf1001210354eb6c85025f3abecde8236e86aabf6b819a72154e69d39f7ae591a92436c166"  
  14.             },  
  15.             "sequence": 4294967295  
  16.         }  
  17.     ],  
  18.     "vout": [  
  19.         {  
  20.             "value": 2.10319577,  
  21.             "n": 0,  
  22.             "scriptPubKey": {  
  23.                 "asm": "OP_DUP OP_HASH160 fe5d8413d80c3d3f9b975f45990cf432455b13ef OP_EQUALVERIFY OP_CHECKSIG",  
  24.                 "hex": "76a914fe5d8413d80c3d3f9b975f45990cf432455b13ef88ac",  
  25.                 "reqSigs": 1,  
  26.                 "type": "pubkeyhash",  
  27.                 "addresses": [  
  28.                     "1QBxfKsz2F7xwd66TwMj5wEoLxCQghy54c"  
  29.                 ]  
  30.             }  
  31.         }  
  32.     ],  
  33.     "hex": "0100000001e0772cd81114d0993922a280e2b29209d6c6c5d2f22d807018d1ef0d55cfe4041c0000006a473044022008650b496ea573a2d42efbcbfb49288ab3c7f9968a1fa6072155a028a4deb39e02201b2dd03307fcd1fbb2f9928a8904d50a84ae9d600986a3a8a125fe248b4faf1001210354eb6c85025f3abecde8236e86aabf6b819a72154e69d39f7ae591a92436c166ffffffff01d938890c000000001976a914fe5d8413d80c3d3f9b975f45990cf432455b13ef88ac00000000"  

通过输出信息,我们可以很方便地看到其中包含的各个数据组成项,比如txid是指交易事务的哈希值,这个值与哈希数据项一样;vin是指交易事务中的输入部分;vout是指交易事务中的输出部分,具体每一项的含义这里暂且不多解释,第8章通过模拟比特币构建一个最简易的区块链系统,其中有具体的介绍。通过使用这个工具,除了能解析交易事务数据外,也能创建交易事务,读者朋友们可以去具体尝试一下。

(5)test_bitcoin.exe

这是用于比特币程序bitcoind的单元测试工具,与程序开发相关,除了这个,实际上还有一个用于bitcoin-qt的单元测试工具test_bitcoin-qt,这些工具普通用户一般用不到,这里不再展开详述。

2.客户端逻辑结构

通过上述介绍,我们了解了中本聪客户端程序的基本组成,为了让大家有一个更加清晰的理解,我们来看下中本聪客户端在逻辑结构上包含了哪些功能模块,见下图:

图中所示的4个功能模块,共同组成了称为全节点的比特币程序结构,其中“挖矿”部分标记了虚线,这是因为在中本聪客户端中没有包含挖矿功能,挖矿是另外独立的程序。钱包的功能我们已经比较了解了,主要用于管理用户的密钥以及提供转账操作等功能,属于比特币的前端功能。事实上,钱包功能是可以独立出来的,专门提供一个独立的钱包程序,这部分的阐述在下面章节中有详细描述。接下来,我们主要对“完整区块链”和“网络路由”部分进行说明。刚才说了,钱包只是一个前端功能,那么比特币的后端功能是什么呢?请看下文。

(1)完整区块链

中本聪客户端保留了完整的区块链账本数据,因此能够独立自主地校验所有交易,而不需借由任何外部的调用。当然,另外一些节点只保留了区块链的一部分(比如区块头),可以通过一种名为“简易支付验证”(SPV)的方式来完成支付验证,这样的节点被称为“SPV节点”。除了中本聪客户端外,一些挖矿节点也保有了区块链的完整数据副本,还有一些参与矿池挖矿的节点是轻量级节点,它们必须依赖矿池服务器维护的全节点进行工作。保有完整区块链数据的节点是非常重要的,比特币网络之所以能够成为一个可信任的去中心化网络,就是依赖于这些全节点,目前很多场合为了方便使用,提供了不少轻量级节点(如轻钱包等),但是这些轻量级节点的正常使用都是要通过全节点才能完成的,是一种依赖关系,如果网络中保有完整区块链数据的节点越来越少,那么比特币网络就会受到影响,无论性能、安全性等都会降低。

(2)网络路由

比特币网络是属于P2P网络架构,P2P也就是对等的意思,与此相对的是“客户端–服务器”架构,有一个提供服务功能的中心服务器,其他客户端通过调用服务器的功能来完成操作,比如我们通常使用的微信、支付宝、网银等,如果提供商的服务器关闭了,那也就完全没法使用这些软件了。在对等网中,每个节点共同提供网络服务,不存在任何所谓的中心服务器,因此在对等网络的网络架构中是没有层次的,大家都是平等的,每个节点在对外提供服务的同时也在使用网络中其他节点所提供的服务。我们来看下两者的区别示意图:


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月最赞

读 书 +更多

Eclipse Web开发从入门到精通(实例版)

本书由浅入深、循序渐进地介绍了目前流行的基于Eclipse的优秀框架。全书共分14章,内容涵盖了Eclipse基础、ANT资源构造、数据库应用开发、W...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× 51CTO学院双十二活动