专栏首页区块链百科,区块链行业报告比特币工作量证明,“法外之地”的法

比特币工作量证明,“法外之地”的法

PoW(Proof of Work,工作量证明)是区块链技术中基本的、常见的一种共识机制。加密币中的挖矿,其实就是运用工作量证明来进行的。

一、PoW的起源

工作量证明最早是一个经济学名词,指系统为达到某一目标而设置的衡量机制。通俗来说,就是当你完成一定量的工作后,确认这一工作量的证明。因为监测整个工作的过程是非常的耗时的,而只通过检验工作结果来确认工作量,显然效率要更高。

工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。这个概念由Cynthia Dwork 和Moni Naor 1993年在学术论文中首次提出。

在1999年,Markus Jakobsson and Ari Juels两人将pow概念引入计算机体系,工作量证明(PoW)这个名词,在两人的文章中被真正提出。起初,PoW被用于抵挡拒绝服务攻击和网络爬虫,后来在反垃圾邮件中被广泛使用。

反垃圾邮件系统哈希现金(Hash Cash),其设计理念是一个正常用户写一封邮件是需要一定的时间,而发送垃圾邮件者是无法接受这个等待的时间,PoW系统使垃圾邮件发送者需要更多的时间来发送邮件,增大他们的成本,起到抵挡攻击的作用。

PoW共识机制是基于哈希函数本身复杂的运算,通过给定的初始值和简单的值递增规律,利用其碰撞原理,找到特定的碰值,可以通过对碰值的调节,实现对于工作量的调节。

工作量证明

二、哈希函数

哈希函数(Hash Function)即散列函数,输入一个x,会得出相应的输出H(x)。其中,这里的x可以是任意长度的字符串,而输出的H(x)却具有固定长度,哈希函数正是将任意长度的数据映射到有限长度的域上。在计算过程上,虽然复杂,但非常高效。

比特币这种加密系统使用的哈希函数,还需要同时具备免碰撞、匿名性、防篡改等特点。

免碰撞指的是:如果输入的x≠y,绝不会出现H(x)=H(y)的情况,即输入两个不同的数据块,其哈希值一般来说也不会相同。理论上相同的可能性并非绝对没有,但概率极小。所以,对于一个给定的数据块,要找到与它哈希值相同的数据块极难。

哈希函数的隐匿性是指,对于一个给定的输出结果H(x),想要逆推出输入的x,在计算上是不可能的。

而对于数据块的任何一处小小的改动,哈希值随之产生的变动都会非常明显,这一点构成了哈希函数的防篡改特点。

同时,在这一函数中,穷举法是能够使得哈希值H(x)落在特定范围的最好方法。在比特币的区块链上,使用哈希穷举实现工作量证明能够拥有随机和易验证两种特性,这两种特性将于后文中提到。

三、工作量证明的原理

在工作量证明系统中,客户端完成一定难度的工作,得出一个结果,验证者只需通过验证这个结果就能检验客户端是否做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中的,对于验证方则是易于验证的。其工作流程如下:

工作量证明的原理

对于任意一串字符,给出了一定的工作量要求,对这串字符进行变更,使其得到具有特定规律的一个结果,若得到这个结果,则验证通过。为了达到这个目标,需要不断地对这串字符进行哈希计算,直到计算量达到一定次数时,才能得到要求的变更后的数列。

在计算之前,根据工作量要求可以得出预期的计算次数,这个预期的次数和实际不一定完全吻合,但会大体接近,如果重复多次,会发现这确实是一个符合统计学规律的概率事件。而

这里提到的预期计算次数,其实就是要求的工作量。

以上是工作量证明的基本原理,比特币系统中的工作量证明机制与其类似,但更为复杂。

四、比特币的工作量证明

在工作量证明的区块链中,系统会根据算力大小来选取打包的节点,对于节点来说,单纯的打包和数据上传非常简单,不过,系统需要选取一个特定的节点来处理某件事,为了避免众多节点对同一件事打包而引起不必要的分叉,比特币通过前文中提到的哈希穷举,增加打包难度,以延长打包时间。

简言之,就是每个节点都需要在10分钟内找到一个随机数,并保证这个随机数加上上文所说的哈希运算,能够满足一定的规律。为了找到这个随机数,只能通过不断尝试新的随机数,不断的运算。而随着运算量的增大,目标范围也会不断缩小。

