中心化和去中心化

  • 中心化模式:

    • 优点:效率高
    • 缺点:中间层次太多(组织层次连接)
  • 去中心化模式:

    • 缺点:效率低
    • 优点:没有中间层次(各个个体之间网状连接)
  • Q1: 如何设置一个规则让大规模无序的对象可以有序的完成意见事情,并且保证公正,公平? 这个就是需要制定一个共识机制。

中国古老的区块链项目(打麻将)

请四位美女定时周期性的单独为游客表演节目!

-Q1 决定谁为游客表演节目?

-Q2 为什么要给游客表演节目?(有什么好处)

  • 制定游戏规则(共识机制):四个美女通过打麻将的方式来决定谁来位游客表演节目--谁先胡牌谁为游客表演节目(所有人都承认的胡牌方式);表演节目后,能获得一定的奖励;

共识特点:

1. 四个人一组,谁先通过游戏规则(麻将的胡牌方式),谁就拥有记账权--表演节目。

2. 不可篡改--如果某人没有胡牌却想要说服其他三人承认自己胡牌,这种作弊的方式获取的代价太大;

3. 工作量证明。 大家都要花费时间大牌,都有可能胡牌,从而得到表演的机会,获得奖励;

4. 去中心化。 每个人都可以是庄,完全是点对点。

5. 每一轮只有一个庄家胡牌,下一轮就会有新的竞争,成为新的庄家;

6. 每一次胡牌为游客表演节目,就是产生一个区块的过程。

  • 共识就是所有人遵守一个规则。

比特币共识机制

  • 不断有转账交易发送到比特币网络中
  • 每个矿池都会收集所有交易记录,然后在头上加上一个正确的nonce(这个数据就叫一个区块Block),计算整个区块数据的hash,要满足一个规则(pow)
  • 如果正确计算出来了,就通知其他矿池确认,其他矿池确认无误后加入自己的区块列表中(区块链)

拜占庭将军共识机制

原型: 在中世纪,拜占庭帝国拥有巨大的财富,周围零帮垂涎已久。但拜占庭城池坚固,固若金汤,没有一个单独的邻邦能够成功乳清,任何单个的邻邦入侵都会失败,同时也有可能被其他邻邦乘机入侵。 所以要想入侵拜占庭帝国,至少需要一半以上邻国同时进攻才有可能成功!

然而, 如果其中的一个或几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭,于是每一个邻国都很小心,不敢轻易相信邻国!

拜占庭问题:

  • 假如拜占庭周围有6个邻国,编号0到6

  • 任何单独一个邻国都没法消灭拜占庭帝国

  • 只有大于等于4个领过一起才可以消灭拜占庭帝国(51%以上)

  • 6 个城邦大王不能坐在一起开会讨论

  • 6个邻国的势力相当

  • 6个邻国之间只能通过信使来进行通讯

  • 6个邻国都想打败拜占庭帝国瓜分财富

  • 6个邻国都想利益最大化

问题

  • 设计一个规则让6个邻国都相互信任,形成一个可信的通信方式
  • 如果攻破,财富如何分配

思考?

  • 对于拜占庭问题来说,假如邻国总数(节点总数)为N,叛变的邻国数(不可信节点|出错节点)为F,则当M>=3F+1,问题才解决(才能攻破拜占庭帝国), 如F=1,M=4 . 如何算出来的

    ## 实例
    - 设置:进攻命令为1, 按兵不动为0
    - 假设有四个将军: A,B,C,D
    - 其中有叛将和忠将
    - 4个将军相互发送消息给对方,最终来判断是否进攻
    • 假如A,C,D是忠将,B是叛将。 如下图相互通信过程

      • 最终A,C,D进攻
    • 假如叛将是A,忠将是BCD, 如下图

      • 最终BCD也会共识,是否是进攻

战国七雄问题(比特币)

  • - 故事描述: 秦国有祖传的2100万BTC
    - 周边的6个国家都想去抢比特币,一次能抢50BTC,于是故事就来了
  • 故事描述: 秦国有祖传的2100万BTC

  • 周边的6个国家都想去抢比特币,一次能抢50BTC,于是故事就来了

  • 任何单独一个国家都没法消灭拜占庭帝国

  • 只有大于等于4个领过一起才可以消灭拜占庭帝国(51%以上)

  • 6 个国家大王不能坐在一起开会讨论

  • 6个国家只能通过信使来进行通讯

  • 6个国家都想抢BTC,并且越多越好

-- 设计一套规则让0-6个大家都相互相信,形成一个可信的网络

-- 如果抢到BTC如何分配

故事是这样的开始的

因为是无需的:所以任何国王都可以发布消息告诉别国什么时间去抢币,这样的结果就是,会乱成一锅粥,最后商量到一个方案

  • 工作量证明(提高提按成本)

    1. 6个国家都派出一个选手约定一个地方来进行校场比武(工作量证明过程)
    2. 谁比武胜出了,就谁发出指令什么时候去抢秦国BTC
    3. 谁比武胜出了,抢的50个BTC就归哪一个国家所有

