『学概念找员外』不能外包的解谜算法
今天了解一下对于替代挖矿解谜的另一个设计重点:防止矿池的产生。大部分的比特币矿工都会加入一个矿池,而不是独立挖矿。这就造成了少量矿池拥有绝大部分挖矿算力的现象。由于每个矿池都有一个中心化的管理方,有些人担心这其实违反了比特币去中心化的核心设计原则,会危害到比特币的安全性。
拥有大部分算力的矿池显然是一个问题,任何一个中心化管理的矿池可能会实施一套自定义的挖矿策略,然后用它来攻击网络。这种矿池也是黑客们攻击的目标,因为通过攻击矿池可以迅速地控制大量的挖矿算力。矿池管理员也可能会删改交易或是强迫收取更高的交易费。矿池中拥有大多数矿工,意味着大部分矿工都没有运行一个完全有效节点。
有意思的是,这些担忧有着现实世界的影子,比如选票。在美国和其他许多国家,出售选票是非法的。加入一个被一方控制的矿池,和在比特币的共识协议里出售你的选票有点类似。
矿池的技术要求
回忆起来,矿池看起来是一个突然发生的现象。并没有证据显示,中本聪在比特币的最初设计中考虑过矿池的概念。在互相不信任的个体之间运行一个有效率的矿池,这样的事情在最初的几年里看起来不太现实。
矿池通常会指定一个管理员,他有一个大家都知道的公钥。每一个加入的矿工还是按照往常一样进行挖矿,然后递交“近似”或者“部分”答案给矿池管理员,这些答案在低级别难度的时候可能就是一个有效答案,通过这种做法来证明他们做了多少工作量。当矿池中的某一个参与者找到了一个有效区块的时候,这个管理员会按照每个人所提交的工作量的占比来分配奖励。虽然有很多种不同的分配方式,但是所有矿池都遵循这个基本模式。
正因为如此,矿池的存在依赖于比特币的两大技术特征。第一,一个矿工很容易通过提交工分来证明(概率上)他所做的工作量。不管实际上找到一个有效区块是多么困难,通过设定一个足够低的合格工分的临界值,矿工可以容易地证明他们在任意精度的工作量。考虑到我们需要解谜题目可以在任意难度上被创造出来,这个问题看起来很难改变。第二,矿池成员可以容易地向管理员证明,他们遵守规则并且通过实际运算来寻找有效区块,然后矿池会作为一个整体接受奖励。这是行得通的,因为这个矿池的公钥是被写进币基交易,并包括在区块里的梅克尔树上。即使一个矿工找到了一个有效区块,甚至只是一个近似区块(也叫工分),他也无法改变整个矿池的公钥,而成为新铸币的接受者。
矿池之间的区块丢弃攻击
好多年以来,人们都觉得进行区块丢弃攻击是无利可图的,实际上如果两个矿池之间的互相攻击却不一样。这种方案已经被提出来好多次,伊泰·艾瑞尔(Ittay Eyal)2015年的论文中首次深入分析了这种攻击模式。
我们考虑一个简单的案例:假设两个矿池A和B,每个有50%的全部挖矿算力。现在假设B动用了一半的能力(25%的总体算力)来加入矿池A挖矿,然后把所有找到的有效区块丢弃掉。我们可以推演,在一个简单的模型里,B会赢得5/9的所有奖励,大于他正常挖矿时候所获得的50%的奖励。在这个简单的案例里,动用一半的挖矿算力去攻击矿池A对矿池B来说是一个最佳的策略。
这个案例随着矿池数量的增加而变得更加复杂。截至本书撰写之时,丢弃区块攻击在实际中还没有被大范围观察到。但长期来看可能性还是存在的,像这类攻击会对大型矿池的运营产生关键影响。