购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第四节

比特币协议与发展

一、比特币协议概述

比特币的本质是一种协议,在中本聪的论文中提出了一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何金融机构。虽然数字签名部分解决了这个问题,但是如果仍然需要第三方的支持才能防止双重支付(Double Spending),那么这种系统也就失去了存在的价值。

中本聪提出一种解决方案,使现金系统在点对点的环境下运行,并防止双重支付问题。该网络通过随机散列(Hashing)对全部交易加上时间戳(Timestamp),将它们合并入一个不断延伸的基于随机散列的工作量证明(Proof-of-Work)的链条作为交易记录,除非重新完成全部的工作量证明,形成的交易记录将不可更改。最长的链条不仅将作为被观察到的事件序列(Sequence)的证明,而且被看作是来自CPU(或者当前流行的ASIC比特币挖矿专用芯片)计算能力最大的池(Pool)。只要大多数的CPU或者说各种芯片的计算能力都没有打算合作起来对全网进行攻击,那么诚实的节点将会生成最长的、超过攻击者的链条。这个系统本身需要的基础设施非常少。信息尽最大努力在全网传播即可,节点(Node)可以随时离开和重新加入网络,并将最长的工作量证明链条作为在该节点离线期间发生交易的证明。

二、比特币协议特点

通过比特币协议,我们可以发现比特币的价值远不止货币本身,因为它构建的是货币的互联网协议。大部分人只知道作为数字货币的比特币,而真正有着深远意义的是作为潜藏协议的比特币,它还有着封装并分发合约的功能。比特币封装了以下四项基本技术。

电子签名: 无法伪造,允许一方安全地核实同另一方的交易。

点对点网络: 如同BitTorrent和TCP/IP一样,几乎无法被摧毁,无须强大中央机构的维护。

Proof-of-Work(工作量证明): 可以防止用户同一份钱花两次,同时还无须中央机构来验证交易是否有效。比特币为矿工设立了奖励机制,他们利用算力强大的计算机,来完成验证交易是否有效的工作。矿工可以从这种活动中获得新的比特币作为奖励,任何有足够算力的人都可以参与挖矿,并获得奖励。

分布式总账: 在每一个比特币钱包中,你都能查到整个比特币系统的每一笔交易记录。区块链意味着任何人都可以去检验某项交易是否发生过。

通过这四项基础技术,比特币具有了很多特点,它是稀缺的(中央银行没法滥发货币)、持久的(不会像金子一样降解)、便携的(可以以电子的或者只是你大脑记忆中的一串数字的形式存储、传播)、可分的(一个比特币可以分成一亿份或更多)、可证实的(每个人的区块链里都能查到)、可替代的(每个比特币本身都是可匿名且一样的)、难以伪造的(几乎不可能被破解或篡改),可被广泛使用,许多互联网技术人才正在花时间不断改善比特币。

对于比特币的未来,人们还有各种各样的担心,比如加密算法的安全性、交易速度、区块链的大小、交易的不可逆性、被盗或者被黑的可能性。所有这些都是可以被第三方服务和协议升级解决掉的。不妨把现在的比特币协议看作数字货币1.0,就像曾经的HTTP1.0一样,它会从最初只有简单文字和图片的浏览器演化成现在的互联网,以后也会有更丰富的数字货币世界。

相较于现在的英镑或者美元,比特币有很多明显的优势,上文已经提到不少。但更重要的是,比特币这套协议可以支持当下不可能实现或者实现昂贵且需要强力第三方的金融交易服务。

比特币自带有脚本语言,不单支持“把钱从X汇给Y”这种简单交易,还支持类似于“要求N方中的M方同意,才算完成交易”这样的条件交易。举个例子,设定一项遗嘱,只有当大部分继承人同意他们的父母已经过世时,该遗嘱才会生效,完全不需要任何律师;或者只有当三方受信签名中有两方同意才能批准某项支出;或者一项Kickstarter上的众筹计划,只有多数支持者同意达到某项指标时,钱才会支付给发起人。所有这些案例中,参与仲裁的人自己都是不能单方面拿走钱的,他们只能代表自己做出同意和反对的决定,但最终结果完全取决于整体结果是否达到预设条件。

