区块链--Bitcoin共识机制
中心化和去中心化
中心化模式:
- 优点:效率高
- 缺点:中间层次太多(组织层次连接)
去中心化模式:
- 缺点:效率低
- 优点:没有中间层次(各个个体之间网状连接)
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如何分配
故事是这样的开始的
因为是无需的:所以任何国王都可以发布消息告诉别国什么时间去抢币,这样的结果就是,会乱成一锅粥,最后商量到一个方案
- 工作量证明(提高提按成本)
- 6个国家都派出一个选手约定一个地方来进行校场比武(工作量证明过程)
- 谁比武胜出了,就谁发出指令什么时候去抢秦国BTC
- 谁比武胜出了,抢的50个BTC就归哪一个国家所有
然后循环下一次比武
- 比武的目的是为了本次抢50BTC临时公平选出中心
- 比武只是方式(工作量证明方式),目的是为了选择一个中心(领导)
- 比武的过程争夺领导权(BTC记账权)和BTC奖励
- 去中心化不是去掉中心,而是人人都有可能成为中心(工作量证明)
比特币成功解决了拜占庭问题
拜占庭问题之所以难解: 任何时候系统中都有可能存在多个提案(因为提问成本很低),并且要完成最终的一致性确认过程十分困难,容易受到干扰。但是一旦确认,即为最终确认
设置工作量证明(proof of work)机制,让所有参与的节点都可以公平公正的在某个时间段成为中心,有领导权/记账权,限制了一段时间的提问个数(增加了提问成本,需要通过比武)
全网胜出的节点可以记账同时获得奖励,需要其它节点确认,保证了一致性
造假成本提高(比如麻将的造假,这样会浪费自己的宝贵赢钱机会)
设置了工作量证明,让系统慢下来,反而有助于让分布式去中心化的系统一致性协调,从而解决达到共识机制
工作量证明,比特币以Hash碰撞挖矿,麻将是以浪费时间,校场比武以输赢看似无用的东西来决出一段时间的中心,是去中心化协调必须的一种方式
其他的工作量证明方式,Pow, Pos, DPos等,目的都是为了增加提按成本
区块链--Bitcoin共识机制的更多相关文章
- 老K漫谈区块链的共识(1)——免信任的共识机制
老k,柏链道捷CTO.清华阿尔山区块链研究中心高级工程师,超过17年的系统软件开发经验,在操作系统.编译器.虚拟机和符号执行方面都有实战经验.主持开发多个开眼项目,目前主要从事区块链底层系统开发工作. ...
- 老K漫谈区块链的共识(3)——分布式系统和区块链共识
1. 啥是分布式系统 当我们评价一个新的事物或者介绍一个新的技术的时候,我们不能架空历史和环境,新的事物不可能脱离历史和环境凭空诞生.任何新的事物和新的技术总是或多或少的,与旧的事件以及过去的技术有所 ...
- (二)区块链的共识算法:PoS 及其 例子 代码 实现
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- 区块链共识机制之工作量证明(POW)
像比特币.以太坊.NXT.Bitshares等这些区块链系统,其本质上是一种加密经济组织,它建立在点对点网络上,是去中心化.无管辖的,由密码学.经济学和社会共识来共同维护.这些加密网络因各种原因有着多 ...
- 基于Tendermint的区块链漂流瓶简单实现
本文主要借demo介绍基于Tendermint的区块链应用开发,这个demo很简单,主要包含以下功能: 扔漂流瓶 捞漂流瓶 之后投放者和打捞者可以相互传递[加密]信息 代码已上传至github. Te ...
- 百度云BaaS体系揭秘,突破共识机制、单机计算和串行处理三大瓶颈
区块链作为去中心化的技术机制拥有广泛的应用场景与市场潜能.自2017年爆发式增长后,区块链虽然已经进入平稳期,但仍然存在概念混淆.技术性能制约.智能合约制约.共识机制.网络建设等痛点.为了打破行业壁垒 ...
- POW共识机制原理及优缺点
PoW共识机制 POW工作量证明(英文全称为Proof of Work)在比特币之前就已经出现,中本聪在设计区块链的共识机制的时候就是借鉴了POW工作量证明.常见的是利用HASH运算的复杂度进行CPU ...
- 区块链学习7:超级账本项目Hyperledger与Fabric以及二者的关系
☞ ░ 前往老猿Python博文目录 ░ 一.超级账本(hyperledger) 超级账本(hyperledger)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,成员包括 ...
- (转)区块链共识机制分析——论PoW,PoS,DPos和DAG的优缺点
近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读.作为第一批区块链技术的实现,传统比特币与以太坊在共识机制.存储机制.智能合约机制.跨链通讯机制等领域并没有非 ...
随机推荐
- FinalShell使用---Xshell的良心国产软件
最近发现了一款同类产品FinalShell,还是一块良心国货.初步体验了一下,确实是良心之作.且免费(通用版),支持国货. FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还 ...
- 自己动手制作一个本地的yum仓库
制作本地yum源有两种方式,第一种是使用光盘镜像,然后在本地进行安装.第二种是我们自己创建一个本地yum仓库,然后使用file的形式来向本地提供yum repo(也可以使用http的方式向外部提供,我 ...
- IIS 安全设置
这近网站中毒,以下把IIS安全设置记录一下,以便查阅. 1.对于不需要执行的目录,将处理程序映射中的编辑功能权限中的脚本去掉,这样即使上传了木马文件在此目录,也是无法执行的. 删除IIS默认的匿名用户 ...
- SDN期末作业验收
作业链接:https://edu.cnblogs.com/campus/fzu/SoftwareDefinedNetworking2017/homework/1585 负载均衡程序 1.github链 ...
- sed 指定行范围匹配(转)
sed -n '5,10{/pattern/p}' file sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝.标准输入可能是来自键盘.文件重定向.字符串或变量,或者是一个管道文 ...
- JFreeChart框架中生成饼状图上怎样显示数据 [问题点数:40分,结帖人GreenLawn]
我用JFreeChart框架生成饼状图,但想把数据信息在饼图上显示,是在饼图内部(即圆内)显示!怎样实现啊?? 去掉lablepieplot.setLabelGenerator(null);去掉线p ...
- 关于军训的模拟赛-R2
终于我也参加了一场有R1 && R2的比赛呢. 点击此处查看R1 因为种种原因,老师认为上次的考试没有体现我们的真实水平,于是举办了毒瘤R2,其实也不是非常毒瘤,还是一贯的风格. T1 ...
- 支付宝即时到账接口开发 - DEMO讲解
支付宝即时到帐接口 环境要求 PHP5.0以上,且需要开启curl.openssl. 文档地址: https://doc.open.alipay.com/doc2/detail?treeId=62&a ...
- pytorch代码资源
pytorch版本的faster和fpn https://github.com/jwyang/faster-rcnn.pytorch https://github.com/jwyang/fpn.pyt ...
- 信号处理开源库SP++介绍
SP++ (Signal Processing in C++) 是一个关于信号处理与数值计算的开源 C++程序库,该库提供了信号处理与数值计算中常用算法的 C++实现.SP++中所有算法都以 C++类 ...