知识库详情
知识库

以“词条释义”的形式对比特币区块链技术中经常涉及的术语及基本概念进行专业化的阐释和解读。

挖矿
返回上级
BSV区块链编辑 2022-04-14 17:34 60

介绍

挖矿是比特币网络中的节点将新广播的比特币交易组装成被称为区块的数据结构的过程。然后节点通过反复改变区块头的数据结构——通常是增加nonce字段,然后将其进行哈希变换,以找到满足工作量证明的值,从而竞争将他们创建的区块追加到公共区块链上的机会。

当节点找到某个区块的有效工作量证明的哈希值时,它会将该区块广播给所有节点。只有当该区块中的所有交易都有效且尚未包含在其它区块中时,其他节点才会接受该区块。然后,网络中的其他节点通过在该区块上构建下一个区块来表达他们对该区块的认可。

每个区块都有时间戳,并对它前序区块的哈希值进行引用。区块形成了一个逐渐强化的、带有时间戳的链——时间链,这是“区块链”一词的前身。

区块链以一种任何实体在计算和经济上都无法修改的方式构建自身。因此,被打包在区块链中的交易被认为是不可更改的。除了这种特性之外,区块链在整个网络之中建立了一个权威的交易顺序,即在任何一对互相冲突的交易之中,最先被看到的交易才是有效的交易,从而保护用户免于遭受双花攻击——即一种重新花费已经在其它地方花费了的比特币的行为,这是挖矿和比特币的关键创新。

节点

节点是运行上述挖矿功能的软件实体。节点使用附有自己特定协议的P2P网络进行通信,是比特币账本的写入者和协议规则的执行者。

有趣的是,比特币白皮书并未提及“矿工”一词或“挖矿”的概念。这些术语涵盖了比特币白皮书第5节中所描述的行动,该节内容描述了网络上节点的职责。

在不执行区块构建或工作量证明的情况下也是可以运行节点客户端软件的。这样的设置可被其它系统用作连接区块链网络的接口,例如区块浏览器、支付网关和档案库。未来,预计会为每一种服务开发定制的客户端软件,使它们不再依赖节点客户端来运行。

运行节点客户端的计算机如果不进行工作量证明,便不能将向区块链添加新的区块。这也就意味着他们既不能通过在某一区块的基础上构建新区块来表示对该有效区块的认可,也不能通过拒绝在某一区块的基础上构建新区块来否认无效区块。这些计算机作为被动实体而存在,跟随着网络的守门人——矿工的脚步。

内存池

在交易可以在比特币区块链上被盖上时间戳之前,它需要由矿工进行接收和验证。如果矿工认为交易有效,他们会将交易添加到某个内存池之中。内存池是临时的交易仓库,可用于保存以不同方式分组的交易,例如可分为要在下一个区块中打包的交易、要观察的交易或由于nLocktime/nSequence的锁定而无法打包的交易。

注意到以下两点是非常重要的。首先,每个矿工都有自己的内存池,并且内存池因矿工而异。其次,单笔交易可以同时存在于不同的内存池当中。

矿工取出即将被打包到下一个区块中的交易,并将其哈希成Merkle树的结构,并将生成的Merkle根包含在候选区块头中。然后矿工对这个候选区块头进行哈希变换,去尝试找到一个有效的工作量证明。

哈希变换

哈希变换是将一串数据转换为代表原始字符串的固定长度值的函数,该固定长度的值被称为哈希值。每个哈希值都是唯一的。

哈希变换是一种单向函数,这意味着想要通过查看某输入数据变换后得到的哈希值来确定该输入数据是不可行的。反之,通过相同的哈希函数运行相同的输入数据并得到相同的哈希值是非常容易的。因此,输入数据的哈希值可以被看作是该数据的数字指纹。在比特币挖矿过程中,输入数据是80字节的区块头

比特币挖矿使用的是SHA-256哈希算法。SHA-256代表安全哈希算法(Secure Hash Algorithm)– 256 位。将相同的区块头数据传入该算法,将始终输出相同的256位数字。然而,但凡有1位(bit)区块头数据被修改,输出将是一个完全不同且不相关的256位数字。

比特币挖矿过程中将区块头数据进行两次SHA-256哈希变换(SHA-256d)。

工作量证明

比特币使用基于hashcash早期工作的工作量证明函数。

矿工不能在没有找到有效的工作量证明哈希的情况下为自己正在进行哈希变换的区块头创建新区块。为了创建有效区块,区块头的SHA-256d哈希值(只是一个数字)必须小于另一个数字,该数字被称为区块难度目标值。区块难度目标值由正在进行哈希变换的区块头中的Bits字段定义。

区块难度目标值调整的目标是希望整个网络中的节点找到有效的工作量证明哈希值所需的平均时间为10分钟。

由于SHA-256目标空间非常大,任何给定的哈希值低于区块难度目标值的概率极小。因此,运营算力的实体将大量资金投入到专门用来进行哈希运算的硬件以及相关的电力成本中,以便在给定的时间内尽可能多地生成哈希值。因此,付出大量的运营支出承诺——工作量证明,是矿工将区块添加到区块链的唯一方法。

