DPOS共识算法 -- 缺失的白皮书

2023-11-24 04:20

本文主要是介绍DPOS共识算法 -- 缺失的白皮书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考地址:
https://steemit.com/dpos/@dantheman/dpos-consensus-algorithm-this-missing-white-paper

这篇“缺失的白皮书”是对委托权益证明(DPOS)的分析,目的是为DPOS的工作原理及其鲁棒性根源提供一个分析。 DPOS的早期描述可以在bitshares.org上找到;不过,那个描述还包含了许多不属于实际共识过程的内容。

所有区块链本质上都是一种由交易驱动的确定性状态机。共识是商定确定性交易顺序和过滤无效交易的过程。有许多不同的共识算法都可以产生等效的交易排序,但DPOS已经通过在多个区块链上经年累月的可靠运行证明自身是健壮、安全和有效的。

像所有共识算法一样,块生产者可能导致的最大损害是审查。所有块的有效性必须基于确定性的开源状态机逻辑。

DPOS算法概要
DPOS算法分为两部分:选择一组块生产者和调度生产。选举过程确保利益相关方最终得到控制,因为当网络不能顺利运行时,利益相关方的损失最大。选举方法对实际运行中如何达成共识几乎没有影响,因此,本文将重点介绍如何在块生产者被选择之后达成共识。

为了帮助解释这个算法,我想假设3个块生产者A,B和C。因为共识(的达成)需要2/3+1多数来解决所有情况,这个简化的模型将假设生产者C是打破僵局的那个人。在现实世界中,将有21个或更多的块生产者。像工作量证明一样,一般规则是最长链胜出。任何时候当一个诚实的对等节点看到一个有效的更长链,它都会从当前分叉切换到更长的这条链。

我将举例说明在大多数想得到的网络条件下DPOS如何运行。这些例子应该可以帮助您理解为什么DPOS稳健且难以破坏。

正常操作
在正常操作模式下,块生产者每3秒钟轮流生成一个块。假设没有人错过自己的轮次,那么这将产生最长链。块生产者在被调度轮次之外的任何时间段出块都是无效的。

少数分叉
不超过节点总数三分之一的恶意或故障节点可能创建少数分叉。在这种情况下,少数分叉每9秒只能产生一个块,而多数分叉每9秒可以产生两个块。这样,诚实的2/3多数将永远比少数(的链)更长。

离线少数的多重生产
(离线的)少数人可以试图产生无限数量的分叉,但是他们的所有分叉都将比多数人的那条链短,因为少数人在出块速度上注定比多数人来的更慢。

网络碎片化
网络完全有可能碎片化,导致没有任何分叉拥有多数块生成者。在这种情况下,最长的链将倒向最大的那个少数群体。当网络连通性恢复时,较小的少数群体会自然切换到最长的那条链,明确的共识将恢复。

有可能存在这样三个分叉,其中两个最长的分叉长度相同。在这种情况下,第3个(较小)分叉的块生产者重新加入网络时会打破平局。块生产者总数为奇数,因此不可能长时间保持平局。稍后我们还会讲到生产者“洗牌”,它使得出块顺序随机化,从而确保即使是生产者数目相同的两个分叉也会以不同的步长增长,最终导致一个分叉超过另一个。

在线少数的多重生产
在这种场景下,少数节点B在其时间段内产生了两个或更多可供选择的块。下一个计划生产者(C)可以选择基于B产生的任何一种方案继续构建链条。一旦如此,这个选择就成为最长的链,而所有选择B1的节点都将切换分叉。少数不良生产者企图广播再多的替代块也无关紧要,它们作为最长链的一部分永远不会超过一轮。

最后不可逆块
在网络碎片化的情况下,多个分叉都有可能持续不断增长相当长的时间。长远来看最长的链终将获胜,但观察者需要一种确切的手段来判定一个块是否绝对处于增长最快的那条链。这可以通过观察来自2/3+1多数块生产者的确认来决定。

在下图中,块B已被C和A所确认,这代表了2/3+1多数确认,由此我们可以推断没有其它链会比这个更长 – 如果2/3的生产者是诚实的。