当然,脚本语言也能支持基于其他参数的交易,比如基于时间的交易,可以衍生出自动抵押贷款、信托和津贴支出,或者是由全网络节点共同审计的基于随机数字的的彩票抽奖。你还可以设计出智能财产,比如一种汽车电子钥匙,只要买方向卖方支付一笔钱,卖方的汽车钥匙就失灵,买方的钥匙开始工作,可以用来开车。在不久的未来,当你的无人驾驶汽车在其他地方被堵住了,给邻居一点比特币,就可以借他的车一用。

只要每个人都有整个比特币的区块链的备份,也就都能够核实你的交易。你可以将任意一份文件加密,给个时间戳,放到区块链中,任何人都可以随时核准这份文件。如果你用自己的私钥给文件签名,其他方也用他们的私钥签名,这份文件就成了不可否认的共同署名的合同,可以彻底无须拜托公证员。基于比特币思想的还有域名币(Namecoin)计划,解决了域名分配问题,或者博彩交易所(SatoshiDice),杜绝了出老千的可能,P2P股票(BitShares)则能够在没有传统意义上的证券交易所的前提下实现股票的买卖和分红。

最重要的是,比特币提供了开放的API接口,可以用于创造安全的、可编写脚本的电子现金交易。如同Web将出版平民化一样,比特币可以让构建新的金融服务更平民化。你可以用任意第三方或者代码本身来订立、修改或者执行电子合同,完全免费、快捷,不用担心伪造或者撤回。传统银行或者信用卡公司只会把自己的支付基础设施开放给几家公司,而比特币则向所有人开放。

比特币从最初的0.1版本后,由比特币开发团队不断进行维护和升级,根据市场的需求逐渐增加了一些新的功能,使得比特币协议更加完善。我们就最近的比特币协议升级情况,来说明比特币的最新发展情况。比特币核心开发团队曾在2013年的第三季度中发布了两次协议升级,其中一次是计划升级,还有一次则是为了响应一个关键性错误,这个错误会阻止多个节点索引最新的比特币交易。

三、Bitcoin0.8.4

Bitcoin-Qt0.8.4版本于2013年9月4日发布,包括了一些安全方面的改进。第一次更新解决了Bloom过滤器问题,紧凑了数据结构,并允许使用截断的数据块以节省磁盘空间。这些原本是Bitcoin-Qt0.8.0版本中首次紧凑了区块链的数据结构,允许使用截断的数据区块以节省磁盘空间发布的。但它们的实现,却在不经意间创造了一个拒绝服务漏洞,以及针对这一漏洞发生的两起攻击事件:使得有能力压倒、压制比特币网络其他的节点的读/写能力成为可能,使它们落后于最新的块,并有能力压制压倒节点的消息广播导致比特币软件崩溃。虽然所观察到的攻击是一些孤立的事件,但却需要立即引起协议维护团队的注意。

0.8.4版本解决的第二个问题是一个漏洞,该漏洞是一个允许攻击者通过内存过载来让节点崩溃的漏洞。该问题也与0.8.0版本提出的与存储交易的截断方式有关。当反序列化时,描述参数可能会和序列化(截断)版本出现冲突。如果攻击者针对特定的节点,他们可以发送给该节点无效序列化的交易数据,而将当一个不同的、有效的版本发送到网络的其余部分时,无效的将被变得有效。该节点与网络的其余部分保持一致时,交易将被拒绝。当然极端这种情况很难被黑客实际应用,因为它需要针对特定的节点攻击,并且该节点必须是愿意接受零确认交易的。另外,黑客攻击者如果试图通过网络发送恶意交易,也将导致试图截断交易的客户端从网络上断开。但0.8.4更新从理论上也断绝了这类攻击的可能。

