深度学习
比特币(BitCoin,BTC)是基于区块链技术的一种数字货币实现,比特币网络是历史上首个经过大规模、长时间检验的数字货币系统。自2009年正式上线以来,比特币价格经历了数次的震荡,目前每枚比特币市场价格超过2500美元,比特币网络中总区块数超过47万个。比特币网络在功能上具有如下特点:·去中心化:意味着没有任何独立个体可以对网络中的交易进行破坏,任何交易请求都需要大多数参与者的共识;·匿名性:比特币网络中账户地址是匿名的,无法从交易信息关联到具体的个体,但这也意味着很难进行审计;·通胀预防:比特币的发行需要通过挖矿计算来进行,发行量每四年减半,总量上限为2100万枚,无法被超发。图6-1来自blockchain.info网站,可以看到比特币自诞生以来的汇率(以美元为单位)变化历史。图6-1
比特币网络是一个分布式的点对点网络,网络中的矿工通过“挖矿”来完成对交易记录的记账过程,维护网络的正常运行。区块链网络提供一个公共可见的记账本,该记账本并非记录每个账户的余额,而是用来记录发生过的交易的历史信息。该设计可以避免重放攻击,即某个合法交易被多次重新发送造成攻击。6.2.1 基本交易过程每次发生交易,用户需要将新交易记录写到比特币区块链网络中,等网络确认后即可认为交易完成。每个交易包括一些输入和一些输出,未经使用的交易的输出(UnspentTransactionOutputs,UTXO)可以被新的交易引用作为合法的输入,被使用过的交易的输出(SpentTransactionOutputs,STO)则无法被引用作为合法输入。一笔合法的交易,即引用某些已存在交易的U
6.3.1 基本原理要了解比特币,最应该知道的一个概念就是“挖矿”。挖矿是参与维护比特币网络的节点,通过协助生成新区块来获取一定量新增比特币的过程。当用户向比特币网络中发布交易后,需要有人将交易进行确认,形成新的区块,串联到区块链中。在一个互相不信任的分布式系统中,该由谁来完成这件事情呢?比特币网络采用了“挖矿”的方式来解决这个问题。目前,每10分钟左右生成一个不超过1MB大小的区块(记录了这10分钟内发生的验证过的交易内容),串联到最长的链尾部,每个区块的成功提交者可以得到系统12.5个比特币的奖励(该奖励作为区块内的第一个交易,一定区块数后才能使用),以及用户附加到交易上的支付服务费用。即便没有任何用户交易,矿工也可以自行产生合法的区块并获得奖励。每个区块的奖励最初是50个比特
比特币网络是完全公开的,任何人都可以匿名接入,因此共识协议的稳定性和防攻击性十分关键。比特币区块链采用了PoW的机制来实现共识,该机制最早于1998年在B-money设计中提出。目前,ProofofX系列中比较出名的一致性协议包括PoW、PoS和DPoS等,都是通过经济惩罚来限制恶意参与。6.4.1 工作量证明工作量证明(PoW)通过计算来猜测一个数值(nonce),使得拼凑上交易数据后内容的Hash值满足规定的上限(来源于hashcash)。由于Hash难题在目前计算模型下需要大量的计算,这就保证在一段时间内系统中只能出现少数合法提案。反过来,能够提出合法提案,也证明提案者确实付出了一定的工作量。同时,这些少量的合法提案会在网络中进行广播,收到的用户进行验证后,会在用户认为的最
比特币的交易网络最为人诟病的一点便是交易性能:全网每秒7笔左右的交易速度,远低于传统的金融交易系统;同时,等待6个块的可信确认将导致约1个小时的最终确认时间。为了提升性能,社区提出了闪电网络等创新的设计。闪电网络的主要思路十分简单——将大量交易放到比特币区块链之外进行,只把关键环节放到链上进行确认。该设计最早于2015年2月在论文《TheBitcoinLightningNetwork:ScalableOff-ChainInstantPayments》中提出。比特币的区块链机制自身已经提供了很好的可信保障,但是相对较慢;另一方面,对于大量的小额交易来说,是否真需要这么高的可信性?闪电网络主要通过引入智能合约的思想来完善链下的交易渠道。核心的概念主要有两个:RSMC(Reco
侧链(sidechain)协议允许资产在比特币区块链(blockchain)和其他区块链之间互转。这一项目也来自比特币社区,最早是在2013年12月提出的,2014年4月立项,由Blockstream公司主导研发。侧链协议于2014年10月在白皮书《EnablingBlockchainInnovationswithPeggedSidechains》中公开。侧链诞生前,众多“山寨币”的出现正在碎片化整个数字货币市场,再加上以太坊等项目的竞争,一些比特币开发者希望借助侧链的形式扩展比特币的底层协议。简单来讲,以比特币区块链作为主链(parentchain),其他区块链作为侧链,二者通过双向挂钩(two-waypeg),实现比特币从主链转移到侧链进行流通。侧
6.7.1 设计中的权衡比特币的设计目标在于支持一套安全、开放、分布式的数字货币系统。围绕这一目标,比特币协议的设计中很多地方都体现了权衡(trade-off)的思想。·区块容量:更大的区块容量可以带来更高的交易吞吐率,但会增加挖矿成本,带来中心化的风险,同时增大存储的代价。兼顾多方面的考虑,当前的区块容量上限设定为1MB。·出块间隔时间:更短的出块间隔可以缩短交易确认的时间,但也可能导致分叉增多,降低网络可用性。·脚本支持程度:更强大的脚本指令集可以带来更多的灵活性,但也会引入更多的安全风险。6.7.2 分叉比特币协议不会一成不变。当需要修复漏洞、扩展功能或调整结构时,比特币需要在全网的配合下进行升级。升级通常涉及更改交易的数据结构或区块的数据结构。由于分布在全球的节点不可能同时完成升级来
比特币相关工具包括客户端、钱包和矿机等。1.客户端比特币客户端用于和比特币网络进行交互,同时可以参与网络的维护。客户端分为三种:完整客户端、轻量级客户端和在线客户端。说明如下:·完整客户端:存储所有的交易历史记录,功能完备;·轻量级客户端:不保存交易副本,交易需要向别人查询;·在线客户端:通过网页模式来浏览第三方服务器提供的服务。比特币客户端可以从http://bitcoin.org/en/download下载。基于比特币客户端,可以很容易地实现用户钱包功能。2.钱包比特币钱包可以存储和保护用户的私钥,并提供查询比特币余额、收发比特币等功能。根据私钥存储方式不同,钱包主要分为以下几种:·离线钱包:离线存储私钥,也称为“冷钱包”,安全性相对最强,但无法直接发送交易,便利性差;·本地钱包:
君子和而不同。在区块链领域,以太坊项目也是十分出名的开源项目。作为公有区块链平台,以太坊将比特币针对数字货币交易的功能进一步进行了拓展,面向更为复杂和灵活的应用场景,支持了智能合约(smartcontract)这一重要特性。从此,区块链技术的应用场景,从单一基于UTXO的数字货币交易,延伸到图灵完备的通用计算领域。用户不再受限于仅能使用比特币脚本所支持的简单逻辑,而是可以自行设计任意复杂的合约逻辑。这就为构建各种多样化的上层应用开启了大门,可谓意义重大。本章将参照比特币项目来介绍以太坊项目的核心概念和改进设计,以及如何安装客户端和使用智能合约等内容。
以太坊(Ethereum)项目的最初目标是打造一个智能合约的平台(PlatformforSmartContract),该平台支持图灵完备的应用,按照智能合约的约定逻辑自动执行,理想情况下将不存在故障停机、审查、欺诈,以及第三方干预等问题。以太坊平台目前支持Golang、C++、Python等多种语言实现的客户端。由于其核心实现是基于比特币网络的核心思想进行了拓展,因此在很多设计特性上都与比特币网络十分类似。基于以太坊项目,以太坊团队目前运营了一个公开的区块链平台——以太坊网络。智能合约开发者使用官方提供的工具和以太坊专用应用开发语言Solidity,可以很容易地开发出运行在以太坊网络上的“去中心化”应用(DecentralizedApplication,DApp)。这些