请注意,这个“规则”类似于比特币的6块确认“规则”。一些聪明人也许可以谋划一系列事件使得两个节点(应该是“交易”?)出现在不同的最后不可逆块上。这种边缘案例要求攻击者能完全控制通信延迟,并且在几分钟内两次--而不是一次--使用该控制。即便这真的发生了,那么最长链(胜出)的长期规则仍然适用。我们估计这种攻击的可能性足够接近0,且经济后果无关紧要,因此不足为虑。

生产者法定人数不足
在缺乏明晰的生产者法定人数这种不太可能的情况下,少数人还是可以继续出块。利益相关方可以在这些块里包括更改投票的交易。这些投票可以选出一组新的生产者,并将出块参与率恢复到100%。一旦如此,少数链将最终超过所有其他以低于100%参与率运行的链。

在此过程中,所有观察者都会知道,在一条参与率超过67%的链形成之前,网络状态是不定的。那些选择在此条件下进行交易的人所冒的风险与选择接受不到6个确认的人相似。他们知道存在这样一些小的可能性,即:共识也许最终在一个不同的分叉上建立起来。在实践中,这种情况比接受少于3个比特币交易确认的块要安全多了。

多数生产者舞弊
如果多数生产者变得腐败,那么他们可以产生无限数量的分叉,每个分叉都看起来以2/3多数确认向前走。这种情况下,最后不可逆块算法蜕变为最长链算法。最长链就是为最大多数所批准的那条链,而这将由少数剩下的诚实节点决定。这种行为不会持续很长时间,因为利益相关方最终会投票替换生产者。

交易作为权益证明(TaPoS)
当用户为一个交易签名时,他们是在对区块链状态的一定假设下这样做的。这个假设是基于他们对最近几个块的看法。如果最长链的共识发生改变,则潜在会使签名者之前的假设失效。

就TaPoS而言,所有交易都包含最近一个块的散列,如果该块在链历史中不存在则这些交易被认为是无效的。任何在孤儿分叉上给交易签名的人,都会发现该交易无效且无法迁移到主分叉。

该过程的一个附带作用是可以抵御试图产生替代链的长期攻击。每个利益相关方在每次交易时都直接对区块链做出确认。随着时间推移,所有的块都是由所有利益相关方确认过的,这在一条伪造链里是无法复制的。

确定性生产者洗牌
在上面所有例子中,我们展示的都是块生产者按循环调度出块。实际上,每出N个块(N是生产者数量),块生产者集合都会洗牌一次。这种随机性确保块生成者B不会总是忽略块生成者A,每当形成多个拥有相同数量生产者的分叉时,平局最终都会被打破。

结论
在每一个我们能想到的自然网络分裂的情况下,委托权益证明都是强健的,甚至在面对相当数量生产者舞弊的情形时也是安全的。不像其它共识算法,当大多数生产者不合格时,DPOS还是可以继续工作。在此过程中,社区可以投票替换掉不合格的生产者,直到恢复100%参与率。我还不知道有任何其它算法可以在如此高强度和变化多端的失败条件下依然保持强健。

说到底,DPOS引人注目的安全性来自于其选择块生产者和验证节点质量的算法。运用赞成投票的过程可以确保一个人即使拥有50%的有效投票权也不能独自挑选哪怕一个生产者。DPOS旨在优化拥有强壮网络连接的诚实节点100%参与(共识过程)的名义条件。这使得DPOS有能力在平均只有1.5秒的时间内以99.9%的确定性确认交易,同时以优雅和可检测的方式降级 – 从降级中恢复正常也不过是小事一桩。

其它共识算法以网络条件差的不诚实节点为名义条件展开设计,这样设计的最终结果就是性能更差、延迟更高、通信开销高的网络,而且这个网络在33%节点失效的情况下会完全停摆。

在BitShares成功运行三年以及在Steem运行一年期间,我们经历了各种各样的网络条件和软件错误。DPOS成功穿行于其间,在处理了比任何其它区块链更多交易的同时持续达成共识,展现了非凡的能力。

这篇关于DPOS共识算法 -- 缺失的白皮书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/421219

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

最大公因数:欧几里得算法

简述         求两个数字 m和n 的最大公因数,假设r是m%n的余数,只要n不等于0,就一直执行 m=n,n=r 举例 以18和12为例 m n r18 % 12 = 612 % 6 = 06 0所以最大公因数为:6 代码实现 #include<iostream>using namespace std;/