比特币的工作量证明

哈希穷举的随机性和易验证性在这里体现了出来。首先,即使知道了这个随机数的范围,也只能通过大量计算去得到;然后,如果有人找到了随机数,那么其他节点能够很容易地检验这个结果的正确性。

如果算力增强,就需要修改难度以增加计算次数,比特币中就有修改难度的规则。所以,想要找到这样一个随机数,计算量要远远大于预期的工作量。

为了鼓励节点不断地对数据和信息进行打包,比特币的区块链网络设置了奖励,即支付给打包(记账)节点的奖励和交易费。

打包奖励是指创建区块的节点会获得一定数量的比特币作为奖励,奖励的数量随着比特币区块的生成而减少。

交易费即使用比特币转账时支付给记账节点的费用,这是支持节点工作、维护区块链自动运转的重要因素。

这两种打包奖励都是通过工作量证明来进行,在比特币中也就是为人所熟知的挖矿行为。而衍生而来的矿机,在一开始其实是个人计算机这样的运算设备,随着算力的提高,难度的增大,专业矿机诞生。自始至终,算力的竞争从未结束,而难度和算力也在不断进行博弈。

工作量证明的优点是足够安全、公平和去中心化,其免碰撞、匿名性与不可篡改的特点奠定了比特币区块链技术的核心;但它的缺点也很明显,耗时长效率低,算力提高的同时耗费了电力,除了挖矿,这些强大的算力难以转化成其他资源。

文章来源:BB财经(www.bbcaijing.cn),如有侵权请联系删除!

原文链接:http://www.bbcaijing.cn

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 区块链技术开发入门

    本文将对区块链开发使用的技术、工具、语言、平台做一次全景扫描,并对其应用状况进行分类。

    南坡海瑞
  • 以太坊君士坦丁堡硬分叉详解

    如果你是普通的以太币(ETH)持有者,就无需过于关心这次的君士坦丁堡硬分叉;如果你是以太坊技术爱好者,就有必要认真读一读这篇文章了。

    南坡海瑞
  • 金岩石:区块链经济的新维度

    大浪淘沙,沉者为金,只有历经风雨,方能见彩虹。在今年的两会中,两会代表委员关注区块链的人数有了明显的增加,提案或观点数量显著提升,更值得一提的是,“工业互联网”...

    南坡海瑞
  • 技术分享:数据分析的7个步骤

    在进行真正的数据分析操作之前,要首先分析你的需要,你为什么要进行数据分析,数据分析是为了什么。

    加米谷大数据
  • Python-with&contextlib浅见

    这样呢,打开文件操作后,必须需要手动关闭文件,如果没有.close ,系统资源会一直被占用,而且还有一点,系统同一时间打开文件的数量也有限.

    Bobby_Y
  • 日常踩坑系列(一)

    sql server.png 这儿的错误提示异常非常明显,就是说select后面除了聚合函数包裹的列以外,其余列必须出现在了gruop by之...

    用户5166330
  • 从数据库创建深入学习Oracle技术:那些年 mkplug 偷偷执行的Plugin操作

    在很多Oracle文档中,可能大家都注意过Oracle用来进行测试的一个表空间,这个表空间中有一系列预置的用户和数据,可以用于数据库或BI的很多测试实验。 这个...

    数据和云
  • 项目管理中,几种工作量评估方法

    在测试项目管理中或编写测试计划时,经常需要对某个测试工作进行工作量的预算,很多时候都是凭个人的工作经验进行估算的,如能结合一些常规的估算方法,有助于估算的精确度...

    公众号php_pachong
  • Python 协程的详细用法和例子

    从句法上看,协程与生成器类似,都是定义体中包含 yield 关键字的函数。可是,在协程中, yield 通常出现在表达式的右边(例如, datum = yiel...

    py3study
  • 【奥斯卡理财星体系 第四章】丨你该如何选择适合的理财工具

    在我们学习了理财“心法”,认识了“自己”,并且对自己适合的收益预期,也有了明确概念之后,接下去就到了童鞋们期盼已久的,学习理财“招式”的时间啦。

    Hongten

扫码关注云+社区

领取腾讯云代金券