0.8.4版本的第三个更新是Bitcoin-Qt的RPC(远程过程调用)中密码尝试所用的固定时间算法。更新之前,当攻击者通过精确衡量连接到受害者的计算机(通常是指在同一本地网络)时,可以通过使用一个不正确的密码尝试测量的响应延迟来知道他们有多接近。这使攻击者在尝试猜解一个私钥时,能够减少猜测时间和尝试的次数。

四、Bitcoin0.8.5

Bitcoin-Qt的这一版本是通过紧急发布以解决严重bug的。运行Bitcoin0.8.0或更高版本后,从2013年9月9日开始,有软件用户遇到数据库损坏错误,被要求花费数小时来重新建立区块链索引,但重新建立后也并不能解决问题。

产生这个问题是因为单一的交易块256818,使用负的版本号进入本来应该只有0或者1的字段中,从而导致运行数据库一致性检查时出现错误。该问题并未对比特币网络有任何重大影响,有问题的交易发生后,大多数节点和交易所在不重新启动的情况下可以保持软件继续运行。允许非标准情况下的负版本号分配解决,以防止同类问题复发。

五、Bitcoin Core 0.9

比特币基金会从0.9版本开始将比特币核心协议更新正式分离出来,删除了一些旧版本中的附加功能,并将核心协议命名为比特币核心(Bitcoin Core)。长期以来,人们没有很好地把比特币钱包(Bitcoin-Qt 中本聪客户端)和比特币网络区分开,比特币核心开发团队命名Bitcoin Core 0.9,目的是强调Core的存在,即Bitcoin Core 0.9是为比特币网络而设计的。而在其后的非核心(Non-Core)版本开发中,比特币核心团队则会负责为比特币玩家设计客户端钱包。

1.支付便捷性

比特币基金会首席科学家Gavin曾经在BIP70中提出了比特币的全新付款功能,即用户可以使用网址或者E-mail进行比特币付款,0.9版本开始实行了这些提议。这样的改动大幅增加了比特币使用的便利性,并为以后更广阔的商业化拓展打下了基础。为了方便高级用户使用,Bitcoin Core 0.9中引入了收付款控制功能,我们可以自己选择找零的地址了。在旧版本中,找零的方式是系统自动完成的,现在你可以人工设置找零。用户在付款中还可以控制哪些地址被使用。这个功能既方便了收款方在Blockchain上面的查询,又保护了付款人的隐私。

2.交易延展性

比特币核心从这个版本开始关注交易延展性问题,比特币核心开发者MikeHearn曾表示,比特币核心 0.9已经可以大幅地识别并删除重复发送交易请求并试图予以确认的问题节点了,做到阻止如双重支付或者路径改变的比特币交易的传递和挖掘。

从0.9版本开始,协议取消了通过全网传递比特币所需的固定费用,尽管这仍然不能保证交易中的矿工收到他们的比特币,但是也从此打开了交易费用浮动制度的入口,体现了矿工作为独立的角色群体,在比特币网络发展中凸显出的越来越重要的地位。

3.OP_RETURN

从比特币核心0.9开始,比特币的区块链(Blockchain)网络引入了OP_RETURN功能,即用户可以通过在交易中写入类似交易附言的信息来进行区块链传递及储存数据。虽然在0.9版本更新文件中,基金会指出OP_RETURN功能并不代表官方对将比特币区块链作为分布式数据储存的认可,但基于区块链分布式的特点,各种各样的尝试就此拉开了序幕。本书第二卷将会提到各种基于比特币公有区块链架构而开发出的各种出离于比特币本身的应用,基于的都是OP_RETURN这个0.9时代开始的新功能。

六、Bitcoin Core 0.11.2

0.11版本的比特币核心软件增添了一项重要的功能,即区块文件“瘦身”选项。用户可以将过去的那些区块所包含的老数据删除掉,不需要去运行整个节点。这样一来,用户就不再需要在本地存储整个区块链,而是将区块数目限制在最新的550个区块。这一功能对于那些硬盘空间不足的用户来说非常有利。目前整个区块链的存储只需要40GB,而最新的550个区块最多只需要550MB。

