随机数

随机数对于区块链技术来说很关键。 本质上,分布式账本的核心问题就是随机选择出块人的问题,这个随机性要能被全网确认,并且不能被操控,也不能被预测, 否则恶意节点通过操控这个随机数就可以操控长链,从而实现双花攻击。

Pow算法

PoW(工作量证明,Proof-of-Work)的方案是让大家进行算力竞赛,设置一个计算哈希的难题,谁先算出来谁赢,算力高的赢的概率高,算力低的赢的概率低,以这样的方式保证胜出者是随机的。投入的算力能够体现在哈希值上, 这样全网能够验证,并选择包含最多算力的那条链。恶意节点只能通过提升自己的算力来增加攻击成功的概率。
所以工作量证明需要消耗大量的算力,同时比特币大约 10min 才会产生一个区块,区块的大小也只有 1MB,仅仅能够包含 3、4000 笔交易,平均下来每秒只能够处理 5~7(个位数)笔交易,所以比特币网络的拥堵状况非常严重。

DPos算法

DPos(委托权益证明,Delegated Proof-of-Stake)能够让每一个人选出可以代表自己利益的人参与到记账权的争夺中,这样多个小股东就能够通过投票选出自己的代理人,保障自己的利益。DPos中最著名的便是EOS。
在 EOS 圈里,每一个被选出来的代表所能够获得的回报是如此的丰厚(EOS 每年增发额中 5% 的收益,大概是每年 4 亿美金),这样超高的利润回报吸引着无数人蜂拥而至,参与到有关“谁来运行这些超级计算节点”的竞选中去。

“任何一个超级节点候选人,都可以在任何一个地区拉票,作为 EOS 的持有者你也可以不分国别和地区的投给任何一个超级节点候选人。但尽管如此,从竞选刚一开始,国别战争就开始了。”
不受开发者社群的待见,同时还面临着来自韩国的激烈竞争,所以中国的 EOS 超级节点拿出来的新的战略:贿选。
V神谈EOS节点投票:我们必须绕开的阴影之地[附EOS节点投票]

有关信任的社会化共识,在很多具体的场景内是有用的。但是它无法达到普适性。在一个国家或者一家公司里所适用的共识,在另外的地方也许就得不到认可。而且它们也很难量化。它们看起来似乎是安全的,似乎都有“人”在为另外的人承担相应的责任,但实际上人还是会出于经济利益,被其他人摆布操控的。

Pos算法

POS(权益证明,Proof-of-Stake)权益证明是区块链网络中的使用的另一种共识算法,在基于权益证明的密码货币中,下一个区块的选择是根据不同节点的股份和时间进行随机选择的。
如果“随机”这一步没有问题的话,恶意节点只能通过增加自己的份额,增加自己被选中的概率,从而增加双花攻击的成功概率。 这里有一点比PoW的方案要好就是,要实现攻击,先得成为持币大户,如果攻击成功币价大跌,攻击者也会承受最大的损失。 而PoW方案中虽然算力要花钱,但是如果攻击者没有持币,那么他的利益和币价不一定是正相关的,不能排除仍然存在攻击的动力。

Cardano中的Ouroboros协议

那么接下来的核心问题就是,这个不能被操控不能被预测的随机数从哪来。

传统地PoS方案尝试从链上现有的数据入手,比如使用上一个区块的哈希值,上一个区块的时间戳等等来作为随机数的来源,但这些会带来额外的安全风险。 因为区块本身的信息就是节点写进去的,然后又要根据里面的信息来选举后续的出块者,存在循环论证的嫌疑,安全性不会太好。 这也是传统地认为PoS方案不如PoW可靠的部分原因。

Cardano项目采用的Ouroboros协议是被密码学界证明安全的一个PoS协议,也是唯一一个被工业界采用的可证明安全性的PoS协议。 它采用密码学的手段来生成这个随机数。为了弄清楚这个过程,我们先从更基础的密码学工具开始:

  • 1.承诺(Commitment)和打开(Open)

假设张三李四要玩剪刀石头布,用传统方式作弊者如果稍微出的晚一点,可以等看到对方的手势后再做选择。 为了防止这种情况,他们:

  • 先各自做出选择,然后把自己的选择做个哈希;
  • 交换这个哈希;
  • 等双方都收到对方的哈希后,再交换双方的选择;
  • 验证对方的选择和之前的哈希一致;

这样双方都知道了对方的选择,也能确认对方的选择是提前就做好的。 这个哈希值就叫做承诺,因为它里面包含了保密信息,但又没有泄漏保密信息,而最终发送对应的保密信息,就叫做打开承诺。

