加密货币是当今互联网上最热门的话题之一。但是在了解挖矿的工作原理之前,我们可以问自己以下两个问题,它们是:
- 为什么需要挖矿?
加密货币挖矿不仅仅是赚钱。矿工在区块链网络中有着重要的函数。他们解决数学问题并批准其他用户通过互联网进行的交易。矿工保护区块链免受区块欺诈和黑客攻击,并保证网络的去中心化。但是挖矿的主要函数是不同的。主要函数是达成协议,在此基础上交易可以被认为是有效的,这样任何用户都无法花费已经在另一笔交易中花费的硬币。这就是为什么接收比特币只是做有用工作的副作用。
- 加密矿工的目的是什么?
每当进行加密货币交易时,加密货币矿工负责确保信息的真实性并使用有效交易更新区块链。挖掘过程涉及与其他加密矿工竞争,通过与包含交易数据的块相关联的加密哈希函数来解决复杂的数学问题。第一个解决难题的加密货币矿工通过能够授权交易而获得奖励,作为提供服务的回报,加密货币矿工赚取自己的少量加密货币。
现在我们知道了加密货币挖掘和矿工的目的,我们可以继续前进并了解它是如何工作的。为此,我们可以看看区块链中一个区块的结构:
表 –块结构
Block | 8896 |
No. of transactions | 1800 |
Transaction valume | $ 1349873 |
Timestamp | 2017-11-11 01:35:55 |
Relayed by | ViaBTC |
Difficulty | 1765987453897.67 |
Size | 1063.67 kB |
Nonce | 880 |
Block hash | 0000abcdcee78ab745b9f … |
一个块实际上包含除上述字段之外的更多字段。但我们现在将专注于 Block Hash 和 Nonce 字段。
- 块哈希 –
好吧,区块链中的数据可以通过存储数据的散列来“存储”,这样你至少可以验证这是存储散列的数据,如果你有自己散列的数据并检查区块链中的数据. Merkle 树是这样做的一种方式。请参阅下图以了解使用 Merkle 树的原因。图 –默克尔树 因此,要构建 Merkle 树,您需要创建一个树数据结构,其中每个叶节点都包含要存储的数据部分的哈希值。从那里您获取子节点串联的散列,并将该值向上传播到父节点,继续这个过程直到树,直到生成最终的散列。即使叶子上的微小变化也会向上传播并改变结果哈希。
哈希是使用哈希函数生成的 256 位十六进制数,例如,比特币使用 SHA256 算法生成哈希。
我们知道矿工的目的是计算他将获得奖励的区块的哈希值。似乎很容易。为了平衡这个领域,每个矿工都被限制在某个目标哈希上。目标散列意味着对于矿工挖掘的每个块,如果计算出的散列大于目标散列,则将其丢弃。
- 随机数 –
这就是 Nonce 的概念发挥作用的地方。 Nonce 代表“仅使用一次的数字”。正如我们所知,矿工必须计算应该低于分配给他的目标哈希值的哈希值。但是由于雪崩效应,他不能为了猜测新的哈希值而改变区块号、数据、先前哈希值。他唯一可以改变的领域是 Nonce。nonce 是一个 32 位的数字。所以最多可以有大约 40 亿个可能的 Nonce 值,如 2^(32) = 4, 294, 967, 296。
每次迭代随机选择随机数。因此,对于每次迭代,都会选择 0 到 4、294、967、296 之间的随机整数。
考虑下表:
Block 8896 No. of transactions 1800 Transaction valume $ 13849673 Timestamp 2017-11-11 01:35:55 Relayed by ViaBTC Difficulty 1456324543655.677 Size 1066.34 kB Nonce 880 Block hash 000abddbcdef673bedb4 … 图 –所有可能的哈希 在上图中,圆圈表示为特定 nonce 值获得的哈希值。黑色圆圈表示计算的哈希无效。绿色圆圈代表有效的哈希值。分配给矿工的 TARGET 意味着只有当计算出的哈希值由 4 个前导零组成时,矿工才能挖掘区块(仅作为示例。目标哈希值可以随多个前导零变化)。所有大于该值的哈希都将被丢弃。
我们从一个 88 的 nonce 值开始,正如我们所见,它产生的哈希值大于目标哈希值。 nonce 值更改为 777 并重新计算散列。我们重复这个过程,直到我们找到一个随机数,它产生的哈希值小于目标哈希值。根据上图,这发生在 Nonce 值 7778 处。 现在该块可以被矿工验证并添加到区块链中。