stratum协议原理
stratum协议是矿机和矿池之间最常用的TCP通信协议。首先简单解释一下挖矿的网络架构。
一、挖矿网络架构
比特币是一种去中心化的网络架构,新的交易和新的区块通过安装了比特币守护进程的节点进行转发。同时,矿机和矿池形成了另一个网络,我们称之为矿工网络。
矿工网分为矿机、矿池、钱包等几个主要部分。有时候矿池软件和钱包装在一起,可以统称为矿池。
矿机和矿池软件的通信协议是stratum,而矿池软件和钱包的通信是bitcoinrpc接口。
stratum是JSON数据格式,具体协议如下:
II。地层协议
1。任务订阅
矿机启动。首先通过mining.subscribe方法连接到挖掘池订阅工作。
挖掘池使用Mining . notify
客户端:{'id'1,' method''mining.subscribe '' params '[]}服务器:{'id'1,' result'[['mining.notify '' AE 6812 EB 4 CD 7735 a 302 a 8 a9 DD 95 cf 71 f '],' 08000002 '4],错误'null}其中:
ae6812eb4cd7735a
0800002为ExtraNonce1,用于构造coibase事务;
ExtraNonce2_size为4,挖矿机ExtraNonce2计数器的字节数。
2。任务分配
该命令由矿池定期发送给矿机。当通过mining.subscribe方法注册了矿机时,矿池应立即返回带有mining.notify
Server的任务:{'params'['bf '' 4d 16 b 6 f 85 af 6 e 2198 f 44 AE 2 a6 de 67 f 78487 AE 5611 b 77 c 6 c 0440 b 921 e 0000000000010000000000000000 '' 010000000000000000000000000000上一个块哈希:' 4d 16 b 6 f 85 af 6 e 2198 f 44 AE 2 a6 de 67 f 78487 AE 5611 b 77 c 6 c 0440 b 921 e 000000 '
coinbase第1部分:' 01000000000000000000000000000000000000000000000000000000000000000000000000000200862062 f 50325
交易id列表:[' c5bd 77249 e 27 C2 D3 a 3602 DD 35 c 364 a 7983900 b 64 a 34644d 03 b 930 bfdb 19 c 0 e 5 '' 049 B4 e 78 e 2d 0 b 24 f 7 c 6 a 2856 aa 741811 ed 961 e 52 AE 75527 df9 e。
块版本号:“0000002”;nBit:" 1c 2 AC 4 af ";当前时间:“504 e86b 9”;清理任务:如果为真,矿机将停止所有任务,并立即开始蓑衣网小编2022新的任务;如果为false,请等到当前任务完成后再开始新任务。3。矿机登录矿机用一定的账号和密码登录矿池。密码可以为空,挖掘池返回true登录成功。该方法必须在连接初始化后立即进行,否则矿机将得不到采池任务。客户端:{'params' ['miner1 '' password'],' id' 2,' method'' mining.authorize'}服务器:{'error' null,' id' 2,' result' true}
4当矿返回true时,提交成功;如果失败,有具体的错误原因。客户端:{'params' ['Miner1 '' BF '' 000001 '' 504E86ED '' B2957C02'],' ID' 4,' method'' mining.submit'}服务器:{
任务号:" BF ";
ExtraNonce2:"00000001 ";
当前时间:“504 e86ed”;
nonce:"b2957c02 ";
5。难度调整
难度调整是从矿池发送到矿机的,难度通过mining . set _ difference方法进行调整,这是params中的难度值。
服务器:{'id' null,' method '' mining . set _ difference '蓑衣网小编20229; params' [2]}矿工将在下一个任务中采用新的难度。有时候矿池会立刻发出新的任务,把清理任务设置为真,这样矿工就可以立刻用新的难度工作了。
三。通用通信流程
矿机和矿池的通用通信流程如下: