From e246a84c860f454d479f3aa0a01fe21452a396fd Mon Sep 17 00:00:00 2001 From: johnny9 <985648+johnny9@users.noreply.github.com> Date: Sun, 21 May 2023 23:20:58 -0400 Subject: [PATCH] stratum: add mining.set_difficulty message parse --- components/stratum/include/stratum_api.h | 2 ++ components/stratum/stratum_api.c | 15 +++++++++++++++ components/stratum/test/test_stratum_json.c | 13 ++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/components/stratum/include/stratum_api.h b/components/stratum/include/stratum_api.h index 0e0ea72a..e73ee5d8 100644 --- a/components/stratum/include/stratum_api.h +++ b/components/stratum/include/stratum_api.h @@ -37,6 +37,8 @@ stratum_method parse_stratum_method(const char * stratum_json); mining_notify parse_mining_notify_message(const char * stratum_json); +uint32_t parse_mining_set_difficulty_message(const char * stratum_json); + void free_mining_notify(mining_notify params); int parse_stratum_subscribe_result_message(const char * result_json_str, diff --git a/components/stratum/stratum_api.c b/components/stratum/stratum_api.c index c73362be..15e62698 100644 --- a/components/stratum/stratum_api.c +++ b/components/stratum/stratum_api.c @@ -114,6 +114,21 @@ stratum_method parse_stratum_method(const char * stratum_json) return result; } +uint32_t parse_mining_set_difficulty_message(const char * stratum_json) +{ + cJSON * json = cJSON_Parse(stratum_json); + cJSON * method = cJSON_GetObjectItem(json, "method"); + if (method != NULL && cJSON_IsString(method)) { + assert(strcmp("mining.set_difficulty", method->valuestring) == 0); + } + + cJSON * params = cJSON_GetObjectItem(json, "params"); + uint32_t difficulty = cJSON_GetArrayItem(params, 0)->valueint; + + cJSON_Delete(json); + return difficulty; +} + mining_notify parse_mining_notify_message(const char * stratum_json) { cJSON * json = cJSON_Parse(stratum_json); diff --git a/components/stratum/test/test_stratum_json.c b/components/stratum/test/test_stratum_json.c index d34cb647..8bc3fa7c 100644 --- a/components/stratum/test/test_stratum_json.c +++ b/components/stratum/test/test_stratum_json.c @@ -1,7 +1,7 @@ #include "unity.h" #include "stratum_api.h" -TEST_CASE("Parse stratum method", "[mining.notify]") +TEST_CASE("Parse stratum method", "[stratum]") { const char * json_string = "{\"id\":null,\"method\":\"mining.notify\",\"params\":" "[\"1b4c3d9041\"," @@ -12,6 +12,17 @@ TEST_CASE("Parse stratum method", "[mining.notify]") "\"20000004\",\"1705c739\",\"64495522\",false]}"; stratum_method method = parse_stratum_method(json_string); TEST_ASSERT_EQUAL(MINING_NOTIFY, method); + + const char * json_string_2 = "{\"id\":null,\"method\":\"mining.set_difficulty\",\"params\":[1638]}"; + stratum_method method_2 = parse_stratum_method(json_string_2); + TEST_ASSERT_EQUAL(MINING_SET_DIFFICULTY, method_2); +} + +TEST_CASE("Parse stratum set_difficulty params", "[mining.set_difficulty]") +{ + const char * json_string = "{\"id\":null,\"method\":\"mining.set_difficulty\",\"params\":[1638]}"; + uint32_t difficulty = parse_mining_set_difficulty_message(json_string); + TEST_ASSERT_EQUAL(1638, difficulty); } TEST_CASE("Parse stratum notify params", "[mining.notify]")