然后循环下一次比武

  • 比武的目的是为了本次抢50BTC临时公平选出中心
  • 比武只是方式(工作量证明方式),目的是为了选择一个中心(领导)
  • 比武的过程争夺领导权(BTC记账权)和BTC奖励
  • 去中心化不是去掉中心,而是人人都有可能成为中心(工作量证明)

比特币成功解决了拜占庭问题

  • 拜占庭问题之所以难解: 任何时候系统中都有可能存在多个提案(因为提问成本很低),并且要完成最终的一致性确认过程十分困难,容易受到干扰。但是一旦确认,即为最终确认

  • 设置工作量证明(proof of work)机制,让所有参与的节点都可以公平公正的在某个时间段成为中心,有领导权/记账权,限制了一段时间的提问个数(增加了提问成本,需要通过比武)

  • 全网胜出的节点可以记账同时获得奖励,需要其它节点确认,保证了一致性

  • 造假成本提高(比如麻将的造假,这样会浪费自己的宝贵赢钱机会)

  • 设置了工作量证明,让系统慢下来,反而有助于让分布式去中心化的系统一致性协调,从而解决达到共识机制

  • 工作量证明,比特币以Hash碰撞挖矿,麻将是以浪费时间,校场比武以输赢看似无用的东西来决出一段时间的中心,是去中心化协调必须的一种方式

  • 其他的工作量证明方式,Pow, Pos, DPos等,目的都是为了增加提按成本

区块链--Bitcoin共识机制的更多相关文章

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

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

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

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

  3. (二)区块链的共识算法:PoS 及其 例子 代码 实现

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  4. 区块链共识机制之工作量证明(POW)

    像比特币.以太坊.NXT.Bitshares等这些区块链系统,其本质上是一种加密经济组织,它建立在点对点网络上,是去中心化.无管辖的,由密码学.经济学和社会共识来共同维护.这些加密网络因各种原因有着多 ...

  5. 基于Tendermint的区块链漂流瓶简单实现

    本文主要借demo介绍基于Tendermint的区块链应用开发,这个demo很简单,主要包含以下功能: 扔漂流瓶 捞漂流瓶 之后投放者和打捞者可以相互传递[加密]信息 代码已上传至github. Te ...

  6. 百度云BaaS体系揭秘,突破共识机制、单机计算和串行处理三大瓶颈

    区块链作为去中心化的技术机制拥有广泛的应用场景与市场潜能.自2017年爆发式增长后,区块链虽然已经进入平稳期,但仍然存在概念混淆.技术性能制约.智能合约制约.共识机制.网络建设等痛点.为了打破行业壁垒 ...

  7. POW共识机制原理及优缺点

    PoW共识机制 POW工作量证明(英文全称为Proof of Work)在比特币之前就已经出现,中本聪在设计区块链的共识机制的时候就是借鉴了POW工作量证明.常见的是利用HASH运算的复杂度进行CPU ...

  8. 区块链学习7:超级账本项目Hyperledger与Fabric以及二者的关系

    ☞ ░ 前往老猿Python博文目录 ░ 一.超级账本(hyperledger) 超级账本(hyperledger)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,成员包括 ...

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

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

随机推荐

  1. November 15th, 2017 Week 46th Wednesday

    Of all the tribulations in this world, boredom is the one most hard to bear. 所有的苦难中,无聊是最难以忍受的. When ...

  2. 在HTML中使用object和embed标签插入视频

    object标签和embed标签都能给页面添加多媒体内容: 一.object 对于object,w3c上定义object为一个嵌入的对象.可以使用此元素向您的 XHTML 页面添加多媒体.此元素允许您 ...

  3. Netty入门(四)ByteBuf 字节级别的操作

     Netty 中使用 ByteBuf 代替 Java NIO 提供的 ByteBuffer 作为字节的容器. 一.索引 ByteBuf 提供两个指针变量支持读和写操作,读操作使用 readerInde ...

  4. HDU5629:Clarke and tree(DP,Prufer)

    Description Input Output Sample Input Sample Output Solution 题意:给你$n$个点,还有每个点的度数,问你任选$i(1\leq i \leq ...

  5. RMAN常用命令汇总!

    进入RMAN:$ rman target sys/oracle@orcl   --远程连接到rman$ rman target sys/oracle@orcl @backup_db.ram   --远 ...

  6. [转]MFC下关于“建立空文档失败”问题的分析

    这类问题的出现主要在bool CWinApp::ProcessShellCommand(CCommandLineInfo& rCmdInfo); 函数的关键内容: BOOL bResult = ...

  7. Linux系统扫描技术及安全防范

    1.概述 一.主机扫描 二.路由扫描 三.批量服务扫描 四.linux防范恶意扫描安全策略 一个典型的网络安全事件 ·案例:通过网络扫描方式获取某运营商核心设备管理权限 step01:通过tracer ...

  8. 【转】python直接运行tcl脚本

    python中调用tcl是通过加载TkInter来实现的. from Tkinter import Tcl tcl = Tcl() tcl.eval('source tu.tcl') tcl.eval ...

  9. python安装opencv

    执行命令:pip install opencv-python即可

  10. vi学习

    刚开始学习vi,所以,一步一步开始 先贴出一个相关的学习链接https://www.cnblogs.com/ranjiewen/p/5901181.html 这个学习链接里面的东西还是比较详细的,但是 ...