比特币矿池的协议stratum

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比特币矿池的协议stratum相关的知识,希望对你有一定的参考价值。

参考技术A

转自: https://zhuanlan.zhihu.com/p/23558268
getblocktemplate协议诞生于2012年中叶,此时矿池已经出现。矿池采用getblocktemplate协议与节点客户端交互,采用stratum协议与矿工交互,这是最典型的矿池搭建模式。

与getwork相比,getblocktemplate协议最大的不同点是:getblocktemplate协议让矿工自行构造区块。如此一来,节点和挖矿完全分离。对于getwork来说,区块链是黑暗的,getwork对区块链一无所知,他只知道修改data字段的4个字节。对于getblocktemplate来说,整个区块链是透明的,getblocktemplate掌握区块链上与挖矿有关的所有信息,包括待确认交易池,getblocktemplate可以自己选择包含进区块的交易。

挖矿有两种方式,一种叫SOLO挖矿,另一种是去矿池挖矿。前文所述的在节点客户端直接启动CPU挖矿,以及依靠getwork+cgminer驱动显卡直接连接节点客户端挖矿,都是SOLO挖矿,SOLO好比自己独资买彩票,不轻易中奖,中奖则收益全部归自己所有。去矿池挖矿好比合买彩票,大家一起出钱,能买一堆彩票,中奖后按出资比率分配收益。理论上,矿机可以借助getblocktemplate协议链接节点客户端SOLO挖矿,但其实早已没有矿工会那么做,在写这篇文章时,比特币全网算力1600P+,而当前最先进的矿机算力10T左右,如此算来,单台矿机SOLO挖到一个块的概率不到16万分之一,矿工(人)投入真金白银购买矿机、交付电费,不会做风险那么高的投资,显然投入矿池抱团挖矿以降低风险,获得稳定收益更加适合。因此矿池的出现是必然,也不可消除,无论是否破坏系统的去中心化原则。

矿池的核心工作是给矿工分配任务,统计工作量并分发收益。矿池将区块难度分成很多难度更小的任务下发给矿工计算,矿工完成一个任务后将工作量提交给矿池,叫提交一个share。假如全网区块难度要求Hash运算结果的前70个比特位都是0,那么矿池给矿工分配的任务可能只要求前30位是0(根据矿工算力调节),矿工完成指定难度任务后上交share,矿池再检测在满足前30位为0的基础上,看看是否碰巧前70位都是0。

矿池会根据每个矿工的算力情况分配不同难度的任务,矿池是如何判断矿工算力大小以分配合适的任务难度呢?调节思路和比特币区块难度一样,矿池需要借助矿工的share率,矿池希望给每个矿工分配的任务都足够让矿工运算一定时间,比如说1秒,如果矿工在一秒之内完成了几次任务,说明矿池当前给到的难度低了,需要调高,反之。如此下来,经过一段时间调节,矿池能给矿工分配合理难度,并计算出矿工的算力。

矿池通过getblocktemplate协议与网络节点交互,以获得区块链的最新信息,通过stratum协议与矿工交互。此外,为了让之前用getwork协议挖矿的软件也可以连接到矿池挖矿,矿池一般也支持getwork协议,通过阶层挖矿代理机制实现(Stratum mining proxy)。须知在矿池刚出现时,显卡挖矿还是主力,getwork用起来非常方便,另外早期的FPGA矿机有些是用getwork实现的,stratum与矿池采用TCP方式通信,数据使用JSON封装格式。

先来说一下getblocktemplate遗留下来的几个问题:

矿工驱动:在getblocktemplate协议里,依然是由矿工主动通过HTTP方式调用RPC接口向节点申请挖矿数据,这就意味着,网络最新区块的变动无法及时告知矿工,造成算力损失。

数据负载:如上所述,如今正常的一次getblocktemplate调用节点都会反馈回1.5M左右的数据,其中主要数据是交易列表,矿工与矿池需频繁交互数据,显然不能每次分配工作都要给矿工附带那么多信息。再者巨大的内存需求将大大影响矿机性能,增加成本。

