Skip to content

Commit 1f4d146

Browse files
committed
Merge branch 'split_username' into master+split_username
2 parents 1892691 + a1765fb commit 1f4d146

12 files changed

+502
-159
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ add_executable(datum_gateway
1818
src/datum_sockets.c
1919
src/datum_stratum.c
2020
src/datum_stratum_dupes.c
21+
src/datum_stratum_tests.c
2122
src/datum_submitblock.c
2223
src/datum_utils.c
24+
src/datum_utils_tests.c
2325
src/thirdparty_base58.c
2426
src/thirdparty_segwit_addr.c
2527
${CMAKE_CURRENT_BINARY_DIR}/web_resources.h

src/datum_api.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,6 +1297,15 @@ bool datum_api_config_set(const char * const key, const char * const val, struct
12971297
datum_config.stratum_v1_fingerprint_miners = val_bool;
12981298
datum_api_json_modify_new("stratum", "fingerprint_miners", json_boolean(val_bool));
12991299
// TODO: apply change to connected miners?
1300+
} else if (0 == strcmp(key, "stratum_split_username")) {
1301+
bool val_bool;
1302+
if (!datum_str_to_bool_strict(val, &val_bool)) {
1303+
json_array_append_new(errors, json_string_nocheck("\"Parse usernames to divide share submissions across multiple DATUM users\" must be 0 or 1"));
1304+
return false;
1305+
}
1306+
if (val_bool == datum_config.stratum_v1_split_username) return true;
1307+
datum_config.stratum_v1_split_username = val_bool;
1308+
datum_api_json_modify_new("stratum", "stratum_split_username", json_boolean(val_bool));
13001309
} else if (0 == strcmp(key, "datum_always_pay_self")) {
13011310
bool val_bool;
13021311
if (!datum_str_to_bool_strict(val, &val_bool)) {

src/datum_conf.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ const T_DATUM_CONFIG_ITEM datum_config_options[] = {
100100
.required = false, .ptr = &datum_config.stratum_v1_idle_timeout_no_share, .default_int = 7200 },
101101
{ .var_type = DATUM_CONF_INT, .category = "stratum", .name = "idle_timeout_max_last_work", .description = "Seconds we allow a subscribed connection to be idle since its last accepted share? (0 disables)",
102102
.required = false, .ptr = &datum_config.stratum_v1_idle_timeout_max_last_work, .default_int = 0 },
103+
{ .var_type = DATUM_CONF_BOOL, .category = "stratum", .name = "split_username", .description = "Parse usernames to divide share submissions across multiple DATUM users",
104+
.required = false, .ptr = &datum_config.stratum_v1_split_username, .default_bool = true },
103105

104106
// mining settings
105107
{ .var_type = DATUM_CONF_STRING, .category = "mining", .name = "pool_address", .description = "Bitcoin address used for mining rewards.",

src/datum_conf.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ typedef struct {
101101
int stratum_v1_idle_timeout_no_subscribe;
102102
int stratum_v1_idle_timeout_no_share;
103103
int stratum_v1_idle_timeout_max_last_work;
104+
bool stratum_v1_split_username;
104105

105106
char mining_pool_address[256];
106107
char mining_coinbase_tag_primary[64];

src/datum_gateway.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ static char args_doc[] = "";
7171
static struct argp_option options[] = {
7272
{"help", '?', 0, 0, "Show custom help", 0},
7373
{"example-conf", 0x100, NULL, 0, "Print an example configuration JSON file", 0},
74+
{"test", 0x101, NULL, 0, "Run tests only", 0},
7475
{"usage", '?', 0, 0, "Show custom help", 0},
7576
{"config", 'c', "FILE", 0, "Configuration JSON file"},
7677
{0}
@@ -80,6 +81,9 @@ struct arguments {
8081
char *config_file;
8182
};
8283

84+
void datum_stratum_tests(void);
85+
void datum_utils_tests(void);
86+
8387
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
8488
struct arguments *arguments = state->input;
8589
switch (key) {
@@ -97,6 +101,13 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
97101
datum_gateway_example_conf();
98102
exit(0);
99103
break;
104+
case 0x101: // test
105+
#ifdef NDEBUG
106+
fprintf(stderr, "WARNING: Compiled with NDEBUG; tests might not actually run!\n");
107+
#endif
108+
datum_utils_tests();
109+
datum_stratum_tests();
110+
exit(0);
100111
default:
101112
return ARGP_ERR_UNKNOWN;
102113
}

0 commit comments

Comments
 (0)