主页 > 苹果手机安装imtoken > 生成新比特币块的过程

生成新比特币块的过程

苹果手机安装imtoken 2023-09-04 05:08:55

这是博主挖矿科普专辑的第二篇内容,继上一篇《比特币交易的过程》之后,通过分析比特币交易从发起到确认的全过程,继续看比特币挖矿全貌。

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

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

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

以下是关于安利的一些知识:

交易池,英文名称:mempool,又称内存池,用于存放待确认的交易。每个比特币挖矿节点都有自己独立的交易池。指交易手续费比例,即单位量交易中包含的手续费,单位为Sat/B,即每B字节交易的手续费为x Satoshi Bitcoin,下同)限制为不同,每个节点的交易池也不同。相同的。矿工(矿池)构建预备区块时,需要从交易池中选择要打包的交易。由于交易池被频繁调用,其数据存储在节点服务器的RAM中,这意味着交易池的体积不会太大。

比特币网络中的挖矿节点参与记录和验证比特币交易,而区块是保存比特币数据的节点。其中一些节点不仅参与记录和验证工作,还参与创建新的比特币区块。他们通过 PoW 工作量证明构建新区块并竞争记账权,进而获得创建新区块的权限。这部分节点是挖矿节点。早期的挖矿节点有矿工和矿池,但目前由于比特币挖矿难度大,单个矿工难以获得记账权并创造新区块。目前比特币的主要挖矿节点是各种矿池,如鱼池、矿池、BTC.com、蚂蚁池、Slushpool等。

UTXO库,比特币节点通过扫描节点的所有交易信息来构建UTXO集群。它包含所有未使用的 UTXO。每当有新的区块产生时,UTXO 库都会从自己的列表中删除新区块中消费的 UTXO,并将新产生的 UTXO 添加到自己的列表中。

Coinbase 奖励,也称为造币交易。比特币协议规定,每产生一个新的比特币区块,比特币网络就会产生N个比特币,这些比特币支付给创建这个区块的矿工,作为维护比特币网络的奖励。同时,该区块中除 Coinbase 奖励之外的交易中包含的所有交易费用也将合并到 Coinbase 奖励中,并支付给创建该区块的矿工。其中,比特币诞生时N的值为50,之后大约每4年减半。目前,它是 6.25。比特币网络以这种减半的方式控制着比特币的总量。Coinbase 奖励是每个区块中记录的第一笔交易。

待确认的交易将首先进入交易池

当我们要发起一笔比特币交易时,交易发起者会构造交易信息。此时的交易信息就是待确认的交易,包括交易输入信息(未使用的UTXO和正确的私钥签名)和交易输出信息。(锁定新钱包地址的待处理UTXO)。

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

图1 待处理交易进入交易池

需要验证的交易信息包括:

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

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

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

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

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

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

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

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

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

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

图 2 比特币区块的结构

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

在比特币区块中比特币的区块产生时间大概是多久,区块头是最关键的信息。它包含了整个区块的所有特征信息:

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

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

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

图 3 交易数据的 Merkle 树结构

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

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

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

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

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

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

参考:

比特币源码分析

比特币区块头

比特币目标哈希

比特币区块结构

掌握比特币