最新版的比特币核心软件还包括一种费用预测机制。这意味着用户可以更准确快速地预测出需要支付的交易费用。新版本是如何做到这一点呢?它会浏览整个内存池,内存池里是所有未验证的交易,区块链的最新区块会估算出下一个区块需要多少交易费才能接纳一笔交易。

比特币核心软件0.11版本也包括改善后的隐私功能,尤其是该软件能够更有效地与匿名的TOR网络连接。如果TOR能够启用,那么新版的比特币软件就能够使用不同的 TOR 线路连接到不同的节点,而不是同一个TOR线路。这样一来,将比特币核心软件的连接到分散化之后,就能够降低用户连接到一个恶意的节点或者被禁止连接到P2P网络的风险。

比特币核心0.11.2还介绍了一种新的脚本操作:OP_CHECKLOCKTIMEVERIFY,简称CLTV。新的支付方式允许交易输出在未来的某个时间点之前不可使用。虽然使用简单的交易设置,交易锁定时间就可以实现类似的功能,但是CLTV可以与其他的脚本指令结合,比如多重签名和算法操作,进而可以创造复杂的交易合约。比如,你可以创造一个2~3重签名输出,设置当达到某个日期之后,获得一个签名。CLTV指令是通向比特币更加复杂的应用的一步。

另一个重要的正在成型的进展是支付通道。支付通道允许一方与另一方进行重复的微支付,但是只公开第一个和最后一个交易,这样就能避免避免给区块链带来太大负担。这种理念的一些变形,比如闪电网络,扩展到允许用户通过支付通道的网络进行安全的比特币交易,而不用将每一笔交易公布在区块链上。

七、Bitcoin Core 0.12

2016年2月23日,最新的比特币核心0.12开放更新,官方表示此次可能是有史以来最大规模的一次升级,共包含了22项改进内容,其中有以下9项重要升级:

1.7倍签名认证速度

在原本的比特币核心中使用OpenSSL对比特币交易进行ECDSA签名验证。OpenSSL具有很好的完整性,能够完成远远多于验证ECDSA签名的能力,但也因其广泛的功能,造成了更大的被打击面。由于这类打击将威胁到比特币的安全,将OpenSSL从比特币核心剥离并替换一种更为简单精准的密码库成为了优先事项。

为了解决这一问题,一种叫做libsecp256k1的ECDSA签名验证密码库由比特币核心团队开发出来,并植入核心协议用于取代OpenSSL。比特币核心开发团队表示他们经历了将近3年的复杂开发过程,终于通过libsecp256k1的嵌入实现了比特币安全验证方面被打击面的减小。

此外,libsecp256k1的签名验证过程将大大快于OpenSSL。在64位架构上,新的验证速度将比原来快7倍,原始重索引与区块验证现在只需要原本一半的时间即可完成,这将是比特币交易验证向前发展的重要一步。

2.限制上传流量的功能

对一些用户来说,节点的上传是一大负担,因此针对上传流量的限制成为了亟须提升的事项。节点用户限制能够设置软性的限制来控制它们上传数据给其他节点的流量。用户可以通过设置一个参数,来制定用户每天计划服务的其他目标节点的数量,然后系统将会尽量将服务节点控制在这个参数以下,若超出了限制数量则会选择仅服务最近一周产生的区块。

3.通过内存池设限防崩溃功能

老版本的比特币软件并没有针对内存池设置上限。尽管节点只会选择接受那些高于特定最低传递费用的交易,然而仍然会不时出现符合条件的交易量过大后导致低内存节点崩溃。特别是攻击者会选择针对这个弱点,通过大量交易来造成节点的崩溃。

通过这次0.12的版本升级,节点能够默认根据自身内存池容量设置上限,同时用户也能够自行对用于验证比特币网络的内存池容量上限进行设置。当上限被触及,虽然新的交易仍然能够被接受,但同时其中最低传递费的交易会被自动顶出内存池。这项新的内存限制保证了因交易加载过度而造成的节点意外崩溃将不再会发生。

