系列目录

分布式共识算法 (一) 背景

分布式共识算法 (二) Paxos算法

分布式共识算法 (三) Raft算法

分布式共识算法 (四) BTF算法

一、引子

前面介绍的算法,无论是 Paxos 还是 Raft 都只能解决非拜占庭将军容错的一致性问题(CFT,Crash Fault Tolerance),不能够应对“故意的发送错误信息”问题。
本节我们分析一下,BFT(Byzantine Fault Tolerance)伪造信息的拜占庭错误。常见的有工作量证明(PoW)、权益证明(PoS)、委托权益证明(DPoS),这些算法在区块链得到广泛应用。

二、常见BFT共识算法

2.1 POW算法

工作量证明(POW,Proof-of-Work)是一个用于阻止拒绝服务攻击的协议,它在 1993 年被 Cynthia Dwork 和 Moni Naor 提出,它能够帮助分布式系统达到拜占庭容错。

1. 算法核心

使用穷举法,不停的用哈希算法(比如SHA-256)去运算,直到使得运算出的哈希值前面若干位都是0,即小于某个值。掌握了全网51%的算力,就可以所有结果。

SHA-256:是由256位二进制的数字(0和1)构成,转换后由64位16进制的数表示,比如:6b88c087247aa2f07ee1c5956b8e1a9f4c7f892a70e324f1bb3d161e05ca107b。

这个工作量随着哈希值前面0的位数的增加而呈指数型的增加,但是检验这个哈希值只需要进行一次哈希运算就可以了。

2.特点

完全去中心化,安全性高,每个节点是公平的,被攻击成功的可能性小。需要耗费大量的算力,造成能源浪费,交易吞吐量有限。
3.应用

比特币,莱特币.每秒个位数交易量。

2.2 POS算法

权益证明(POS,Proof-of-Stake)最早在2013年被提出,并在Peercoin系统中实现,类似股东机制,拥有股份越多的人越容易获取记账权。

1.算法核心

通过保证金来对赌一个合法的块成为新的区块,收益为抵押资本的利息和交易服务费。保证金越多,获得记账权概率越大。恶意参与者存在保证金被惩罚的风险。一般情况下,掌握超过全网1/3的资源,才可能左右最终的结果。

2.特点

POS不需要消耗大量的电力就能够保证区块链网络的安全性,也不需要在每个区块中创建新的货币来激励矿工参与当前网络的运行,缩短了达成共识所需要的时间。

3.应用

Ethereum 每秒大概能处理 30 笔交易左右。

2.3 DPOS算法

委托权益证明(DPOS,Delegated Proof-of-Stake)能够让每一个人选出可以代表自己利益的人参与到记账权的争夺中,这样多个小股东就能够通过投票选出自己的代理人,保障自己的利益。整个网络中选举出的多个节点能够在 1s 中之内对 99.9% 的交易进行确认
1.算法核心:
在委托权益证明中,每一个参与者都能够选举任意数量的节点生成下一个区块,得票最多的前 N 个节点会被选择成为区块的创建者组,下一个区块的创建者就会从这样一组当选者中随机选取,除此之外,N 的数量也是由整个网络投票决定的,所以可以尽可能地保证网络的去中心化。
 
应用:使用委托权益证明的 EOS 能够每秒处理几十万笔交易。

========参考==========

https://www.jianshu.com/p/f73cee95821e

https://blog.csdn.net/yangwei256/article/details/83023649

分布式共识算法 (四) BTF算法(区块链使用)的更多相关文章

  1. 分布式共识算法 (二) Paxos算法

    系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.背景 1.1 命名 Paxos,最早是Le ...

  2. 分布式共识算法 (三) Raft算法

    系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.引子 1.1 介绍 Raft 是一种为了管 ...

  3. 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述

    共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...

  4. 老K漫谈区块链的共识(3)——分布式系统和区块链共识

    1. 啥是分布式系统 当我们评价一个新的事物或者介绍一个新的技术的时候,我们不能架空历史和环境,新的事物不可能脱离历史和环境凭空诞生.任何新的事物和新的技术总是或多或少的,与旧的事件以及过去的技术有所 ...

  5. (转)区块链共识机制分析——论PoW,PoS,DPos和DAG的优缺点

    近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读.作为第一批区块链技术的实现,传统比特币与以太坊在共识机制.存储机制.智能合约机制.跨链通讯机制等领域并没有非 ...

  6. 老K漫谈区块链的共识(1)——免信任的共识机制

    老k,柏链道捷CTO.清华阿尔山区块链研究中心高级工程师,超过17年的系统软件开发经验,在操作系统.编译器.虚拟机和符号执行方面都有实战经验.主持开发多个开眼项目,目前主要从事区块链底层系统开发工作. ...

  7. 一、Bitcoin比特币与BlockChain区块链技术

    一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...

  8. 001-Bitcoin比特币与BlockChain区块链技术

    一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...

  9. MaidSafe区块链项目白皮书解读

    MaidSafe.net宣布项目SAFE到社区 1. 介绍 现有的互联网基础设施越来越难以应付超过24亿互联网用户的需求,这个数字在2017年预计将增长到36亿.今天的架构中,中央中介(服务器)存储并 ...

随机推荐

  1. java(三)基础类型之间的转换

    自动类型转换:容量小的类型自动转换成为容量大的数据类型,数据类型按容量大小排序为: 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后在进行运算: byte.shor ...

  2. Jmeter-Java请求实战

    1.1. jmeter-java插件实现接口测试 (linux /mysql/rabbit-mq) 本次需要准备环境 Eclipse+jdk8 Jmeter Python 1.1.1. Rabbit- ...

  3. 网络聊天室---node.js中net网络模块TCP服务端与客户端的使用

    //1.简单创建 net服务器 // const net = require("net"); // const server = net.createServer((c)=> ...

  4. SpringMVC跟Struts2的区别

    SpringMVC跟Struts2的区别 1.SpringMVC的入口是servlet:Struts2的入口是Filter. 2.SpringMVC性能方面会比Struts2好一点,SpringMVC ...

  5. 死磕 java同步系列之Semaphore源码解析

    问题 (1)Semaphore是什么? (2)Semaphore具有哪些特性? (3)Semaphore通常使用在什么场景中? (4)Semaphore的许可次数是否可以动态增减? (5)Semaph ...

  6. 使用dapper遇到的问题及解决方法

    在使用dapper进行数据查询时遇到的一个问题,今天进行问题重现做一个记录,免得忘记以后又犯同样的错误. 自己要实现的是:select * from tablename where id in(1,2 ...

  7. 13. 罗马数字转整数(C#)

    看到这道题,存在键值对,所以先建个泛型字典,把键值填进去. 由于这道题存在两个字符表示一个数字的情况,所以在for循环的时候判断一下,看看当前字符串中循环到的字符是否和下一个字符能够组成存在在字典里的 ...

  8. java基础(31):网络通信协议、UDP、TCP

    1. 网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通 ...

  9. 适合初学者的Python爬取链家网教程

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TinaLY PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  10. CSS3 新增选择器

    CSS3 新增选择器 结构(位置)伪类选择器(CSS3) :first-child :选取属于其父元素的首个子元素的指定选择器 :last-child :选取属于其父元素的最后一个子元素的指定选择器 ...