比特币交易信息是如何构造的?博主将为您解析

资讯 8个月前 manoon
0

比特币交易过程本质上是一个消费和生成一堆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 待处理交易进入交易池

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

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

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

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

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

确定是否有来自 Coinbase 的交易输入奖励。奖励对应的币必须至少经过100个区块确认才能使用;

比特币交易信息是如何构造的?博主将为您解析

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

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

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

当一个挖矿节点想要构建一个初步的区块并准备生成一个新的区块时,它会按照优先级从交易池中排序需要确认的交易。预备区块通常会为高优先级的交易预留一定的空间,剩余空间会按照交易费率(Sat/B)从高到低依次填满区块或耗尽交易池中的交易。

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

比特币交易信息是如何构造的?博主将为您解析

比特币交易信息是如何构造的?博主将为您解析

图 2 比特币区块结构

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

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

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

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

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

比特币交易信息是如何构造的?博主将为您解析

比特币交易信息是如何构造的?博主将为您解析

图 3 交易数据的 Merkle 树结构

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

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

当前目标哈希值。比特币协议规定,矿工创建的初步区块的哈希值小于目标哈希值,然后才会被认为是有效的。目标哈希值由挖矿难度决定。当挖矿难度变大时,目标哈希值变小,矿工更难找到满足比特币网络要求的哈希值。按照目前的挖矿难度,要找到一个低于目标哈希值的哈希值,理论上S17矿机需要连续工作42年。因此,基本没有个人自建节点来挖比特币。

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

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

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

版权声明:manoon 发表于 2021-09-27 18:58:42。
转载请注明:比特币交易信息是如何构造的?博主将为您解析 | 198区块链导航

暂无评论

暂无评论...