为了获得比solo挖矿更稳定和可靠的收入流,今天大多数比特币矿工都选择通过矿池挖矿。而这是通过开源“Stratum”挖矿协议实现的,目前几乎所有的矿池都在使用这一协议,而其正是由SlushPool在七年前公布的。
现在,Slush Pool背后的Braiins公司,已公布了第二代Stratum协议(Stratum V2)计划。这家总部位于布拉格的矿业公司在两年前就开始了这项研究工作,其认为第二代协议在多个关键方面改进了第一代Stratum协议:
“它解决了历史上的技术和安全问题,总体上效率会更高,并且允许一些高级的用例,如工作选择或更容易的矿场管理,” Brains联合首席执行官Pavel Moravec告诉Bitcoin Magazine说,“这应该在几年前就应该完成了,真的。”
第一代Stratum挖矿协议的原理
作为一个简短的补充,我们先提下使用Stratum V1进行矿池挖矿的原理。首先,矿池用户(有时也简称为矿工)将他们的挖矿计算机(通常是带有ASIC芯片的专用机器)连接至矿池,或者更具体地说,他们将自己的计算机连接到由矿池运营者操作的计算机上。
然后,挖矿计算机从矿池运营者处请求一个部分“区块模版”。此部分区块模版本质上是一个不完整的比特币区块。
重要的是,此区块中的交易是由矿池运营者选择的。实际上,交易本身并没有发送给矿工们,取而代之的,则是所有交易的默克尔路径(一系列哈希)。
除此之外,矿池运营者还可选择包含哪个“版本位”,这可能会与激活软分叉协议升级有关。
然后,矿工开始对部分区块模版进行哈希操作,希望其中一个哈希将产生有效的区块头,以满足网络的工作量证明要求。如果矿工哈希了一个有效的区块头,它将返回给矿池运营者,后者将其添加到区块的其余部分,并将其广播到比特币网络。然后,矿池运营者会根据池中矿工投入的工作量占比,分配各自获得的区块奖励。(这是通过让矿工发送几乎有效的区块头来衡量的,这些区块头能够证明矿工执行了工作)
因此,采用第一代的Stratum协议,会使矿池运营者拥有比矿工更多的权力,他们不仅负责分配奖励,还可决定区块中包含哪些交易,以及包含哪些版本位。如果他们愿意,一个矿池运营者可决定审查某些交易,或者阻止某些协议升级。
第二代Stratum协议灵感来自Betterhash
去年,Chaincode实验室工程师和Bitcoin Core开发者Matt Corallo提出了一项称为BetterHash的替代挖矿协议,而第二代Stratum协议,正是受到了Betterhash的启发。相比让矿池运营者向池中矿工发送(部分)区块模版,通过第二代Stratum协议,矿工可选择将区块模板发送给矿池运营者。这个“工作选择”允许矿工自行选择交易及区块版本。
为了做到这一点,(获得Matt Corallo帮助的)Braiins公司,必须解决一些BetterHash所存在的实际问题。其中最重要的是,矿工有可能在一个无效的区块模版上进行挖矿(例如,因为它包含了一笔无效的交易)。即使矿工能够找到有效的哈希,区块本身仍然是无效的,而同一矿工仍可从其他矿工找到的有效区块中获益。
关于这个问题,其中一个解决方案是,矿池运营者首先检查矿工的区块模版是否有效,然后再将其放入池中。但在一个大型的公共矿池中,这一步骤也会遇到技术难题。
“想象一下,当比特币网络上发现一个新的数据块,并且矿池中的每个矿工都想开始使用一个新的数据块模板时,会发生什么?” Moravec解释说,“他们当中的每一个,都可以有稍微不同的mempool(未确认交易)版本,并且可能有不同的交易选择规则…他们都想立即开始挖矿。让他们所有人都将自己的区块模版发送至矿池以待批准,基本上就是在网络发现区块后的第一秒,就对服务发起拒绝服务攻击。这一机制需要扩展,以便在实践中发挥作用。”
Braiins通过让矿池运营者异步检查新区块模版的有效性来解决这一问题。矿工一提交区块模版,就可立即开始哈希操作。同时,矿池运营者开始检查所有区块模版。
Moravec补充道:“如果区块模版后来被发现无效,那么对应矿工的奖励可相应地调整。因此,该矿工就有动力在适当的区块上工作,并及时提供所有数据。而他可毫无延迟地继续在他的模版上工作。”
安全性、效率和灵活性的提升
除了交易选择的变化之外,第二代Stratum协议还将包括更多的改进,而其中一些改进,对于很多矿工而言可能也是非常重要的。
例如,在第一代Stratum协议中,并没有加密数据验证来确保矿工计算机与矿池运营者计算机真正地相连,而这为中间人攻击打开了大门:比如,攻击者可拦截矿工与矿池运营者之间的通信,并欺骗矿工在攻击者提供的区块上工作。攻击者可将此区块的区块奖励支付给自己的一个地址,从而有效地“劫持”矿工的算力。
而第二代Stratum协议,通过让矿池运营者对部分区块模版进行加密签名来抵御这种攻击。如果矿工知道矿池运营者的公钥,则可检查部分区块模版是否带有有效的签名,由此确定这些区块模版是否确实由矿池运营者提供。
第2点,第二代Stratum协议的效率也会较第一代要更高。原因在于,第一代Stratum协议通信通过人类可读文本(JSON)进行,而第二代Stratum协议通信则以二进制(计算机可读代码)进行。Moravec表示,再加上协议层本身的一些数据消除,这将使矿池运营者之间共享的数据减少1/2-2/3,从而使通信更快、更便宜。
第三,第二代Stratum协议有一个内置的“复用”(multiplexing)机制。这意味着矿工可在同一连接上有独立的通信通道,允许他们的机器共享有关温度、芯片电压或电源如何工作的数据。矿池可基于此信息提供额外的服务,或者矿工可将其与其他服务或服务器共享。
第四,第二代Stratum协议还允许矿池“猜测”下一个区块是什么。每当找到一个新区块时,矿池都需要一段时间来确定该区块中包含了哪些交易,然后哪些交易不能包含在下一个区块中。今天,很多矿池在挖下一个区块时,会等待几秒的时间,以确保没有双花交易被纳入区块(否则会导致区块无效)。
而有了第二代Stratum协议,矿池运营者(或者是自己选择交易的矿工)可根据所有未确认的交易,对将包括哪些交易进行有根据的猜测。在最初的几秒钟内,他们可开始挖他们认为可能是有效的下一区块的内容。尤其是当区块补贴成为区块奖励的一小部分,并最终被交易费用取代时,这种效率上的提升可能会使矿工获益。
有待改进的地方
最后, Braiins团队表示,目前第二代Stratum协议还有一些未公布改进,虽然该公司有一个正在运行的原型,但协议规范还没有被最终确定。
“我们现在希望收集大家的反馈意见,先在内部完成提案,然后发布一个比特币改进提议(BIP)。我想这会引起另一轮讨论…同时,我们会把第二代Stratum协议部署到SlushPool,并将其作为测试版本的Brains OS的一部分发布,我们正在尽可能快地实施它,以便让每个人都能够参与,”Moravec表示。