Stratum协议彻底解决了以上问题。

Stratum协议采用主动分配任务的方式,也就是说,矿池任何时候都可以给矿工指派新任务,对于矿工来说,如果收到矿池指派的新任务,应立即无条件转向新任务;矿工也可以主动跟矿池申请新任务。

现在最核心的问题是如何让矿工获得更大的搜索空间,如果参照getwork协议,仅仅给矿工可以改变nNonce和nTime字段,则交互的数据量很少,但这点搜索空间肯定是不够的。想增加搜索空间,只能在hashMerkleroot下功夫,如果让矿工自己构造coinbase,那么搜索空间的问题将迎刃而解,但代价是必要要把区块包含的所有交易都交给矿工,矿工才能构造交易列表的Merkleroot,这对于矿工来说压力更大,对于矿池带宽要求也更高。

Stratum协议巧妙解决了这个问题,成功实现既可以给矿工增加足够的搜索空间,又只需要交互很少的数据量,这也是Stratum协议最具创新的地方。

再来回顾一下区块头的6个字段80字节,这个很关键,nVersion,nBits,hashPrevBlock这3个字段是固定的,nNonce,nTime这两个字段是矿工现在就可以改变的。增加搜索空间只能从hashMerkleroot下手,这个绕不过去。Stratum协议让矿工自己构造coinbase交易,coinbase的scriptSig字段有很多字节可以让矿工自由填充,而coinbase的改动意味着hashMerkleroot的改变。从coinbase构造hashMerkleroot无需全部交易,

如上图所示,假如区块将包含13笔交易,矿池先对这13笔交易进行处理,最后只要把图中的4个黑点(Hash值)交付给矿工,同时将构造coinbase需要的信息交付给矿工,矿工就可以自己构造hashMerkleroot(图中的绿点都是矿工自行计算获得,两两合并Hash时,规定下一个黑点代表的hash值总是放在右边)

。按照这种方式,假如区块包含N笔交易,矿池可以浓缩成log2(N)个hash值交付给矿工,这大大降低了矿池和矿工交互的数据量。

Stratum协议严格规定了矿工和矿池交互的接口数据结构和交互逻辑,具体如下:

1. 矿工订阅任务

启动挖矿机器,使用mining.subscribe方法链接矿池

返回数据很重要,矿工需本地记录,在整个挖矿过程中都用到,其中:

Extranonce1,和 Extranonce2对于挖矿很重要,增加的搜索空间就在这里,现在,我们至少有了8个字节的搜索空间,即nNonce的4个字节,以及 Extranonce2的4个字节。

2. 矿池授权

在矿池注册一个账号 ,添加矿工,矿池允许每个账号任意添加矿工数,并取不同名字以区分。矿工使用mining.authorize方法申请授权,只有被矿池授权的矿工才能收到矿池指派任务。

3. 矿池分配任务

以上每个字段信息都是必不可少,其中:

有了以上信息,再加上之前拿到的Extranonce1 和Extranonce2_size,就可以挖矿了。

4. 挖矿

1) 构造coinbase交易

用到的信息包括Coinb1, Extranonce1, Extranonce2_size 以及Coinb2,构造很简单:

为啥可以这样,因为矿池帮矿工做了很多工作,矿池已经构建了coinbase交易,系列化后在指定位置分割成coinb1和coinb2,coinb1和coinb2包含指定信息,比如coinb1包含区块高度,coinb2包含了矿工的收益地址和收益额等信息,但是这些信息对于矿工来说无关紧要,矿工挖矿的地方只是Extranonce2 的4个字节。另外Extranonce1是矿池写入区块的指定信息,一般来说,每个矿池会写入自己矿池的信息,比如矿池名字或者域名,我们就是根据这个信息统计每个矿池在全网的算力比重。

2) 构建Merkleroot

利用coinbase和merkle_branch,按照上图方式构造hashMerkleroot字段。

3) 构建区块头

