Soteria 系列技术详解 2-区块图-Phantom and Greedy Phantom.

区块图是安全的。

Phantom 是什么?
Phantom 是染色/排序的协议,由Yonatan Sompolinsky 和 Aviv Zohar 发明。它的实现是如下三个主要步骤:
1: 识别出一组连接良好(well-connected)的区块。 这被称为蓝色集合(set)。 其他的区块,比如仅引用较旧的区块,或者自己私藏了一段时间的区块,在很大的概率情况下,会被排除在蓝色集合之外。
2:对区块图进行拓扑排序,优先蓝色集合的区块,滞后不在蓝色集合的区块。
3:在排序核对交易的时候,会使用区块图的排序,合法的交易将会被采用而恶意的交易将会被抛弃。

这是一个区块图的示例。 最底部是创世(GENESIS)块,箭头是从一个区块指向它的父辈块(parent)。 如果一个区块不是任何其他的区块的父辈,它(们)就被称为当前区块图的tips。 比如上图中的tips就是M,J和L。

让我们看看使用Phantom或Greedy Phantom时这个图形的颜色可能是什么样子。

上面的图显示的是用 Phantom染色以后的结果(Greedy Phantom是类似的),我们是从区块M的角度来看如何染色的。在区块图的中间部分,有一个连接充分(well-connected)的区块集合;同时在区块图的边界处的一些区块(红色的),它们的连接不是那么充分。我们是用一个系统内部常量(k)来做这个决定的,k是如果选定的我们会在以后的技术分享中解释。这样就意味着,同样级别的红色集合的区块会排在蓝色集合区块的后面,注意,不是所以的红色的区块都排在所以蓝色的区块后面。没有颜色的区块(J 和 L)不属于M的“过去集合”,它们会被排序在M的后面。
排序结果(从M的角度看)就是:
GENESIS, C, D, E, H, B, I, K, F, M, J, L
在染色和排序的过程中,Phantom 需要:
1:通过分析一个区块的过去(past)和将来(future)来决定是不是充分连接(well-connected)。
2:遍历区块图,为每一个区块染色。
3:排序。

下面我们来看一看什么是Greedy Phantom,作者是Aviv Yaish。

  • 和Phantom的概念基本相同,目标是更简单有效。
  • 染色部分是从最蓝色父辈(bluest parent)继承。
  • 染色和排序是递增模式。

染色部分是从最蓝色的父辈继承来的,最蓝色的父辈又称为染色父辈(colouring parent)。染色父辈的集合就是从当前的区块一直延续到创世块(genesis),这又叫做当前区块的的染色链(colouring chain)。和Phantom 不同的部分就是,Greedy Phantom的染色是继承的,在一个最蓝色父辈之前的区块的排序是不变的,相反的,在Phantom算法中,由于每一个区块都需要考虑过去(past)和将来(future),所以每一个区块的颜色在将来都还有可能改变,完全取决于改区块在未来的连接程度。
下面我们看一下在区块被加到区块图的过程中,Greedy Phantom的染色过程。

在这个动画中,除了蓝色、红色、和透明的区块,还有绿色和虚线边界的区块。

  • 绿色的:代表染色的边界点 (tip)
  • 虚线的:当前区块的染色链。(最蓝色的父辈的集合)
  • 蓝色的:蓝色区块的集合,是指从最新的区块的角度来看(连接充分的,well-connected)
  • 红色的:在蓝色区块集合以外的区块,从最新的区块的角度来看(连接不充分)

可以观察到的是,从最新的区块的角度来看,有一些区块的颜色会改变(在红蓝之间)。还可以观察到的是,当角度不同的时候,染色链也不同。
在DAG最开始的时候,当B、C、D、E被添加当时候,染色链并没有变成这些新当区块。这是因为一个打破平局的内部规则,当两个或两个以上的区块蓝色程度一样(equally blue),哈希值低的区块胜出。在这个例子中,B是字母中最前(低)的,所以B胜出。

总结一下Phantom和Greedy Phantom之间的计算差异(影响到工程实际上):
Phantom在染色时,会用到一个区块的过去(past) 和未来 (future),随着dag的增长,一个区块的未来会无限增长。
Greedy Phantom只会在染色时考虑一个区块的过去(past),因为dag不断的增长,这使得Greedy Phantom成为染色/排序在工程实现上更好选择。

如果非要使用Phantom,可以通过设置节点过去和未来遍历的下限和上限来实现类似的效果
但限制节点的过去和未来可能会影响染色效果,所以就是这样不太理想。

 

相关文章
appleinc android