区块链中为什么需要工作量证明

区块链 18-06-15 14:46 930  

工作量证明 在分布式网络中各个孤立的节点要有一种机制对某件事情达成共识,而工作量证明(Proof of Work)就是一种应用在区块链中的共识机制,另一种著名的公式机制是权益证明(Proof of Stake)。 比特币网络采用了工作量证明的机制,可以简单理解为在做一件事情之前需要提供自己完成了一定的前置工作的证明,而其他节点可以很容易的验证这个证明的真伪。类似现实生活中的学历证书,驾驶证等等,获得需要经过大量努力,验证真伪相对容易。 比特币的工作量证明是通过让挖坑节点计算新区块数据+nonce的hash值,不断变化nonce值使得产生的hash结果的前N位刚好是0从而达到目标。而这个计算过程没有捷径可走,只能不断反复计算,消耗算力。为了提高自己的计算速度,更快得到结果,从而得到挖矿奖励,需要采用更高性能的计算设备。但当性能提高后计算结果比比特币预制的10分钟更端后,比特币网络会动态增加难度,让计算时间重新归回10分钟。 遍布世界各地的分布式网络中,就是一个赤裸裸的逐利场,你不能指望每个节点都诚实可靠不作恶,只能假定各个节点都可能作恶,通过一种机制来保证他们不作恶。为了奖励旷工计算和保存账本数据,通过挖矿奖励来驱动他们。而为了让他们不作恶,是需要让他们”付出代价“才行,工作量证明就是付出算力的代价,权益证明就是付出权益,表面自己愿意投入其中。工作量证明机制并不新鲜,比特币中的hashcash在很早之前就应用在了垃圾邮件过滤的场景中。 hashcash 垃圾邮件之所以泛滥是因为发送垃圾邮件的成本太低。有了hashcash机制后,没给一个地址发送邮件,都需要计算一个单独的nonce从而达到指定的工作量,那么发送大量垃圾有奖将是一个特别费时费资源从而得不偿失的事情。我用go写了一个简单的挖抗测试程序,不断的计算hash完成工作量,每次程序运行时,CPU飙升,风扇狂转。 因为hashcash是的发送垃圾邮件变成了一个有”代价“的事情,从而提高了成本。可以畅想一下,网络世界的另外一个毒瘤DDos攻击,也是因为大量主机向网络发送大量信息,没有节制。如果操作系统在处理网络协议的时候,从系统层面提供一个hashcash的工作量证明,只有完成工作量后才能发送数据或者发起TCP Syn请求或者UDP包。如此一来,将大大缓解DDos攻击的危害,不过却会产生一个致命问题,发送效率降低,每个请求都完成工作量证明,导致消息被延误,这是不能接受的。 权益证明 工作量证明是需要消耗算力完成证明,权益证明是投入权益,拥有越多的权益获得创建新节点的概率越大,出发点是一个节点在系统中拥有更多权益,他就越希望系统公平稳定而不作恶。但是这样一来就会被少数拥有最多权益的人掌控。可以采用类似权益*拥有天数这样作为依据来选择创建新区块的节点,同时新节点创建后将有用天数清理,这样可以将创建权限公平的分配给其他人,而不是被少数人占用。