网赚论坛

 找回密码
 免费注册
查看: 358|回复: 0
打印 上一主题 下一主题

比特币Stratum挖矿协议总图

[复制链接]

10

主题

10

帖子

46

积分

Ⅰ级财主

Rank: 1

积分
46
跳转到指定楼层
楼主
发表于 2017-11-25 16:13:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
挖矿核心逻辑

Stratum协议

Stratum协议以TCP长连接的模式传输json串,其中只有四个是必须的。注:记得每条语句后加n。每条json中的ID号要自行++,相应回复jsonID也要统一。

Subscribe

该方法用于向矿机发送extranonce1字段,格式如:

{"id": 1, "method":"mining.subscribe", "params": []}n

{"id": 1, "result":[[["mining.set_difficulty","b4b6693b72a50c7116db18d6497cac52"], ["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"]], "08000002", 4],"error": null}n

当矿机发送mining.subscribe后,矿池需回复上面result。该result中只有08000002和4有用,前者表示extranonce1字段,后者表示矿机需要构造的多长的extranonce2。矿池模式默认是4即可。Extranonce1为每个链接的唯一标示。

Notify

该方法用于下发给矿机计算任务。

{"params": ["bf", "4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000","01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff20020862062f503253482f04b8864e5008","072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000", [],"00000002", "1c2ac4af", "504e86b9", false], "id": null, "method": "mining.notify"}
l 任务ID

l 前一个区块哈希

l Coinbase的前部

l Coinbase的后部

l Merkle树的层,这里的层与coinbase无关,是Merkle构造中每层的第一个节点的集合。

l 版本号

l 难度

l 时间,注:该时间不要取当前时间,取节点获取任务时的时间。

l 是否清空矿机任务,区块高度变化时为true,其他为false,注:有大写不识别现象。

Submit

该方法是矿机提交给矿池的share

{"params": ["slush.miner1", "bf", "00000001", "504e86ed", "b2957c02"], "id": 4, "method": "mining.submit"}{"error": null, "id": 4, "result": true}l 矿工名l 任务IDl Extranonce2l 时间l 随机数
Authorize

该方法表示该账号是否拥有在此的挖矿权限。

{"params": ["slush.miner1", "password"], "id": 2, "method": "mining.authorize"}n{"error": null, "id": 2, "result": true}n
矿机发送用户名和密码,通常密码是非空的任意字符串,此时矿池回复通过如上。

通过节点获取数据
连接节点,通过getblocktemplate获取数据,解json出如下结构:

typegetblocktemplate struct {

Previousblockhashstring

Bits string

Height int

Transactions []*transactions

Coinbasevalue int64

Version int64

Curtime int64

}

死循环从节点获取该信息,时间过长会导致浪费一些算力,时间过短影响带宽等性能。个人建议10秒左右。

计算Block哈希
Coinbase=coinb1+extranonce1+extranonce2+coib2

计算Cb哈希与Merkle树的层一起计算出Merkle树的根

区块=版本+前一个区块哈希+Merkle树的根+时间+难度+随机数

向节点提交已经打包好的区块
通过submitblock命令向节点上传。

参数为:

区块+交易数量的变形+每个交易
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

广告合作|Archiver|手机版|小黑屋|财富吧

GMT+8, 2026-7-18 17:48 , Processed in 0.468001 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.1

© 2014-2021 财富吧

快速回复 返回顶部 返回列表