既是骗局又不是骗局的区块链浅谈

1.

概述

PoW,全称Proof of Work,翻译为工作量证明,是一种共识机制,俗称为挖矿。大部分公链,例如比特币、以太坊等,均采用PoW作为共识机制,根据矿工们的有效工作量,来进行加密货币的利益分配。

2.

区块链

区块链是一个去中心化的点对点网络(Peer to Peer,简称P2P,BT下载也是这项技术的一种应用)。用户在区块链上发起交易,经过矿工的挖矿过程,使得交易广播到全网,并永久固定在区块链上,所以在区块链上的交易是匿名的、安全的。矿工也因此获得挖矿奖励,例如比特币、以太币等加密货币。

3.

SHA256算法

3.1 简介

任意一个字符串,经过SHA256算法计算之后,得到一个固定的64位hash值,例如:sha256(123456)=

8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

3.2 改变参数

如果输入的字符串发生微小的变化,那么输出的hash值将会发生彻底的变化,得到完全不一样的Hash值,例如:

sha256(123457) =

54b688a517f7654563a6c64d945a3670880a4c602ec67a065bbebbcd2b22edd5

3.3 前导0

hash值的“前导0”是指,64位的hash值从前面数有几个连续的0,例如:

0000c83c308f36165d28b88a33f14af36f2ec44d6373bae55d2796644ea35e9d,我们称这个hash值有4个“前导0”;

挖矿所需的“前导0”的数量越多,挖矿难度越大。

4.

矿工

从新闻报道中我们可以看到,在一些矿场,成群的计算机夜以继日地工作,才能挖到一些比特币。我们都知道,计算机的功能就是运算,那这些计算机究竟在算什么呢?有这么多矿工,区块链如何判定把比特币分配给谁呢?

4.1 比特币区块链hash值的参数

比特币区块链hash值是由index, previous block hash, timestamp, block data 和 nonce 作为参数,根据SHA256算法计算得到的

4.2 参数解释

参数1:index 是当前区块的编号,已知

参数2:previous block hash 是上一个区块的hash值,已知

参数3:timestamp 是当前时间,已知

参数4:block data 是要打包的交易信息,已知

参数5:nonce 是可变随机数,未知

4.3 挖矿过程

我们可以看到,前4个参数都是已知信息,只有nonce是可变的,所以,挖矿的过程就是,不断变化nouce值,然后计算hash值,观察计算得到的hash值是否符合某个特征,比特币区块链要求的特征是前面有一定数量的“前导0”。

如果符合特征,则本次挖矿成功,立即向全网广播计算结果,其他节点同步区块信息并确认无误后,则放弃本次挖矿,立即开始下一次挖矿。本次挖矿成功的节点会收到比特币区块链生成的比特币奖励,本次计算中的参数和hash值被永久写入区块链。

注意第4个参数blck data就是该节点收录的未确认交易信息,随着本次挖矿成功,这些未确认交易被成功写入区块链,也就是说,这些交易被确认了。这就是为什么我们说区块链是一个公开的分布式账本,挖矿+记账完美结合。

5.

矿工费

我们在第4节提到,挖矿成功后,会将本次挖矿所用的block data永久写入区块链,block data里是一些交易信息(可能有成百上千条),例如:张三给李四转账1.25个比特币。矿工通过PoW机制确认了这些交易,所以,发起交易的人理应支付一些手续费给矿工,这种手续费就被称为矿工费。

用户在区块链上发起交易时,需要确定给多少矿工费,这个值可以自己设定,根据当前区块链的繁忙程度,通常几毛到几块的额度即可。

如果支付的矿工费太少,则会导致交易长时间无法确认(甚至可能导致交易失败),所以要给一个合适的矿工费。一般来说,交易软件会提示一个合适的矿工费金额。如果想要快速成交,可以适当多给一些矿工费,这样你的交易就会被优先打包。

挖矿成功后,本次被确认的所有交易的矿工费会自动支付给挖矿成功的矿工。

6.

挖矿

我们在第4节提到,比特币区块链要求的hash值特征是前面有一定数量的“前导0”。比特币区块链规定,每10分钟左右产生一个区块,为了维持这一速度,比特币区块链每产生2016个区块(大约2周)会根据过去的2016个区块的算力情况来调整有效hash值要求的“前导0”的个数,例如,截止发稿时(2018年12月3日19点30分),最新的区块是Block #552381,这个区块的有效hash值是00000000000000000011638c6b7c0c2b8741a6f09ab020099ca17d5a88ac3d11,居然有18个“前导0”,可以看出,挖矿难度很大,但是找到这个hash值的矿工也将获得丰厚的回报,他将获得比特币区块链奖励的12.5个BTC加上该区块中所有交易的矿工费0.247个BTC,总计12.747个BTC,截止发稿时,价值为366,000RMB。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181204A1IE2500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区