防止数字货币矿工对矿池发动攻击
1. 数字货币挖矿基础
随着硬件系统的发展,节点在矿池管理者的监督下形成矿池来完成挖矿任务。比特币(甚至其他数字货币)的挖矿过程在一些技术文章中被比作矿工的数学谜题。
首个完成工作量证明的矿池会获得一定数量新挖出的比特币,以此激励矿工工作,这也是该过程被称为“挖矿”的原因。一旦一个区块被验证,它就会被添加到已验证区块列表(即区块链)中。之后,所有矿工停止对已验证区块的挖矿,开始处理下一个区块。
每个区块包含区块编号、随机数(nonce)值、交易列表、前一个区块的哈希值(前一个区块的地址)以及下一个区块的哈希值(下一个区块的地址)。在挖矿过程中,矿工试图生成一个小于某个阈值的有效哈希值,即哈希值以一定数量的零开头。他们通过尝试不同的随机数值来完成这一过程。显然,生成以五个零开头的哈希值比以四个零开头的更难,这就是所谓的挖矿难度系数。
哈希率(hr),也称为挖矿能力,是矿工在特定时间间隔内能够计算的哈希总数。因此,找到有效哈希值(即完整工作量证明)的平均时间与矿工的哈希率相关。实际上,矿池管理者会向矿工发送当前区块的不同模板,让他们通过更改随机数值来找到有效哈希值。如果矿工完成了完整的工作量证明,就会将其发送给矿池管理者。然后,矿池管理者代表整个矿池发布合法区块,并根据矿工的挖矿能力分配收益。需要注意的是,创建区块的矿工将新币明确放入该区块。
为了估算每个矿工的能力,矿池管理者为每个矿工设定一个部分目标,这个目标比系统的实际目标容易得多。例如,计算以一个零开头的哈希值就足够了,而不是以五个零开头。每个矿工被要求根据部分目标发送有效哈希值。这样定义部分目标是为了能够频繁计算出部分解决方案,以便管理者能够公平地估算矿