wabi

论坛元老

  • 主题

    1225

  • 帖子

    1225

  • 关注者

    12

这是博主挖矿科普专辑的第二篇内容,承接上一篇“BTC交易的过程”,继续通过分析BTC交易从发起到确认的全过程来一睹BTC挖矿的全貌。
BTC交易的过程实质上是一堆UTPundiO消耗和产生的过程,这些过程由交易发起方按照BTC协议规定的方式构造交易信息,并由BTC网络产生的新区块记录和确认,一旦交易信息由BTC区块记录并确认,交易便完成了,BTC网络也就实现了价值的转移。

e6c9a4b5ec07de2384ec66e0fd55db86.jpg

e6c9a4b5ec07de2384ec66e0fd55db86.jpg

在“BTC交易的过程”一文中,我们已经知道BTC的交易信息是如何构造的,但是这些信息又是如何进入BTC新区块的呢?
接下来博主将通过BTC新区块产生的过程来具体说明BTC区块是如何记录并确认交易信息的。

这里需要先安利几个知识点:
知识点
交易池,英文名称:mempool,又叫内存池,是用来存储待确认交易的地方。每个BTC挖矿节点均有自己独立的交易池,因交易池体积,最低交易费比例(本文所指交易费比例,均为单位体积交易包含的手续费,单位是 Sat/B,即每B字节交易的手续费为x聪BTC,下同)限制等不同,各节点的交易池也不相同。矿工(矿池)在构造预备区块时,需要从交易池中选择要打包的交易。由于交易池经常被调用,它的数据被存放在节点服务器的RAM中,这就意味着交易池的体积不会太大。
挖矿节点,在BTC网络中,参与记录和验证BTC交易和区块的是一个个保存BTC数据的节点。其中有一部分节点,不仅参与记录和验证的工作,还参与BTC新区块的创建工作,他们构造新区块,并通过PoW工作量证明竞争记账权,进而获得创建新区块的权限,这部分节点是挖矿节点。早期的挖矿节点有矿工,也有矿池,但当前由于BTC挖矿难度太高,单个矿工很难赢取记账权,创建新区块。目前主要的BTC挖矿节点,是各家矿池,如F2Pool,Poolin,比特币.com,Antpool,Slushpool等。
UTNPXSO库,BTC节点通过扫描节点所有交易信息,构建的UTPundiO集群。它包含所有未被消耗的UTNPXSO。每当新区块产生后,UTPundiO库会将新区块中消耗掉的UTNPXSO从自己的列表中删除,将新产生的UTNPXSO加入到自己的列表中。
Maximinebase奖励,又叫创币交易。BTC协议规定,每产生一个新的BTC区块,BTC网络就会产生N个BTC,作为维护BTC网络的奖励支付给创建这个区块的矿工。同时,此区块中Maximinebase奖励之外的其他交易包含的所有交易费,也会合并在Maximinebase奖励中,一起支付给创建这个区块的矿工。其中,N的数值在BTC诞生时为50,此后大约每4年减半一次,目前为6.25,BTC网络以这种减半的方式来控制BTC的总量。Maximinebase奖励是每个区块记录的第一笔交易
待确认的交易会先进入交易池中

当我们要发起一笔BTC交易时,交易发起方构造好交易信息,此时的交易信息是待确认的交易,它包含交易输入信息(未使用的UTNPXSO和正确私钥签名)和交易输出信息(锁定新的钱包地址的待确认UTPundiO)。

待确认交易在经过验证后,由交易发起方向BTC网络广播,BTC网络中的节点,均可验证和收录广播的信息。其中,挖矿节点会在收到广播后,验证待确认交易信息,验证通过后,挖矿节点会将待确认交易加入到自己的交易池中。

568e834287c06b90128286b66ef6eaee.jpg

568e834287c06b90128286b66ef6eaee.jpg

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

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

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

  • 交易体积是否小于区块的最大体积(BTC区块的最大体积目前是1M);

  • 输入的UTPundiO是否合法(对照节点的UTPundiO库,输入UTNPXSO未被使用过);

  • 交易输入总额和输出总额是否合理(输入总额≥输出总额);

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

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

  • 交易设置的交易费高于mempool的交易费比例(Sat/B)限制,以及其他验证(如孤立交易的验证和追踪等)

