algorand共识协议_【Filecoin】理解预期共识 - 及它的优缺点

b957bb3bda6e5932ae78614bc7b06858.png

摘 要

  • 预期共识就是上帝掷飞镖
  • 预期共识的优点在于简单,而且每一次选举胜出者数量的平均数为1
  • 但预期共识不能保证每次选举的胜出者数量,这是其最大的问题
  • 期待有更好的基于可验证随机函数的共识算法出现,设计者可获得20万美金奖赏

dc6274c6f6f66b99a929422768dbd87f.png

预期共识 就是 上帝掷飞镖

为了不使此文显得枯燥乏味,今天一上来先用最简单的方式来解释预期共识,保证高中生能够看懂。

预期共识(EC:Expected Consensus)是一种 PoS (这里S可以理解为 Storage Service,及存储服务的贡献)的实现。目标是是的矿工出块的权益与自己对存储的贡献成正比,也就是说,矿机被使用的存储空间在整个网络中的总使用空间中所占比例,就是此矿机能够出块的概率。这是大家都了解的,也认为这是非常公平,且对整个网络起到良好促进作用的设计。

我在文章《让上帝掷骰子 - 对共识机制的浅层分析》一文中对区块链共识机制的要素和共同特点已经有过描述,这里不再重复,但是,要知道的是,无论什么共识机制,一定要具有公平性、不可预知性、可验证性和可行性(不能太复杂)。预期共识,作为Filecoin目前采用的共识算法,是一种简单的共识算法,基本符合上述要求。那么它是如何做到的呢?

这里我为了形象说明,不使用骰子这个比喻,而采用另一个方法:掷飞镖。预期共识的每一轮出块最重要的一个步骤就是选举,这里的选举实际上就是自己进行计算,其实不需要大家投票。按照掷飞镖的来看,基本上分成以下几个步骤:

  1. 每一个矿工面前有一个大飞镖盘,面积与整个网络的总算力相当(这是已知的),每个人都一样;
  2. 每一个矿工的算力各有差异,仅占总算力的一小部分。每一个矿工的飞镖盘上都有一块材料是木头的,面积与此矿工的算力相当;而其他部分都是金属的;
  3. 但是飞镖盘上面蒙上了一层纸,哪一部分是木头的不知道,也就是说,只有上帝知道(这有系统的可验证随机函数确定,主要通过散列和签名实现)
  4. 每一个矿工自由掷出飞镖到飞镖盘,命中木头部分,上靶(胜出),否则,掉落(等待下一轮继续)。
  5. 下一轮重复,但注意,木头部分每一轮都会换地方,只有上帝知道换到了哪里。

每一轮上靶者称为这一轮的 Leader,即选举胜出者,有资格出块。我们来看一下是否符合上面说到的几个特点:

  • 公平性:没问题,算力大的矿工命中的机会大, 机会与算力成正比
  • 不可预知性:只有上帝知道木头材料分布在哪些地方,不能预知(实际上是利用hash算法的不可逆来实现的)
  • 可验证性:这个就涉及到VRF(可验证随机函数)的问题了。简单地着,前面所谓的木头部分在哪里,其实不是随意的,而是通过密码学算法确定的,只是这些密码学算法的不可逆性,保证了对网络来说的随机性
  • 可行性:预期共识仅仅需要每个矿工在本地计算就可以了,非常简单,实现起来很容易,计算复杂度低。没问题。

为什么还有人说不够好

看了上文,是不是觉得这么棒的东西,太好了!但你要知道,协议实验室对这个算法是不满意的,只是在没有新的更好的算法出来之前,考虑使用此算法。而且,协议实验室悬赏20万美金给更好的算法的提出者。那问题在哪里?

问题就在于,上面的每一个飞镖盘都是独立的,每个人的运气也是独立的。也就是说每个人命中的可能性也是独立的。那是不是在每一轮中,有可能所有人都不上靶,一个人也选不出来;当然也有可能有好几个人都上靶,这样就会有好几个人出块了。再想一想,是不是存在这样的概率所有人都上靶,理论上有,但如果人比较多,概率极低。

这就不是很理想了,因为有些轮没有人出块,交易(消息)的过程就会延长;如果有些轮有多个人出块,这些块中的消息信息基本上都是重复的,占用区块空间,浪费。

所以呀,更好的算法当然是最好每轮都能出块,而且每一轮都只有一个矿工上靶(具有出块资格)。可以想象,这样的算法当然需要整个网络进行协调,进行真正的选举,那这样是不是复杂度提高了,是不是可行呢?目前有好些算法被提出来,可以查询CoA, Snow White, AlgoRand等。但是,有些过于复杂,有些不适合Filecoin。

希望各位算法高手,看在奖金的份上,加油吧!

为什么叫预期共识?

回到一个傻傻的问题,为什么这个共识被称为预期共识(Expected Consensus)。高中生一定还记得概率论中学过数学期望(Mathematical Expectation)。这里 Expectation 是 Expect 的名词形式。也就是说一种期望,表明一种概率情况下的平均值。

