主页 > imtoken如何导入钱包 > 区块链简介|一篇了解生成新比特币区块过程的文章

区块链简介|一篇了解生成新比特币区块过程的文章

imtoken如何导入钱包 2023-03-22 07:52:27

外汇天眼APP讯:比特币交易的过程本质上是一堆UTXO的消费和生成的过程。这些过程由交易发起者按照比特币协议规定的方法构建,并由比特币网络生成的新区域区块记录和确认,一旦交易信息被比特币区块记录并确认,则交易完成,而比特币网络实现价值的转移。

区块链入门|一文看懂比特币新区块产生的过程

在《比特币交易的流程》一文中,我们已经知道了比特币的交易信息是如何构建的,但是这些信息是如何进入新的比特币区块呢?

接下来,博主将详细讲解比特币区块如何通过生成新比特币区块的过程来记录和确认交易信息。

这里需要安利的几个知识点:

交易池,英文名称:mempool,又称内存池,用于存放待确认的交易,每个比特币挖矿节点都有自己独立的交易池。由于交易池的交易量,最低交易手续费比例(本文所指的交易手续费比例为单位交易量交易中包含的手续费,单位为 Sat/B,即每 B 字节交易手续费为x Satoshi Bitcoin,下同)限制等,每个节点的交易池也不同。矿工(矿池)构建预备区块时,需要从交易池中选择要打包的交易。由于交易池被频繁调用,其数据存储在节点服务器的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锁定新钱包地址)。

待确认的交易被验证后,由交易发起者向比特币网络广播怎样加速区块确认书,比特币网络中的节点可以验证并记录广播信息。其中,挖矿节点收到广播后会验证待确认的交易信息。验证通过后,挖矿节点会将待处理的交易加入到自己的交易池中。

区块链入门|一文看懂比特币新区块产生的过程

待验证的交易信息包括:

交易是否包含有效的输入输出钱包地址;

交易量是否小于区块最大交易量(目前一个比特币区块最大交易量为1M);

输入的UTXO是否合法(与节点的UTXO库相比,输入的UTXO没有被使用过);

交易的总投入和产出是否合理(总投入≥总产出);

判断交易的输入是否有来自Coinbase的奖励,奖励对应至少100个币,需要区块确认后才能使用;

确认交易池中没有重复交易;

交易设置的交易费用高于内存池的交易费用比例(Sat/B)限制,以及其他验证(如孤儿交易的验证和跟踪等)。

挖矿节点从交易池中选择交易,构建预备区块

当挖矿节点构建预备区块并准备生成新区块时,会按优先级排序。从交易池中获取待处理的交易。预留区块通常会为高优先级的交易预留一定的空间,剩余空间会根据交易手续费率(Sat/B)从高到低一直填满区块或用完交易池中的交易。

但比特币区块不仅仅包含从交易池中提取的待处理交易。根据比特币协议,一个比特币区块主要包括五部分:幻数、区块大小、区块头、交易计数器和交易信息。如下图所示:

其中,“幻数”是一个常数值0xD9B4BEF9; “块体积”是该块中所有数据的总体积; “区块头”可以看作是整个区块的缩写信息,用于挖矿的区块信息就是区块头; “交易计数器”用于记录区块中的交易数量; “交易数据”是区块中包含的所有交易信息,包括Coinbase奖励部分,一般来说,这部分数据占据了整个区块的大部分空间。

在比特币区块中,区块头是最关键的信息。它包含了整个区块的所有特征信息:

块版本号。创建区块的比特币节点的版本信息,用于跟踪比特币协议的升级和更新;

前一个区块的哈希值。也称为父块哈希,用于定位前一个块。每个块都包含其前一个块的哈希值。任何一个区块的微小变化都会导致后续区块的哈希值发生巨大变化。所有比特币区块形成单链结构,可有效防止恶意篡改比特币区块数据。

MerkleRoot 哈希。在区块的交易数据列表中,取所有交易数据的哈希值,构建一棵默克尔树。这个 Merkle 树的根哈希值是 MerkleRoot 哈希。如下图所示:

区块链入门|一文看懂比特币新区块产生的过程

由于哈希算法的敏感性,整个交易的默克尔树中任何一笔交易数据的微小变化都会产生联动效应。导致 Merkle 树的根哈希发生巨大变化。因此,交易数据的Merkle Root Hash可以看作是整个交易的指纹怎样加速区块确认书,用来指代区块中的交易数据。

时间戳。创建准备块的时间。

当前目标哈希。比特币协议规定,只有当矿工创建的预备区块的哈希值小于目标哈希值时,该区块才有效。目标哈希值由挖矿难度决定。当挖矿难度增加时,目标哈希值变小,矿工更难找到满足比特币网络要求的哈希值。按照目前的挖矿难度,要找到低于目标哈希值的哈希值,理论上需要S17矿机连续工作42年。因此,基本不会出现个人自建节点挖比特币的情况。

随机数。也称为随机数。我们可以发现,在区块头信息中,区块版本号、前一个区块的哈希值、MerkleRoot哈希值、时间戳、当前目标哈希都是已知信息,相对固定,不方便在将要。因此,如果要调整prepared block的hash值,就需要引入一个可变数据——一个随机数。通过修改随机数,可以调整准备块的hash值。

挖矿节点构建预备区块后,会将区块头信息发送给矿工。矿工通过不断调整区块头中的随机数来改变预备区块的哈希值。当一个区块的哈希值低于比特币网络当前的目标哈希值时,它就是一个合法的新区块。

挖矿节点会及时将新区块广播到比特币网络。比特币网络中的其他比特币节点收到广播信息后,会验证新区块。验证通过后,将添加新区块。本地,并扩展节点的区块链。至此,新的区块被创建并确认,相应的交易也完成了。