1703869000
1703869001
图10.6 不可分割的交叉链互换协议
1703869002
1703869003
①原作者写的是另类币,应该是笔误。——译者注
1703869004
1703869005
第一步,爱丽丝存储a价值的另类币[这里的存意味着把货币发给输出脚本(ScriptPubkey),并在里面注明只有两种情况可以使用这笔货币]。这个存款只有通过以下两种方法可以取得此a价值另类币:第一,如果爱丽丝和鲍勃两个人都同意,他们可以取回。事实上,爱丽丝只有在鲍勃签署回款交易后,她才公开这个存款。这样就保证如果两个时间单位过去后,存款还没有被领取,她可以赎回她的存款。
1703869006
1703869007
另外一个办法是在任何时候,提供鲍勃的签名和x的值,通过x的值去开启哈希函数的承诺h。注意,把写在存储A的区块里来表明爱丽丝特意把h写入输出脚本。因为只有爱丽丝知道x,所以在最后阶段,任何单独一方无法索取存款。这个方法就是,当且仅当爱丽丝拿到比特币,鲍勃才知道x的地址,他才能索取另类币。
1703869008
1703869009
第二步大体是第一步的反向过程。鲍勃存b单位比特币,这些比特币只能在两种情况下才能被取走。很重要的区别是,鲍勃并不需要创建一个新的谜题。相反,他用相同的哈希值h ( 把这个h值从存储A区块简单复制到存储B区块)。哈希值h就是链接两个区块链的钥匙。
1703869010
1703869011
这时,爱丽丝有主动权,她可以临时变卦。如果在T1时,爱丽丝还没有表示要给鲍勃x值,鲍勃可以简单地取回他的存款退出交易。爱丽丝的另一选择是在T1之前取走鲍勃的比特币,但是她必须创建并广播输入脚本,里面含有x值。鲍勃看到这个广播就可以用x值去领取爱丽丝的另类币,兑换的交易完成。
1703869012
1703869013
注意,如果爱丽丝稍微晚点领取鲍勃的比特币(在T1之后但是在T2之前),鲍勃可能同时拿走两笔存款。类似地,如果爱丽丝及时拿走鲍勃的比特币,但是鲍勃等太久还没取走爱丽丝的,那么爱丽丝也可以把两个都拿走。但这不是问题,只要保证双方无法在协议上欺骗对方就可以,自己的疏忽或者故意怠慢不是系统考虑的范围。
1703869014
1703869015
最后,区块在比特币和另类币中,并不是按照固定时间产生的。这种情况会造成一些混乱,特别是两个区块链没有协调一致时。假设两个区块链各自平均10分钟产生一个区块。以1小时为时间单位,也就是说,需要T1至少为现在另类币区块+12,T2至少为现在比特币区块+6,也许能带来更大安全边际。
1703869016
1703869017
遗憾的是,存在很小的可能性,12个另类币区块已经找到,但后面6个比特币还没有找到。这时,爱丽丝可以索取两个存款。可以通过增加时间单位来降低可能性,但是会牺牲速度。
1703869018
1703869019
这是一个清晰明了的协议,但是截至2015年,还没有人用到。相反,所有加密货币都是在传统的中心化的交易系统里交易。造成这种现象有很多原因:第一是该协议的复杂、不便和缓慢;第二,这个协议可以防止偷盗货币,但是不能防范服务性攻击。有人或许以诱人的兑换价格作为广告,但是在协议原型的第一步或第二步就反悔退出,这浪费了每个人的时间。为了减缓这种情况,也为了集合并匹配大家的需求,可能需要一个中心化的交易平台(机制),即使如此,也不能完全相信它不会偷你的货币。这种情况进一步降低了该协议原型的使用范围。
1703869020
1703869021
1703869022
1703869023
1703869025
区块链技术驱动金融:数字货币与智能合约技术 10.6 侧链——基于比特币的另类币
1703869026
1703869027
本章前面部分探讨过给现有比特币所有者配置新的另类币的两种方法:或者要求用户把比特币销毁从而得到另类币,或者简单地把另类币发给现有比特币所有者,这些所有者必须拥有还没有用掉的比特币。正如我们看到的,任何一种方式都不需要另类币的价格盯住比特币。没有这种汇率锁定机制,在发展初期,另类币的价格会变化很大。侧链(sidechains)的目的就是避免另类币价格变化太大,因为价格的波动太大会导致很多问题,也会使另类币分心乏术,无法真正专注于技术上的竞争。
1703869028
1703869029
下面介绍使另类币的价格以固定汇率的形式盯住比特币的相关技术。首先,所有者必须把所拥有的一定数量的比特币放入托管账户,这样才能创造出一个单位的另类币(或者固定单位的另类币),这样所有者才可以在另类币区块链上正常使用另类币。最后,所有者必须能够销毁自己拥有的另类币,从而取回之前存在托管账户上的比特币。这种构建像零币,通过托管基础币而创造零币。区别在于,需要在两个不同的区块链里进行上述操作。
1703869030
1703869031
遗憾的是,据我们了解,由于比特币的交易无法被其他区块链的事件所影响,目前还未找到可以不改动比特币而达到这种效果的方法。截至目前,比特币的脚本还没有强大到可以确认整个单独的区块链。好消息是,我们可以通过相对实用一点的软分叉来修改比特币,这也是侧链的原理。侧链的愿景是,将比特币作为储备货币,打造多种蓬勃发展、快速创新和实验的另类币。截至2015年,侧链还只是一个提案。但是比特币社区正在积极参与这个提案,目前已取得一些实质性的进展。侧链的提案还处于变化之中,所以为了便于学习和理解,我们适当简化了一些细节。
1703869032
1703869033
扩展比特币的功能,使之能够使侧链兑换成比特币,最显而易见但不太实用的办法是:把所有侧链的规则,包括验证所有侧链的交易和检查侧链的工作量证明,都包含在比特币体系里。这个方法不实用是因为这样会使比特币扩展出来的程序过于复杂,验证比特币的节点会非常困难。而且,链接上的侧链越多,复杂度和困难度就越大。
1703869034
1703869035
SPV技巧
1703869036
1703869037
可以使用SPV证明技巧来避免这种复杂局面。在第3章中,我们曾提到简单付款验证(Simple Payment Verification,简称SPV)。SPV可用于小的客户端,比如手机上的比特币应用程序(APP)。SPV节点不需要对其不感兴趣的交易做验证,它们只校验区块的标题。SPV客户只看他们感兴趣的交易,并确信是在最长的区块链内,并不担心该链是否是最长的有效链。因为他们假定矿工在创建该区块链并花精力去挖矿之前,已经验证过里面的交易了。
1703869038
1703869039
也许,可以扩展比特币的脚本让它能验证侧链里某些特殊的交易(比如销毁一个侧链币的交易)。在比特币里使用这种延展命令的节点,仍然会全面验证比特币的区块链,但是在侧链里,可能只会验证相对轻量级的SPV。
1703869040
1703869041
对一个交易提出异议
1703869042
1703869043
这种方法要好一些,但仍不完美。即使做最简化的验证,比特币的节点仍然要链接到侧链的点对点网络(每个链接上比特币的侧链都需要如此),并且追踪所有侧链区块的标题用于决定侧链最长的分支。最终我们想要的是:当一个交易要把侧链的货币转化成为比特币时,它本身就包含比特币节点需要的用于验证其合法性的所有信息,也就是说,验证特定的侧链是真实发生的。这就是SPV证明的定义。
1703869044
1703869045
这里介绍一种可行的办法,唯一的缺憾是这个侧链的组成部分还在进一步研究中。为了在比特币里可以对照到侧链,用户必须证明:(1)侧链区块里包含侧链交易;(2)侧链的标题表明这个区块已经接受过一定次数的认证,这意味着一定数目的工作量证明。比特币会验证这些证明,但是不会去验证这个区块头部展示的链是最长的。相反,比特币会等一定的时间,比如1~2天,让其他用户去找证据证明,第二步所指向的区块标题并不在最长分支上。一旦在特定时间范围内出现这样的证据,比特币体系中,接受该侧链交易的区块将会被认定为无效。
1703869046
1703869047
隐含的逻辑是:如果一个SPV证明已经可以确定,该交易不在最长分支上致使其不应该被认可,那么应该有一些侧链的用户会因认可这个交易而遭受损失。这些可能遭受损失的用户,有动力去辩驳SPV证明。如果没有用户遭受损失(也许是有一个分支,或者重组侧链,而且该交易也恰好在别的分支上),那接受这个证明也无妨。
1703869048
1703869049
一般来说,系统这样设计,对侧链问题并非毫无漏洞,系统也不会阻止你自己搬石头砸自己的脚。如果你把比特币转成有加密隐患的侧链,其他人也许能偷走你的侧链币然后再转成比特币。或者,在侧链的挖矿,也许会因为侧链漏洞而全部崩溃,导致对应的比特币也被偷。但是可以肯定的是,侧链的问题不会毁掉比特币;具体地说,不管侧链有多少漏洞,所有者都无法在侧链上兑现两次同一货币,也就是说侧链不允许比特币挖矿。
[
上一页 ]
[ :1.703869e+09 ]
[
下一页 ]