网赚论坛
标题: 比特币Stratum挖矿协议总图 [打印本页]
作者: 垱绉稼弛 时间: 2017-11-25 16:13
标题: 比特币Stratum挖矿协议总图
挖矿核心逻辑
Stratum协议

Stratum协议以TCP长连接的模式传输json串,其中只有四个是必须的。注:记得每条语句后加n。每条json中的ID号要自行++,相应回复json中ID也要统一。
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命令向节点上传。
参数为:
区块+交易数量的变形+每个交易
| 欢迎光临 网赚论坛 (http://www.caifuba.net/) |
Powered by Discuz! X3.1 |