在part4,我们提到了“双花”问题,作为系列文章的最后一章,本文会分析Tangle是如何具体解决该问题,又是如何确认历时交易的。
为了说明该问题,我们通过图1-1的用例来研究:
正如图1-1的用例所示,Alice 有 5i,并且同时向Charlie 和 Bob转账5i。这就导致了一个问题,我们不能同时认为这两笔转账交易时有效的,并且,根据Tangle 现有的技术方案,我们无法使用新交易来同时认证这【Alice gives Bob 5i】和 【Alice gives Charlie 5i】两笔交易,因为这会导致Alice的余额变成负数。
在学些the weighted random walk 的tip 选择算法过程中,我们知道会有一条分支其权重越来越大,而权重较小的分支则会被抛弃。因此,iota 中的共识则是围绕着 交易的有效性展开。然而,还是有一个问题,对于Bob 或Charlie来说,他们怎么知道Alice 究竟将钱转给了谁。在解决完“双花”问题后,最后需要解决的交易确认问题。
我们结合生活场景来举一个例子。我们假设 Bob 和 Charlie 都是一个恐龙模型贩卖商,而Alice需要向他们其中一个人购买一个霸王龙。如果Bob 和 Charlie看见tangle 中的转账交易后,立马都将霸王龙模型发给Alice,可最后他们俩当中只有一个人收到Alice的真实转账。这可以是一个严重的问题,事实上,比特币是第一个解决该问题的区块链技术。而Tangle通过引入 confirmation confidence 来解决该问题。confirmation confidence是衡量一笔交易在tangle 中的可信度。
具体confirmation confidence的计算流程如下:
1.对需要确认的交易X进行100次 tip 选择运算。
2.计算在这100tips中,有多少个tip 选择认证的交易X,假设这个数量为A。
3、confirmation confidence的值为 “A%”。
换言之,一笔交易的信任值 则等价于认证该交易数的百分比。但在实际计算中,并非所有的tip 交易都会被同等对待,一些被认为更重要的tip会持有更高的占比权重。这是什么意思?我们通过图1-2 的用例来详细说明。
在图1-2 的用例中,被黑色的后边所包围的交易其confidence的值超过95%,而交易[9] 则被四个tip 交易([7]、[13]、[11]、[12])中的两个([13]、[12])进行选择认证。如果简单按照百分比来计算,交易[9] 的confidence 值为50%。但正如我们刚刚提到,并非所有的tip 交易都会被同等对待。在该用例中交易[7] 为lazy tip,而根据之前的章节较少,lazy tip 是不被鼓励的,所以,它所占的百分比会稍微少些。因此,交易[9]的实际confidence值会更高些,在图1-2 的用例被设定为0.54。
现在,我们可以明确的告诉Bob 和 Charlie应该什么时候将霸王龙模型发送给Alice。当 Alice’s的其中一笔交易的 confidence 值到达一定阈值时,我们设定为95%,则可以认为该笔交易所在分支基本不会被抛弃了。细心的读者会注意,我们用词为“基本不会”,而不是“不可能”。因为,如果Alice’s想刻意欺骗,并且有足够大算力的情况下,她可以 强行切换分支或者让“双花”支付成功。
我们接着图1-1 的用例,举一个Alice刻意欺骗的例子。假设这笔交易最后是支付给Charlie,换言之,交易【Alice gives Charlie 5i】是被确认的。Alice为了达到欺骗的目的,她将尽可能发起更多的交易,不断尝试提高她所提新分支得累积权重。如果她有足够大的算力,她可以让整个tangle网络按照她提出的新分支演进,这样一来,她则可以轻松重写历史 。而原本交易【Alice gives Bob 5i】的confidence 值则可以从95% 下降为0。
图1-3 则展示了整个欺骗流程:
在上述例子中,只有当Alice发送的交易数量超过其他所有人的总和或接近时,才会出现这种问题。虽然在成熟和活跃的IOTA网络中,算力攻击不是主要风险,但对于早期的IOTA来说,由于整个网络都没有足够的交易量来避免系统免受算力攻击。
因此,出于安全考虑,我们采用了自愿和临时不同的共识机制:协调者(the coordinator)。协调者的工作机制如下,每隔两分钟,协调者会发起一笔 里程碑交易( milestone transaction),而被 里程碑交易选定并认证成功的交易,其confirmation confidence 值会设为100%,即马上确认。在使协调者机制的情况下, Alice的第二笔交易将永远不会被选定确认。虽然这回导致一定的中心化现象,但该机制却能在IOTA 网络初期起到一个保护作用。直到IOTA自身足够成熟、活跃并且能够抵御算力攻击的情况下,我们将会去掉协调者机制,同时,IOTA网络也会变得更加高效。
到这里,系列文章完毕,IOTA的源码分析后续会逐步给出。