区块链芝士丨什么是比特币的记账与发行机制(1)

比特币的支付需要有人记账,区块链账本是一个去中心化的账本,谁都可以参与记账。那么,为什么就有人来记比特币的账呢?既然谁都可以记账,那又以谁的账为准呢?怎么确保账目的真实性呢?

首先,记账是有奖励的。一部分奖励是被打包区块里用户自己出的手续费,手续费用比特币支付,这个手续费可高可低,给得高,记账者就倾向于先记这笔手续费高的账。另一部分奖励则是区块奖励,打包一个区块,就获得一定的区块奖励。比特币诞生之初,区块奖励为 50个比特币,按比特币程序设定,每出 210000个区块后,奖励减半,现在已经经历了两次减半,预计 2020年5月时会发生第三次减半。区块奖励一方面调动了大家去记账,另一方面也解决了比特币的发行问题。按照上述规则,我们可以按这个公式计算比特币的总量,就是 210000×50×(1+1/2+1/4+……),总共 2100万个。

有了奖励,而且奖励颇丰,大家当然抢着去记账。为了确定以谁的账本为准,比特币又设定:记账者要先把收集到的账单打包成一个区块,区块由区块头和区块体组成,区块头里有个记账者自定的随机数,记账者换上不同的随机数,对区块头进行哈希运算,谁先试出符合要求的哈希值,他就将这个区块广播全网,大家都以他的账本为准。

区块头和区块体是什么关系呢?区块体里记录了具体的账单,包括记账者自己所得奖励和手续费的账单。区块头则相当于该区块的身份信息,里面有上一个区块头的哈希值、时间戳、哈希运算的难度目标、随机数等信息,还有一个 Merkle树哈希值,Merkle树哈希值由区块体里的账单经过一系列哈希运算得到,相当于区块体里那些账单的摘要信息,只要账单稍有变化,Merkle树哈希值就会大不相同。

哈希算法又被称为摘要算法,输入任何数据,经过哈希运算后,都会得到一个固定长度的输出值称为该输入数据的哈希值。哈希运算有两大特点第一,只要输入数据稍有变动,哈希值就会大不相同,比如输入一本书的内容,只要多加一个字,哈希值都会面目全非。第二,哈希运算只能正向算,不能反向算,输入数据后可以很快算出哈希值,但给出哈希值,就没法反推它的输入数据,要想知道输入数据就只能一次次输入不同数据去尝试,直到试出为止。这可能比较难理解,这就好比可以轻易地算出29179×87013=2538952327,但要是问你 2538952327是哪两个数的乘积,你就只能一个数一个数地试。

 

本文由 零点财经 作者:tao 发表,其版权均为 零点财经 所有,文章内容系作者个人观点,不代表 零点财经 对观点赞同或支持。如需转载,请注明文章来源。
分享生成图片
40

发表回复

区块链芝士丨什么是比特币的记账与发行机制(1)

2021-06-09 16:10:17

比特币的支付需要有人记账,区块链账本是一个去中心化的账本,谁都可以参与记账。那么,为什么就有人来记比特币的账呢?既然谁都可以记账,那又以谁的账为准呢?怎么确保账目的真实性呢?

首先,记账是有奖励的。一部分奖励是被打包区块里用户自己出的手续费,手续费用比特币支付,这个手续费可高可低,给得高,记账者就倾向于先记这笔手续费高的账。另一部分奖励则是区块奖励,打包一个区块,就获得一定的区块奖励。比特币诞生之初,区块奖励为 50个比特币,按比特币程序设定,每出 210000个区块后,奖励减半,现在已经经历了两次减半,预计 2020年5月时会发生第三次减半。区块奖励一方面调动了大家去记账,另一方面也解决了比特币的发行问题。按照上述规则,我们可以按这个公式计算比特币的总量,就是 210000×50×(1+1/2+1/4+……),总共 2100万个。

有了奖励,而且奖励颇丰,大家当然抢着去记账。为了确定以谁的账本为准,比特币又设定:记账者要先把收集到的账单打包成一个区块,区块由区块头和区块体组成,区块头里有个记账者自定的随机数,记账者换上不同的随机数,对区块头进行哈希运算,谁先试出符合要求的哈希值,他就将这个区块广播全网,大家都以他的账本为准。

区块头和区块体是什么关系呢?区块体里记录了具体的账单,包括记账者自己所得奖励和手续费的账单。区块头则相当于该区块的身份信息,里面有上一个区块头的哈希值、时间戳、哈希运算的难度目标、随机数等信息,还有一个 Merkle树哈希值,Merkle树哈希值由区块体里的账单经过一系列哈希运算得到,相当于区块体里那些账单的摘要信息,只要账单稍有变化,Merkle树哈希值就会大不相同。

哈希算法又被称为摘要算法,输入任何数据,经过哈希运算后,都会得到一个固定长度的输出值称为该输入数据的哈希值。哈希运算有两大特点第一,只要输入数据稍有变动,哈希值就会大不相同,比如输入一本书的内容,只要多加一个字,哈希值都会面目全非。第二,哈希运算只能正向算,不能反向算,输入数据后可以很快算出哈希值,但给出哈希值,就没法反推它的输入数据,要想知道输入数据就只能一次次输入不同数据去尝试,直到试出为止。这可能比较难理解,这就好比可以轻易地算出29179×87013=2538952327,但要是问你 2538952327是哪两个数的乘积,你就只能一个数一个数地试。