主页 > imtoken官方苹果下载 > 一篇文章了解生成新比特币区块的过程

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

imtoken官方苹果下载 2023-01-16 23:45:31

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

1bab6e51-2d0c-4192-8a7a-063c6b96b30d

我们已经知道比特币交易信息是如何构造的,但是这些信息是如何进入一个新的比特币区块的呢?

接下来小腾将为大家讲解比特币区块是如何通过生成新的比特币区块的过程来记录和确认交易信息的。

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

交易池,英文名称: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锁定新钱包地址)。

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

比特币借币交易怎么玩_比特币的交易过程由谁记录_比特币交易记录截图

8e2ac1fdc544431ca35aad921aa75078

图1 待确认交易进入交易池

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

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

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

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

比特币的交易过程由谁记录_比特币交易记录截图_比特币借币交易怎么玩

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

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

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

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

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

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

比特币的交易过程由谁记录_比特币借币交易怎么玩_比特币交易记录截图

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

2fe72ac7775644c29424288089df5403

图 2 一个比特币区块的结构

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

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

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

比特币交易记录截图_比特币借币交易怎么玩_比特币的交易过程由谁记录

前一个块的哈希值。 也称为父块哈希比特币的交易过程由谁记录,用于定位前一个块。 每个区块都包含其前一个区块的哈希值,任何一个区块的任何微小变化都会引起后续区块哈希值的巨大变化,如此环环相扣,确保所有比特币区块形成单链结构,可有效防止恶意篡改比特币块数据。

MerkleRoot 哈希。 在区块的交易数据列表中,取所有交易数据的哈希值,构建Merkle树。 这棵 Merkle 树的根哈希值是 MerkleRoot 哈希。 如下图所示: 图3 交易数据的Merkle树结构 由于哈希算法的敏感性,整个交易的Merkle树中交易数据的任何细微变化都会产生联动效应,从而产生巨大的变化在 Merkle 树的根哈希值中。 因此,交易数据的默克尔根哈希值(MerkleRoot Hash)可以看成是整个交易的指纹,用来指代区块中的交易数据。

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

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

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

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

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