《区块链开发指南》一一2.5 最新比特币技术

2.5 最新比特币技术

随着区块链的不断发展,区块链技术也在飞速发展,不仅已经有了相对成熟的应用,还有一些原型应用也被提出,下面将介绍几个现在比较流行的在区块链中的应用。
2.5.1 IBLT
比特币系统(Bitcoin)需要矿工(或者说矿池)及全节点的分散化,以实现某些人认为的比特币核心属性:抗审查性(censorship resistance)。因此,区块大小的争议也意味着是一种权衡。更大的区块,允许比特币网络可以承载更多的交易,但也会带来更多的问题,它需要更多的时间来传播交易,虽然这有利于大矿工和矿池,但同时,增加的数据传递对于用户运行全节点而言,也是一种打击。
幸运的是,当前也存在着一些提议,它们可以提高比特币网络的效率,并降低更大区块将会产生的风险。而其中最有前途的创新,就是可逆式布鲁姆查找表(Invertible Bloom Lookup Table),或者简称为IBLT,如图2-2所示。

图2-2 IBLT原理示意图
这一概念首先是由Bitcoin Core和Bitcoin XT开发者加文·安德烈森(Gavin Andresen)提出的,那么这个可逆式布鲁姆查找表解决了什么问题呢?
通常情况下,所有的比特币交易,都是通过节点到节点来完成对等式网络交易的,然后通过个人节点的内存池(mempool,记录未确认的交易)进行存储。当一位矿工发现一个区块时,它包括(部分)区块中的交易,随后便会在同一对等网络中广播该区块。当然,这也意味着,区块中的所有交易,都有效地在网络上发送了两次:一次作为一笔交易,另一次则作为区块的一部分。可见,在区块中已经有了冗余。不过,大多数节点已经知道该区块包含的一些内容了。因为它们已经看到过了,如果我们能够优化它,那么就可以加快区块的广播速度。这也降低了中心化的压力,因为矿工们可以更快地将他们的区块弄出来。
其基本原理如下:首先,在一个区块中包含的所有交易,都会写入一个表(table)中,每一笔交易均会始于表上每一个不同的点。然而,存在的交易数远多于表的空间(room),所以它会导致令人绝望的重叠结果。这使得IBLT显得非常密集,但对于那些无法访问任何交易数据的人而言,IBLT是无法读取的,也是无法破译的。而那些拥有交易数据的人,则可以通过使用类似的逻辑,将他自己的交易填充到一个IBLT中,然后比较IBLT上的重叠交易数据。如果两个IBLT最终看起来完全一样,这就意味着所有的交易都是完全匹配的。即使这两个IBLT最终看起来并不是完全相同,但只要交易集是非常相似的,这就可能仍然是有用的。在这种情况下,这两个IBLT可以进行比较,采用这种方式,所有相同的交易就可以抵消掉一方。而IBLT中“剩余的”交易,往往可以用于重构丢失的交易。
2.5.2 隔离见证
每一个比特币交易,都可以分为两部分。第一部分是转账记录,第二部分是用来证明这个交易合法性(主要是签名)的。第一部分可称为“交易状态”,第二部分就是所谓的“见证”(witness)。如果你只关心每个账户的余额,那么转账记录就已经足够。只有部分人(主要是矿工)才有必要取得交易见证。
中本聪设计比特币时,并没有把两部分资料分开处理,因此导致交易ID的计算混合了交易和见证。因为见证本身包括签名,而签名不可能对其自身进行签名,因此见证可以由任何人在未得到交易双方同意的情况下进行改变,造成所谓的交易可塑性(malleability)。在交易发出后、确认前,交易ID可以被任意更改,因此基于未确认交易的交易是绝对不安全的。在2014年就曾有人利用这个漏洞大规模攻击比特币网络。
比特币核心开发员Pieter Wuille在2015年12月于香港提出的隔离见证(Segregated Witness,以下简称SW)软分叉解决了这个问题。SW用户在交易时,会把比特币传送到有别于传统的地址。当要使用这些比特币的时候,其签名(即见证)并不会记录为交易ID的一部分,而是进行另外处理。也就是说,交易ID完全是由交易状态来决定的,不会受见证部分的影响。这种做法有如下几个重要的结果。
可以用软分叉增加最大区块容量。因为旧节点根本看不到这些被隔离的见证,即使真实的区块已经超过了1MB,它们仍会以为没有超过限制而会接受区块。在整场有关区块容量的辩论中,最大的难点就是硬分叉。SW可以提供约2MB的有效区块空间而没有任何硬分叉风险。
从此以后,只有发出交易的人才可以改变交易ID,没有任何第三方可以做到。如果是多重签名交易,那么只有得到多名签名人的同意才能改变交易ID。这可以保证一连串的未确认交易的有效性,是双向支付通道或闪电网络所必须具备的功能。有了双向支付通道或闪电网络,二人或多人之间就可以从实际上进行无限次交易,而无须把大量零碎交易放在区块链上,从而大大降低区块空间压力。
轻量钱包可以变得更轻量,因为它们无须再接收见证数据。
可以大幅改善签名结构。在区块链上,曾经有一个超过5000个输入的交易,因为签署设计缺憾,需要半分钟才能完成检查。SW软分叉解决了这个问题。
2.5.3 闪电网络
比特币从诞生之日起就一直存在着若干个技术问题,比如交易处理能力,目前全网每秒只有7笔交易;其次是区块产生时间,现在大致是每10分钟出一个块;再其次是交易确认问题,一般建议在等待6个区块后才视为交易被确认,大额交易则建议等待更长时间;最后是容量,目前已经生成了40多万个区块,约60GB的数据量,且眼见的未来中只见增加不见减少。这些无疑会是区块链技术在实际应用中的一大障碍。
在闪电网络出现之前,虽然比特币社区也试图通过区块扩容、隔离见证等技术在一定程度上提高交易处理的能力,但这些方式并不能导致交易处理能力出现数量级的改善。至于前面提及的其他技术难题,也不是短时间内就能攻克的,比如,现存的PoW机制是万万动不得的,需要等待多个区块的确认也是不能触碰的底线,更麻烦的是,交易处理能力和区块链数据容量似乎是一对无可调和的矛盾。
因此,闪电网络提供了一个可扩展的微支付通道网络。交易双方若在区块链上预先设有支付通道,就可以多次、高频、双向地通过轧差方式实现瞬间确认的微支付。双方若无直接的点对点支付通道,只要网络中存在一条连通双方的、由多个支付通道构成的支付路径,则闪电网络也可以利用这条支付路径实现资金在双方之间的可靠转移。
闪电网络并没有试图解决单次支付的银货对付问题,其假设是单次支付的金额足够小,即使一方违约另一方的损失也非常小,风险可以承受。因此使用时必须注意“微支付”这个前提。多少资金算“微”,显然应该根据业务而定。
2.5.4 RSMC
闪电网络的基础是交易双方之间的双向微支付通道,RSMC(Recoverable Sequence Maturity Contract)定义了该双向微支付通道的最基本工作方式。
微支付通道中沉淀了一部分资金,也记录有双方对资金的分配方案。通道刚设立时,初始值可能是{Alice: 0.4, Bob: 0.6},这意味着打入通道的资金共有1.0 BTC,其中Alice拥有0.4 BTC,Bob拥有0.6 BTC。通道的设立会记录在比特币区块链上。
假设稍后Bob决定向Alice支付0.1 BTC。双方在链下对最新余额分配方案{Alice: 0.5, Bob: 0.5}进行签字认可,并签字同意作废前一版本的余额分配方案{Alice: 0.4, Bob: 0.6},Alice实际上就获得了0.5 BTC的控制权。如图2-3所示。
如果Alice暂时不需要将通道中现在属于她的0.5 BTC用作支付,那么她可以无须及时更新区块链上记录的通道余额分配方案,因为很可能一分钟后Alice又需要反过来向Bob支付0.1 BTC,此时他们仍然只需要在链下对新的余额分配方案达成一致,并设法作废前一版本的余额分配方案就行了。