承诺和打开是一种模式,哈希只是实现手段之一。

  • 2.简单随机数协议(Coin-Tossing)

现在我们可以设计一个多方生成随机数的协议:

  • 每个节点在本地产生一个随机数,并把它的承诺广播给其他人
  • 当它收到所有人广播的承诺后,再把打开也广播给其他人。
  • 最后大家把得到的随机数异或到一起,因为异或操作满足交换律和结合律,所以操作顺序不影响结果。

最终大家都得到了一个一致的无法被操纵的随机数。 但这个简单协议的问题在于,恶意节点可以选择终止协议,也就是不发送自己的打开,会使得其他人无法进行下去。要解决这个问题,我们还需要另一个工具。

  • 3.可验证秘密共享(Verifiable Secret Sharing)

秘密共享是说,一个人可以把一个需要保密的信息,拆分成n份,分别发送给n个人,只要恶意节点不超过一定数量,最终大家可以综合各自的信息片段把原始信息还原出来。 并且就算分发者如果作弊,大家也可以检查出来。具体的实现方式也有多种,这里就不深入了。

有了这个工具,就算恶意节点不发送打开,我们也能根据拆分信息还原出他的随机数,如果他想在拆分信息上作弊,大家也能检查出来并把他踢掉。

结合这几个技术,我们就可以有一个完整的随机数生成协议了。最后,因为我们本来就是个区块链,所以协议过程中需要广播的信息,我们可以直接写到链上去, 这样可以简化实现,并且也不需要所有投票节点同时在线,并且如果有人作弊,作弊的记录将会永远保存在链上。

最后综合一下整个协议流程:

  • 在提交阶段,每个节点本地生成随机数和对应的承诺,同时把随机数拆成n份匹配其他的投票节点, 并且用相应投票节点的公钥对每一份信息进行加密,保证它只能被对应的节点解密, 然后把承诺和加密后的拆分信息一起广播给区块链。
  • 当大家收到大部分节点的承诺和拆分信息后,就进入打开阶段,每个节点把自己的打开发到链上。
  • 然后是恢复阶段,每个节点检查是否有节点发送了承诺但没有发送打开, 如果有,则解密自己对应的那份拆分信息并发布,然后根据大家发布的拆分信息恢复出该节点的随机数。
  • 现在大家就有了所有节点的随机数,把它们异或到一起,最终得到了一个一致的随机数,并用它来选择下一轮的出块人。

最后,这个随机数不光可以用来选择出块人,也可以给智能合约用,这是PoS另一个好处; 而PoW体系虽然出块人是随机的,但并没有产生一个具体的随机数,所以智能合约要用随机数,还是得从区块链本身的数据里面去获取了。

以太坊中的Casper协议

Casper是一种基于保证金的经济激励共识协议(security-deposit based economic consensus protocol)。协议中的节点,作为“锁定保证金的验证人(bonded validators)”,必须先缴纳保证金(这一步叫做锁定保证金,”bonding”)才可以参与出块和共识形成。Casper共识协议通过对这些保证金的直接控制来约束验证人的行为。具体来说就是,如果一个验证人作出了任何Casper认为“无效”的事情,他的保证金将被罚没,出块和参与共识的权利也会被取消。保证金的引入解决了”nothing at stake”,也就是经典POS协议中做坏事的代价很低的问题。现在有了代价,而且被客观证明做错事的验证人将会付出这个代价。

程序猿看这里——Vlad谈Casper共识协议

总结

在区块链共有链世界中,既不想纯粹的浪费资源(Pow),又不想受到被他人摆布操控的干预(Dpos)。那么让未来选择Pos,纯粹的机器共识。

作者:niyuelin(区块链极客,一直致力于区块链底层技术的研究)
欢迎大家加入区块链技术探讨群,QQ群号21911041

