挖矿池
矿工们在这个竞争激烈的环境中,单独工作的个体矿工(也称为独立矿工)几乎没有机会。他们找到一个足以抵消电费和硬件成本的区块的可能性非常低,这就像是在赌博,就像是在买彩票一样。即使是最快的消费者 ASIC 挖矿系统也无法与商业运营相比,商业运营可以将数以万计的这些系统堆叠在靠近发电站的巨大仓库中。许多矿工现在合作组成矿池,将他们的算力汇集在一起,分享奖励给成千上万的参与者。通过参与矿池,矿工能够获得总奖励的一个较小份额,但通常每天都会获得奖励,减少了不确定性。
让我们看一个具体的例子。假设一个矿工购买了一批挖矿硬件,总算力相当于当前总网络算力的 0.0001%。如果协议难度永远不变,那么该矿工将大约需要 20 年的时间才能找到一个新的区块。这可能是一个漫长的等待时间来获得报酬。然而,如果该矿工与其他矿工一起在一个矿池中合作,这些矿工的总算力相当于总网络算力的 1%,他们平均每天将会挖到超过一个区块。该矿工将只会收到他们在奖励中的一部分份额(减去矿池收取的任何费用),因此他们每天只会收到一小部分奖励。如果他们每天挖矿 20 年,他们将获得与自己独立挖到平均区块相同的金额(不考虑矿池费用)。唯一的基本区别在于他们收到支付的频率。
挖矿池通过专门的矿池挖矿协议协调着数百甚至数千名矿工。矿工们将他们的挖矿设备配置为连接到矿池服务器,之前需要在矿池创建一个帐户。他们的挖矿硬件在挖矿时保持连接到矿池服务器,与其他矿工同步他们的努力。因此,矿池矿工共同努力挖掘一个区块,然后分享奖励。
成功的区块将奖励支付给矿池的比特币地址,而不是给个体矿工。一旦矿工的奖励份额达到了一定的阈值,矿池服务器将定期向矿工的比特币地址进行支付。通常,矿池服务器会收取一定比例的奖励作为提供矿池挖矿服务的费用。
参与矿池的矿工分担搜索候选区块解决方案的工作,根据其挖矿贡献获得“份额”。挖矿池为获得份额设置了更高的目标(更低的难度),通常比比特币网络的目标容易多达1000倍。当矿池中的某个人成功挖掘了一个区块时,奖励由矿池获得,然后按照各个矿工贡献的份额比例与所有矿工分享。
许多矿池对任何矿工都是开放的,无论其规模大小、专业性或业余性。因此,矿池的参与者可能有些人只有一台小型的挖矿机器,而其他人可能拥有一间装满高端挖矿硬件的车库。有些人可能只使用几十千瓦的电力进行挖矿,而另一些人可能运行着消耗兆瓦电力的数据中心。矿池如何衡量个人的贡献,以公平地分配奖励,又不会出现作弊的可能性呢?答案是利用比特币的工作证明算法来衡量每个矿池矿工的贡献,但设置较低的难度,以便即使最小的矿池矿工也能够频繁地赢得份额,从而有利于向矿池做出贡献。通过为赢得份额设置较低的难度,矿池衡量了每个矿工的工作量。每当矿池矿工找到一个区块头散列小于矿池目标的情况,他们就证明了他们已经完成了寻找该结果的散列工作。该区块头最终会提交给coinbase交易,并可用于证明该矿工使用了一个将区块奖励支付给矿池的coinbase交易。每个矿池矿工都被分配一个略有不同的coinbase交易模板,以便每个人都散列不同的候选区块头,防止工作的重复。
寻找份额的工作以一种在统计上可衡量的方式,有助于寻找一个低于比特币网络目标的散列的整体工作。数千个矿工试图寻找低价值的散列,最终将会找到一个足够低以满足比特币网络的目标。
让我们回到掷骰子游戏的类比。如果骰子玩家的目标是投掷小于四(总体网络难度)的骰子,那么矿池将设置一个更容易的目标,计算矿池玩家成功投掷小于八的次数。当矿池玩家投掷小于八(矿池份额目标)时,他们赢得份额,但他们并没有赢得游戏,因为他们没有达到游戏目标(小于四)。矿池玩家往往会更频繁地实现更容易的矿池目标,即使他们没有实现赢得游戏的更难的目标。偶尔,矿池玩家中的一名将会掷出一个小于四的组合点数,从而矿池获胜。然后,可以根据他们赢得的份额将收益分配给矿池玩家。
同样,一个挖矿池将设置一个(更高、更容易的)矿池目标,以确保个人矿池矿工通过找到区块头散列小于矿池目标而经常赢得份额。偶尔,这些尝试中的一个将产生一个区块头散列小于比特币网络目标的情况,使其成为一个有效的区块,整个矿池都赢得了胜利。
托管矿池
大多数矿池都是“托管”的,这意味着有一个公司或个人在运行一个矿池服务器。矿池服务器的所有者被称为矿池操作员,他们会向矿工收取一定比例的费用作为矿池收益。
矿池服务器运行着专门的软件和矿池挖矿协议,协调着矿池矿工的活动。矿池服务器还连接到一个或多个完整的比特币节点。这使得矿池服务器能够代表矿工验证区块和交易,减轻了他们运行完整节点的负担。对于一些矿工来说,能够在不运行完整节点的情况下进行挖矿是加入托管矿池的另一个好处。
矿池矿工使用诸如Stratum(版本1或版本2)之类的挖矿协议连接到矿池服务器。Stratum v1会创建包含候选区块头的区块模板。矿池服务器通过聚合交易、添加一个coinbase交易(带有额外的nonce空间)、计算默克尔根,并链接到上一个区块的哈希来构建候选区块。然后,候选区块的头部作为模板发送给每个矿池矿工。每个矿池矿工使用区块模板进行挖矿,目标难度比比特币网络的目标难度更高(更容易),并将任何成功的结果发送回矿池服务器以获取份额。
Stratum v2还可以选择允许矿池中的个别矿工选择哪些交易出现在他们自己的区块中,他们可以使用自己的完整节点来选择。
点对点挖矿矿池(P2Pool)
管理型矿池使用 Stratum v1 存在欺诈的可能性,因为矿池操作者可能会指导矿池努力进行双花交易或使块无效(见第288页的“算力攻击”)。此外,集中式矿池服务器代表了单点故障。如果矿池服务器宕机或受到拒绝服务攻击的影响,矿池矿工将无法进行挖矿。为了解决这些集中化问题,2011年提出并实施了一种新的矿池挖矿方法:点对点挖矿矿池(P2Pool),即没有中央操作者的点对点挖矿矿池。
P2Pool 通过分散矿池服务器的功能,实施了一个称为共享链(share chain)的并行类似区块链的系统。共享链是以比比特币区块链更低的难度运行的区块链。共享链允许矿池矿工通过在共享链上每30秒挖掘一个共享块来协作于一个去中心化矿池中。共享链上的每个块记录了为贡献工作的矿池矿工分配的比例份额奖励,并从上一个共享块中延续这些份额。当共享链中的一个共享块也达到比特币网络目标时,它会被传播并包含在比特币区块链上,奖励为所有贡献到所有先前的共享块的矿池矿工。基本上,共享链允许所有矿池矿工使用类似比特币区块链的去中心化共识机制来跟踪所有份额。
P2Pool 挖矿比矿池挖矿更复杂,因为它要求矿池矿工运行一台具有足够磁盘空间、内存和互联网带宽以支持比特币全节点和 P2Pool 节点软件的专用计算机。P2Pool 矿工将他们的挖矿硬件连接到本地的 P2Pool 节点,该节点通过向挖矿硬件发送区块模板来模拟矿池服务器的功能。在 P2Pool 上,个别矿池矿工构建自己的候选块,聚合交易,就像独立挖矿者一样,然后在共享链上协作挖矿。
P2Pool 是一种混合方法,具有比独立挖矿更加精细化的支付优势,但又不像管理型矿池那样给予矿池操作者太多的控制权。
尽管 P2Pool 减少了矿池运营商的权力集中,但它可能会受到针对共享链本身的 51% 攻击的威胁。P2Pool 的更广泛采用并不解决比特币本身的 51% 攻击问题。相反,P2Pool 使比特币作为一个多样化的挖矿生态系统更加健壮。截至撰写本文时,P2Pool 已经逐渐失去了使用,但新的协议,例如 Stratum v2,可以允许个别矿工选择他们在区块中包含的交易。
Last updated