于2012年推出,解决了比特币挖矿行业的一些成长之痛
基于getwork协议之上演变而来
帮助比特币矿池以更高的算力服务更多的用户
First implemented on Bitcoin.cz Mining Pool which is now called Braiins Pool
在2012年,Marek "Slush" Palatinus在getwork协议的基础上推出了阶层Stratum协议。阶层Stratum V1协议解决了比特币挖矿刚流行时遇到的一些成长之痛
矿工在比特币挖矿早期,与比特币协议本身的连接和交互需要全节点的运行。
为规范矿工和比特币协议之间的通信,开源的"getwork"协议成为了矿工开始单机挖矿的快速简便快速简便解决方案。getwork协议使用HTTP作为与比特币协议的连接方法。但是,HTTP通常用于网页,对多节点协同开采比特币来说,它并不理想。因此,随着挖矿越来越流行,也显现出了其许多效率低下的问题。
到了2012年,随着挖矿行业的巨变,网络算力呈指数倍增长,getwork协议的低效成了非常棘手的问题。它要求矿工要有相当大的网络带宽,而要服务器(即矿池)方面也有能满足所有矿工的带宽增长并不现实。
在这点上,getwork协议很明显不是一个可持续的解决方案。
大约在2010年底,随着越来越多矿工加入网络,挖矿也因此发生了巨变。在10分钟的区块时间里,有数千矿工在竞争区块,许多矿工的收入也不再稳定,无法继续挖矿。
解决方案是让矿工把他们的算力集中起来,这样出块更稳定。矿工因此也能定期收到一部分的区块奖励,从而能稳定现金流,平滑收益。
但是,随着矿池挖矿的普及,getwork协议的局限性日渐明显。因此,Slush Pool矿池的创始人Marek"Slush"Palatinus在2010年开发了专用于矿工和矿池之间通信的阶层协议(Stratum V1)。
在过去的7-8年,阶层Stratum V1协议一直是矿池挖矿的标准协议,在此期间,比特币全网算力也从约20 TH/s增加到130 EH/s。
毋庸置疑,它取得了巨大的成功。但归根结底,阶层Stratum V1协议为什么能得到广泛采用和长期使用,是得益于它实现了2个主要的可扩展性改进:
参考信息:https://zh.braiins.com/stratum-v1/docs
在getwork协议下,矿工会不断向比特币守护进程deamon(bitcoind)发送挖矿工作请求;矿池挖矿兴起后,矿池服务器的作用是向矿工发送工作,这个机制就反而让挖矿变得麻烦。矿工们面临着两个选择,要么是用短的轮询间隔,最大限度地减少过期率(Stale ratio);要么与矿池服务器建立单独连接进行长轮询,最大限度地减少网络负荷。
长轮询则是更好的解决方案,但它在矿池后端的负载平衡方面又产生了一些问题。阶层Stratum V1协议建立在矿工无需通过和矿池的HTTP连接从守护进程请求信息之上,矿池可以在任何时候驱动负载并向矿工广播信息,无须虚耗HTTP或走长轮询的其他变通解决方案。这对矿工和矿池运营商来说都是一个很大的进步。
在阶层Stratum V1协议引入额外随机数轮询前,矿工要寻找区块的解,只能修改区块头中的两个字段(nonce和ntime)并对这两个字段进行哈希处理。一旦矿工用尽新的可能组合,他们就需要向矿池(或直接从bitcoind)提出更多工作的请求,效率相当低下。
阶层Stratum V1协议通过引入额外随机数轮询字段,扩大了矿工分配到工作时能迭代的独特哈希组合。通过将编辑区块头的任务由矿池交给矿工,矿池挖矿的整体效率得到了大大提高。
阶层Stratum V1协议的成功,除上述重大技术改进以外, 最终还归功于它发送的JSON负载人类可读,并已被比特币挖矿客户端广泛支持。JSON具有一定的虚耗(为此我们在阶层Stratum V2协议中改用二进制,大大降低了虚耗),但在当时它很适合行业需求。
阶层Stratum V1协议曾被批评其背后的开发有不可告人的秘密,因为没有相应的比特币改进提案(BIP)描述它的应用实施。但是,也有人认为阶层协议与比特币的协议和应用无关——它只是一种关于矿池挖矿的自定义拓展,没必要有正式的比特币改进提案。
另一个引起争议的原因是,在开发阶层Stratum V1协议的同时,比特币社群花了几个月时间开发名为"getblocktemplate"(BIP22)的开源协议,该协议本该取代"getwork"协议。但随着阶层Stratum V1协议的几乎同时发布,getblocktemplate协议的直接采用受到影响。不过,需要指明的是,阶层协议的服务器其实也使用了getblocktemplate协议的机制,并在其之上做了不少改进。
很不巧,使用getblocktemplate解决方案的一个重要缺点则是,矿工会失去自行构建区块模板(即选择在他们开采的区块中打包哪些交易)的能力。虽然这对挖矿的经济动机毫无影响,矿工无论如何都会优先打包手续费高的交易,但如果矿池运营商受到攻击,这将是一个漏洞。这就是我们为何要在阶层Stratum V2协议中重新引入矿工自行构建区块模板的能力。
最后,关于安全问题。正如Ruben Recabarren在他的论文《Hardening Stratum, the Bitcoin Pool Mining Protocol》(巩固“阶层”,这一比特币矿池协议)中指出,阶层Stratum V1协议容易受到可能的中间人攻击。虽然目前还未听闻有大型的"算力劫持"案例,但在暗地里仍有可能发生,这就使得比特币挖矿行业迈向更安全的协议变得更加重要。防范算力劫持则是阶层Stratum V2协议的另一个关键功能。
综上,阶层Stratum V1协议作为全世界矿圈都在用的矿池协议,作出了巨大贡献。虽然如此,它仍有改进的空间,这就是我们(Jan Capek和Pavel Moravec)和Matt Corallo一起推出阶层Stratum V2协议的原因。
"它(V2协议)解决了历史上的技术和安全难题,它的效率一般也要高得多,而且它还能允许一些高级用例,例如工作选择或更得心应手的矿场管理,"首脑-Braiins联合CEO Pavel Moravec向比特币杂志(Bitcoin Magazine)说到。"我们早几年就应该做完它了,真的。"
但是,自2012年老阶层Stratum协议发布以来,矿圈发生了天翻地覆的变化。在今天,只要一台ASIC矿机的算力就能和当年的全网算力(约20 TH/s)比肩。比特币挖矿行业要想持续发展,阶层Stratum V2协议则是解决方案。