大家好,关于Ethereum Stratum Mining Protocol Version 1.0.0: Comprehensive Guide很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
每个矿工/工人没有唯一的数据。 Extranonce 被忽略(但仍然发送)。每个矿工都会获得seedhash(每30k块相同)和headerhash(每个块都会改变)。然后矿工使用这两个值和自己的Nonce来生成哈希。矿工可能会做重复的工作(如果他们选择相同的随机数)。困难是多余的。难度作为Mining.notify 消息中指定目标的第三个参数发送。这是不需要的,因为矿工可以根据自己的难度计算目标哈希。整体数据冗余。有几个字段不需要通过线路发送。首先,如果不使用extranonce,则不必发送。其次,由于seedhash每30k块更改一次,因此无需每次挖矿时都发送它。第三,正如第2项所指出的——当使用set_difficulty时,mining.notify中的目标是多余的。第四,mining.submit实际上只需要发送一次。矿池需要验证Nonce的有效性,并计算hash和mixhash。如果删除提到的所有冗余,您可以轻松地将带宽使用量减少50% 以上。与原雪泥地层规范相比,存在一些不一致之处。其中之一是id。 ID 应该递增,以便池可以跟踪接收到的数据。另一件事是十六进制标记“0x”以每个字符串字段开头。这也是多余的,如果不使用的话我们会节省一些带宽。没有规范,只有已实施的解决方案项目。这通常会产生几个相似的协议版本;究竟发生了什么。我们的目标是建立一个可靠、冗余、防弹的以太坊层挖矿协议,并且不存在之前指出的问题。
II. 概念
以太坊的GetWork给了我们3个值:
{ . "结果":[
"0x645cf20198c2f3861e947d4f67e3ab63b7b2e24dcc9095bd9123e7b33371f6cc",
"0xabad8f99f3918bf903c6a909d9bbc0fdfa5a2f4b9cb1196175ec825c6610126c",
"0x0000000394427b08175efa9a9eb59b9123e2969bf19bf272b20787ed022fbe6c"
]}第一个值是headerhash,第二个是seedhash,第三个是目标。 Seedhash 用于识别DAG 文件,headerhash 和64 作为Nonce 是从矿工给我们的哈希中选择的,如果它低于提供的目标,则提供块/共享。
由于Nonce的宽度为64位(8字节),并且考虑到以太坊在5分钟内找不到区块的可能性非常大,因此8字节的Nonce可以将矿机的速度提高到:
(2^64/300)/1G ~ 61,489,147 GH/s 这是一个非常大的数字,因此我们可以轻松考虑为我们的层协议去掉一些字节。
---------------------------------------
|字节|最大支持的哈希速度|
| 8 | ~61,489,147.000 GH/秒|
| 7 | ~240,192.000 GH/秒|
| 6 | ~938.000 GH/秒|
| 5 | ~3.665 GH/秒|
| 4 | ~0.014 GH/秒|
--------------------------------------- 只有4 个字节的Nonce 不是一个选项,因为我们已经有可以达到14 MH/s 以上的矿机。 5 字节的随机数宽度允许的最大速度为3.665 GH/s,这足以满足相当长的一段时间,即使ASIC 到来时也是如此。
矿工需要获得矿池中的seedhash、headerhash、难度和部分nonce(称为extranonce)。矿工选择自己的第二部分(称为minernonce)。 Extranonce 连接到minernonce,后者提供64 位以太坊随机数。
III. 规范(RFC)
矿工与矿池建立TCP连接后,发生握手。矿工首先发送数据:
{
"id": 1,
"方法": "挖矿.订阅",
"参数": [
"MinerName/1.0.0", "EthereumStratum/1.0.0"
]
}第一个参数是矿工名称和版本(如标准层协议中所示)。第二个参数必须是“Ethereum Stratum/Version”,其中版本是根据本文档中的版本正在使用的以太坊Stratum矿工的版本。如果池不支持此版本,它可以终止连接或返回错误。
请注意,矿工可以从任意数字开始迭代id。从矿工到矿池的每条消息都需要有一个唯一的ID,以便矿工正确读取响应,因为矿池可能不会以先进先出的方式处理矿工的消息。
服务器回复:
{
"id": 1,
"结果": [
[
"挖矿.通知",
"ae6812eb4cd7735a302a8a9dd95cf71f",
"以太坊层/1.0.0"
],
"080c"
],
“错误”: 空
响应与标准stratum协议几乎有以下区别;结果数组第一个参数的第三个参数是“EthereumStratum/Version”;如果矿池没有报告此参数或者版本与矿机支持的版本不同,矿机可能会遇到兼容性问题并终止连接。结果数组的第二个参数是池设置的extranonce(十六进制)。没有第三个参数,因为没有extranonce2(如标准层中一样)。 Extranonce 最多可达3 个字节。
矿工应在初次握手时进行授权;这与标准层协议相同,这里不再详细解释。
在提供第一个任务(作业)之前,矿池必须通过发送: 设置难度
{
"id": 空,
"方法": "挖矿.set_difficulty",
"参数": [
0.5
]
}参数数组中的第一项是double数据类型的难度。难度和目标之间的转换与比特币相同;难度1 转换为HEX 目标:
00000000ffff00000000000000000000000000000000000000000000000000 如果矿池在第一个作业之前没有设置难度,那么矿工可以假设难度为1。
当难度发生变化时,矿工开始为每个到达的下一个任务使用新的难度。
如果矿工订阅了extranonce通知(详细解释这里:https://www.nicehash.com/?p=software#devs),那么矿池可以通过发送:来改变矿工的extranonce
{
"id": 空,
"方法": "mining.set_extranonce",
"参数": [
"af4c"
]
}新的额外随机数对矿池中发送的所有NEXT 任务均有效。
矿池通过发送以下数据:通知矿工作业(job)
{
"id": 空,
"方法": "挖矿.通知",
"参数": [
"bf0488aa",
"abad8f99f3918bf903c6a909d9bbc0fdfa5a2f4b9cb1196175ec825c6610126c",
"645cf20198c2f3861e947d4f67e3ab63b7b2e24dcc9095bd9123e7b33371f6cc",
真的
]
}参数数组的第一个参数是任务ID(必须是任意大小的十六进制数)。第二个参数是seedhash。每个任务都会发送一个种子散列来支持尽可能多的矿池,这些矿池可以在货币之间快速交换。第三个参数是headerhash。最后一个参数是布尔值cleanjobs。如果设置为true,则矿工需要清除任务队列并立即开始处理新提供的任务,因为所有旧任务共享将导致陈旧共享错误。
矿工使用seedhash识别DAG,然后尝试使用headerhash、extranonce和自己的minernonce找到低于目标的份额(由提供的难度生成)。
当发现低于目标的份额时,矿工将其提交到矿池:
{
"id": 244,
"方法": "挖矿.提交",
"参数": [
"用户名",
"bf0488aa",
"6a909d9bbc0f"
]
}参数数组的第二个参数是任务ID,第三个参数是minernonce。请注意,在上面的示例中,minernonce 为6 字节,因为提供的extranonce 为2 字节。如果矿池提供3字节的extranonce,那么minernonce必须是5字节。
对于每个提交的作业,矿池需要返回标准的层响应:
{
"id": 244,
“结果”: 为真,
“错误”: 空
或者如果共享不被接受(标准层响应):
{
"id": 244,
“结果”: 假,
"错误": [
-1,
"找不到工作",
无效的
]
}
IV. 真实场景
矿工连接矿池,发送:
{
"id": 1,
"方法": "挖矿.订阅",
"参数": [
"EthereumMiner/1.0.0", "EthereumStratum/1.0.0"
]
}矿池响应:
{
"id": 1,
"结果": [
[
"挖矿.通知",
"ae6812eb4cd7735a302a8a9dd95cf71f",
"以太坊层/1.0.0"
],
"a2eea0"
],
“错误”: 空
}然后矿工验证:
{
"id": 2,
"方法": "挖矿.授权",
"参数": [
"测试",
"密码"
]
}矿池确认:
{
"id": 2,
“结果”: 为真,
“错误”: 空
}n矿池发送难度:
{
"id": 空,
"方法": "挖矿.set_difficulty",
"参数": [
1.0
]
}n然后是任务:
{
"id": 空,
"方法": "挖矿.通知",
"参数": [
"bf0488aa",
"abad8f99f3918bf903c6a909d9bbc0fdfa5a2f4b9cb1196175ec825c6610126c",
"fc12eb20c58158071c956316cdcd12a22dd8bf126ac4aee559f0ffe4df11f279",
真的
]
}n过了一段时间,矿工找到了共享并提交了:
{
"id": 3,
"方法": "挖矿.提交",
"参数": [
"测试",
"bf0488aa",
"cfae7df760"
]
}n矿池响应:
{
"id": 3,
“结果”: 为真,
“错误”: 空
}n考虑到数据:共享是有效的
Seedhash=abad8f99f3918bf903c6a909d9bbc0fdfa5a2f4b9cb1196175ec825c6610126c
headerhash=fc12eb20c58158071c956316cdcd12a22dd8bf126ac4aee559f0ffe4df11f279
nonce=a2eea0cfae7df760 的结果是难度的1.863,大于1.0。
【Ethereum Stratum Mining Protocol Version 1.0.0: Comprehensive Guide】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于来了!一直期待着 Stratum 去中心化协议能发布新的版本。
有7位网友表示赞同!
希望能提升矿池的安全性,让ETH挖矿更加公平可靠。
有5位网友表示赞同!
不知道这个新版本有哪些其他的改进呢?
有8位网友表示赞同!
看好 Ethereum 的未来发展,希望 Stratum 协议也能继续支持它。
有14位网友表示赞同!
为所有 ETH 矿工带来更好的体验!这样就更动力去挖礦了。
有10位网友表示赞同!
学习一下这个新的 Stratum 协议,看看能不能提升我的矿池效率。
有10位网友表示赞同!
期待能看到这个版本带来的实际效果,加速 ETH 网络的搭建。
有17位网友表示赞同!
希望新版本能够更加友善用户,方便新手上手。
有5位网友表示赞同!
感觉这次更新很值得关注,有空去详细了解一下。
有13位网友表示赞同!
矿工们可以尝试使用这个新版本,看看能否提高收益。
有16位网友表示赞同!
对这个 Stratum 协议 v1.0.0 的期待值很高!
有19位网友表示赞同!
ETH 的生态越来越完善了,很棒!
有20位网友表示赞同!
感谢开发团队的持续努力,为 ETH 生态贡献力量!
有15位网友表示赞同!
希望更多人关注 Stratum 协议,提高其使用率。
有13位网友表示赞同!
这个新版本一定会带来很多新改变和可能性。
有12位网友表示赞同!
感觉 ETH 的未来无限可期!
有9位网友表示赞同!
一起见证 Ethereum 生态的壮丽发展!
有13位网友表示赞同!
学习一下新的 Stratum 协议,让自己跟上最新的科技趋势!
有10位网友表示赞同!
我相信这个新版本会带给我们更多惊喜!
有18位网友表示赞同!
祝愿 Ethereum 和 Stratum 协议都能蒸蒸日上!
有16位网友表示赞同!