From b14f21c69746c761805d1be75d8415428d22a7b2 Mon Sep 17 00:00:00 2001 From: Skot Croshere Date: Sun, 4 Jun 2023 21:46:36 -0400 Subject: [PATCH] added the beginning of stratum result parsing. --- components/stratum/include/stratum_api.h | 6 +++- components/stratum/stratum_api.c | 37 ++++++++++++++++++------ main/miner.c | 11 ++++++- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/components/stratum/include/stratum_api.h b/components/stratum/include/stratum_api.h index 650897bf..cb24f091 100644 --- a/components/stratum/include/stratum_api.h +++ b/components/stratum/include/stratum_api.h @@ -3,6 +3,7 @@ #include "cJSON.h" #include +#include #define MAX_MERKLE_BRANCHES 32 #define HASH_SIZE 32 @@ -25,7 +26,8 @@ typedef enum { STRATUM_UNKNOWN, MINING_NOTIFY, MINING_SET_DIFFICULTY, - MINING_SET_VERSION_MASK + MINING_SET_VERSION_MASK, + STRATUM_RESULT } stratum_method; void initialize_stratum_buffer(); @@ -48,6 +50,8 @@ int parse_stratum_subscribe_result_message(const char * result_json_str, char ** extranonce, int * extranonce2_len); +bool parse_stratum_result_message(const char * stratum_json, int16_t *); + int auth_to_stratum(int socket, const char * username); void configure_version_rolling(int socket); diff --git a/components/stratum/stratum_api.c b/components/stratum/stratum_api.c index f4929551..d4db630b 100644 --- a/components/stratum/stratum_api.c +++ b/components/stratum/stratum_api.c @@ -108,6 +108,12 @@ stratum_method parse_stratum_method(const char * stratum_json) } else if (strcmp("mining.set_version_mask", method_json->valuestring) == 0) { result = MINING_SET_VERSION_MASK; } + } else { + //parse results + cJSON * result_json = cJSON_GetObjectItem(json, "result"); + if (result_json != NULL && cJSON_IsBool(result_json)) { + result = STRATUM_RESULT; + } } cJSON_Delete(json); @@ -144,6 +150,27 @@ uint32_t parse_mining_set_version_mask_message(const char * stratum_json) return version_mask; } +bool parse_stratum_result_message(const char * stratum_json, int16_t * parsed_id) +{ + cJSON * json = cJSON_Parse(stratum_json); + cJSON * result_json = cJSON_GetObjectItem(json, "result"); + cJSON * id_json = cJSON_GetObjectItem(json, "id"); + + if (id_json != NULL && cJSON_IsNumber(id_json)) { + *parsed_id = id_json->valueint; + } else { + *parsed_id = -1; + } + + bool result = false; + if (result_json != NULL && cJSON_IsTrue(result_json)) { + result = true; + } + + cJSON_Delete(json); + return result; +} + mining_notify parse_mining_notify_message(const char * stratum_json) { cJSON * json = cJSON_Parse(stratum_json); @@ -268,15 +295,6 @@ int auth_to_stratum(int socket, const char * username) ESP_LOGI(TAG, "-> %s", authorize_msg); write(socket, authorize_msg, strlen(authorize_msg)); - /* - // TODO: Parse authorize results - char * line; - line = receive_jsonrpc_line(socket); - - ESP_LOGI(TAG, "Received result %s", line); - - free(line); - */ return 1; } @@ -289,6 +307,7 @@ void submit_share(int socket, const char * username, const char * jobid, send_uid++, username, jobid, extranonce_2, ntime, nonce); ESP_LOGI(TAG, "-> %s", submit_msg); write(socket, submit_msg, strlen(submit_msg)); + } int should_abandon_work(const char * mining_notify_json_str) diff --git a/main/miner.c b/main/miner.c index 93ce5911..b9f99d6d 100755 --- a/main/miner.c +++ b/main/miner.c @@ -294,9 +294,10 @@ static void stratum_task(void * pvParameters) while (1) { char * line = receive_jsonrpc_line(sock); - //ESP_LOGI(TAG, "%s", line); //debug incoming stratum messages + ESP_LOGI(TAG, "stratum rx: %s", line); //debug incoming stratum messages stratum_method method = parse_stratum_method(line); + if (method == MINING_NOTIFY) { if (should_abandon_work(line) && stratum_queue.count > 0) { ESP_LOGI(TAG, "Should abandon work, clearing queues"); @@ -325,6 +326,14 @@ static void stratum_task(void * pvParameters) //1fffe000 ESP_LOGI(TAG, "Set version mask: %08x", version_mask); + + } else if (method == STRATUM_RESULT) { + int16_t parsed_id; + if (parse_stratum_result_message(line, &parsed_id)) { + ESP_LOGI(TAG, "message id %d result accepted", parsed_id); + } else { + ESP_LOGI(TAG, "message id %d result rejected", parsed_id); + } } else { free(line); }