再回到我们前面的掷飞镖游戏,想像每一个矿工的算力加起来是不是等于总算力?在这种情况下,每一轮掷飞镖的胜出者数量的数学期望值就是 1,即平均下来就是一个人中靶。

因为期望每一轮一个人中靶,而实际上预期共识算法仅实现平均下来一个人中靶,就叫它预期共识(Expected Consensus)吧。

真正的算法(前方高能)

具体可参见白皮书或相关文档,这里简单做一些解释,欢迎探讨。

如果一个矿工在一轮计算中下式成立,中靶,具有出块资格。

af32cd05dc316360d7d56186bf054691.png

不等式左边:H 为不可逆hash函数(比如 SHA256); L为 H 函数值的所占二进制的位数,这里保证了左边是一个0%到100%之间的一个值;

H 函数内的 <t||rand(t)>是在第 t 轮的一个全网统一的随机数,这个在第 t 轮才会公布。

不等式右边:分子为第 t 轮本矿机所拥有的算力;分母为第 t 轮全网的总算力;当然整个式子就是本矿机在全网中算力的占比。

这个不等式就相当于,后边是你飞镖盘木质部分的占比,而左边是你的运气,如果人品不错,就击中了木质部分(中靶)

那么,如何保证每个矿工的木质部分位置随机呢?就靠下面这个定义:

7095898ed8410cc0c26f229b55ff9f56.png

也就是对上面的随机数进行签名,而签名函数本身是不可逆也是不可预知的,每个人都不同。这就只有上帝知道木质部分放到哪里了。


3dddf1592efc95a45c2e304be777833e.png
欢迎关注 胡飞瞳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android软件安全与逆向分析之Dalvik

注意点 首先&#xff0c;让我们来思考下面几个问题&#xff1a; 什么是Dalvik虚拟机? Dalvik VM与JVM有什么区别&#xff1f; Dalvik VM有什么新的特点&#xff1f; Dalvik VM的架构是怎么样的&#xff1f; 首先&#xff0c;我得承认第一个问题问得很傻&#xff1a;什么是Dalv…

在java中实现日期类型和字符串类型的转换大全(Date String Timestamp Datetime)

用Timestamp来记录日期时间还是很方便的&#xff0c;但有时候显示的时候是不需要小数位后面的毫秒的&#xff0c;这样就需要在转换为String时重新定义格式。 Date、String、Timestamp之间的转换&#xff01; [java] view plaincopyprint? public static void main(String[] ar…

c++ 多个线程操作socket要同步吗_基础知识深化:NIO优化原理和Tomcat线程模型

1、I/O阻塞书上说BIO、NIO等都属于I/O模型&#xff0c;但是I/O模型这个范围有点含糊&#xff0c;我为此走了不少弯路。我们日常开发过程中涉及到NIO模型应用&#xff0c;如Tomcat、Netty中等线程模型&#xff0c;可以直接将其视为 网络I/O模型 。本文还是在基础篇章中介绍几种I…

Http中的同步请求和异步请求

最近在上springmvc的JSON数据交换的时候&#xff0c;老师下课提了一个课后问题&#xff1a;什么是异步请求&#xff1f;什么是同步请求&#xff1f;我想大部分同学听到这个问题的时候应该和我一样不知所云。现在&#xff0c;给大家分享一篇关于同步请求和异步请求的小知识。举个…

Linux常用命令汇总--ln

1.功能&#xff1a;将一个文件或者文件夹链接到另外一个文件或者文件夹上。链接分为硬链接和软链接&#xff0c;硬链接可以看做是一个文件具有多个访问的入口&#xff0c;软链接可以看成是快捷方式。2.用法&#xff1a;ln [选项] 源文件或目录 目标文件或目录3.参数&#xff1a…

用同一uuid作为两个字段的值_这两个小技巧,让SQL语句不仅躲了坑,还提升了 1000 倍...

作者&#xff1a;帅地个人简介&#xff1a;一个热爱编程的在校生&#xff0c;我的世界不只有coding&#xff0c;还有writing。目前维护订阅号「苦逼的码农」&#xff0c;专注于写「算法与数据结构」&#xff0c;「Java」,「计算机网络」。本次来讲解与 SQL 查询有关的两个小知识…

vue动态绑定类样式ClassName知多少

对于动态绑定类样式&#xff0c;之前用的最多的也就是&#xff1a;class"{classA:true}" &#xff0c;今天遇到一种情况&#xff0c;就是要给元素动态添加一个保存在数据源中的类样式&#xff0c;那前边的这种写法显然满足不了。 想起之前微信小程序中动态添加类样式…

C#深入浅出 关键字(一)

1.thisthis关键字用于指示当前对象“自己”&#xff0c;来看一个例子&#xff0c;了解什么时候需要用thisclass Star{String name;int age;public void SetInfo(string name,int age){name name;//注意此处的赋值age age;//}public void Show(){Console.WriteLine(name"…

