为了减少带宽消耗,阶层Stratum V2协议使用了两种方式进行优化。第一,它得益于完全基于二进制,而不像V1那样基于JSON的,所以把传输数据的大小做到了最小化。第二,它剔除了很多情况下不必要的数据传输(例如冗余信息),这意味着传输数据的总量也被最小化。
一项提高ASIC矿机效率,降低能耗的技术
包含比特币全节点应用的免费开源软件
比特币客户端/程序——比特币守护进程deamon,它实现了比特币协议的远程过程调用(RPC)
每次出块时,区块中包含的发送给矿工钱包地址的出块奖励(即新的UTXO,未使用的交易输出)
包含创币交易输入及可任意使用数据(最大100字节)的特殊字段
由于随机数是一个32位数,其最大值则可能是222,大约40亿;额外随机数(ExtraNonce)是创币(Coinbase)中用于迭代随机数,扩大搜索域的一个字段
梅克尔树(Merkle Tree)的根哈希值,包含创币交易以及区块中其他所有交易的交易
比特币网络中的最下游的节点;进行实际的哈希运算,即工作证明
"只用一次的数(Number Only Used Once)"的缩写;在比特币中,随机数是一个32位且逐级调整的值,挖矿会调整随机数反复对一个区块进行哈希,直到哈希输出达到当前的网络难度限制,这时就表明矿工找到了该区块的解,并可以向网络中的其他矿工提出他们的区块解。
区块时间戳(nTime)是包含在区块头段中(以秒为单位)的整数时间戳。区块时间戳轮询(nTime Rolling)则是矿工无须矿池每秒都提供一个新的区块头段,在本地矿机中增加时间戳的一种方法。它减少了矿池和矿工之间所需的数据传输量。显性区块时间戳轮询(Explicit nTime Rolling)的值示意矿工在需要向矿池请求新工作(即继续挖矿所需的新有效区块头段)前,能够增加区块时间戳多长时间(以秒为单位)
比特币网络中最上游的节点,负责将特定数据写入创币,为每个连接到服务器的矿机生成特定工作
用于聚合算力/难度的中介节点
提出的区块中包含的所有交易
通过改变比特币区块头段中的区块版本值,从而启用AsicBoost
下一代矿池挖矿协议由Pavel Moravec、Jan Čapek和Matt Corallo与其他业内专家共同合作设计
阶层Stratum V2协议,是下一代的矿池挖矿协议,它提高挖矿数据传输的效率和安全性,并减少挖矿所需的硬件设施。它同时也引入了三个新的子协议,让矿工通过与矿池的协商过程来选择他们自己的交易集。
在下面的部分,我们将解释阶层Stratum V2协议的每个特性,让您了解到V2协议与V1协议相比有什么变化,为什么这些变化很重要,以及在技术层面协议又是如何运作的。
注:在您深入研究技术上的细节前,您最好需要了解下我们使用的术语。
哈希是由真实的挖矿设备——矿机来算的
代理指在矿机和矿池服务商之间的中介,代理以汇聚网络连接的方式提高传输效率,并可以提供像监控挖矿设备的运行情况和性能这样的一些附加功能
接收挖矿设备发送的份额(Share,即已完成工作)的上游节点。矿池是最常见的算力消费者
代表一个或多个矿工与矿池进行谈判的节点,谈判确定他们将做哪些工作。该节点还与区块模板提供者(如比特币守护进程,bitcoind)进行通信,并将工作发送到挖矿代理,代理再进一步分配工作给矿工
V2协议是阶层Stratum V1协议的亲儿子。它是挖矿用的主要协议,以及整个协议堆栈中,唯一需要在所有情况下都必须实现的一个部分。协议适用于挖矿设备与代理以及矿池服务商间的通信。
标准信道不控制梅克尔路径(Merkle Path)和创币交易,大大简化了它们与上游节点之间所需的通信
扩展信道被赋予了对搜索域的广泛控制权,以便可以在一些高级使用情况下进行通信(例如V1与V2协议之间的交易,难度汇聚,定制的探索域分割等)
团体信道汇集了在特定连接中打开的标准信道,因此在公共通信信道里能够对它进行寻址
矿工用其与矿池进行对区块模板(其中包含交易集)的协商,这样使得矿池挖矿也能更类似于单机挖矿,从而提高去中心化程度。协商结果也可被连接到矿池的所有矿工(可能有几十万)重复利用,也大大降低了计算强度。
此协议与挖矿协议独立,是挖矿基础设施中的可选部分,也可以作为第三方的服务提供给矿场。
该协议用于从比特币核心(Bitcoin Core)获取下一个区块的信息。从设计上,协议比其要替代的getblocktemplate协议(比特币改进提案22和23号,BIP22, 23)更高效、更容易实现API的应用。
更具体地说,模板分配协议用于与比特币核心(Bitcoin Core)的一个名为"bitcoind(比特币守护进程)"的部分进行通信,该部分实现了比特币协议的远程过程调用(RPC)。换句话说,bitcoind允许比特币协议与其他软件集成。
该协议用于将新协商好的工作传送给感兴趣的节点,这些节点可以是代理,也可以是实际的挖矿设备。该协议与工作协商协议相辅相成。
在矿工不自行协商工作(即不自行选择交易集)的情况下,类似于老阶层协议,工作则将从矿池直接分发到代理和挖矿设备终端。此外,工作协商也可以由更大的挖矿代理协议来做,在这种情况下,代理的分配优先于矿工自行选择的交易集。
为了减少带宽消耗,阶层Stratum V2协议使用了两种方式进行优化。第一,它得益于完全基于二进制,而不像V1那样基于JSON的,所以把传输数据的大小做到了最小化。第二,它剔除了很多情况下不必要的数据传输(例如冗余信息),这意味着传输数据的总量也被最小化。
V2协议的份额(Share)提交信息通常为(未加密的)32字节和(加密的)48字节
V1协议的份额(Share)提交信息通常为100字节
使用二进制比基于文本的协议能够显著减少带宽消耗。虽然通过阶层Stratum V1协议交换的消息是人类可读的,但是这也造成了信息量比实际需要的大小冗余了2-3倍,而在V2协议里的消息大小已经被最可能地减小了。
此外,V1协议还包含一些完全没必要的消息,例如mining.subscribe。V2协议通过去除这些没必要的信息,使需要传输的消息更少,从而进一步减少带宽消耗。
减少网络流量,也是减少客户端和服务器端的计算强度,这样降低了所有参与者的基础设施成本。同时,带宽消耗显著的降低使得哈希结果可以更频繁地传输,从而让更精确的哈希计量和挖矿奖励分配得以实现。
通过引入终端设备(矿机)的标准信道和组信道,阶层Stratum V2协议可以实现高效缓存,矿池服务器CPU就不需要每次收到份额重新计算梅克尔根(Merkle Root)。将更多的责任从挖矿设备终端转移到上游通过拓展信到连接到矿池的代理上。
V2协议与V1协议相比,在提交份额(Share)时的CPU负载减少了70-80%
V1无法实现高效缓存。每次提交都要重新计算梅克尔根(Merkle Root)
阶层Stratum V2协议中让挖矿设备终端进行仅头段挖矿,做到了对矿池服务器CPU的减负。梅克尔根(Merkle Root)总是由上游节点提供,完全不需要挖矿设备终端处理。换句话说,挖矿设备终端不再需要对创币(Coinbase)进行任何更改,让矿工的计算变得更简单。而且它还有一个好处,它也让矿池服务器端的工作验证(即CPU负载)变得更轻松。
作为矿池运营商,很明显我们的主要动机之一就是要减少服务器的CPU负载,这样能减少我们的项目成本。但是,任何矿池都可以(并应该)利用这个好处,所以从总体上讲,更重要的动机则是要提高整个挖矿网络的效率。
指矿池在未来的区块的时间前,即使未来的区块还尚未被发现,就能提前给矿工发送工作。这样矿池就能将最新的上一区块哈希值(Prevhash)以更小的(即更快的)消息发送给矿工,提醒他们应该立即开始对新的区块进行挖矿。
V2协议将消息分离,让矿工在前一个区块被发现的时候,就能更快地开始对下一个区块进行挖矿
V1协议中上一区块哈希值(Prevhash)和未来工作都在同一消息里,造成矿池发送空区块
矿池向矿工发送包含一些预定义数据,以及矿工要处理的一些可变数据的区块来向矿工分配工作。在阶层Stratum V1协议中,预定义数据包括上一区块哈希值(即最近开出有效区块的哈希值,prevhash)和当前区块中要包含的交易集的梅克尔根(Merkle Root)。但是,这两个数据缺一不可,一旦发现并开始在网络传播一个新区块(出现新的上一区块哈希值),分发新工作时会产生大量(又缓慢)的数据传输。在阶层Stratum V2协议中,可以将上一区块哈希值(Prevhash)和其他的区块预定义数据分开发送,这样就可以在有新的上一区块哈希值前发送区块数据。因此,一旦开出有效区块,新的上一区块哈希值消息就可以自行发送,而且得益于消息数据更简短,传输速度也会快得多。这使得矿工能比在使用阶层Stratum V1协议时更快开始新工作。
在开始对下一区块挖矿时,矿工要等的每一毫秒都是机会(也是金钱)的损失。通过将上一区块哈希值(Prevhash)的消息与阶层Stratum V2协议中的其他工作分配消息分开,能够节省价值千金的每一毫秒。
阶层Stratum V2协议采用二进制编写,它对收发的消息进行了编码,让机器能高效地读写消息,但这样的消息不适合人直接阅读或者使用。结果则是,矿工、代理和矿池运营商之间的数据传输大小最小化了。
V2协议传输的数据人不可读,但是效率更高
V1协议传送人可读的(JSON格式的)数据,这有助于数据的采用,且更易于分析和调试,但效率低得多
协议具有精确定义的固定消息框架(Fixed Message Framing),这意味着通过V2协议传输的消息,就无法像对V1协议里的消息一样,能够进行不同的解释。具体的消息框架结构在比特币改进提案草案(BIP)的“框架(Framing)”部分可以查看。
最初的阶层(Stratum)协议使用JSON格式,它的消息负载大小与实际传输消息之间的比率很差。而阶层Stratum V2协议采用二进制,则能带来更好的数据效率,且节省的带宽可以用来进行更频繁的提交,从而进一步减少算力差异。
为确保敏感数据的机密性和完整性,阶层Stratum V2协议使用极强的加密方案,防止数据被潜在的第三方恶意解密。这样能保护矿工不会受到V1协议中可能发生的多种攻击,包括通过算力劫持(第三方侦听矿工与矿池之间的通信)来获得矿工完成工作的成绩(即窃取挖矿奖励)。
有
无
阶层Stratum V2协议使用一种“带关联数据的认证加密(ADAD, authenticated encryption with associated data)”方案解决客户端和服务器端之间发生的所有通信的安全性问题。这既保证了传输密文(即加密文本)的加密性和完整性,又同时保证了未加密的相关数据的完整性。
阶层Stratum V1协议容易受到三种中间人攻击:侦听矿池与矿工之间的所有通信;窃取ISP运行日志中的元数据;以及算力劫持。这些攻击都可以在不容易被检测到的情况下偷偷地进行,造成对付它们更加地棘手。阶层Stratum V2协议使用带关联数据的认证加密 (AEAD),因此黑客无法用份额提交数据(Share Submission Data)识别出具体的矿工,在保护矿工隐私的同时,也让他们免受算力劫持。
在阶层Stratum V2协议中,矿池向矿工发送空区块(即不包含任何交易的区块)和发送作为开始工作信号的完整区块,都同样有效。现在发送完整区块不会引发任何的额外延迟,也就不存在需要发送空块的动机。
发送完整区块没有任何延迟,不再需要空区块
发送完整区块比发送空区块慢
消除挖矿中的空区块与工作分配延迟部分非常相似,消除它的动机可以归结为将上一区块哈希值(Prevhash)信息从其他的区块头数据分离开。在阶层Stratum V1协议中有一种激励机制,它要求矿池尽快发送包含新的上一区块哈希值(Prevhash)的空区块,因为这些消息比包含完整区块的消息更快地能到达。而在阶层Stratum V2协议中,通过分离这两种消息,矿池可以在发送新的上一区块哈希值(Prevhash)信息前,就给矿工发送完整区块。 换句话说,矿工可以在前一个区块被确认前,就可以准备开始挖矿新的(完整)区块,而唯一需要的是新的上一区块哈希值(Prevhash)信息。由于无论是矿池发送了空区块还是完整区块,上一区块哈希值(Prevhash)消息的大小都依然相同(即都需要同样时间到达),因此就不再会激励矿工浪费时间去挖空块。
只要激励矿工去挖空区块的这个机制一直存在,就不可能让矿工能找到实际有效的解,就解决不了空区块不被网络的其余部分接受的问题。在阶层Stratum V2协议中,挖空区块和挖完整区块相比,挖空区块没有任何的优势,有效地消除了对空区块的挖矿。
矿工现在可以自行选择工作(即自行选择交易集),使挖矿更去中心化。这个功能与挖矿主协议分开实现,对矿池和矿工来说是可选的。
有
无
矿工终端的工作选择作为阶层Stratum V2协议的可选组件,与挖矿主协议分开。实际上,它由三个子协议实现:工作协商协议,工作分配协议和模板分配协议。
工作”谈判“协议的名字,顾名思义,工作选择的确是矿工和矿池之间的协商过程。矿工提出区块模板,然后让矿池决定是要接受还是拒绝它。一旦协商模板被接受,任何数量的甚至几十万个挖矿设备,就都可以使用其结果。为什么它要和主要挖矿协议分开,是因为这样可以让矿池,能够在不同于主要挖矿协议的独立基础设施上能结束连接,这样做对实际份额(Share)提交的效率不造成任何影响。
允许矿工选择自己的交易集,这让一些权力从矿池下放到矿工,从而也增加了比特币的抗审查性。这个概念最初由Matt Corallo在BetterHash协议中提出,我们认为将它纳入阶层Stratum V2协议中非常重要,这对比特币的去中心化很有意义。
仅头端挖矿是轻量化版本的挖矿协议,它允许挖矿设备的固件更简单,也让设备消耗更少的带宽/CPU负载。与标准版本相比,仅头段挖矿更快也更便宜,但它又失去了一些灵活性,因此它仅用于挖矿设备终端。
有
无
阶层Stratum V2协议为矿工引入了使用不能操作创币交易(Coinbase Transaction)的标准信道挖矿的选项。换句话说,挖矿设备终端不会处理任何额外随机数(ExtraNonce)或梅克尔路径(Merkle Path),我们称之为仅头段挖矿(Head Only Mining)。在特定区块时间(nTime)进行仅头段挖矿的矿机的搜索域的大小为 2^(随机数位元NONCE_BITS + 版本轮询位元VERSION_ROLLING_BITS)= ~280Th,随机数位元的值为32,版本轮询位元的值为16,这就是在区块时间轮询(nTime Rolling)前保证的搜索域大小。打开特定标准信道的客户端(矿机)拥有整个分配的搜索域,也可以按需将其进一步分割(例如在多个算力板和单个芯片之间)。
阶层Stratum V1协议在2012年底就进行了对矿池挖矿的支持性拓展,远早于无数的大型矿场开始用无数台ASIC机器挖矿之前。考虑现在大型矿场的数量和大小,挖矿工作能够通过在大部分情况下,通过尽量支持简单的挖矿模式进行简化,这也能同时显著减少网络流量。
复用机制允许将单个连接(例如TCP)用作任意数量设备间的独立信道。这能减少矿池和代理所需要连接的数量,从而节省一些成本。
有
无
尽管可能不切实际,但从理论上将,在往上游节点的单个物理连接中(例如TCP)最多可以有232个(约43亿个)开放通道。 这些通道都各自独立,并拥有不同的通道ID,这意味着许多设备可以同时从同一连接,接收不同的工作分配,从而节省基础设施成本。同时,这些通道可能都共享一些信息以提高效率,例如在广播新的上一区块哈希值(Prevhash)时。
每多一条物理连接,复杂性就越高,挖矿作业中基础设施的项目成本也越高。开启复用机制,就能在单个连接中,可以将许多不同的信息传递给多个不同的参与者,让管理更简单高效。
在阶层Stratum V2协议中,一旦矿工开启挖矿通道,就默认表明矿工准备接受分配的工作,这样V2协议就消除了一些以前V1协议中不必要的消息。
V2协议去除挖矿订阅(mining.subscribe)信息
V1协议中具有两种信息:挖矿订阅(mining.subscribe)和挖矿授权(mining.authorize)
在阶层Stratum V1协议中,当矿工与矿池(客户端→服务器端)建立连接时,他们发送挖矿授权(mining.authorize)消息。一旦授权申请成功,矿工会接着发送挖矿订阅(mining.subscribe)消息,表明他们希望开始(或恢复)矿池所分配的工作任务。换句话说,矿工需要明确地向矿池要求工作分配。而在阶层Stratum V2协议中,如果矿工开启了与矿池的信道,则默认表示他们希望从矿池接收工作分配。
挖矿订阅(即mining.subscribe)消息,是现在效率低下的老挖矿协议中的一部分。显式(确认)挖矿订阅在阶层Stratum V1协议的使用中,只会生产不必要的数据传输。默认工作订阅可提高协议的相对效率。
版本轮询是作为扩展(BIP 310)添加到阶层Stratum V1协议的,这已经成为挖矿的重要组成部分。而V2协议直接支持矿工进行版本轮询,不需要任何扩展。
V2协议原生支持版本轮询
V1协议有一个扩展(BIP 310),允许版本轮询。
为扩大矿工的搜索域,每个比特币区块头都包含一个可以自由使用位元的版本字段,这个过程被称为版本轮询(Version Rolling)。鉴于目前现代ASIC矿机的算力,32位随机数(Nonce)字段在100毫秒内就能用完。每当发生这种情况,矿机控制板必须向每个芯片分配新的工作,消耗大量的带宽和CPU负载。轮询版本位元能大大降低需要分配新工作的频率,这已经是一种常见的技术(见BIP320)。鉴于它的普遍使用,我们决定将版本轮询作为阶层Stratum V2协议的原生部分,而不是像V1协议那样需要扩展。
版本轮询(Version Rolling)的使用已非常普遍。我们只是把它从阶层Stratum V1协议的扩展变为阶层Stratum V2协议的原生组件。从外看,最终的结果是一样的。
零时后端切换让代理可以在不损失挖矿效率的情况下,从不同矿池拿到并分配工作。换句话说,矿场也可以自行架设代理在多个矿池进行多挖的同时,也不会遇到延迟或效率低下的问题。
V2协议原生支持接收来自多个上游来源的工作。
V1协议通过非标准扩展,允许矿工改变他们所用的矿池,但终端设备需要明确地支持这种情况。
赋予矿工零时后端切换(即在挖矿时切换上游服务器,或连接到多个上游服务器)的能力,意味着可以高效地实现更复杂的用例(例如在比特币BTC和比特币现金BCH之间切换挖矿)。虽然这可以在V1协议里,通过订阅额外随机数(ExtraNonce)拓展来实现,但是矿机固件一般不支持这样做。我们将其做成V2协议的原生功能,矿工在标准信道上就能同时接受多个来源的工作,还不会遇到只从一个地方接受工作效率低下的问题。
用零延迟的后端切换,让所需的物理基础设施能更有效地实施更精细的挖矿设置。
允许矿工在单个连接上,进行多工作(甚至多币种)的挖矿。例如,矿机共享同一个连接,一些矿机可以挖比特币BTC,另一些可以挖比特币现金BCH。
在V2协议中,在同一个连接上的不同的信道,可以进行不同的工作。
在V1协议中,共享同一个连接的所有设备都进行同一个工作。
对阶层Stratum V2协议来说,复用机制的特殊优势之一,在于一个物理的连接可以用于传输多个(种)工作的数据。这样可以降低复杂性和成本。例如,建立一个TCP连接需要进行三次握手,这其中要传输三个数据包,就会消耗一些资源。而当有成百上千这样的连接,每天都在开关,成本就会增加。通过单个连接发送多个工作,能降低连接所需要的开关频率,减少所需的连接总数。
根据之前的复用机制部分所述,允许在单个连接上传输多个工作数据的主要动机,就是要降低物理基础设施的复杂性和项目成本。
比特币挖矿行业迅速发展,可以预料到的是,业界人士可能会希望通过扩展的方式,向协议新增功能。我们在阶层Stratum V2协议的比特币改进提议草案(BIP)中,没有对拓展进行大规模的定义,但是我们概述了一些所有扩展都必须符合/注意到的基本要求。这些要求可以在协议草案的扩展部分(Protocol Extensions)中找到。
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Faucibus morbi morbi amet sed. Id elit aliquam aliquam.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Faucibus morbi morbi amet sed. Id elit aliquam aliquam.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Faucibus morbi morbi amet sed. Id elit aliquam aliquam.
在阶层Stratum V2协议中,协议扩展可以通过消息头段的非零(Non-zero) extension_type项来定义。在0x4000到0x7fff范围的扩展,被视为“实验性”拓展,在设备上不会展示出来。而针对特定目的且已分配的扩展,可以在本站的“当前可用扩展(Currently Available Extensions)”部分找到。
我们对阶层Stratum V2协议的设计目标之一则是,在不污染挖矿协议或复杂化矿池的情况下,可以实现对特定厂商(开发者)拓展的简易支持。因此,厂商可以为特定扩展申请分配其专有的extension_type,以便在硬件上使用。要做的是,需将拓展用途的简要描述发送到比特币协议开发列表(Bitcoin Protocol Development List)以及这里。
如需了解对扩展要求的完整说明,请见阶层Stratum V2协议的比特币改进提议草案(BIP)的协议扩展(Protocol Extensions)部分。
如需了解对扩展要求的完整说明,请见阶层Stratum V2协议的比特币改进提议草案(BIP)的协议扩展(Protocol Extensions)部分。
1) Get Braiins OS+ with V2 support and proxy
DOWNLOAD BRAIINS OS+2) 点击此处参考Slush Pool指南怎么在Slush Pool矿池测试V2协议
如果有任何疑问,或者发现任何问题,请联系我们。
Increase hashrate on your Bitcoin ASICs, improve efficiency as much as 25%, and mine on any pool or get 0% pool fees on Braiins Pool.
减少您矿场与任何矿池之间的数据传输到达95%。配置同时使用多个多个矿池。为整个矿场设置一个备份矿池。
协议重点是使数据传输更有效率,减少挖矿作业的物理基础设施要求,并提高安全性。
透明创新的业界先锋
2010年至今已开采出125万枚比特币