硬核“拆解”比特币

上节课我们讲到,区块链的发展有三个阶段,分别是:密码货币、可编程区块链和价值互联网。第一阶段密码货币主要以比特币为首,今天我们就通过比特币来详解密码货币的组成,给比特币动个“手术”。看看比特币系统中究竟由什么组成的呢?
2009年1月,在比特币系统论文发表两个月之后,比特币系统正式运行并开放了源码,标志着比特币网络的正式诞生。通过其构建的一个公开透明、去中心化、防篡改的账本系统,比特币开展了一场规模空前的密码货币实验。在区块链1.0阶段,区块链技术的应用主要聚集在密码货币领域,典型代表即比特币系统以及从比特币系统代码衍生出来的多种密码货币。

密码货币的“疯狂”发展吸引了人们对区块链技术的关注,对于传播区块链技术起到了很大的促进作用,人们开始尝试在比特币系统上开发密码货币之外的应用,比如存证、股权众筹等。但是比特币系统作为一个为密码货币设计的专用系统,存在如下的问题:

比特币系统内置的脚本系统主要针对密码货币交易而专门设计,不是图灵完备的脚本,表达能力有限,因此在开发诸如存证、股权众筹等应用时,有些逻辑无法表达,而且比特币系统内部需要做大量开发,对开发人员要求高、开发难度大,因此无法进行大规模的非密码货币类应用的开发。
比特币系统在全球范围内只能支持每秒7笔交易,交易记账后追加6个区块才能比较安全地确认交易,追加一个块大约需要10分钟,意味着大约需要1小时才能确认交易,不能满足实时性要求较高的应用的需求。
针对区块链1.0存在的专用系统问题,为了支持如众筹、溯源等应用,区块链2.0阶段支持用户自定义的业务逻辑,即引入了智能合约,从而使区块链的应用范围得到了极大拓展,开始在各个行业迅速落地,极大地降低了社会生产消费过程中的信任和协作成本,提高了行业内和行业间协同效率,典型的代表是2013年启动的以太坊系统。
举个例子:保险行业
有了智能合约系统的支持,区块链的应用范围开始从单一的货币领域扩大到涉及合约共识的其他金融领域,区块链技术首先在股票、清算、私募股权等众多金融领域崭露头角。比如,企业股权众筹一直是众多中小企业的梦想,区块链技术使之成为现实。区块链分布式账本可以取代传统的通过交易所的股票发行,这样企业就可以通过分布式自治组织协作运营,借助用户的集体行为和集体智慧获得更好的发展,在投入运营的第一天就能实现募资,而不用经历复杂的IPO流程,产生高额费用。
各种区块链系统采用不同的共识方法以提升区块链的性能,比如以太坊采用改进工作量证明机制将出块时间缩短到了15秒,从而能够满足绝大多数的应用,以太坊未来拟采用的PoS共识算法可进一步提升区块链的性能。
比特币是基于P2P架构的数字货币系统:它的架构总体上分为两部分,一部分是前端,包括钱包(Wallet)或图形化界面;另一部分是运行在每个节点的后台程序,包括挖矿、区块链管理、脚本引擎以及网络管理等功能。比特币架构如下图所示:

今天我们来详细了解比特币的前端组成。
比特币前端
1.  比特币前端-钱包
钱包保存用户的私钥数据库,并管理用户的余额,提供比特币交易(支付、转账)功能,一般可以分为冷钱包和热钱包。
冷钱包是指互联网不能访问到私钥的钱包:冷钱包往往依靠“冷”设备确保比特币私钥的安全,比如不联网的电脑、手机、写着私钥地址的小本本等。冷钱包避免了被黑客盗取私钥的风险,但是可能面临物理安全风险,比如电脑丢失损坏等。
热钱包是指互联网能够访问私钥的钱包:热钱包往往是在线钱包的形式。使用热钱包时,最好在不同平台设置不同密码,且开启二次认证,以确保自己的资产安全。
从部署场景来说分,钱包可以分为4种:移动钱包、桌面钱包、互联网钱包,以及纸钱包。
移动钱包指的是运行在智能手机、移动终端上的轻量级钱包。
桌面钱包指的是运行在普通电脑上的钱包。
互联网钱包指的是依托第三方平台对用户密钥进行保护的钱包。
纸钱包指的是将私钥进行冷备份,可用于防范电脑或USB介质损坏所造成的私钥丢失,也能防范黑客通过网络攻击盗窃私钥,但需防范纸钱包被人物理偷窃或复制。
2.  比特币前端- HTTP/JSON RPC API
JSON-RPC是一种无状态,轻量级的远程过程调用协议(Remote Procedure Call, RPC)该规范主要定义与处理过程相关的数据结构和规则,它是与传输方式无关的,可在Socket,HTTP或在各种消息传送环境内使用。它只是将JSON(RFC 4627)作为数据格式。
比特币提供HTTP/JSON RPC API接口,供外部通过接口控制比特币节点。缺省情况下该服务端只允许来自同一机器的客户端访问。使用不同语言编写的程序可以方便地通过HTTP/JSON RPC API接口访问比特币节点。例如,Bitcoin-JSON-RPC-Client是一个轻量级的Java客户端程序。
3.  比特币前端-命令行工具bitcoin-cli
bitcoin-cli提供一个命令行工具来控制比特币节点。该命令行工具通过JSON RPC API接口访问比特币后台bitcoind。用户可以通过发命令来完成比特币的各项功能,例如查询余额、支付、转账等。
4.  比特币前端-比特币浏览器bx
比特币提供一个跨平台的C++libbitcoin库,该库支持比特币全节点服务端和浏览器(BitCoinExplorer)作为客户端命令行工具。比特币浏览器命令提供与bitcoin-cli一样的基本功能。但同时bx提供bitcoin-cli没有的一些密钥管理功能和处理工具。
5.  比特币前端-图形开发工具(Qt)
比特币使用最广的客户端,是使用C++开源用户界面开发工具Qt所开发的桌面客户端。
Qt是一个跨平台的C++图形用户界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用开发GUI程序,也可用于开发非GUI程序。Qt是完全面向对象的,很容易扩展,并且允许真正的组件编程。
比特币前端的拆解就讲到这里啦!下节课我们将拆解比特币的后端,看看比特币系统强大的自我运行能力究竟是如何达成的。敬请期待~