一文读懂比特币新区块产生过程

原文标题:《比特币新区块产生的过程》
撰文:闲话挖矿
,这是博主
挖矿科普专辑的第二篇内容,承接上一篇「
比特币交易的过程」,继续通过分析比特币交易从发起到确认的全过程来一睹比特币挖矿的全貌。,比特币交易的过程实质上是一堆 UTXO 消耗和产生的过程,这些过程由交易发起方按照比特币协议规定的方式构造交易信息,并由比特币网络产生的新区块记录和确认,一旦交易信息由比特币区块记录并确认,交易便完成了,比特币网络也就实现了价值的转移。,一文读懂比特币新区块产生过程,在「比特币交易的过程」一文中,我们已经知道比特币的交易信息是如何构造的,但是这些信息又是如何进入比特币新区块的呢?,接下来博主将通过比特币
新区块产生的过程来具体说明比特币区块是如何记录并确认交易信息的。,交易池,英文名称:mempool,又叫内存池,是用来存储待确认交易的地方。每个比特币挖矿节点均有自己独立的交易池,因交易池体积,最低交易费比例(本文所指
交易费比例,均为单位体积交易包含的手续费,单位是 Sat/B,即每 B 字节交易的手续费为 x 聪比特币,下同)限制等不同,各节点的交易池也不相同。矿工(矿池)在构造预备区块时,需要从交易池中选择要打包的交易。由于交易池经常被调用,它的数据被存放在节点服务器的 RAM 中,这就意味着交易池的体积不会太大。,挖矿节点,在比特币网络中,参与记录和验证比特币交易和区块的是一个个保存比特币数据的节点。其中有一部分节点,不仅参与记录和验证的工作,还参与比特币新区块的创建工作,他们构造新区块,并通过 PoW 工作量证明竞争记账权,进而获得创建新区块的权限,这部分节点是
挖矿节点。早期的挖矿节点有矿工,也有矿池,但当前由于比特币挖矿难度太高,单个矿工很难赢取记账权,创建新区块。目前主要的比特币挖矿节点,是各家矿池,如 F2Pool,Poolin,BTC.com,Antpool,Slushpool 等。,UTXO 库,比特币节点通过扫描节点所有交易信息,构建的
UTXO 集群。它包含所有未被消耗的 UTXO。每当新区块产生后,UTXO 库会将新区块中消耗掉的 UTXO 从自己的列表中删除,将新产生的 UTXO 加入到自己的列表中。,Coinbase 奖励,又叫创币交易。比特币协议规定,每产生一个新的比特币区块,比特币网络就会产生 N 个比特币,作为维护比特币网络的奖励支付给创建这个区块的矿工。同时,此区块中 Coinbase 奖励之外的其他交易包含的所有交易费,也会合并在 Coinbase 奖励中,一起支付给创建这个区块的矿工。其中,N 的数值在比特币诞生时为 50,此后大约每 4 年减半一次,
目前为 6.25,比特币网络以这种减半的方式来控制比特币的总量。
Coinbase 奖励是每个区块记录的第一笔交易。,当我们要发起一笔比特币交易时,交易发起方构造好交易信息,此时的交易信息是
待确认的交易,它包含交易输入信息(未使用的 UTXO 和正确私钥签名)和交易输出信息(锁定新的钱包地址的待确认 UTXO)。,待确认交易在经过验证后,由交易发起方向比特币网络广播,比特币网络中的节点,均可验证和收录广播的信息。其中,挖矿节点会在收到广播后,验证待确认交易信息,验证通过后,挖矿节点会将待确认交易加入到自己的交易池中。,一文读懂比特币新区块产生过程
图 1 待确认交易进入交易池,需要验证的交易信息包括:,当挖矿节点要构造预备区块,准备生成新区块时,会按照优先级排序,从交易池中取待确认交易。预备区块通常会预留一定空间给高优先级的交易,剩下的空间会按照交易费比例(Sat/B)由高到低顺序一直把区块加满或者把交易池的交易用光。,但比特币区块中不仅仅包含从交易池中取的待确认交易。,按照比特币协议规定,比特币的区块主要包括五个部分:魔数,区块大小,区块头,交易计数器和交易信息。如下图:,一文读懂比特币新区块产生过程
图 2 比特币区块的结构,其中,
「魔数」是一个值为 0xD9 B4 BEF9 的常数;
「区块体积」是本区块所有数据的总体积;
「区块头」是可以看作是整个区块的缩略信息,挖矿用到的区块信息就是区块头;
「交易计数器」用来记录区块中交易的数量;
「交易数据」是区块所包含的所有交易信息,包括 Coinbase 奖励部分,一般来说,这部分数据占了整个区块绝大部分空间。,在比特币区块中,区块头是最为关键的一个信息。它包含整个区块的所有特征信息:,由于哈希算法的敏感性,整个交易的 Merkle 树中任何一个交易数据有微小的改动,都会产生联动效果,导致 Merkle 树的根哈希值出现巨大变化。因此交易数据的 Merkle 树根哈希值(MerkleRoot Hash)可以看作是整个交易的指纹,用来指代区块中的交易数据。,一文读懂比特币新区块产生过程
图 3 交易数据的 Merkle 树结构,目标哈希值由挖矿难度确定,当挖矿难度变大时,目标哈希值变小,矿工要找到符合比特币网络要求的哈希值就越困难。按照当前的挖矿难度,要找到低于目标哈希值的哈希值,理论上需要一台 S17 矿机连续工作
42 年时间。因此,现在基本不存在个人自建节点挖比特币的情况。,挖矿节点构建好预备区块后,就会将区块头信息下发给矿工,矿工通过不断调整区块头中随机数来变更预备区块的哈希值,当预备区块的哈希值低于比特币网络当前目标哈希值时,这个区块就是一个合法新区块。,挖矿节点会及时地向比特币网络广播新区块,比特币网络中其他比特币节点在接到广播信息后,对新区块进行验证,验证通过后,将新区块加入本地。此时,新区块创建并确认完毕,对应交易也完成了。,当挖矿节点要构造预备区块,准备生成新区块时,会按照优先级排序,从交易池中取待确认交易。预备区块通常会预留一定空间给高优先级的交易,剩下的空间会按照交易费比例(Sat/B)由高到低顺序一直把区块加满或者把交易池的交易用光。,但比特币区块中不仅仅包含从交易池中取的待确认交易。,一文读懂比特币新区块产生过程
图 3 交易数据的 Merkle 树结构

原创文章,作者:闲话挖矿,如若转载,请注明出处:http://www.lianchaguan.com/archives/33283

发表评论

邮箱地址不会被公开。 必填项已用*标注