| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> Avalanche链及其共识介绍 -> 正文阅读 |
|
[区块链]Avalanche链及其共识介绍 |
一、什么是雪崩链(Avalanche)Avalanche是新一代的公链项目,试图在不影响去中心化的情况下提高可扩展性。不同于传统的公链项目,如以太坊的愿景是成为世界计算机,而Avalanche的目标在华尔街,希望创建一个商业化的去中心化金融平台。当然 Avalanche 目前还是集中在币圈,这个愿景尚需时日。 主网上线时间:2020年9月 创始人:Emin Gün Sirer Emin Gün Sirer 教授的主要成就:
愿景:实现所有资产数字化(现实资产和虚拟资产) 共识协议:Avalanche 和 Snowman 协议 代币:AVAX 发行上限:7.2亿(创世区块首先供给3.6亿枚) 采用权益证明机制(POS),两种方式质押获取奖励:
交易费用机制:
下图是官方给出的雪崩链与传统链的对比: ?总结来看,雪崩链的优势:
二、Avalanche 的架构与传统区块链不同,Avalanche 不是一条区块链,而是许多区块链的集合,类似波卡。更准确的说,?Avalanche?由很多个子网构成,子网下有很多条的区块链。 而在子网中,有一个特殊的子网,叫?Primary Network。它由3条区块链构成:
?那么什么是子网呢?子网是一个验证小组:子网中有很多个验证节点,这些节点的工作是验证该子网下的单个或多个区块链。子网会设置成员资格条件,只有满足条件的验证者才能加入该子网。比如:
另外子网还具有以下三个特点:
接下来,我们来深入看一下 Primary Network 中的一些细节。Primary Network 相当于 Avalanche 的主网,负责验证 P链、X链和C链。这里也就明白了,为什么所有验证节点必须参与验证 Primary Network。因为节点越多越安全,Primary Network 负责的是整个 Avalanche 生态的安全。 P链、X链和C链的数据结构:P链和C链采用的是与传统区块链相同的线性结构,而X链的数据结构不是线性的,是一种叫做有向无环图的数据结构,简称Dag(之后会讲)。 共识协议:X链采用的共识协议也与其他链不同。X链采用 Avalanche 共识,P链和C链采用 Snowman 共识(两个共识的区别和实现方式会在之后说明)。 ?最后举一个形象的例子总结下Avalanche的架构。我们可以将 Avalanche 比作大学的一个专业,Primary Network 就是必修课,其他子网是选修课。所有同学相当于节点,同学们必须上必修课课程(维护网络安全),而选修课(相当于其他子网)可以由同学们自由选择。 有些同学想毕业后出国进修,所以他们会选择英语课(相当于实现特定功能的子网)。为了更好的完成英语的学习,同学们会组织各种学习小组(相当于区块链),如听力小组、作文小组等。 三、Avalanche 共识协议共识是指一系列验证者对一个决议或决策达成一致的过程。在分布式系统过去40多年里,共识协议可以分成两大类,即经典共识协议(Classical Consensus Protocols)和中本聪共识协议(Nakamoto Consensus)。 Avalanche 共识就是将这两大类共识的优点结合,形成的新一代共识协议。Avalanche 共识协议让所有节点并行工作,随机询问其他验证者。经过足够多的重复子采样后,交易就可以大概率被认定为真。所以 Avalanche 共识是一种概率共识,,把出错的概率降到 几亿分之一。 (一)雪崩共识Avalanche 共识的灵感来源于“吃瓜”,学术上叫 Gossip Network。比如某明星爆绯闻后,公众会有 “相信” 与 “不相信” 两种倾向。这个时候,小明就会询问身边的朋友或看微博评论以获取别人的观点(相当于对身边的人做抽样)。当获得的小样本的观点倾向于 “相信” 时,小明就会受到影响,也倾向于选择 “相信”。不光小明会 “吃瓜”,小红、隔壁老王、路人甲都会用类似的方法 “吃瓜”,很快,越来越多的公众就会对本次绯闻事件达成共识。即使过程中某明星出来辟谣(相当于作恶节点),但还是会向着某一个方向达成共识。接下来具体阐述 Avalanche 共识是如何实现的。Avalanche 共识的发展经历了4个阶段,每个阶段都在前一个基础上进行了升级。 1. Slush第一个阶段是Slush, 是最简单的协议,也是雪崩共识家族中最基础的协议。Slush 中有很多节点,每个节点都有三种状态,即无状态、真和假,分别用黄色、蓝色和红色表示。 节点从无状态,即黄色开始。当某个节点收到交易后,该节点作为发起节点:
?以上过程,称为?子采样。由某个节点发起小样本抽样以达成局部共识。注意这里不是询问全部节点,而是随机询问小批量的节点,原理类似于机器学习中的小批量梯度下降,这是 Avalanche 速度快的一个原因。 只进行一轮子采样得到的结果是不可靠的,子采样会受到样本的随机扰动影响。只有进行足够多轮的子采样,也就是,重复子采样,才能大概率的确信该笔交易是否为真。 单个节点需要做的就是重复子采样。当某个节点被询问后,也就是被抽样后,相当于被激活,该节点就像之前第一个节点收到交易一样,重复着第一个节点需要做的工作。 首先,被激活的节点选择一个颜色,这里一个选择红色一个选择蓝色。然后分别进行重复子采样,并根据采样结果更新自己的选择。下边的节点收到的采样结果还是蓝色,所以状态不变;上边的节点将自己的状态更新为蓝色。 需要强调的是,为了演示方便,我只选择了2个。实际上被询问的5节点全部被激活,整个过程是并行的。信息传递的速度也是指数级别传播的,所以传播的速度会越来越快。就像滚雪球一样,开始很慢,逐渐加快速度,直到收敛,即达成共识。 Slush 具备以下特点:
需要注意的是,当存在拜占庭节点或作恶节点时,Slush 协议安全性是不够的,这就引出了 Snowflake。 2. SnowflakeSnowflake 协议属于拜占庭容错算法(BFT),在 Slush 的基础上对每一个节点增加了一个计数器(counter)。具体来说:
也就是说,计数器记录的是连续获得相同颜色的次数,连续获得相同颜色的次数越多,说明分歧越小,当前结果的可靠性越高,当超过某个阈值时,就可以说该交易大概率是蓝色(或真)。 计数器可以防止拜占庭节点带来的负面影响。拜占庭节点通过引入不确定性,即他们的选择与诚实节点相反,以此来阻碍网络达成有效共识。 如果有拜占庭节点作恶,计数器的值会更频繁的归 0,很难超过阈值 β。对于拜占庭节点来说,只是在不停的重复子采样而不被接受,一直在做无用功。 3. SnowballSnowball 在 Snowflake 原有计数器基础上增加了置信度(confidence)。Snowflake 中的计数器的记忆是短暂的,只能记录当前的数值,而不会保存历史的数值。而 Snowball 中 的置信度则记录了历史数值。 每一轮的子采样,都会带来随机扰动。而置信度考虑了历史数据,减少随机扰动带来的影响。 4. Avalanche最终,Avalanche 在 Snowball 的基础上添加有向无环图(DAG:Directed Acyclic Graph)。DAG 是一种非线性的数据结构,而像比特币、以太坊等传统区块链的数据结构是线性的。一个明显的区别是一个 DAG 节点可以有多个父节点和多个子节点,而线性结构的节点只能有一个父节点和一个子节点(分叉不算)。 而 Snowman 共识建立在 Avalanche 共识之上,但对交易进行线性排序,即数据结构类似于比特币的线性结构。 四、具体的例子举一个具体的例子来说明重复子采样、计数器和置信度如何在 Avalanche 共识中发挥作用。 假设每个区块只打包一笔交易,每轮子采样随机询问5个节点。β 等于6,即当计数器数值达到 6 时,该交易被接受。明确三个概念:
下图,交易B有2个后代D 和 E,B、D、E在上一轮子采样后均获得1个chit,所以交易B的置信度为3。交易A 有4个后代,其后代和自己都有1个chit,所以置信度为 4 + 1 = 5。 计数器计算方法类似,交易B的2个后代和自己都获得了1个chit,所以计数器的值应该为3。 当收到新交易G时,经过一轮子采样,交易G获得了多数认可,获得了1个chit。因为交易G为其他区块的后代区块,所以其他区块的置信度和计数器均加1。交易A的计数器数值从5变为6,满足了阈值 β 的要求,故被接受。 如果有人发动双花攻击,出现一笔与G冲突的交易G’,G 和 G’ 被放到冲突集合中。G’子采样没有获得多数认可(比如只获得了5个节点中的2票),所以G'没有得到chit。交易G'作为交易B和D的后代,交易B和D的计数器重置为0,置信度不变。而之前已经被接受的交易A不受影响。 对于两笔冲突的交易G和G'(即double spend,双花),各节点会接受置信度更高的交易G,并在其后边继续出块。 注:上面例子中的方框代表着一个一个的区块(官方命名为vertex,而不是block,为了好理解就本文还是叫成区块),每个区块包含父区块的哈希值和一些列交易。多笔交易被打包到区块后,看做一个整体被投票。如果一个区块被接受,那么其中的所有交易就都被接受;如果区块中有一笔交易不被认可,那么该区块以及其所有后代中的交易都被拒绝。 |
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:45:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |