名字翻译:Power Fault Tolerance-影响力容错

关于这个名字翻译,小编思考了大约2周时间,期间也跟各路技术牛人进行了交流。

The Power Fault Tolerance model (PFT) unifies all these classes of protocols by modeling the influence participants have over the output of the protocol as power

这是filecoin协议里面对 PFT的解释,power概念就是矿工的影响力(influence),“Power”是filecoin系统的投票权力的大小度量,根据矿工贡献的Power来计算矿工的投票权有多大,根据信达雅的基本要求,所以称为“影响力容错”。之前曾经考虑过“权利容错”和“权益容错”,“权利”这个词本身表达不了大小的概念,而“权益”又跟Proof of Stake(权益证明:EC共识是在这个基础上进行的,有必要区分)有冲突,于是小编把这个词翻译成影响力容错或许有更贴切的表达方式,欢迎讨论!

共识(Consensus):拜占庭共识

共识---一个区块链领域领域里面经常谈起的一个概念,任何区块链都无法绕开的一个问题。在我们的日常生活中,绝大多数机构都是中心化的,一家银行,快递公司,电商网站等等。共识是在参与者之间达成一致。由于中心化的机构由中心化的机构本身来维护共识,比如:银行,帮我们所有人记账,由国家权力保障,我们信任银行,这是我们的经济得以发展的基础。

在区块链领域里面,所有节点都是对等节点,就是说没有任何一个节点有超越其他节点的权限。那么想在这么一个一盘散沙的节点中维护一个共识是一件非常难的事情,试想一下,大广场上有1000个平等的互相不信任的人,要让他们对一件事情做出共同的决策,其难度有多高?

起源

在学术界里面这个问题起源于1982年Leslie Lamport(图灵奖获得者)在他的论文里面提出的“拜占庭将军问题”(Byzantine Generals Problem),目的是解决分布式对等网络的通信容错问题。

拜占庭将军问题描述:

简单的描述:假设有9个拜占庭将军共同围困一座城市,将军之间都是平等的,他们的对于城市的策略只有两种:进攻和撤退。如果一部分进攻一部分撤退,将会造成灾难性的后果。9个将军分布在城市的不同方向,只能通过信使进行通信。那么他们要达成一致,就需要进行投票,每位将军根据收到的情报来决定进攻还是撤退。

问题是将军里面会有叛徒,比如:当将军的投票达到4个进攻4个撤退的时候,叛徒将军可以采取对4个进攻的将军投进攻票,对4个撤退的将军投撤退票。决策的最终结果就会崩溃,一部分将军选择了进攻,一部分将军选择了撤退。

围观一下牛人:Leslie Lamport