图2-3 RSMC账户余额分配示意图
如果Alice打算终止通道并动用她的那份资金,那么她可以向区块链出示双方签字的余额分配方案。如果一段时间之内Bob不提出异议,那么区块链会终止通道并将资金按协议转入各自预先设立的提现地址。如果Bob能在这段时间内提交证据证明Alice企图使用的是一个双方已同意作废的余额分配方案,则Alice的资金将被罚并给到Bob。
2.5.5 HTLC
RSMC只支持最简单的无条件资金支付,HTLC(Hashed Timelock Contract)则进一步实现了有条件的资金支付,通道余额的分配方式也因此变得更为复杂。
通过HTLC,Alice和Bob可以达成这样一个协议:协议将锁定Alice的0.1 BTC,在时刻T到来之前(T以未来的某个区块链的高度来表述),如果Bob能够向Alice出示一个适当的R(称为秘密),使得R的Hash值等于事先约定的值H(R),Bob就能获得这0.1 BTC;如果直到时刻T过去Bob仍然未能提供一个正确的R,那么这0.1 BTC将自动解冻并归还Alice。
由于到期时间T、提款条件H(R)、支付金额和支付方向的不同,同一个通道上可以同时存在多个活动的HTLC合约,再加上唯一的通过RSMC商定的无条件资金余额,余额分配方式会变得相当复杂。下面以图2-4为例来讲解这一大致流程。