激励机制

每个区块中的第一笔交易被称为Coinbase交易。Coinbase交易是一笔特殊的交易,用于向创建区块的矿工支付比特币。Coinbase支付由区块补贴和区块内交易的所有交易手续费的总和组成。

 

竞争

广播和验证

如果矿工发现了正在进行哈希变换的区块头的一个有效工作量证明,他们会立即将整个区块发送给其他矿工,来宣布这一事实。与此同时,他们开始寻找下一个区块。

竞争矿工收到此区块后,立即检查该区块内的所有交易以及工作量证明是否有效。如果该区块有效,他们将停止在前一个区块上的挖矿工作,并在他们的竞争对手刚刚发现的区块上开始新区块头哈希变换工作。

这里有一些激励因素在起作用。首先,获胜的“矿工甲”努力将他们的获胜区块尽快广播给所有其他矿工。这就减少了与之竞争的“矿工乙”(大约在同一时间发现有效区块)在“矿工甲”之前将他们创建的区块传播给其他矿工的可能性。因为“矿工乙”的这一行为可能使“矿工甲”的区块成为孤块,并且可能使“矿工甲”的Coinbase奖励失效,无法使用。带宽和与其他矿工的连通程度可以被视为一种竞争优势,因此,挖矿网络趋向于带宽高、连接紧密的小世界结构。

这在验证交易方面也存在竞争优势。在验证区块时,需要在矿工的UTXO集合中查找每笔交易的输入,以检查它们是否未花费并计算的比特币金额是否正确。此外,每个输入的锁定和解锁脚本都需要由矿工运行,以评估每个交易是否有效。

拒绝区块

在任何给定的时间点,两个或多个独立的矿工可以同时挖一个区块。在这种情况下,节点可能会对其中的哪个区块才是区块链的顶端存在分歧。

矿工总是遵循他们认为有效的最长链。最终,总会有另一个区块被构建于其中一个竞争链的顶部。如果矿工认为它是有效的,那么他们就会切换到这个顶部来继续挖矿。因此,任何分叉情况最终都会通过大多数算力的行动得到解决,回归到一条持续的链上来。

在这种情况下,最终没有形成最长链的区块会被网络拒绝并称之为孤块。孤块代表着矿工浪费掉的算力,孤块同时也是一种激励,激励矿工去投资基础设施以减少这种事件发生的频率。然而,孤块并没有减少比特币系统的整体收入,因为浪费的工作量没有被计入难度调整机制。因此,如果由于孤块而浪费了一定比例的哈希算力,则难度将按相应的比例向下调整,从而在总体上保持相同的有效区块生产率。此外,孤块中支付手续费的交易仍然有效,被打包在竞争区块或后续区块之中。

竞争有效区块并不是区块被拒绝的唯一方式。任何矿工都可以以各种理由拒绝在任意区块上构造新区块。只有在大多数矿工执行相同的行动时,某个特定矿工的行动才有意义。正是通过这种机制,挖矿网络可以就矿工可配置的变量(例如最大区块的大小)建立共识。这是中本聪共识的基础:

“他们用自己的CPU算力来进行投票,通过在某一区块的基础上构建新区块来表示对该有效区块的认可,并通过拒绝在某一区块的基础上构建新区块来拒绝无效区块。任何需要的规则和激励措施都可以通过这种共识机制来执行。”

 

挖矿生态系统

ASIC矿机

专用集成电路(application-specific integrated circuit,ASIC)是一种为特定目的而设计和制造的微芯片。专为比特币挖矿设计的ASIC于2013年首次发布。就其消耗的电量而言,它们比过去使用CPU、GPU或FPGA来挖矿的方式更具能效。

矿池挖矿

矿池挖矿是使用区块模板分配系统挖矿的一种方式,该系统为分布式的哈希计算基础设施提供更新的区块头,再由这些基础设施去执行工作量证明。这种向节点分配哈希算力的系统是中本聪共识的主要部分,哈希算力的个体运营者可以选择将他们的哈希算力重新分配给其他节点,因为这些节点所产生的区块可以满足他们在利润最大化和遵守比特币规则集方面的期望。如果某一矿工不能分发最大化利润的区块模板,或试图实施经过篡改的规则集,那么这个矿工就要承担一定的风险,因为其所依赖的矿机的所有者有可能将算力部署到网络的另一节点之上。

Stratum

Stratum是众多矿池使用的开源挖矿协议。Stratum促进了矿池运营商和单个矿机之间的协调性。

 

其它资料

比特币协议
创世区块
Coinbase
区块
区块哈希算法
工作量证明(PoW)
区块哈希目标值
区块补贴
挖矿
中本聪共识
难度
区块重组
孤块
比特币单位:聪
比特币协议
BSV化名协议(BSVAlias)
SHA-256
RIPEMD-160
签名标识
矿工补贴
区块时间戳
Secp256k1
传统签名算法
版本握手