填充余下的5个字段,现在,矿池可以在nNonce和Extranonce2 里搜索进行挖矿,如果嫌搜索空间还不够,只要增加Extranonce2_size为多几个字节就可轻而易举解决。

5. 矿工提交工作量

当矿工找到一个符合难度的shares时,提交给矿池,提交的信息量很少,都是必不可少的字段:

矿池拿到以上5个字段后,首先根据任务号ID找出之前分配任务前存储的信息(主要是构建的coinbase交易以及包含的交易列表等),然后重构区块,再验证shares难度,对于符合难度要求的shares,再检测是否符合全网难度。

6. 矿池给矿工调节难度

矿池记录每个矿工的难度,并根据shares率不断调节以指定合适难度。矿池可以随时通过mining.set_difficulty方法给矿工发消息另其改变难度。

如上,Stratum协议核心理念基本解析清楚,在getblocktemplate协议和Stratum协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。

四川比特币矿机或全线关机,矿工跟矿机说:Bye,See you

在这里插入图片描述

据悉,因为政策原因,中国,乃至全球最重要的比特币矿机聚集地四川将迎来大面积矿机关机。据推算,关机的负荷大概在800万千万。随着内蒙古、新疆之后,以清洁能源水电为主的四川也没能成为中国比特币挖矿的最后的堡垒。

受此影响,比特币全网平均算力已经跌至102E,距离高点181E跌去约43%。近期很可能跌破100E。

具体而言,截至20日早上7点,OKLink数据显示,F2Pool算力跌5.38%,AntPool跌40%,Poolin跌8.94%,BTC.com跌16.78%,Huobi矿池跌37.24%。

但北美矿池Foundry USA涨90%,该矿池隶属于Digital Currency Group(DCG)。

这或许意味着, 中国比特币矿业时代落幕,北美等海外比特币矿业就此开始崛起。虽然,中国比特币矿工曾问鼎全球比特币矿业市场近十年。

01

矿工对矿机说:Bye ,See you

19日晚,一个小视频开始在朋友圈传播,内容为矿工正在切断比特币矿机的电源,一排排跳动的绿光逐一熄灭。现场有很多人说:Bye,See you。

以下内容摘录自社交媒体。

从业者A:

“矿工的一个时代结束,bye bye!清风虽细难吹我,明月何尝不照人。寒冰不能断流水,枯木也会再逢春。”

从业者B:

“今晚大渡河河水汤汤,汹涌而澎拜,沿河流上下,水电站的矿机将一一关闭,蓝莹莹的光,消失在夜空,全世界最大的比特币算力基地—四川下线。2016年5月,我去四川,看当时的矿场,写了篇《比特币挖矿的魔幻现实》,最后一句写道:‘或许,在地平线的一面,曙光投来一束,爬上桅杆,探望星辰大海的方向,我们此刻站在比特文明征程的码头。’

而今晚之后,码头关闭,四下静寂。多少年后,不知有没有人曾记得,那么多比特币节点曾在这片土地上璀璨地存在过。多少年后,不知有没有人曾记得,这片古老的江河流域运转着最前沿的科技算力。

不重要了,一切如斯。对矿主来讲,有点悲壮;而对投资者来说,甚至是有点解脱。举杯吧,诸位矿主,喝一杯苦酒,忆过去峥嵘岁月。”

从业者C:

“去年这个时间左右,刚处于国内解封期,圈里第一个大会就是四川成都丰水期矿业大会,今天时过境迁,当时的矿业繁荣融入到了今夜璀璨星河,后来行业从业者也应该铭记这里曾经的辉煌~。”

从业者D:

“四川800万负荷,今晚0点,集体关闭,区块链历史上,矿工最惨烈和最壮观的一幕要发生,这里究竟有多深远的影响,未来才会知道。”

从业者E:

“今天,可以正式宣告一个时代的终结。”

从业者F:

“虽然伤心到讲不出再见,但依旧相信前路光明。”

02

比特币矿业在中国:一直是全球第一

中国是比特币矿机产业的全球中心。