图2-4 HTLC交易流程示意图
如图2-4所示,Alice想给Dave发送0.05 BTC,但Alice和Dave之间并没有微支付通道。Alice找到了一条经过Bob、Carol到达Dave的支付路径,该路径由Alice/Bob、Bob/Carol和Carol/Dave这样三个微支付通道串接而成。
此时,Dave生成了一个秘密R并将Hash(R)发送给Alice,Alice不需要知道R。
该交易的流程具体如下。
1)Alice和Bob商定一个HTLC合约:只要Bob能在“3”天内向Alice出示Hash正确的R,Alice就会支付Bob 0.052 BTC;如果Bob做不到,这笔钱将3天后自动退还Alice。
2)同样地,Bob和Carol商定一个HTLC合约:只要Carol能在“2”天内向Bob出示Hash正确的R,Bob就会支付Carol 0.051 BTC;如果Carol做不到,这笔钱到期后将自动退还Bob。
3)最后,Carol和Dave商定一个HTLC合约:只要Dave能在“1”天内向Carol出示Hash正确的R,Carol就会支付Dave 0.05 BTC;如果Dave做不到,这笔钱到期后将自动退还Carol。

时间: 2024-08-02 08:24:13

《区块链开发指南》一一2.5 最新比特币技术的相关文章

《区块链开发指南》一一导读

前 言 Preface 比特币于2009年诞生,在很长一段时间内,人们只知比特币,不知区块链.从2015年开始,区块链像狂风一样席卷全球,倍受金融界和科技界的关注:2015年年底,区块链技术逐渐得到国内金融界和科技界的了解和认同. 区块链行业的蓬勃发展源于区块链有可能给各行业带来巨大的变革.麦肯锡在2016年年初发布报告,指出区块链技术将在未来五年内颠覆众多行业,特别是银行业和保险业:埃森哲预测到2025年,区块链技术每年可帮助全球8大投资银行节省80亿美元至120亿美元的基础设施成本. 全球金

《区块链开发指南》一一2.4 Sidechains

2.4 Sidechains Sidechains(侧链)实质上不是指特定的某个区块链,而是指那些遵守侧链协议的所有区块链,这个词是针对比特币主链来说的.侧链协议是指可以让比特币安全地从比特币主链转移到其他区块链,同时又可以让其他区块链上的货币安全返回到比特币主链的一种协议. 所以从某种程度上来说,现在市面上的所有区块链,例如以太坊.莱特币.狗狗币等区块链都可以成为侧链应用.侧链的实现具有重大意义,它意味着比特币可以在不同的区块链上流通,其应用范围和应用前景会更加广泛.一旦侧链的应用流行起来,有

《区块链开发指南》一一1.3 挖矿、矿池

1.3 挖矿.矿池 1.3.1 挖矿原理与区块的产生比特币的挖矿和节点软件是基于对等网络.数字签名来发起和验证交易的.节点向网络广播交易,这些广播出来的交易需要经过矿工的验证,矿工们会用自己的工作证明结果来表达确认,确认后的交易会被打包到数据块中,数据块会串起来形成连续的数据块链.中本聪本人设计了第一版的比特币挖矿程序,这一程序随后被开发为广泛使用的第一代挖矿软件bitcoind,这一代软件在2009年到2010年期间都比较流行.每一个比特币的节点都会收集所有尚未确认的交易,并且会将其归集到一个