利用platform库获取浏览器和操作系统版本

原生方法检测 网站获取用户的浏览器和操作系统版本是一个很常见的需求&#xff0c;但是细说起来这个功能的实现并不简单。一般情况下有两种思路。 一是利用用户代理UserAgent来判断浏览器和OS的版本&#xff0c;因为各个平台和浏览器的UA都不一样。但是这种方法存在一个局限性&…

linux桌面lxde 安装_观点|最新精简型 Linux 桌面环境大比拼:LXDE Vs. Xfce Vs. MATE

对于相当一部分 Linux 用户而言&#xff0c;性能永远是其追求的终极目标。无论他们使用的计算机已经太过陈旧&#xff0c;需要尽量发掘其中的有限潜能&#xff0c;还是希望凭借手中崭新的高性能系统承载全部高强度任务负载&#xff0c;让一切保持简洁。这些都是实现性能保障的重…

Android SQLite详解

在项目开发中&#xff0c;我们或多或少都会用到数据库。在Android中&#xff0c;我们一般使用SQLite&#xff0c;因为Android在android.database.sqlite包封装了很多SQLite操作的API。我自己写了一个Demo来总结SQLite的使用&#xff0c;托管在Github上&#xff0c;大家可以点击…

Catalan数的理解

Catalan数的理解 f(0)1f(1)1f(2)2f(3)5f(4)14f(5)42f(2)f(1)f(1)f(3)f(2)f(1)*f(1)*f(2)f(4)f(3)f(2)*f(1)f(1)*f(2)f(3)通项公式&#xff1a;f(n) f(n-1) f(n-2)f(1) f(n-3)f(2) ... f(1)f(n-2) f(n-1) 理解&#xff1a;固定一个&#xff0c;n-1个全在左边&#xff0c;n-…

Type interface mapper.UserMapper is not known to the MapperRegistry

Type interface mapper.UserMapper is not known to the MapperRegistry. 报错&#xff1a;Type interface mapper.UserMapper is not known to the MapperRegistry. 解决&#xff1a;已经解决&#xff1b;请查看mapper是否配置正确&#xff0c;我下面就配置错误了。 解决效果…

我看objective-C --不要把objC当做c/c++的超集

--不要把objC当做c/c的超集 我承认看objective-C的时间不是很长&#xff0c;连apple官网的objCpdf都没看完。 但是我已经感觉到很多介绍objC文章都说过的一句话是在误导初学者。那句话 就是objective-C是 c/c语言的超集。 我们在学与c/c相关的语言的时候很自然的想到java、c#这…

微信整人假红包图片_警惕:千万别点!这些红包是假的

春节将至&#xff0c;又到了“考验手速”的时候。近年春节&#xff0c;“抢红包”为大家带来了“新年味”与许多快乐。但是&#xff0c;有些不法分子却从中捣乱&#xff0c;制造了一些假红包企图骗取钱财。如何辨别“假红包”&#xff1f;这里总结了几种“假红包”类型&#xf…

SQL Server中SCAN 和SEEK的区别

SQL Server中SCAN 和SEEK的区别 SQL SERVER使用扫描&#xff08;scan&#xff09;和查找&#xff08;seek&#xff09;这两种算法从数据表和索引中读取数据。这两种算法构成了查询的基础&#xff0c;几乎无处不在。Scan会扫描并且返回整个表或整个索引。 而seek则更有效率&…

HDU 2897 (博弈 找规律) 邂逅明下

根据博弈论的两条规则&#xff1a; 一个状态是必胜状态当且仅当有一个后继是必败状态一个状态是必败状态当且仅当所有后继都是必胜状态然后很容易发现从1开始&#xff0c;前p个状态是必败状态&#xff0c;后面q个状态是必胜状态&#xff0c;然后循环往复。 1 #include <cstd…

C# 设置Excel打印选项及打印excel文档

C# 设置Excel打印选项及打印excel文档 打印Excel文档是一个很常见的操作&#xff0c;但有时候我们会碰到各种不同的打印需求&#xff0c;例如只打印一个Excel工作表的其中一部分&#xff0c;或打印时每页都有表头&#xff0c;或把工作表中超出1页所有内容打印到1页上等等&#…

tp5框架原理详解_笔记:TP5框架完整学习笔记

安装配置官网下载TP5完整版(初学者学习用的)解压到本地的开发环境phpstudy中&#xff0c;默认的入口文件是public&#xff0c;访问public会看到TP5成功页面。目录介绍一般开发中&#xff0c;代码都是写在application这个文件夹中开发一个项目的时候&#xff0c;通常分为前台和后…

mustache 模板使用

//一 ,基本使用 <!DOCTYPE html><html ng-app"myApp"><head lang"en"> <meta charset"UTF-8"> <title></title> <script src"jquery-1.10.2.min.js"></script> <script src"…