区块链系列----Pos大有可为相关推荐

  1. 通俗易懂区块链系列——双重支付/双花支付

    通俗易懂区块链系列--双重支付/双花支付 0 双重支付,又称为双花支付,是指同一笔钱花了两次甚至是多次.不同于实物货币,由于比特币是数字货币,本身就是一些代码,所以具有可复制性,而且由于比特币网络的开 ...

  2. 区块链系列教程——geth命令详解

    本文是区块链系列的第二篇,上一篇区块链系列教程--创建属于自己的区块链大概介绍了区块链的基本内容,并且使用geth客户端创建了私链,给了各位读者较为直观的感受.本文简单介绍geth命令,这对后面的教程 ...

  3. 区块链系列(八)之区块链介绍

    本文个人博客地址:http://www.huweihuang.com/article/blockchain/blockchain-introduction/ 1. 区块链简介 1.1. 区块链的概念 ...

  4. 区块链系列教程之:比特币中的共识

    文章目录 简介 比特币中的共识 交易的校验 区块的构建 区块的校验 区块链的分叉 区块链分叉的种类 总结 简介 在比特币的P2P网络中是怎么达成共识的呢?达成共识需要做哪些交易的校验呢?交易和区块是怎 ...

  5. 区块链系列教程之:比特币中的挖矿

    文章目录 简介 比特币的节点构造 挖矿 挖矿节点 创币交易 矿池收入分配 挖矿方向 算力浪费 算力调整 总结 简介 我们知道比特币就是挖矿产生的,那么在比特币网络中,挖矿有什么特点呢?怎么分配挖矿收入 ...

  6. 区块链系列教程之:比特币中的网络和区块链

    文章目录 简介 比特币的网络 网络发现与同步 SPV节点 区块链头 Merkle Tree 比特币中的区块链 区块标识符 创世区块 总结 简介 比特币的底层就是区块链技术,区块链也是因为比特币而广为人 ...

  7. 区块链系列教程之:比特币的世界

    文章目录 简介 比特币的诞生 Satoshi Nakamoto是谁 为什么会有电子货币 比特币的价格 比特币系统 比特币的生态圈 总结 简介 2008年一个化名为中本聪的神秘人第一次以论文的形式提出了 ...

  8. 【说透区块链系列】一文读懂什么是Web 3.0

    最近的投融资中 Web 3.0 的趋势直线上升,那么受到众多资本喜爱的 Web 3.0 到底是什么呢? Web 3.0的应用范围很广,大家所在网络上最多听到的应该就是只读.读写.读写权这类比较复杂的阐 ...

  9. 区块链系列课第二讲区块链的核心优势

    第二讲 区块链的核心优势 区块链技术给数字经济时代带来了巨变的曙光. 这种巨变在互联网近50年的历史上曾发生过两次.第一次巨变是全球性的联网--第二次巨变是全球性的应用--第三次巨变正在蕴酿. 不论你 ...

最新文章

  1. java pop邮件 源码_[源码和文档分享]基于JavaMail的邮件收发系统
  2. smslib java_java利用SMSLib通过COM发送短信JAR包
  3. android获取毫秒,Android 日期转为为毫秒,毫秒转化为日期,获取当期日期年、月、日...
  4. 【英语学习】【WOTD】yen 释义/词源/示例
  5. iOS11 获取手机已安装应用列表
  6. python画图包-Python 绘图包 Matplotlib Pyplot 教程
  7. c ++ 打印二进制_C / C ++中的二进制搜索树
  8. oracle查询显示小写,oracle查询区分大小写
  9. 数据库比对升级脚本生成工具分享
  10. [ERP/鼎捷E10][存货管理]存货周转率/库存周转率
  11. 202013 启明星辰入侵防御 简单使用手册
  12. 如何从头开始创建可用于生产环境的Webpack 4配置
  13. HTML页面返回503状态码设置,503错误网页状态码出现原因及监控方法介绍
  14. 记一次百度知识图谱面试经历(cold)
  15. 一刷72-回溯算法-17电话号码的字母组合(m)
  16. [乐意黎转载]从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
  17. 计算机课信息化大赛说课稿,全国信息化教学设比赛一等奖:说课稿.pdf
  18. java自动装箱的好处_Java自动拆装箱为什么不起作用了
  19. 计算机主板 大 小,组装电脑,是选择大主板还是小主板?
  20. 存储ic载板_PCB行业分析:从PCB、IC载板到类载板

热门文章

  1. MySQL 的 20+ 条最佳实践
  2. GTX960M搭建《深度学习图像识别技术》所需的环境
  3. windows10内置Linux子系统挂载文件
  4. 关于Zion真实性问题的图文分析及其他 V1.06
  5. “AI鉴黄师”数据采集标注方案上线
  6. php批量顺序上传,怎样用php 批量 上传
  7. 2017大数据领域十大必读书籍
  8. 实数系的基本定理_什么是实数(1):Dedekind分割
  9. python 小游戏——外星人入侵源码倾情奉献
  10. 美图秀秀想让妹纸留下来分享美图,社交梦能如愿以偿吗?