上篇文章中,我们解释了比特币的账户系统,今天来看看记账权限的界定是如何完成的。
我们知道,传统世界中,记账权限是完全交由中央银行去处理的,哪笔交易有效,哪笔交易无效,都由它来界定。
但在比特币的世界里,记账是由很多平行节点来完成,这些节点之间并没有权限的高低之分,也没有信用一说,都是网络中的一个个体。
这种情况下,记账这一行为就会带来分歧,网络中这么多节点当中由谁负责下一个记账呢?谁来界定有效与无效呢?
我们需要一种算法,这种算法既保证了每个节点都可以参与,也可以随时验证,同时毫无捷径可走。
于是出现了工作量证明 - Proof of Work算法,中本聪将其应用到了比特币当中。
哈希-Hash
为了讲解POW,我们要弄清楚哈希的概念。
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。
这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
哈希的性质:
- 不同的输入值,会通过算法出现不同的输出值。(有可能出现同样的输出值,称之为碰撞)
- 无法根据输出值推断输入值。
我用“bitcoin”得出计算哈希值的话,我们就会看到:
假如我稍微变化“bitcoin”这段文字,比如后面加个“1”,我们就会看到:
可以看到不管输入什么值,最后的输出值为衡长的字符串。
大家可以在这个网站上试试哈希:http://www.kjson.com/encrypt/hash/?fm=map
工作量证明 - Proof of Work
一个区块里有一些什么信息呢?假如当前的区块链高度为9999,现在需要计算第10000个区块的数据,那么第10000个区块可能是这样的:
当前区块高度:10000
前一区块哈希:00001425cd88cbc87a6eee5ec70cfce3a8ab38fcabb92122a9
时间戳:2018-09-15 10:04:45
交易内容:
A -> B 转移 10 BTC
C -> D 转移 20 BTC
Nonce:待计算
当前区块哈希:待计算
从区块里我们可以看到:Nonce、当前区块哈希、时间戳是变动信息,而交易内容与前一区块哈希为固定信息。
当前区块哈希 = Hash(交易内容 + 前一区块哈希 + 当前区块高度 + 时间戳 + Nonce);
挖矿难度 = 哈希的前4位数为0;
if ( 当前区块哈希 == 挖矿难度 )
{
Nonce 有效;
当前区块哈希 有效;
}
它将 固定信息 - 交易内容 + 前一区块哈希 + 当前区块高度 与 变动信息 - 时间戳(根据计算时间变更) + Nonce 作为整段内容进行哈希运算,得出当前区块哈希值 - CurrentHash,如果CurrentHash满足挖矿难度,即前4位数为0,我们就判断为有效的新区块。
这一计算Nonce、得出新区块哈希的过程 - 我们称之为挖矿。
挖矿的过程实际上就是代入不同的Nonce值,从1开始代入,一直到得出满足挖矿条件的Hash值为止;
当计算出满足条件的Hash值后,该节点会向网络中其他节点广播,待其他节点验证成功后,他们会根据最新区块继续计算下一区块。
当网络中同时出现两个有效的新区块时,网络中的其他节点会做出选择,到底承认 A区块还是承认 B区块;区块链网络中,最终只承认高度最高的一条链,因此经过几轮计算后,一条链会被放弃,所有节点又重新回到一条主链上。
- 既然是工作量证明,是不是谁算过的数值多,谁就可以拿更多奖励?
- 不,奖励只与是否最后得出有效Nonce与区块有关,一个节点为此付出了多少劳动与奖励无关。
挖矿奖励
现在我们知道了,挖矿的行为本质就是获得记账权,获得记账权后将交易写入新区块中,这些交易会率先获得承认。
有人可能会好奇,挖矿奖励来自哪里呢?
中本聪将该部分逻辑写进了区块链底层代码当中,任何新出区块的地址将获得比特币的奖励,这一奖励用于补偿它在过程中消耗的硬件与电力资源。
- 银行为了维持它的业务顺利进行,会从客户身上收取手续费。
- 比特币节点为了鼓励更多人参与到网络同步与记账,除了从客户身上收取手续费以外,还制定了出块激励。
良好的激励机制导致了更多人加入到了比特币的网络当中,参与了挖矿,加强了网络的安全性。
很多人呼吁:区块链是区块链,虚拟币是虚拟币;区块链应当脱离虚拟币、脱离炒币存在,而真正将目光集中在解决问题上。
对于这种看法我只想说:Too young, Too naive。
这个问题的具体解释放到后面。
还有一个经常听到的问题是:挖矿能不能挣钱,我能不能也挖矿?
相信你已经明白了什么是挖矿,那么挖矿能不能挣钱呢?
在当前的算力难度以及比特币价格下,个人很难通过挖矿去获利;从经济学的角度来看,如果普通人也能在挖矿市场中获利,那么参与者会越来越多,直到所有人都没有短期利益为止。
所以我们能得到最后问题的答案:你也可以挖矿,但能不能获利得认真考究。