在这个问题中,将军投票达成一致协议,就叫做拜占庭共识,在有将军叛变的情况下仍然能够达成正确的共识就做拜占庭容错,当然这是一个很简化版的描述。(小编在巴比特上面找到一个讲的比较全面的,大家可以参考一下:http://www.8btc.com/bitcoin-and-the-byzantine-generals-problem)。

将这个问题转换到计算机里面,对等节点之间的通讯是通过电信号进行的,电信号是会出现各种干扰(例如磁场),0和1最终可能会发生错误。

这个难题困扰了学术界很久很久,直到1999年Miguel Castro和Barbara Liskov提出了实用拜占庭容错算法PBFT(Practical Byzantine Fault Tolerance),提供了(n-1)/3节点的容错。这是一个非常了不起的成就(算法的具体过程不属于本文的讨论范围,有兴趣的读者可以自行Google一下)。

2009年中本聪使用工作量证明(Proof of Work)解决了这一问题,使得BTC能够成为现实。

那么具体到Filecoin上,Filecoin是如何解决拜占庭容错的呢?

Filecon在拜占庭容错BTF的基础上提出了改进版的拜占庭容错,这就是 影响力容错(Power Fault Tolerance)和预期共识(Expected Consensus),用来替代能源和计算资源严重浪费的工作量证明(Proof-of-Work)机制。

Filecoin的分布式网络协议可以使用任何共识协议来实现,完全可以使用BTC的机制(Proof-of-Work)。但是BTC的工作量证明带来的问题是能源和计算资源的巨大浪费,于是Filecoin协议抛弃这个共识机制,使用Proof-of-Spacetime(PoSt)来替代工作量证明,PoSt是filecoin在验证矿工存储用户数据的时候产生的,Filecoin把矿工在网络中的当前存储数据相对于整个网络的存储比例转化为矿工投票权(voting power of the miner),重用PoSt来产生共识,太环保了,不用像BTC那样浪费计算资源和能源,并且能激励矿工投入更多的硬盘而不是计算资源和能源,为网络做贡献-----完美!!!

预期共识(Expected Consensus,EC):

Filecoin的共识协议是基于权益共识(Proof-of-Stake)构建的,将权益共识里面的权益(stake)换成了存储,这就是Filecoin的预期共识(Expected Consensus),策略是每一轮里面选举出来一名或者多名矿工来创建新的block,矿工赢得选举的可能性跟矿工已分配的存储成比例。

在每一个周期里面,预期选举出来的领导矿工(Leader)是1个,但是在某些情况下也会选举出来多个领导矿工。被选举出来的矿工创建新的block,并把新的block对网络进行广播。尽管链中的block是线性的,但是filecoin的block数据结构采用的DAG(有向无环图),可以在同一时间产生多个block(所以Filecoin的交易要比BTC的有效的多,这也是为什么把filecoin叫做“可能的blockchain 3.0”)。

共识是一个区块链领域的核心,区块链天生就是对等的分布式网络,这就是所谓的去中心化。去中心化现在被吹的有点过了,去中心化不是万物的灵药,只是在自己领域里面有独特的作用,中心化的效率还是非常高的。所以不应一味的强调去中心化,而是应该根据实际的应用场景来决定使用范围。相信区块链的共识协议会随着区块链的发展进化出更加美好的共识协议,区块链也会逐步进化,成长!

作者飞向未来,致力于IPFS/Filecoin在中国的技术推广,他的微信公众号和社群,目前是中国最活跃最顶级的IPFS社群。作者飞向未来是圆方圆区块链的特邀嘉宾,所有转载都已经得到飞向未来本人授权。

更多飞向未来导师的公众号,可以在IPFS指南公众号中找到。

圆方圆链圈

 

Filecoin: 影响力容错(PFT)和预期共识(EC)的更多相关文章

  1. Filecoin:一种去中心化的存储网络(二)

    开始初步了解学习Filecoin,如下是看白皮书的内容整理. 参考: 白皮书中文版 http://chainx.org/paper/index/index/id/13.html 白皮书英文版 http ...

  2. seleium 之 EC 的用法

    场景 Expected Conditions的使用场景有2种 直接在断言中使用 与WebDriverWait配合使用,动态等待页面上元素出现或者消失 方法注释 先翻译一下这些方法的用法 title_i ...

  3. 浅析Facebook LibraBFT与比原链Bystack BBFT共识

    如果说什么是区块链的灵魂,那一定是共识机制. 它是区块链的根基.无论公链或是联盟链,共识机制都从基础上限制了区块链的交易处理能力和扩展性. 2019年6月18日,Facebook 发布了自己 Libr ...

  4. Hadoop 3.0 EC技术

    Hadoop 3.0 EC技术 EC的设计目标 Hadoop默认的3副本方案需要额外的200%的存储空间.和网络IO开销 而一些较低I/O的warn和cold数据,副本数据的访问是比较少的(hot数据 ...

  5. Block Chain Learning Notes

    区块链是什么 区块链技术是由比特币创造的,本文也将从比特币开始进行引导,一步一步告诉大家什么是区块链.如果你想立马知道区块链是什么,也可以直接转到文章末尾的区块链定义. 区块链,可能是当下最有前景又充 ...

  6. 如何阅读一本书([美] 莫提默·J. 艾德勒 / 查尔斯·范多伦 )

               进入豆瓣读书 前言 2017年1月2日跟着熊猫书院开始了为期十月的阅读计划. 熊猫书院是一个微信公众号,但仅对熊猫书院学员开放.它是一个很好的读书产品,从入学申请.入学报到.班长 ...

  7. python selenium expected_conditions使用实例

    今天正好虫师问到selenium python binding中support.expected_conditions的用法,顺手总结了一下,希望对大家有所帮助. 场景 Expected Condit ...

  8. web自动化测试-selenium的三种等待

    一.等待的作用 1.在系统的功能运行过程中,所有的内容是需要一定的时间来实现展示, 2.时间耗费长短与网络速度.系统框架设定.接口的执行复杂度有关, 3.因此需要设置缓冲时间,若未设置缓冲时间,容易导 ...

  9. Selenium 对元素的判断(expected_conditions)(转载)

    我们在用webdriver去操作元素时,先要判断这个元素是否存在,存在才去操作,否则就会报错. selenium的expected_conditions模块提供了一些判断方法 场景 Expected ...

随机推荐

  1. python模拟登录浙江大学彩云库

    前言: 群里一位朋友叫我帮他写 一个模拟登录的. 代码: import requests import time url="http://yk3.gokuai.com/web/index&q ...

  2. Eclipse远程调试hadoop源码

    1. 修改对应调试端口 之前的一篇blog里讲述了hadoop单机版调试的方法,那种调试只限于单机运行hadoop命令而已,对于运行整个hadoop环境而言是不可取的,因为hadoop会开启多个jav ...

  3. java常用字节流

    常用的字节流有FileInputStream和FileOutputStream.BufferedInputStream和BufferedOutputStream.DataInputStream和Dat ...

  4. Android热修复(动态加载)方案汇总

    整理了以下动态加载的方案,便于在项目中使用时查阅: Dexposed github (https://github.com/alibaba/dexposed) AndFix github (https ...

  5. stm32开发之使用Keil MDK以及标准外设库创建STM32工程

    ‑6 MDK详细版本信息 ‑8保存路径的选择 ‑9选择芯片型号 ‑10拷贝启动代码选择 ‑11选择 Manage Comoonents ‑12编辑组并添加对应文件 ‑13工程管理文件列表 ‑14选择进 ...

  6. Error Code: 1414. OUT or INOUT argument 2 for routine company.new_procedure is not a variable or NEW

    1.错误描述 16:27:36 call new_procedure(20150112,1) Error Code: 1414. OUT or INOUT argument 2 for routine ...

  7. Flex中怎么给表格中的滚动条定位

    1.问题背景 如果表格中的字段过多,会出现滚动条,在将滚动条滚到一定的位置时,重新刷新表格,滚动条会回到原处,原来查看的字段还得继续滚动,才能查看到. 2.实现实例 <?xml version= ...

  8. Openstack_O版(otaka)部署_Horizon部署

    控制节点 1. 安装软件包 yum install openstack-dashboard -y 2. 修改配置文件 vim /etc/openstack-dashboard/local_settin ...

  9. hdu5893 List wants to travel

    裸的树链剖分加线段树区间修改 区间合并时需要多注意一点 当时写的很慢 理解不深刻 #include<bits/stdc++.h> using namespace std; const in ...

  10. Word巧用大纲视图 快速重排版面

    对于由于内容顺序混乱而造成的目录顺序不当的文章,通常我们一定会想到先对文档内容进行手工排序,然后重新提取目录.但这样操作显然麻烦,而且也容易出错.对于从正文内容自动提取出来的目录,由于按住Ctrl键单 ...