debug output on malformed merkle tree branch
This commit is contained in:
parent
901be540f5
commit
c772ac4a91
@ -195,7 +195,7 @@ void BM1397_send_hash_frequency(float frequency)
|
||||
|
||||
vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||
|
||||
ESP_LOGI(TAG, "Setting Frequency to %.2fMHz (%.2f)", frequency, newf);
|
||||
Serial.printf("Setting Frequency to %.2fMHz (%.2f)\n", frequency, newf);
|
||||
}
|
||||
|
||||
|
||||
@ -208,13 +208,13 @@ static uint8_t _send_init(uint64_t frequency, uint16_t asic_count)
|
||||
while (true) {
|
||||
int received = SERIAL_rx(asic_response_buffer, 11, 1000);
|
||||
if (received > 0) {
|
||||
ESP_LOG_BUFFER_HEX(TAG, asic_response_buffer, received);
|
||||
//ESP_LOG_BUFFER_HEX(TAG, asic_response_buffer, received);
|
||||
chip_counter++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
ESP_LOGI(TAG, "%i chip(s) detected on the chain, expected %i", chip_counter, asic_count);
|
||||
Serial.printf("%i chip(s) detected on the chain, expected %i\n", chip_counter, asic_count);
|
||||
|
||||
// send serial data
|
||||
vTaskDelay(SLEEP_TIME / portTICK_PERIOD_MS);
|
||||
@ -269,7 +269,7 @@ static void _reset(void)
|
||||
|
||||
uint8_t BM1397_init(uint64_t frequency, uint16_t asic_count)
|
||||
{
|
||||
ESP_LOGI(TAG, "Initializing BM1397");
|
||||
Serial.println("Initializing BM1397");
|
||||
|
||||
memset(asic_response_buffer, 0, sizeof(asic_response_buffer));
|
||||
|
||||
@ -299,7 +299,7 @@ int BM1397_set_default_baud(void)
|
||||
int BM1397_set_max_baud(void)
|
||||
{
|
||||
// divider of 0 for 3,125,000
|
||||
ESP_LOGI(TAG, "Setting max baud of 3125000");
|
||||
Serial.println("Setting max baud of 3125000");
|
||||
unsigned char baudrate[9] = {0x00, MISC_CONTROL, 0x00, 0x00, 0b01100000, 0b00110001};
|
||||
; // baudrate - misc_control
|
||||
_send_BM1397((TYPE_CMD | GROUP_ALL | CMD_WRITE), baudrate, 6, BM1397_SERIALTX_DEBUG);
|
||||
@ -330,7 +330,7 @@ void BM1397_set_job_difficulty_mask(int difficulty)
|
||||
job_difficulty_mask[5 - i] = reverse_bits(value);
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "Setting job ASIC mask to %d", difficulty);
|
||||
Serial.printf("Setting job ASIC mask to %d\n", difficulty);
|
||||
|
||||
_send_BM1397((TYPE_CMD | GROUP_ALL | CMD_WRITE), job_difficulty_mask, 6, BM1397_SERIALTX_DEBUG);
|
||||
}
|
||||
@ -369,7 +369,7 @@ asic_result *BM1397_receive_work(uint16_t timeout)
|
||||
|
||||
if (received < 0)
|
||||
{
|
||||
ESP_LOGI(TAG, "Error in serial RX");
|
||||
Serial.println("Error in serial RX");
|
||||
return NULL;
|
||||
}
|
||||
else if (received == 0)
|
||||
@ -380,8 +380,9 @@ asic_result *BM1397_receive_work(uint16_t timeout)
|
||||
|
||||
if (received != 9 || asic_response_buffer[0] != 0xAA || asic_response_buffer[1] != 0x55)
|
||||
{
|
||||
ESP_LOGI(TAG, "Serial RX invalid %i", received);
|
||||
ESP_LOG_BUFFER_HEX(TAG, asic_response_buffer, received);
|
||||
Serial.println("Serial RX invalid. Resetting receive buffer ...");
|
||||
//ESP_LOG_BUFFER_HEX(TAG, asic_response_buffer, received);
|
||||
SERIAL_clear_buffer();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -51,6 +51,21 @@ double nerdnos_test_nonce_value(const bm_job_t *job, const uint32_t nonce, const
|
||||
return ds;
|
||||
}
|
||||
|
||||
static void dump(mining_job *job) {
|
||||
Serial.printf("job_id: %s\n", job->job_id.c_str());
|
||||
Serial.printf("prev_block_hash: %s\n", job->prev_block_hash.c_str());
|
||||
Serial.printf("coinb1: %s\n", job->coinb1.c_str());
|
||||
Serial.printf("coinb2: %s\n", job->coinb2.c_str());
|
||||
Serial.printf("nbits: %s\n", job->nbits.c_str());
|
||||
Serial.printf("version: %s\n", job->version.c_str());
|
||||
Serial.printf("ntime: %s\n", job->ntime.c_str());
|
||||
Serial.printf("taget: %lu\n", job->target);
|
||||
Serial.printf("clean_jobs: %s\n", job->clean_jobs ? "true" : "false");
|
||||
for (size_t i = 0; i < job->merkle_branch.size(); i++) {
|
||||
const char* m = job->merkle_branch[i];
|
||||
Serial.printf("merkle_branch[%d]: %s\n", i, m);
|
||||
}
|
||||
}
|
||||
static void calculate_merkle_root_hash(const char *coinbase_tx, mining_job* job, char merkle_root_hash[65])
|
||||
{
|
||||
size_t coinbase_tx_bin_len = strlen(coinbase_tx) / 2;
|
||||
@ -63,7 +78,12 @@ static void calculate_merkle_root_hash(const char *coinbase_tx, mining_job* job,
|
||||
memcpy(both_merkles, new_root, 32);
|
||||
|
||||
for (size_t i = 0; i < job->merkle_branch.size(); i++) {
|
||||
hex2bin((const char*) job->merkle_branch[i], &both_merkles[32], 32);
|
||||
const char* m = job->merkle_branch[i];
|
||||
// if merkle branch is not what we expect, dump the job
|
||||
if (!is_hex_string(m)) {
|
||||
dump(job);
|
||||
}
|
||||
hex2bin(m, &both_merkles[32], 32);
|
||||
double_sha256_bin(both_merkles, 64, new_root);
|
||||
memcpy(both_merkles, new_root, 32);
|
||||
}
|
||||
|
@ -127,6 +127,24 @@ uint8_t hex2val(char c)
|
||||
}
|
||||
}
|
||||
|
||||
bool is_hex_digit(char c) {
|
||||
return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'));
|
||||
}
|
||||
|
||||
bool is_hex_string(const char* str) {
|
||||
// Check if the string is exactly 64 characters long
|
||||
if (strlen(str) != 64) {
|
||||
return false;
|
||||
}
|
||||
// Check if each character is a valid hexadecimal digit
|
||||
for (size_t i = 0; i < 64; i++) {
|
||||
if (!is_hex_digit(str[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
size_t hex2bin(const char *hex, uint8_t *bin, size_t bin_len)
|
||||
{
|
||||
size_t len = 0;
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
int hex2char(uint8_t x, char *c);
|
||||
|
||||
@ -38,3 +39,6 @@ unsigned char reverse_bits(unsigned char num);
|
||||
int largest_power_of_two(int num);
|
||||
|
||||
uint32_t increment_bitmask(const uint32_t value, const uint32_t mask);
|
||||
|
||||
bool is_hex_digit(char c);
|
||||
bool is_hex_string(const char* str);
|
Loading…
Reference in New Issue
Block a user