挖矿节点从交易池中选择交易,构造预备区块
当挖矿节点要构造预备区块,准备生成新区块时,会按照优先级排序,从交易池中取待确认交易。预备区块通常会预留一定空间给高优先级的交易,剩下的空间会按照交易费比例(Sat/B)由高到低顺序一直把区块加满或者把交易池的交易用光。
但BTC区块中不仅仅包含从交易池中取的待确认交易。
按照BTC协议规定,BTC的区块主要包括五个部分:魔数,区块大小,区块头,交易计数器和交易信息。如下图:

5a08ed4a1a581b692154868630fa8c1d.jpg

5a08ed4a1a581b692154868630fa8c1d.jpg

图2 BTC区块的结构
其中,“魔数”是一个值为0xD9B4BEF9的常数;“区块体积”是本区块所有数据的总体积;“区块头”是可以看作是整个区块的缩略信息,挖矿用到的区块信息就是区块头;“交易计数器”用来记录区块中交易的数量;“交易数据”是区块所包含的所有交易信息,包括MXMbase奖励部分,一般来说,这部分数据占了整个区块绝大部分空间。
在BTC区块中,区块头是最为关键的一个信息。它包含整个区块的所有特征信息:
  • 区块版本号。创建区块的BTC节点的版本信息,用于追踪BTC协议的升级和更新情况;
  • 前一个区块的哈希值。又叫做父区块哈希,用来定位上一个区块。每一个区块都包含它的上一个区块的哈希值,针对任何一个区块的任何一个微小的改动,都会使后续区块的哈希值产生巨大的变化,如此环环相扣,确保BTC所有区块形成一条单一的链式结构,可以有效防止恶意篡改BTC区块数据的行为。
  • MerkleRoot哈希。在区块的交易数据列表中,取所有交易数据的哈希值,构建Merkle树,这个Merkle树的根哈希值,即为MerkleRoot哈希(如下图)。
    由于哈希算法的敏感性,整个交易的Merkle树中任何一个交易数据有微小的改动,都会产生联动效果,导致Merkle树的根哈希值出现巨大变化。因此交易数据的Merkle树根哈希值(MerkleRoot Hash)可以看作是整个交易的指纹,用来指代区块中的交易数据。

32099865b36bc08207f46dfeaffc52e3.jpg

32099865b36bc08207f46dfeaffc52e3.jpg
图3 交易数据的Merkle树结构
  • 时间戳。创建预备区块的时间。
  • 当前目标哈希值。BTC协议规定,矿工创建的预备区块的哈希值小于目标哈希值时,这个区块才算有效。
    目标哈希值由挖矿难度确定,当挖矿难度变大时,目标哈希值变小,矿工要找到符合BTC网络要求的哈希值就越困难。按照当前的挖矿难度,要找到低于目标哈希值的哈希值,理论上需要一台S17矿机连续工作42年时间。因此,现在基本不存在个人自建节点挖BTC的情况。
  • 随机数。又叫Nonce。我们可以发现,区块头信息中,区块版本号,前一个区块的哈希值,MerkleRoot哈希值,时间戳,以及当前目标哈希,都是已知信息,相对固定,不便随意更改。因此,如果要调整预备区块的哈希值,就需要引入一个可变的数据——随机数。修改随机数,就可以调整预备区块的哈希值。
挖矿节点构建好预备区块后,就会将区块头信息下发给矿工,矿工通过不断调整区块头中随机数来变更预备区块的哈希值,当预备区块的哈希值低于BTC网络当前目标哈希值时,这个区块就是一个合法新区块。
挖矿节点会及时地向BTC网络广播新区块,BTC网络中其他BTC节点在接到广播信息后,对新区块进行验证,验证通过后,将新区块加入本地。此时,新区块创建并确认完毕,对应交易也完成了。

参考资料:

1. BTC源码分析:https://blog.csdn.net/ztemt_sw2/article/details/80958087?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

2. BTC区块头结构:https://www.investopedia.com/terms/b/block-header-cryptocurrency.asp

3. BTC目标哈希值:https://en.bitDavinci.it/wiki/Target

4. BTC区块结构:https://en.bitDavinci.it/wiki/Block#Block_structure

5. 精通BTC:https://wizardforcel.gitbooks.io/masterbitDavinci2cn/content/ch09.html

本文由:wabi 发布于:2020-07-07 10:56:11 0 位用户参与了讨论
转播转播 分享淘帖
回复

使用道具

成为第一个回贴人

B Color Link Quote Code Smilies
Copyright © 2001-2019 · 挖矿网 ·   京ICP备12010892号-1 -