mining.subscribe与initiate_stratum函数

一、mining.subscribe请求过程

矿机启动后,先和矿池建立TCP连接,然后向矿池发送订阅消息,消息内容如下:

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

矿池收到矿机的订阅消息后,响应消息内容如下:

  {"id":1,"result":[[["mining.set_difficulty","01000000"],["mining.notify","01000000"]],"01000000",8],"error":null}

其中id与订阅消息中id相同。result是一个数组,它包含三部分,第一部分也是个数组其实可以为空,第二部分是extraNonce1(一般是session id),第三部分是extraNonce2的长度,一般为8字节。

二、initiate_stratum函数主要完成mining.subscribe的解析

1、sprintf(s, "{\"id\": %d, \"method\": \"mining.subscribe\", \"params\": [\""PACKAGE"/"VERSION""STRATUM_USER_AGENT"\"]}", swork_id++);组装命令

2、_stratum_send(pool, s, strlen(s))  向矿池发送请求mining.subscribe命令

3、接收矿池数据    sret = recv_line(pool);

4、res_val = json_object_get(val, "result");获得result中数据

5、sessionid = get_sessionid(res_val);获取session id

6、nonce1 = json_array_string(res_val, 1); 获取extraNonce2信息

7、n2size = json_integer_value(json_array_get(res_val, 2)); 获取extraNonce2的长度

8、根据解析信息初始化矿池对象的数据

pool->sessionid = sessionid;
pool->nonce1 = nonce1;
pool->n1_len = strlen(nonce1) / 2;
pool->nonce1bin = cgcalloc(pool->n1_len, 1);
hex2bin(pool->nonce1bin, pool->nonce1, pool->n1_len);
pool->n2size = n2size;

//同时设置矿池状态/初始难度信息
pool->stratum_active = true;
pool->next_diff = pool->diff_after = 0;
pool->sdiff = 1;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值