2013年年初,南瓜张第一个开发出ASIC矿机,取名“阿瓦隆”,这或许是中国,也是全球比特币矿业规模化的开端,由此,个人用GPU挖矿的时代一去不复返。南瓜张就是张楠赓,之后创立了嘉楠耘智。

这一年年底,蚂蚁矿机一代开始出货,比特大陆登上历史舞台。

2014年大熊市到来,比特大陆和嘉楠耘智成功活了下来。前者在2017年-2018年占了全球市场80%以上。

2019-2020年以来,中国成为比特币矿机产业当之无愧的霸主,比特大陆、嘉楠耘智、比特微、芯动科技、亿邦国际等矿机企业大放异彩,引领全球。2019年,嘉楠耘智在纳斯达克上市,成为矿机业第一股。次年,亿邦国际同样登陆美股市场。

今天,中国矿机产业纷纷出海,在海外搭建供应链,或者将绝大部分极其销往海外,海外成为主要的矿机消纳地。

2013年5月,比特币矿池鱼池开放,这或许是中国矿池业的开端,之后包括蚂蚁矿池(AntPool)、BTC.com、(币印矿池)Poolin、ViaBTC等中国矿池占据了绝大多数的比特币算力,海外矿池无一例外被挤出全球前十。

今天,中国矿池的比特币算力暴跌,Foundry USA和SlushPool进入前十,海外算力市场在挨打数年后终于迎来春天。

在比特币进入Asic时代后,中国比特币矿工开启了专业化之后,他们从城市向偏远山区转移。中国诞生了几大比特币挖矿圣地。

由于加密货币的工作量证明挖矿实际上就是通过对“能源”的消耗来进行的,因此矿场通常会聚集在电力资源丰富、电价低廉的地区以降低成本来确保更高的投入产出比。因而火电资源丰富的内蒙古和新疆,水电丰富的云南、四川、贵州等地,均成为矿工们开发的主战场。他们跋山涉水,在这些地方搭建矿场和基础设施。在那些边远地区,驱车可能也要半天才能到达,但那里运行车全球最先进的算力芯片。

最终,矿工们造就了中国的比特币矿业。几年来掌握了绝大部分的比特币算力,是比特币真正的“话语权掌握者”。

今天,中国的矿场相继关停,而矿工开始寻求出海,或者从此彻底离开这个行业。

03

中国各地就比特币挖矿落地针对性政策一览

5月21日,金融稳定发展委员会提及,坚决防控金融风险。坚持底线思维,加强金融风险全方位扫描预警,推动中小金融机构改革化险,着力降低信用风险,强化平台企业金融活动监管,打击比特币挖矿和交易行为。

5月25日,内蒙古发改委发布《关于坚决打击惩戒虚拟货币“挖矿”行为八项措施(征求意见稿)》。内蒙古矿场开始关停。

6月9日,青海省工信厅也下发了《关于全面关停虚拟货币“挖矿”项目的通知》。青海矿场开始关停。

6月9日,新疆昌吉回族自治州发展和改革委员会发布《关于立即对虚拟货币挖矿行为企业进行停产整顿的通知》,新疆矿场开始关停。

5月27日,为充分了解四川虚拟货币“挖矿”相关情况,国家能源局四川监管办公室下发通知,将于6月2日展开小范围内为座谈研讨会。6月18日,四川省发改委、四川省能源局发布的《关于清理关停虚拟货币“挖矿”项目的通知》,对国网四川省电力公司目前已排查上报国家的26个疑似虚拟货币“挖矿”项目,要求于6月20日前完成甄别清理关停工作。四川矿场开始关停。

以上是关于比特币矿池的协议stratum的主要内容,如果未能解决你的问题,请参考以下文章

金融委首次点名挖矿:主要比特币矿池都在中国

比特币挖矿究竟在计算一个啥问题?手动验证区块链给出答案

第29集:矿池怎么挖矿?

币圈寒冬,过去两周内全球约60万矿商关机

总裁解读第36期-关于比特币矿机标定功耗与矿场实测功耗差异的解读

四川比特币矿机或全线关机,矿工跟矿机说:Bye,See you