4.交易验证费用增加选项

交易经常会由于过低的验证费用而被卡住。由于未被完全验证的未消费交易很难被再次消费,因此潜在地造成了金额的冻结。合适的交易验证费用又难以被计算,因为交易费用很大程度上依赖于特定时间的交易量及其他交易所给出的交易费用。因此造成了不是给出的验证费用太低导致交易被卡,就是给出的费用太高形成资金浪费。

新的交易验证费用替换功能使得交易的发起方能够设定他们的交易,从而实现一段时间后更高费用的同一笔交易能够被自动再发起。交易发起人因此就能够先从较低的交易费用开始发起交易,随后逐渐增加费用直到他们的交易被接受。这个功能同时帮助支付发起人控制交易成本,同时也最大化了交易被包括入区块的机会。

5.交易传递规则提升

以前,特定的传递带宽被保留以用于零费用交易的传递(或被称为免费交易)。这种设定的问题在于所有其他的交易(非零费用的交易)将会被迫争夺剩余的传递带宽空间。

为了更好地为交易发起者服务,节点们将不再需要保证一定数量的免费交易传递,而是更为自由地选择传递任何交易。

6.自动选择Tor网络运行

节点会首先检测自己是否在Tor匿名网络上运行,若已处于Tor匿名网络上,比特币核心会驱使软件自动创建Tor的隐藏服务器,并通过Tor连接其他节点,而无须手动操作。

7.ZeroMQ消息提醒接口开放

新区块高度的到达的消息及新交易接收的通知原本并不对外开放,0.12版本通过整合ZeroMQ,将这类消息的提醒接口对外开放。

8.钱包所需硬盘空间骤减

比特币核心钱包用户经常会为运行全节点时大量被占用的硬盘存储空间而感到头疼(当前已达到60GB,并仍在增长)。对于那些只有有限存储空间但却仍然希望运行全节点的比特币钱包的用户来说,他们现在开始能够在修身模式下运行。这意味着节点只需要对未花费的结果进行跟踪,而删除其他已认证处理的区块及已花费的结果。结果就是用户能够仅通过储存2GB左右的数据而不是原本的60GB来运行全节点。

9.为矿工提供更快的区块组合能力

老版本中,区块模组的创建对于矿工来说是昂贵的,他们需要花费很多的计算时间与储存空间来完成。大量计算时间的花费是由于矿工们以前需要在通过严谨共识算法进行区块验证的同时组合区块。而大储存量的消耗则是因为以前组合区块的过程中,每一个位于内存池的交易数据都需要被预加载到缓存中用作各种计算。

从0.12版本开始,严谨共识算法不再需要在进行区块组合的同时被处理,而是在所有交易到达内存池的时候就被提前计算好并预加载。这意味着当组合区块的时候大多数计算已经完成,因此区块模组能够相当快地被创建。具体上看,这将使得区块组合速度从秒级时间区间向毫秒级时间区间加速。

八、Bitcoin Core 0.12.1

0.12版本发布不到一个月,2016年4月15日比特币核心协议0.12.1版本发布。该版本改进了比特币网络的延展性。最突出的升级特点在于实现了对软分叉的兼容,从而进一步保证了侧链和闪电网络在比特币网络中的技术实现。侧链和闪电网络作为能够打通比特币生态圈的发展方向,将在第四章中进行具体探讨。

0.12.1版本还实现了相对锁定时间(locktime)的序列锁(sequence locks)的功能。这一功能可让用户在特定的时间周期内,认为一个签名交易是无效的。这可以作为一个链上(on chain)第三方保管功能,其中资金可停留在区块链中,而不是存放在第三方账户当中。这也为基于比特币区块链的智能合约提供了扩展空间。 PEU3PajCI/DIpGF8IdeiZvDWX1k2luSs61FgCTfJhJitrK28v9r0SRW4bTtDj1x3

点击中间区域
呼出菜单
上一章
目录
下一章
×