惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
Latest news
Latest news
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
AI
AI
阮一峰的网络日志
阮一峰的网络日志
量子位
Project Zero
Project Zero
Know Your Adversary
Know Your Adversary
Google Online Security Blog
Google Online Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Schneier on Security
大猫的无限游戏
大猫的无限游戏
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
Spread Privacy
Spread Privacy
C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
W
WeLiveSecurity
博客园 - Franky
Last Week in AI
Last Week in AI
博客园 - 聂微东
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
IT之家
IT之家
I
Intezer
The Cloudflare Blog
月光博客
月光博客
N
News | PayPal Newsroom
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
博客园_首页
罗磊的独立博客
NISL@THU
NISL@THU
爱范儿
爱范儿
Jina AI
Jina AI
有赞技术团队
有赞技术团队
The Hacker News
The Hacker News
A
Arctic Wolf
Scott Helme
Scott Helme
Engineering at Meta
Engineering at Meta
P
Proofpoint News Feed

虞双齐的博客

共识机制PoW-真的是去中心化的吗 共识算法PoW之算力与挖矿难度 理解以太坊Gas和手续费 理解与计算比特币难度值Difficulty 解析比特币区块 程序员该掌握区块链技术 Docker使用问题集 区块链比特币学习路线与资源 Mac下搭建以太坊私有链 技术大牛成长 做爱折腾的技术人 如何发现自我优势成为斜杠青年 Golang Generate命令说明与使用 Go读取通达信历史日线数据 希腊八日游游记 Go面试题答案与解析 你误会蟑螂了 如何提高邮件件打开率和回复率 简述电子邮件发展历史
共识算法PoW之由来
虞双齐 · 2018-12-02 · via 虞双齐的博客

大家好,我是虞双齐,当前市场上还未有系统讲解整理区块链共识算法的教程。从这篇文章起,我将系统地讲解区块链共识算法。

这篇文章是关于工作量证明的第一部分初识PoW,主要讲比特币下工作量证明共识的历史发展与基本原理。

首先,我们需要了解分布式系统(distributed system)概念。在《分布式系统概念与设计》一书中,这样定义分布式系统:

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

另一本书《分布式系统原理和范型》说道:

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。

白话点说,就是一群独立计算机集合共同对外提供服务。但对于用户来说,就像是一台计算机在提供服务一样。这里有一个巨大的挑战,如何确保每台独立的计算机对用户的响应是一致的,只有在每台计算机的数据一致时,才能给用户提供一致的响应。

如何保证在分布式系统中每台计算机行为一致性,即如何建立分布式共识。这也是莱斯利·兰波特1(Leslie Lamport)等人在1982年提出的拜占庭将军问题。所谓拜占庭将军问题是指,在战争中互不信任的各城邦军队如何达成共识并决定是否出兵的决策过程,延伸到计算机领域,试图建立具有容错性的分布式系统,即使部分节点失效也能保证系统运行正常。

传统分布式系统依旧运行在中心化环境中,具有一定的信任基础,如果需要建立一个去中心化的分布式系统。如隐匿的加密货币系统,该怎么达成共识?早在20世纪80年代,密码朋克就有了加密货币的设想。密码朋克宣言中写道:

电子时代,隐私是开放的社会不可或缺……如果我们期望有隐私,那我们必须亲自捍卫。我们用密码学,匿名邮件转发系统,数字签名以及电子货币保障我们的隐私。

如何构建一个安全、稳定、有效的隐匿系统,前辈们滋滋不求,一直进行尝试但每次都以失败告终。直到2008年10月31日,中本聪(化名)第一次出现,他在一个密码朋克邮件组中发帖2,写到:

我一直在研究一种全新的电子现金系统,它完全是点对点的,没有可信赖的第三方。 I’ve been working on a new electronic cash system that’s fully peer-to-peer, with no trusted third party.

从软件工程上,比特币是一个分布式系统。中本聪利用密码学知识解决了分布式共识问题,而且是零信任环境。 他巧妙地利用加密哈希算法特性(比特币使用的哈希算法是SHA-256,这类SHA-2算法簇是一种“单向”操作)。对于给定的哈希值,没有实用的方法可以反向计算出原始输入,也就是说很难伪造,且不同的原始输入值对应的哈希值差异大,无规律可循。

从上图中,我们可以看到只有细微差异的三个输入值:”hello”、”Hello”、”Hello!“,其对应的哈希值天壤之别。 你可以从这个在线工具体验哈希值。

比特币系统中会自动使用一个系数(难度值),要求每个区块的哈希值必须符合要求系数,且每两周更新一次系数。因为哈希算法的单向性操作,无法逆向根据哈希值计算原始输入。因此为了寻找一个符合要求的哈希值,矿工就不得不在利用已知的前区块哈希、交易集哈希、时间戳再上附加一个数字,不断的更换数字,使用这个值计算出的哈希值能满足难度要求。

找出那个数字的耗时只取决于计算机哈希计算速度和难度系数,计算速度越快能越早找出,难度越大,查找的次数越多,时间越长。这个数字是不确定的,是1到2的256次方之间的数,称之为随机数nonce。

有了这个随机数,矿工立即将随机数记录到区块上并立即广播这个区块,其他节点收到这个区块后,只需要执行一次哈希运算就可以验证这个区块是否符合难度要求。一旦符合要求,节点便放弃本地的挖矿工作,立即进入下一个区块的挖矿。如果全网51%以上的节点都接收了这个区块,全网便已达成共识。找出这个随机数的矿工,将获得奖励(比特币)。

这就是工作证明,简称PoW(proof of work),也称为工作量证明,只有劳动才有收获,多劳多得,没有不劳而获

工作证明早期便用使用,主要用于防止DOS攻击,以及过滤垃圾邮件,强迫每个邮件发送者,必须进行一段垃圾运算,人为造成一小段时间的延迟,比如1s。正常发送邮件的人,每天只发几封十几封,几乎不会察觉什么。但是,发送垃圾邮件的人就惨了,之前限制他发送速度的是网速,每秒能发1000封,现在又多了个CPU性能的限制,速度变成了每秒1封。速度降低1000倍,也就减少了垃圾邮件的影响。 类似的策略也可以用于反爬虫,反机器人一类的。

PoW算法革命性的解决分布式共识决策问题。在一个充满欺诈的分布式环境中,不需要任何第三方介入,也不需要任何节点间的协作,就让各个节点间达成一致性共识。

如何达成共识的呢?因为有成千上万的矿工同时在对一个高度的区块寻找随机数,意味着只要时间充足,总能找到。很有可能有多个矿工相继找到随机数。这样网络中便存在多个符合要求的区块,造成区块链分叉。

到底该选哪一条继续延伸?此时就看网络中的大部分矿工如何选择,默认原则是选择最长的一个分支继续挖矿。经过短暂分叉后又走在一起,分分合合,携手共进。

比特币通过PoW算法和最长链(总算力最大)原则,来达成分布式共识决策。这种共识算法,既有优势又有劣势,下次我们一起继续客观的分析PoW共识算法优劣,以及如何在传统中心化系统中运用工作量证明。

如果你感兴趣,可以关注我的百度熊掌号-死磕以太坊微博,第一时间查看更新。死磕以太坊,死磕区块链技术,让你深度观察区块链技术。