BTCV高分资讯 > 数字货币 > 生成新比特币块的过程_btcv-高分资讯

生成新比特币块的过程_btcv-高分资讯

作者:高分资讯来源:高分资讯 数字货币 2020年07月08日

原标题:《比特币新区块产生的过程》

作者:八卦挖掘

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

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

比特币新区块产生的过程

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

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

安利有几个知识点。交易池,英文名:mempool,也称为内存池,用于存储待确认的事务。每个比特币挖掘节点都有自己独立的交易池,每个节点的交易池因交易池的交易量、最低交易费用比率(本文所指的交易费比例是包含在单位交易量中的手续费,单位为Sat/B,即每个B字节交易的手续费为X丛比特币,下同)等的不同而不同。构建预备块时,采矿者(矿石池)需要从事务池中选择要打包的事务。因为事务池经常被调用,所以它的数据存储在节点服务器的内存中,这意味着事务池的容量不会太大。

挖矿节点,在比特币网络中,保存比特币数据的节点参与记录和验证比特币交易和交易块。有些节点不仅参与记录和验证工作,还参与创建新的比特币块。他们构建新的数据块,通过PoW工作负载证明争夺簿记权,然后获得创建新数据块的权利。这些节点是挖矿节点。在早期的采矿节点,有矿工和采矿池,但目前,因为比特币开采太困难,很难让一个矿工赢得簿记权并创建一个新区块。目前,比特币的主要挖掘节点是各种挖掘池,如F2Pool、Poolin、BTC.com、Antpool、Slushpool等。

UTXO 库,一个由比特币节点通过扫描所有交易信息构建的UTXO 集群节点。它包含所有未消耗的UTXO。每当生成新块时,UTXO库将从其自己的列表中删除新块中消耗的UTXO,并将新生成的UTXO添加到其自己的列表中。

Coinbase 奖励,也称为硬币交易。根据比特币协议,对于每一个新的比特币区块,比特币网络将产生N个比特币,这些比特币将支付给创建该区块的矿商,作为对维护比特币网络的奖励。同时,除此区块中的硬币奖励外,交易中包含的所有交易费用都将合并到硬币奖励中,并支付给共同创建此区块的矿工。其中,比特币诞生时的价值是50,然后每四年减半。在目前为 6.25,比特币网络通过这种方式控制比特币的总量。Coinbase 奖励是每个区块记录的第一笔交易.

要确认的交易将首先进入交易池。当我们想要发起比特币交易时,交易发起者构建交易信息。此时,交易信息是待确认的交易,它包括交易输入信息(未使用的UTXO和正确的私钥签名)和交易输出信息(UTXO将被确认锁定新的钱包地址)。

待确认交易验证后,交易发起者向比特币网络广播,比特币网络中的所有节点都可以验证并记录广播信息。挖掘节点将在接收到广播之后验证待确认的交易信息,并且在验证通过之后,挖掘节点将待确认的交易添加到其自己的交易池中。

比特币新区块产生的过程

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

待验证的交易信息包括:

交易是否包含有效的输入和输出钱包地址;交易量是否小于该块的最大容量(比特币块的最大容量目前为1M);输入的UTXO是否合法(与节点的UTXO库相比,输入的UTXO未被使用);交易的总投入和总产出是否合理(总投入总产出);判断交易的输入是否有来自硬币库的奖励,并且与该奖励对应的货币在使用前必须经过至少100个块的确认;确认事务池中没有重复的事务;交易设定的交易费用高于内存池的交易费用比率限制(Sat/B),以及其他验证(如孤立交易的验证和跟踪等)。)。挖掘节点从事务池中选择事务并构造预备块。当挖掘节点构建预备块并准备生成新块时,它将根据优先级从事务池中对要确认的事务进行排序。预留块通常为高优先级交易预留一定的空间,剩余空间将根据交易费用比率(Sat/B)从高到低,始终填满该块或用完交易池中的交易。

然而,比特币块不仅仅包含要从交易池中确认的交易。

根据比特币协议,比特币块主要包括五个部分:幻数、块大小、块头、交易计数器和交易信息。下图:

比特币新区块产生的过程

图2比特币块的结构

「魔数」是一个常量,值为0xD9 B4 BEF9。「区块体积」是该数据块中所有数据的总量;「区块头」可视为整个区块的缩略信息,采矿中使用的区块信息是区块头;「交易计数器」用于记录区块中的交易数量;「交易数据」是块中包含的所有交易信息,包括硬币基础奖励部分。一般来说,这部分数据占据了整个块空间的大部分。

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

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

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

*MerkleRoot哈希*。在块的事务数据列表中,获取所有事务数据的哈希值,并构建一个Merkle树。此Merkle树的根哈希值是MerkleRoot哈希值(如下所示)。

由于哈希算法的敏感性,整个事务的Merkle树中的任何事务数据都会产生链接效应,导致Merkle树的根哈希值发生巨大变化。因此,事务数据的MerkleRoot哈希可以看作是整个事务的指纹,用于引用块中的事务数据。

比特币新区块产生的过程

图3交易数据的Merkle树结构

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

*当前目标哈希值*。根据比特币协议,如果矿工创建的预备块的哈希值小于目标哈希值,则该块将被视为有效。

目标哈希值由挖掘的难度决定。当挖掘难度越大,目标哈希值越小,挖掘者越难找到满足比特币网络要求的哈希值。根据当前的挖掘难度,为了找到低于目标哈希值的哈希值,理论上S17挖掘机必须连续工作42 年时间。因此,基本上不存在个人建立自己的节点来挖掘比特币的情况。

*随机数.也叫随机数。我们可以发现,在块头信息中,块版本号、前一个块的哈希值、MerkleRoot哈希值、时间戳和当前目标哈希值都是已知信息,相对固定,不便于随意更改。因此,如果你想调整初步块的哈希值,你需要引入一个可变数据——随机数。按mod

在挖掘节点构造预备块后,它将向挖掘者发送块头信息,挖掘者通过不断调整块头中的随机数来改变预备块的哈希值。当预备块的散列值低于比特币网络的当前目标散列值时,该块是合法的新块。

挖掘节点将及时向比特币网络广播新块,比特币网络中的其他比特币节点将在接收到广播信息后验证新块。验证通过后,将在本地添加新块。此时,创建并确认新块,相应的事务完成。

参考:

1.比特币源代码分析

2.比特币块头结构

3.比特币目标哈希值

4.比特币块结构

5.精通比特币

来源链接:mp.weixin.qq.com

标签: bitcoin vault