上次聊到了Avalance背后的Snow共识的基本思想,以及它的改进,但是细心的你可能已经发现,Snow共识并没有给交易制定一个全局的序,并且貌似也没有出...
上次聊到了Avalance背后的Snow共识的基本思想,以及它的改进,但是细心的你可能已经发现,Snow共识并没有给交易制定一个全局的序,并且貌似也没有出块相关的概念,那么这到底是为什么呢?
Avalance团队利用Snow共识开发了一个点对点电子支付系统Avalance,Avalanche可以说就是Snowball共识的实例,它把所有的交易维护成一个有向无环图DAG(这里只是通过 DAG 解耦需求,只是利用DAG的顶点来批处理请求,把原来需要线性的交易所有交易要排成一根链,现在可以让不相关的交易并发发生,时间前后不要么重要)。需要区分的概念是,DAG本身不是共识,只是能让交易并发,提高吞吐量。
有向五环图的每个顶点就是一个交易,节点每创建一笔交易就把他附在DAG中的一个父交易上(需要注意的是子交易不需要与父交易一定有依赖关系,只是通过父边能够访问到就可以)。而每一组冲突交易(双花交易)的集合就构成一个Snowball的实例(可以看出正常的交易的Snowball实例只会是单例,也就是说只有一个交易)。稍微不同于Snowball的地方是,Snowball不断询问并且使用置信计数器shit来记录冲突交易,而Avalanche利用DAG结构并且使用交易的所有后代的chit累加起来形成一个置信计数d(t),t代表该笔交易,整个的描述如下图所示:
DAG交易<chit,d(t)>示例图:紫色区域代表多笔冲突的交易,黑色方块代表置信计数器比较大交易
可以看出,Snow共识虽然并不会给交易全局进行排序,但是决定了一个偏序关系(交易序列的相对顺序),这样就可以按照拓扑排序对交易进行排序了。
当然这里明显有个问题就是,没有全局的序,每个节点就需要维护整个DAG图,交易量大了之后也没法减支,官方考虑后期采用epoch来实现全局的序,进而设置检查点。
那么还有一个问题就是,我们如何确认一笔交易就已经比较安全,可以接受了呢?
这个地方的处理类似与比特币,协议设定了参数,但是具体的安全性由应用决定。协议制定了两个参数β1和β2,一笔交易可以被接受的条件是满足以下两个条件之一:
那么最终的性能评估又如何呢?
采用每次采样k=10个节点,大于alpha=0.8的比例采样成功,β1=11,β2=150,
吞吐量vs网络规模。左边的是每一个块20笔交易,右边的是每一个块40笔交易
每个块40笔交易。左边验证交易,右边不验证
纵轴的概率表示已经确认的交易占全部交易的比例。可以看出大多数交易在0.3秒左右就已经达到确认条件了。
横坐标表示恶意节点的比例,分别看下他对吞吐量和延迟的影响:
对吞吐量影响
](https://)
对延迟影响
可以看出,吞吐量与而已节点的比例几乎正相关,但是变化率比较小,并且延迟几乎不受影响。
社区的用户,还测试了100,000个节点需要多少轮达成共识:
Avalanche底层的Snow共识具有以下优点:![图片]
是一个很有创新性的共识基础协议,期待他2020年8月主网上线后的表现!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!