比特币工作量为什么采用工作量证明(POW)来产生区块

登录以解锁更多InfoQ新功能
获取更新并接收通知
给您喜爱的内容点赞
关注您喜爱的编辑与同行
966,690 三月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
揭秘比特币和区块链(二):什么是工作量证明?
揭秘比特币和区块链(二):什么是工作量证明?
13&他的粉丝
日. 估计阅读时间:
,人工智能、区块链、大数据、架构等领域海内外先驱实践!
亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的。
相关厂商内容
相关赞助商
哈希现金也被哈尔&芬尼以可重复使用的工作量证明(RPOW)的形式用于一种比特币之前的加密货币实验中。另外,戴伟的B-money、尼克&萨博的比特金(Bit-Gold)这些比特币的先行者,都是在哈希现金的框架下进行挖矿的。
2. 哈希函数
哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要特征是:
输入x可以是任意长度的字符串
输出结果即H(x)的长度是固定的
计算H(x)的过程是高效的(对于长度为n的字符串x,计算出H(x)的时间复杂度应为O(n))
而对于比特币这种加密系统所使用的哈希函数,它需要另外具备以下的性质:
免碰撞,即不会出现输入x&y,但是H(x)=H(y)
其实这个特点在理论上并不成立,比如,比特币使用的SHA256算法,会有2^256种输出,如果我们进行2^256+1次输入,那么必然会产生一次碰撞;甚至从概率的角度看,进行2^130次输入就会有99%的可能发生一次碰撞。不过我们可以计算一下,假设一台计算机以每秒10000次的速度进行哈希运算,要经过10^27年才能完成2^128次哈希!甚至可以这么说,即便是人类制造的所有计算机自宇宙诞生开始一直运算到今天,发现碰撞的几率也是极其小的。
隐匿性,也就是说,对于一个给定的输出结果H(x),想要逆推出输入x,在计算上是不可能的。
不存在比穷举更好的方法,可以使哈希结果H(x)落在特定的范围。
以上特点是比特币的工作量证明系统可以正常运行的基石。
3. 工作量证明的基本原理
工作量证明系统主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中的,对于验证方则是易于验证的。它与验证码不同,验证码的设计出发点是易于被人类解决而不易被计算机解决。
下图表示的是工作量证明的流程:
举个例子,给定的一个基本的字符串&Hello, world!&,我们给出的工作量要求是,可以在这个字符串后面添加一个叫做nonce的整数值,对变更后(添加nonce)的字符串进行SHA256哈希运算,如果得到的哈希结果(以16进制的形式表示)是以&0000&开头的,则验证通过。为了达到这个工作量证明的目标。我们需要不停的递增nonce值,对得到的新字符串进行SHA256哈希运算。按照这个规则,我们需要经过4251次计算才能找到恰好前4位为0的哈希散列。
&Hello, world!0& =& 3fadc1e25e81caa44c749ecec934c64
&Hello, world!1& =& e9afc424b79e4f6ab42d99c28d6e1eefa
&Hello, world!2& =& ae4cbea22fa32aa475cf05fd4266b7
&Hello, world!4248& =& 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965
&Hello, world!4249& =& cf1669cac8dc37e761cbfbcf26ebb9e6
&Hello, world!4250& =& fc31103f1fdcffdf7cc52ea464e12dcd4e9
通过这个示例我们对工作量证明机制有了一个初步的理解。有的人会认为如果工作量证明只是这样的一个过程,那是不是只需要记住nonce为4521计算能通过验证就行了?当然不是的,这只是一个个例。
下面,我们将输入简单的变更为&Hello, world+整数值&,整数值取1到1000,也就是说,将输入变成一个由1000个值组成的数组:&Hello, world!1、Hello, world!2&&Hello, world!1000&。然后对数组中的每一个输入依次进行上面例子中要求的工作量证明&&找到前导为4个0的哈希散列。
容易算出,预期大概要进行2^16次尝试(哈希值的伪随机特性使得我们可以做概率估算),才能得到4个前导0的哈希散列。而统计一下刚才进行的1000次计算的实际计算结果,我们会发现,进行计算的平均次数为66958次,十分接近2^16(65536)。在这个例子中,数学期望的计算次数,就是我们要求的&工作量&,重复多次进行的工作量证明会是一个符合统计学规律的概率事件。
统计输入的字符串与对应得到目标结果实际使用的计算次数列表如下:
Hello, world!1 =& 42153
Hello, world!2 =& 2643
Hello, world!3 =& 32825
Hello, world!4 =& 250
Hello, world!5 =& 7300
Hello, world!995 =& 164819
Hello, world!996 =& 178486
Hello, world!997 =& 22798
Hello, world!998 =& 68868
Hello, world!999 =& 46821
比特币体系里的工作量证明机制与上述示例类似,但要比它更复杂一些。
4. 比特币中的工作量证明
比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的工作量证明的迷题。这道题关键的三个要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题的所需要的计算量。
4.1工作量证明函数
和我们上节例子中用到的哈希函数一样,比特币系统中使用的工作量证明函正是SHA256。
SHA是安全散列算法(Secure Hash Algorithm)的缩写,是一个密码散列函数家族。这一组函数是由美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST) 发布的,主要适用于数字签名标准。SHA256就是这个函数家族中的一个,是输出值为256位的哈希算法。到目前为止,还没有出现对SHA256算法的有效攻击。
比特币的区块由区块头及该区块所包含的交易列表组成。区块头的大小为80字节,由4字节的版本号、32字节的上一个区块的散列值、32字节的Merkle Root Hash、4字节的时间缀(当前时间)、4字节的当前难度值、4字节的随机数组成。区块包含的交易列表则附加在区块头后面,其中的第一笔交易是coinbase交易,这是一笔为了让矿工获得奖励及手续费的特殊交易。
区块的大致结构如图所示:
拥有80字节固定长度的区块头,就是用于比特币工作量证明的输入字符串。因此,为了使区块头能体现区块所包含的所有交易,在区块的构造过程中,需要将该区块要包含的交易列表,通过Merkle Tree算法生成Merkle Root Hash,并以此作为交易列表的摘要存到区块头中。其中Merkle Tree的算法图解如下:
难度值(difficulty)是矿工们在挖矿时候的重要参考指标,它决定了矿工大约需要经过多少次哈希运算才能产生一个合法的区块。比特币的区块大约每10分钟生成一个,如果要在不同的全网算力条件下,新区块的产生保持都基本这个速率,难度值必须根据全网算力的变化进行调整。简单地说,难度值被设定在无论挖矿能力如何,新区块产生速率都保持在10分钟一个。
难度的调整是在每个完整节点中独立自动发生的。每2016个区块,所有节点都会按统一的公式自动调整难度,这个公式是由最新2016个区块的花费时长与期望时长(期望时长为20160分钟即两周,是按每10分钟一个区块的产生速率计算出的总时长)比较得出的,根据实际时长与期望时长的比值,进行相应调整(或变难或变易)。也就是说,如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。
这个公式可以总结为如下形式:
新难度值 = 旧难度值 * ( 过去2016个区块花费时长 / 20160 分钟 )
工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式如下:
目标值 = 最大目标值 / 难度值
其中最大目标值为一个恒定值:
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的区块哈希值必须小于目标值。
与第3节所举的例子相类比,我们也可以简单理解成,比特币工作量证明的过程,就是通过不停的变换区块头(即尝试不同的nouce值)作为输入进行SHA256哈希运算,找出一个特定格式哈希值的过程(即要求有一定数量的前导0)。而要求的前导0的个数越多,代表难度越大。
4.4 工作量证明的过程
我们可以把比特币矿工解这道工作量证明迷题的步骤大致归纳如下:
生成Coinbase交易,并与其他所有准备打包进区块的交易组成交易列表,通过Merkle Tree算法生成Merkle Root Hash
把Merkle Root Hash及其他相关字段组装成区块头,将区块头的80字节数据(Block Header)作为工作量证明的输入
不停的变更区块头中的随机数即nonce的数值,并对每次变更后的的区块头做双重SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。
该过程可以用下图表示:
比特币的工作量证明,就是我们俗称&挖矿&所做的主要工作。理解工作量证明机制,将为我们进一步理解比特币区块链的共识机制奠定基础。在之后的文章中,我们将会详细介绍比特币交易和区块的结构及同步过程、最长链机制以及达成共识的原理。
感谢对本文的策划和审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博(,),微信(微信号:)关注我们。
Author Contacted
语言 & 开发
330 他的粉丝
架构 & 设计
790 他的粉丝
11 他的粉丝
0 他的粉丝
0 他的粉丝
31 他的粉丝
1 他的粉丝
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
Re: 看不懂的点
Re: 看不懂的点
Re: 看不懂的点
Re: 看不懂的点
Re: 看不懂的点
Re: 疑问点
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
InfoQ每周精要
订阅InfoQ每周精要,加入拥有25万多名资深开发者的庞大技术社区。
架构 & 设计
文化 & 方法
InfoQ.com及所有内容,版权所有 ©
C4Media Inc. InfoQ.com 服务器由 提供, 我们最信赖的ISP伙伴。
极客邦控股(北京)有限公司
找回密码....
InfoQ账号使用的E-mail
关注你最喜爱的话题和作者
快速浏览网站内你所感兴趣话题的精选内容。
内容自由定制
选择想要阅读的主题和喜爱的作者定制自己的新闻源。
设置通知机制以获取内容更新对您而言是否重要
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)比特币和区块链之:什么是工作量证明?
1起源工作量证明(Proof Of Work,简称POW),简单理解就是一份证明,用来确认你做过一定量的工作。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等等,也是通过检验结果的方式(通过相关的考试)所取得的证明。工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。这个概念由Cynthia Dwork 和Moni Naor 1993年在学术论文中首次提出。而工作量证明(POW)这个名词,则是在1999年 Markus Jakobsson 和Ari Juels的文章中才被真正提出。哈希现金是一种工作量证明机制,它是亚当·贝克(Adam Back)在1997年发明的,用于抵抗邮件的拒绝服务攻击及垃圾邮件网关滥用。在比特币之前,哈希现金被用于垃圾邮件的过滤,也被微软用于hotmail/exchange/outlook等产品中(微软使用一种与哈希现金不兼容的格式并将之命名为电子邮戳)。哈希现金也被哈尔·芬尼以可重复使用的工作量证明(RPOW)的形式用于一种比特币之前的加密货币实验中。另外,戴伟的B-money、尼克·萨博的比特金(Bit-Gold)这些比特币的先行者,都是在哈希现金的框架下进行挖矿的。2哈希函数哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要特征是:输入x可以是任意长度的字符串输出结果即H(x)的长度是固定的
Ctrl+D&将本页面保存为书签,全面了解最新资讯,方便快捷。52被浏览11,976分享邀请回答105 条评论分享收藏感谢收起&p&虽然央行选择了pbft算法,但我们还是要给其他算法机会嘛,我简单介绍下区块链常见的几种算法,大家可以自己得出结论。&/p&&p&&b&1、Pow工作量证明&/b&,就是大家熟悉的挖矿,通过与或运算,计算出一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其它节点验证后一起存储;
优点:完全去中心化,节点自由进出;
缺点:目前bitcoin已经吸引全球大部分的算力,其它再用Pow共识机制的区块链应用很难获得相同的算力来保障自身的安全;挖矿造成大量的资源浪费;共识达成的周期较长,不适合商业应用&/p&&p&应用案例:比特币&/p&&p&&b&1、Pos权益证明&/b&,Pow的一种升级共识机制;根据每个节点所占代币的比例和时间;等比例的降低挖矿难度,从而加快找随机数的速度。
优点:在一定程度上缩短了共识达成的时间
缺点:还是需要挖矿,本质上没有解决商业应用的痛点&/p&&p&应用案例:未来币,以太坊采用了Pow+POS的混合机制。&/p&&p&&b&3、DPos股份授权证明机制&/b&,类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。
优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证
缺点:整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的&/p&&p&应用案例:比特股&/p&&p&以上三种算法大家都比较熟悉,我就简单说一下,下面就是题主的问题了。&/p&&p&&b&4、pbft拜占庭容错算法,&/b&这是一种基于消息传递的一致性算法,算法经过三个阶段达成一致性,这些阶段可能因为失败而重复进行。&/p&&p&假设节点总数为3f+1,f为拜赞庭错误节点:&/p&&p&1、当节点发现leader作恶时,通过算法选举其他的replica为leader。&/p&&p&2、leader通过pre-prepare 消息把它选择的 value广播给其他replica节点,其他的replica节点如果接受则发送 prepare,如果失败则不发送。&/p&&p&3、一旦2f个节点接受prepare消息,则节点发送commit消息。&/p&&p&4、当2f+1个节点接受commit消息后,代表该value值被确定&/p&&p&如下图表示了4个节点,0为leader,同时节点3为fault节点,该节点不响应和发出任何消息。最终节点状态达到commited时,表示该轮共识成功达成。&/p&&br&&figure&&img src=&https://pic1.zhimg.com/v2-7ec148cccdc_b.png& data-rawwidth=&716& data-rawheight=&279& class=&origin_image zh-lightbox-thumb& width=&716& data-original=&https://pic1.zhimg.com/v2-7ec148cccdc_r.png&&&/figure&&br&&p&优点:上述共识算法都脱离不了币的存在,系统的正常运转必须有币的奖励机制,系统的安全性实际上是由系统币的持有者维护保证。当我们区块链系统实际运用到商业应用时,由其承载的资产价值可能远远超出系统发行的币的价值,如果由币的持有者保证系统的安全及稳定性将是不可靠的 。&/p&&p&1)系统运转可以脱离币的存在,pbft算法共识各节点由业务的参与方或者监管方组成,安全性与稳定性由业务相关方保证。&/p&&p&2)共识的时延大约在2~5秒钟,基本达到商用实时处理的要求。&/p&&p&3)共识效率高,可满足高频交易量的需求。&/p&&p&应用:央行的数字货币、布萌区块链。&/p&
虽然央行选择了pbft算法,但我们还是要给其他算法机会嘛,我简单介绍下区块链常见的几种算法,大家可以自己得出结论。1、Pow工作量证明,就是大家熟悉的挖矿,通过与或运算,计算出一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其…
&p&&strong&第0章 引言&/strong&&br&&/p&&p&比特币挖矿是矿工帮用户记账的过程,也是系统发行比特币的过程,成功挖到矿的矿工将会获得系统给出的区块奖励。这个过程很重要,矿工投入资金去挖矿动力就是来源于区块奖励和交易手续费。&/p&&p&那比特币系统是凭借什么来评价区块奖励和交易手续费该归属于哪个矿工呢?&/p&&p&第1章 黄金最初归属于挖黄金的人&/p&&p&如果你对一块金块进行追根溯源,你去问它第一个人类对它拥有的所有权是怎么获得的?&/p&&p&这是个很简单的问题,谁去挖矿、冶炼成黄金就归谁。当然这里涉及到打工、老板、公司、矿场的等等产权问题。更准确的答案是冶炼得到的黄金归矿场所有人所有。&/p&&p&但我们还是可以把这个答案抽象一下,&strong&黄金最初的所有权是归为之“劳动”的人所有。&/strong&(不要死抠这个“劳动”是打工仔,还是老板的资本性投入,为了更快速地了解知识我们必须适当的时候放弃了解细枝末节。)&/p&&p&其实&strong&用“付出劳动”来衡量所有权这是现实生活普遍适用的一个规律。这也是一个公认为公平合理的设定。&/strong&但这个规律有两个难点,从而导致现实生活的复杂性。&/p&&p&&strong&第一个难度是“劳动”本身很难准确定义。&/strong&因为要解决的问题很复杂,就比如挖黄金,需要太多的专业化技能,需要大量的合作,还需要大量的资本投入。因为定义和量化“劳动”本身太复杂了,导致的所有权确权是很困难的。这也是为什么我们现实生活中到处感到不平等的原因,因为我们都会觉得自己的劳动比别人重要。&/p&&p&&strong&第二个难度是如何评估劳动很困难。&/strong&任何公司想找到一个行之有效的KPI考核都是非常难的。&/p&&p&现在&strong&如果我们要设计一套货币发行系统,把“付出劳动”即获得“所有权”作为发行的基本原则,那你一定要克服上术两个困难。&/strong&&/p&&p&第2章 工作量证明&/p&&p&工作量证明,英文是proof of work,在比特币世界又经常被称为POW。简单来说就是一份证明,用来确认你做过一定量的某种工作。&/p&&p&现实生活当中含有大量的这种工作量证明的案例,比如一本毕业证就可以让你向用人单位证明你大概有什么样的学识;交警通过驾驶证来检验开车的人是否会开车。&/p&&p&在计算机世界里,工作量证明机制在垃圾邮件防范和拒绝服务攻击识别上都有应用,主要用于阻止网络上的恶意攻击。比特币系统设计里这是用来设计成挖矿系统。&/p&&p&&strong&工作量证明系统可以看成是两个步骤,一个是工作;另一个是对工作的验证。这分别对应两个主体,一个是工作者;另一个是验证者。&/strong&&/p&&p&系统约定好工作内容,验证者给出工作量,工作者完成工作量,验证者检验工作量是否达标。工作量证明的设计需要达到:工作者是一定要花费一定的时间才能完成工作,但验证者却可以瞬间完成检验。&/p&&p&&strong&第3章 比特币中的工作量证明&/strong&&/p&&p&回到第一章提到的问题,如何设计一套货币发行系统?&/p&&p&比特币的发行是通过挖矿来完成的,全网平均十分钟挖出一个区块,系统就发行12.5BTC(最初是50BTC,每挖出21万个区块奖励就减半,现在经过了两次减半,变成了12.5BTC)奖励给成功挖到区块的矿工。&/p&&p&&strong&那系统如何来识别谁挖到了区块呢?这个过程就是通过工作量证明来实现的。&/strong&&/p&&p&&strong&矿工为了挖到区块必须进行“工作量证明”过程,这个计算的内容包含三个要素:工作量证明函数、前一个区块及难度值。&/strong&工作量证明函数是给出了计算方法,前一个区块是这个函数的参数,难度值决定了这个函数的解题需要的计算工作量。&/p&&p&比特币里的工作量证明函数叫SHA256,中文名叫安全散列算法。具体是什么数学公式我们先不用管了,就简单想象成一个函数表达式f(x)吧。&/p&&p&比特币的区块是一个特定数据结构,里面填充了一些数据,可分为两部分,一是区块头,二是该区块包含的交易。下面的表格就是区块的数据结构。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f6ac0ee2ec235ff6542dd_b.jpg& data-rawwidth=&640& data-rawheight=&369& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-f6ac0ee2ec235ff6542dd_r.jpg&&&/figure&&p&&strong&表中红色加粗的字段就是区块头,矿工要计算的工作量就是计算上一个区块的这个区块头部信息的SHA256值。&/strong&具体的数学公式我们还是不管,我们可以将这个区块的头部信息想象为参数x,SHA256想象为函数f,矿工就是要解这个f(x)的值。&strong&从这里我们也知道了,矿工其实就是专门计算这种SHA256值的集中电路芯片,或者直接叫CPU。&/strong&&/p&&p&&strong&难度就是这个函数f(x)函数的一个参考答案,这个答案就是上表中的“难度目标”。&/strong&这个难度约束了计算f(x)这个函数的难易程度,也就是决定了一个矿工为了挖到一个区块需要完成的计算量。这个难度目标是值就是衡量矿工的计算结果是否达标的标准答案。&/p&&p&&strong&矿工从网络上拿到最新的区块头部信息,头部信息里的最后一个字段是nonce,初始值为0,矿工就是要不停地调整这个nonce值来将这个头部信息作为参数去计算f(x)的函数值,每算一次就和难度目标值进行对比,如果满足了条件就挖矿成功。&/strong&&/p&&p&那比特币系统里的工作量证明的过程就是这样的:&/p&&blockquote&&p&1.矿工在网络中拿到最新一个区块的头部信息;&/p&&p&2.将拿到的头部信息作为参数,将nonce值从零开始,去计算其双重SHA256值(SHA256(SHA256(头部信息)));&/p&&p&3.如果算出的答案不符合要求,则将nonce值增加一个单位,再算;&/p&&p&4.直到计算出符合难度目标的答案,就挖到一个区块。也就能拿到比特币系统给它发的12.5BTC的区块奖励。&/p&&/blockquote&&p&所以&strong&挖矿的本质就是找到一个使最新区块头部信息的SHA256值满足难度目标值条件的nonce值。&/strong&就目前来说,每成功挖到一次区块,一个矿工就需要尝试几十亿次的nonce值。&/p&&p&因为这个SHA256函数设计的很巧妙,矿工不可能“智能预测”到代入哪一个nonce值就能够计算得出满足条件的函数值,唯一的办法就是不停地试。因为除了nonce值外,区块头部信息的其它字段都是确定的,所以挖矿的本质就是寻找一个符合条件的nonce值。&/p&&p&&strong&第4章 结束语&/strong&&/p&&p&比特币的工作量证明机制明确通过数学的方式给出了“工作内容”、“工作量”,以及评价方式。&strong&把“付出劳动”即获得“所有权”,通过数学的方式模拟了出来,这是最公平的一种所有权分发机制。这也是为什么我们说比特币是最公平的货币发行机制。&/strong&&/p&&p&嗯,我们又了解到一个概念。&/p&&p&比特币是由一系列概念和技术作为基础构建的系统,理解起来并不会很难,只要一个一个概念慢慢摸清楚,就OK了。&/p&&br&&br&&p&(想第一时间阅读我的比特币科谱文章,请关注我的公众号: 闪电HSL)&/p&
第0章 引言 比特币挖矿是矿工帮用户记账的过程,也是系统发行比特币的过程,成功挖到矿的矿工将会获得系统给出的区块奖励。这个过程很重要,矿工投入资金去挖矿动力就是来源于区块奖励和交易手续费。那比特币系统是凭借什么来评价区块奖励和交易手续费该归…
POW:Proof of Work工作量证明
POS:Proof of Stake 权益证明&br& 工作量证明的原理很简单:一方(通常称为证明人)出示计算结果,这个结果众所周知是很难计算的但却很容易验证的。通过验证这个结果,任何人都能够确认证明人执行了一定量的计算工作量来产生这个结果。第一个POW程序是1996年Adam Back开发的“哈希现金Hashcash'程序,它使用SHA-256工作量证明措施来反垃圾邮件—通过要求所有收到的邮件都使用强POW附件。此系统使得垃圾邮件发送者在大量发送邮件时在经济上不可行,但却允许个人在需要的时候互相发送信息。时至今日,殊途同归的程序是 Bitmessage, 而这种算法也被赋予新的意义,即以“采矿”形式出现的BTC安全核心。
SHA256工作量证明是如何工作的?
对于密码学者来说,SHA256被称为单向函数,即其结果很难计算得出,但却很容易被验证。但如果要将这个结果反向计算出来,却需要尝试每个输入直到某个随机数匹配为止。传统的SHA256输出形式是一系列十六进制的64位数字和字母组合--从abcdef中取出。举例说明:
SHA256('hello') = 2cf24dba...
SHA256('Hello') = 185f8db3...
SHA256('Hello.') = 2d8bd7d9...
SHA256的输出被设计成了高度随机性,即使输入的数据有微小的变化也会使得输出结果迥异,这也就是SHA256成为单向函数的原因。
找出以'0'打头的SHA256的输入值平均需要尝试16次,“00”打头的需要尝试256次,以此类推。哈希现金及比特币采矿工作的方式,是要求使用者(即邮件发送者或矿工)找到一个“随机数”,使得其SHA256(信息+随机数)以一串零开头,然后把找到的随机数与信息一起发送出去,作为其工作量证明。例如,编号为254291的区块是:
003cf55c8d254fc97db787a936bc43a89
平均而言,在一个区块内进行运算时,需要进行72957千亿次尝试才能找到一个随机数,才能返回这样一个以很多0开头(技术上而言,282394 千亿,因为POW要求的比“以很多零开头”的要复杂一些,但是大体而言是如此。“人为设置这样的难度是因为防止攻击者凌驾于比特币网络之上,引入另一个区块链,并推翻之前的交易,引入新的交易。任何想要攻击比特币网络的人,都必须完成 282394 千亿次SHA256 运算来达到这样的目的。
但是,这有一个问题:工作量证明是相当浪费资源的。比特币网络每秒种进行600千亿次运算,最终这些运算并没有任何实际或科学用途。其唯一目的在于解决工作量证明问题,而工作量证明如此之难,是为了阻止攻击者轻易伪装成数以百万计的节点,并控制网络。当然,这种浪费也不是天生的。在没有其它选择的情况下,这种工作量证明的浪费对于获得一种去中心化的,半匿名的而允许所有人都能够几乎免费即时发送现金到其它人的全球货币网络来说,这个代价可能不算大。在2009年,工作量证明确实是唯一的选择。&br&&br&但是在四年之后,我们有了其它选择。
Sunny King的素数币可能是最温和,但同时也是最有希望的解决方案。除了运算工作量证明之外,素数币还试图使其变得有用。没有采用SHA256运算,素数币要求矿工们寻找长的坎式链素数-如n-1,2n-1,4n-1等,然后这些数值在区块链里是素数(为了准确,n+1,2n+1,4n+1也是有效的坎式素数,素数币也接受孪生素数如n-1,n+1,2n-1,2n+1,这些都是素数。目前还不清楚这些区块链有什么用处--素数币支持者列出一些理论上的应用,但这些应用只需要长度为3的区块链,这很容易产生。但是,在目前比特币采矿界的更有力的说法是目前采矿硬件的大部分生产成本都是用在研发如何更有效地采矿方式上面(ASICs,优化线路等),而不是自己制造或运行这些硬件。而在素数币的世界里,这些研究会投入到寻找更有效的算法及数字理论计算上-这些研究的目的比单纯地进行加密货币采矿要更高级。
类似素数币这种“有用的工作量证明”令人鼓舞的原因还有,如果这种计算是足够有用的,那么这种货币的“浪费指数”会降至零以下,使得这种货币成为一种公共货币。假如有一种加密货币的每一次运算,都能够推动治疗癌症的研究能够进展1020 之一。现在,没有个人或组织有足够的动力去这样做:如果他们运气好能够成功的话,有两个选择。一是将秘密公诸于众,除了一些短期的媒体报道外,对于他们个人并无益处;二是在有保密条款的前提下把结果出售给一些研究者,这样大部分没有签署保密条款的人就无法从中受益。无论哪个选择,他们都不会挣到大钱。但是,如果这种神奇的运算可以被整合到某种虚拟货币中去,采矿所得就能鼓励不少人进行这种运算,而且运算所得会公布在区块链上,所有人都能看到。其社会效益将远超电力成本。不过,目前我们不知道这种神奇的治愈癌症的运算,最接近的一个项目是Folding@home项目,但这个缺乏数学上的可验证性—一个不诚实的矿工能够轻易地制造让工作量证明人难以分辨的虚假计算,但对社会毫无益处。在数学可验证及有用的工作量证明的领域,素数币是目前最好的。虽然其带来的效益能否完全超出其生产及电力成本仍然很难判断。很多人对此存疑。但即使如此,素数币的成就仍然值得表扬,能够给公众带来效益已经收回了部分成本,总比没有强。
POS权益证明
但是,还有另外的SHA256算法已经存在,从根本上摆脱了工作量证明的算力浪费,这就是权益证明。与要求证明人执行一定量的计算工作不同,权益证明要求证明人提供一定数量加密货币的所有权即可。中本聪没能做到这一点的原因很简单:在2009年之前,没有任何一种数字财产可与密码协议层面上产生互动。Paypal和信用卡在线支付已经存在十几年了,但这些系统都是中心化的。如此这些中心化的系统也使用权益证明的话,就会给Paypal及信用卡供应商在提供虚假交易上提供可乘之机。IP地址及域名是部分去中心化的,但目前针对这两种方式都无法建立一种所有权证明而且无法验证。实际上,第一种能够实现在线权益证明的数字财产就是比特币本身(及普通的加密货币)。r& 对于如何实现权益证明有过几种方案,但目前为止实际成功应用的就是PPC,也是由Sunny King 发明的。POS权益证明的运作方式如下:当创造一个POS区块时,矿工需要创建一个“币权”交易,交易会按设定的比例把一些币发送给矿工本身。(类似利息,原理与比特币的区块产出25个接近)。一个SHA256的哈希运算是基于以下数据得出的:交易输入,其它一些固定数据,以及当前时间(以秒为单位的整数,基点是日)此哈希运算将与工作量证明要求进行比较,与比特币很象,除了其难度是与交易输入的“币龄“成反比的。在PPC中,币龄的定义是交易数量乘以该笔交易的币存在于钱包中的时间。由于POS的哈希运算只是基于时间及静止数据,因此无法加快其运算速度。每一秒钟,每个PPC交易输出都有一定机会产生与其币龄及其钱包余额成正比的有效的工作。不增也不减。实质上,每个PPC都可以成为“模拟矿机”,虽然这种矿机的算力会随着时间直接增长,但每次发现一个新块其算力就会归零。
目前还不清楚PPC使用币龄或使用输出大小是否一定有必要,这样做的初衷是防止矿工重复使用得到的币,但是PPC目前的设计并不允许矿工有意识地去通过一定量的交易输出生成一个区块。目前的机制是系统会每隔若干随机秒挑选出某个PPC,赋予其所有人生成POS区块的权力。即使在这个随机过程中没有把币龄做为衡量因素包括进去,这也几乎和比特币采矿相类似,只是没有了浪费。但是,对币龄一说不利的还有一个比较复杂的理论:因为如果你无法创建一个区块的时间拖得越长,下一次成功的机率就会越大。而POW矿工创建区块的时间会更有规律些,因此减少了类似中心化矿池的风险。
加密货币之外
但POS更有趣的地方是其可以应用于加密货币之外的地方。&br&&br&目前,反垃圾邮件系统在以下三类防护机制中都失败了:工作量证明,captchas和身份认证系统。
工作量证明,已经使用在Hashcash及bitmessage当中,我们上面已经进行了深入讨论,不再赘述。
Captchas在互联网上广泛使用。其原理是给出一个机器很难解答但人类很容易解答的问题,因此把人和机器区别开来(CAPTCHA 是 Completely Automated Public Turing test to tell Computers and Humans Apart”的首字字母缩写)。实际应用中,通常会使用很混乱的背景图上带上字母和数字,然后要求答题人打出其中的数字和字母。最近的变化是将其“对大众有用”,方法是从印刷书的扫描件里取出某个字,利用公众的力量将其数字化。不幸的是,captcahs效率并不高,最近的机器学习进展已经将成功率提高了到30-90%,这个数字和人类的成功率相近。
身份识别系统有两种形式。一种是系统会要求使用身份证进行注册,这也是民主团体防止被匿名发言者控制的方法。另一种是系统要求交纳一定费用进行注册,如果发现用户滥用系统,则管理员可以说没收注册费并取消帐户。这些系统是起作用的,但牺牲了匿名性。
权益证明可以用于第四类反垃圾邮件的机制。假设在注册论坛帐户时,不需要填写Capthas字符,而是要求用户通过发送给自己一定量的PPC或者BTC来消耗币龄。为确保每个权益证明运算都是由用户执行的,而且不是随机从区块链中抽取的,系统可以要求用户使用相同的地址发送已签署的信息,或者是可以用某种方式把他们的钱发送给他们自己(例如,发送的数量可以设定为0.0000xxx,这个数字是随机设定的。)请注意,此处币龄起到了决定性的作用,我们希望用户能够根据需求创造权益证明,所以必须消耗一些东西来防止重复花费。从某个角度而言,手机短信验证就是某种形式的权益证明,要求用户发送某个信息,证明对某个号码的所有权以便创建google帐户。虽然这并不是纯粹的权益证明,因为电话号码通常与身份证紧密相关,而且买电话的过程也象是填captcha。因此,短信验证具备了这三种反垃圾邮件系统的一些好处和一些坏处。
但权益证明的真正优势在于其去中心化的系统,类似bitmessage.目前,bitmessage使用工作量证明因为没有其它选择。目前并没有去中心化的captcha存在,而且在这个方面也没有太多的研究在进行中。&br&&br&不过,工作量证明是浪费资源的,这一点也让Bitmessage有些难以处理,同时也要耗费电力去维持系统运行。如果是电子邮件通信还行得通,但如果是即时通信就省省吧。但如果bitmessage 能够与比特币(素数币或PPC)整合在一起,并用POS来运行,就可以消除大部分的困难和浪费。
POS权益证明有未来吗?
有很多迹象表明确实有。Sunny King说比特币的安全性将随着区块产出持续下降而变得脆弱,这确实也是他创造PPC及素数币的出发点之一。自从那时候起,PPC的市值占据了第五的位置(本文写于8月底,截止10月2日PPC市值已经上升至第3),而且还有很多山寨币模仿了这种POS设计。目前,PPC还不是完全的权益证明,因为其支持者人数不多,币值也不高。被人控制的风险大于比特币,所以存在着一个中心化的检查机制,无论攻击者如何攻击,开发者可以确保“检查点”存在于区块链中。
最终的目的使得这个检查机制更加去中心化,并弱化其影响,同时更多的人群可以拥有PPC。另一个方法是可以把POS作为一个去中心化的检查机制整合进比特币里面去。例如,可以创建一个协议让多人合作,通过把币发回给自己,消耗至少1百万年的BTC币龄来产生一个区块,而这个区块将被所有人同意为一个有效的区块。
在2009年,加密货币在一系列看似不相关的创新下诞生了:哈希现金、merkle 哈希树,工作量证明及公匙密码学。而这些创新都在BTC中起到了关键作用。
现在,比特币及加密货币将继续存在下去,这又为加密货币的未来提供了另外令人兴奋的可能性。我们现在能够在加密货币本身以外设计新的协议-权益证明就是绝好的例子。权益证明可以被用来保证一种加密货币的安全,它可以被用在去中心化的反垃圾邮件系统,甚至还有我们没有想到过的数十种其它协议。就象直到1998年戴伟发明B-money之后,人们才会想到比特币。
未来,存在无限可能。
POW:Proof of Work工作量证明
POS:Proof of Stake 权益证明 工作量证明的原理很简单:一方(通常称为证明人)出示计算结果,这个结果众所周知是很难计算的但却很容易验证的。通过验证这个结果,任何人都能够确认证明人执行了一定量的计算工作量来产生这个…
已有帐号?
无法登录?
社交帐号登录
20217 人关注
470 条内容
341 人关注
149 条内容
2622 人关注
1290 条内容
1465 人关注
111 人关注
107 条内容

我要回帖

更多关于 比特币工作量证明 的文章

 

随机推荐