《区块链开发指南》一一1.2 区块和区块链

1.2 区块和区块链 比特币网络中,数据会以文件的形式被永久记录,我们称这些文件为区块.一个区块是一些或所有最新比特币交易的记录集,且未被其他先前的区块记录.可以将区块想象为一个城市记录者其记录本上单独的一页纸(对房地产产权的变更记录),或者是股票交易所的总账本.在绝大多数情况下,新区块会被加入到记录的最后(在比特币中的名称为区块链),一旦写上,就再也不能改变或删除.每个区块记录了它被创建之前发生的所有事件.1.2.1 区块结构一个区块的结构如表1-2所示. 每个区块都包括了一个被称为"魔法数&

《区块链开发指南》一一1.5 合约应用案例

1.5 合约应用案例 1.4节的脚本系统,详细说明了脚本的运行原理,本节将描述在实际应用场景中如何使用脚本系统构建合约应用.1.5.1 合约应用原理 每个比特币交易都有一个或多个输入和输出,每个输入或输出都有一个小的纯函数与之相关联,称为脚本,脚本可包含简化形式交易的签名. 每个交易都有一个锁定时间,使得该交易处于特定状态并且可被新交易替换,直至锁定时间来临.预定时间可以是块索引或时间戳(这两个因素使用同一个内存项,小于5亿是块索引,大于5亿是时间戳).当一个交易的锁定时间到了,则称之为终结.

《区块链开发指南》一一第1章 区块链基础

第1章 区块链基础 区块链究竟是什么?狭义地说,区块链就是比特币的底层技术:不过,经过7年的发展,区块链已经不再"依附于"比特币,而是独立地发展成为了一种革命性的技术,比特币则是区块链最大.最成功的应用.从技术层面来看,区块链是一个基于共识机制.去中心化的公开数据库.共识机制是指在分布式系统中保证数据一致性的算法:去中心化是指参与区块链的所有节点都是权力对等的,没有高低之分,同时也指所有人都可以平等自由地参与区块链网络,唯一的限制就是个人自己的选择:公开数据库则意味着所有人都可以看到过

《区块链开发指南》一一第2章 区块链进阶 2.1 外带数据

第2章 区块链进阶 2.1 外带数据 区块链的外带数据是指那些保存在区块链上但不进行货币交易的信息,比如需要永久保存的信息,前面提到过存在于区块链上的每一笔交易都有一个输入和输出,区块链的外带数据也是采用类似的方式来存储的.如果有在比特币上永久存储数据的需求,那么你目前有两种选择,即:"OP_RETURN"和"Multi-Signatures".OP_RETURN是指在每个交易的公钥脚本中嵌入OP_RETURN操作码,之后放置外带数据:Multi-Signature

《区块链开发指南》一一2.2 Counterparty

2.2 Counterparty 合约币Counterparty是以合约币协议运行的全套金融工具,合约币协议建立在比特币块链的基础之上,把比特币块链当成可信的时间戳服务和可信的信息发布证明. 目前合约币已经实现了众多的技术创新点,比如燃烧证明.合约.去中心化XCP与BTC交易所.赌约或期货.资产或股份发行.分红等.Counterparty是建立在比特币协议上的传输层,用于建立和使用去中心化的财务工具协议.简单来说,可以将XCP理解为很多"小的BTC"即XCP="小的BTC&q

《区块链开发指南》一一第3章 密码学基础 3.1 Hash函数

第3章 密码学基础 3.1 Hash函数 Hash函数是密码学的一个重要分支,它是一种将任意长度的输入变换为固定长度的输出且不可逆的单向密码体制.Hash函数在数字签名和消息完整性检测等方面有着广泛的应用.3.1.1 技术原理 Hash函数又称为哈希函数.散列函数.杂凑函数.它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程. Hash函数可以将满足要求的任意长度的输入进行转换,从而得到固定长度的输出.这个固定长度的输出称为原消息的散列值(Hash Value)或消