revoxhere / duino-coin

ᕲ Duino-Coin is a coin that can be mined with almost everything, including Arduino boards.
https://duinocoin.com
MIT License
1.08k stars 512 forks source link

[Unofficial] STM32 stopped working #1063

Closed bzzoiro closed 2 years ago

bzzoiro commented 2 years ago

I have 3 blue pills (STM32F***) that were working like a charm with a diff of 600. Since yesterday they can't connect to server.

21:23:22  net0  Connected to master Duino-Coin server (v2.7)
21:23:23  net0  MOTD: Welcome to the null duino pool!
                Pool worker limit: 50
21:23:23  sys15  AVR mining thread is starting using DUCO-S1A algorithm (COM15)
COM15: Sending job to the board
b'7e448638fb2cdc87a97bb54438a0b760ed7ad7d0,96e65babc4f8b4f714556a2b979307d7766c7fbd,6,'
COM15: Reading result from the board
Result: ['110001101', '1011001101110110', 'DUCOID4294967295429496']
COM15: Result: 110001101
21:23:23  avr15  Rejected 0/6 (0%) ∙ 00.0s ∙ 9 kH/s @ diff 6 ∙ ping 48ms
21:23:23  net15  Error connecting to the server. Retrying in 10s (err handling result: list index out of range)
bzzoiro commented 2 years ago

Adding some more information. Seems that server is rejecting the 2nd job request...

HELLOOOOOOOOOOOOOOOOO JOBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB [''] JOBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 09:41:39 net15 Error connecting to the server. Retrying in 10s (err handling result: list index out of range) 09:41:42 sys15 Closed COM port COM15 09:41:47 net0 Connected to master Duino-Coin server (v2.7) 09:41:48 net0 MOTD: Welcome to BeyondPool (2) hosted by Beyondtoshi Pool worker limit: 50 09:41:48 sys15 AVR mining thread is starting using DUCO-S1A algorithm (COM15) HELLOOOOOOOOOOOOOOOOO JOBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ['d3701062ac29eb438e69179cb598deeb975ff883', 'f4fd49447a27d036d73d3f32d8837594717ace04', '6'] JOBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB COM15: Sending job to the board b'd3701062ac29eb438e69179cb598deeb975ff883,f4fd49447a27d036d73d3f32d8837594717ace04,6,' COM15: Reading result from the board Result: ['101011101', '1010010001100001', 'DUCOID4294967295429496'] COM15: Result: 101011101 passed 09:41:49 avr15 Rejected 0/5 (0%) ∙ 00.0s ∙ 8 kH/s @ diff 6 ∙ ping 230ms HELLOOOOOOOOOOOOOOOOO JOBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB [''] JOBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 09:41:49 net15 Error connecting to the server. Retrying in 10s (err handling result: list index out of range) 09:41:52 sys15 Closed COM port COM15 09:41:57 net0 Connected to master Duino-Coin server (v2.7) 09:41:58 net0 MOTD: Welcome to BeyondPool (2) hosted by Beyondtoshi Pool worker limit: 50 09:41:58 sys15 AVR mining thread is starting using DUCO-S1A algorithm (COM15) HELLOOOOOOOOOOOOOOOOO JOBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ['0cafb99923ee3f0dd11420e0e1f73284468c8be6', '84f34a3fd940e2f9a46fd5f0282333afd0fbbe87', '6'] JOBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB COM15: Sending job to the board b'0cafb99923ee3f0dd11420e0e1f73284468c8be6,84f34a3fd940e2f9a46fd5f0282333afd0fbbe87,6,' COM15: Reading result from the board Result: ['100011100', '1000010111101111', 'DUCOID4294967295429496'] COM15: Result: 100011100 passed 09:41:59 avr15 Rejected 0/6 (0%) ∙ 00.0s ∙ 8 kH/s @ diff 6 ∙ ping 334ms

gsrbr commented 2 years ago

Hello @bzzoiro, can you test the improved version of Pankleks, the code can be obtained here, if it works let us know so we can accept the PR

7020969 commented 2 years ago

Hello! Please, help me! Stm32f103c8t6 blue pill Screenshot_20220121-001212_Telegram

BBS215 commented 2 years ago

Hello! Please, help me! Stm32f103c8t6 blue pill !

The problem is in the blue pill firmware. It sends the result in decimal, but it should be in binary. Enable debug = y in Settings.cfg and show the log.

Проблема в прошивке blue pill. Оно отправляет результат в десятичной системе, а должно в двоичной. Включите debug = y в Settings.cfg и покажите лог.

7020969 commented 2 years ago

Hello! Please, help me! Stm32f103c8t6 blue pill !

The problem is in the blue pill firmware. It sends the result in decimal, but it should be in binary. Enable debug = y in Settings.cfg and show the log.

Проблема в прошивке blue pill. Оно отправляет результат в десятичной системе, а должно в двоичной. Включите debug = y в Settings.cfg и покажите лог.

Можно на русском? Debug включён. Это все, что пишет. Если выключить, то пишутся только синие и зелёные строки. Вероятно я не правильно прошил STM. Попробую ещё раз собрать прошивку. Или может быть есть ссылка на .BIN. или .hex файл прошивки? Я бы тогда stlink'ом прошил

BBS215 commented 2 years ago

Наверно можно, я х.з. Либо там нестандартная прошивка, либо нестандартная реализация библиотеки с функцией String(int, int). Рекомендую скачать последнюю стабильную версию arduino IDE, и добавить поддержку STM32, например, отсюда: https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json . Если есть возможность, перехватите UART обмен. Например, USB-UART преобразователем. Пример запроса в направлении МК: f7ef3049918218fc0a6a2560a6e4f3778a1a630e,da8f92daf102d52bc87ea207348d492905b30ba4,4, Ответ от МК: 11000000,11110001010100000100,DUCOID0123456789ABCDEF Если там вместо двоичной, десятичная система, ищите другие библиотеки поддержки STM32 в arduino IDE.

7020969 commented 2 years ago

Спасибо. Сейчас попробую

7020969 commented 2 years ago

Не работает. Плата работает, но шлёт ответ в неверном формате. Дело действительно в библиотеке поддержки. Ставил я её по ссылке от BBS215. Пробовал разные релизы качать, не помогает. А есть готовый bin файл прошивки? Я бы прошил stlink ом

BBS215 commented 2 years ago

Увы, нету. Есть неофициальный майнер для STM32: https://github.com/revoxhere/duino-coin/tree/master/Unofficial%20miners/STM32 , но там не факт что заработает с первого раза. Или, можно самому написать или адаптировать функцию формирования строки с ответом. За основу можно взять ducos_make_resultstr отсюда: https://github.com/BBS215/STM8_DUCO_miner/blob/main/main.c А что именно отвечает плата?

7020969 commented 2 years ago

Майнер качал как раз по этой ссылке (https://github.com/revoxhere/duino-coin/tree/master/Unofficial%20miners/STM32). Пробовал несколько версий. Сейчас AVR miner пишет так: AVR_miner

Код, загружаемый в пату: `// Duino-coin miner for STM32 and AVR chip family // https://duinocoin.com/ // by: pankleks 2021 // v: 1.2 // https://github.com/pankleks // MIT License

include

include

include

define SERIAL_PORT Serial2

HardwareSerial Serial2(PA_3,PA_2); // features

define RESET_NO_JOBS // comment to not reset board if no jobs

ifdef ARDUINO_ARCH_STM32

define LOG // comment to disable debug logs to Serial1

define LED_BUILTIN PC13

endif

define NO_JOBS_RESET_S 60 // reset board if no jobs for longer than 60s

String clientId;

int dec2bin(long num) { long bin = 0, k = 1;

while (num)
{
    bin += (num % 2) * k;
    k *= 10;
    num /= 2;
}

return bin;

}

void log(String msg) {

ifdef LOG

Serial1.println(msg);

endif

}

String getClientId() { String temp = "DUCOID";

for (int i = 0; i < UniqueIDsize; i++) temp += String(UniqueID[i], HEX);

return temp; }

void ledOn() { digitalWrite(LED_BUILTIN, false); }

void ledOff() { digitalWrite(LED_BUILTIN, true); }

void setup() { clientId = getClientId(); pinMode(LED_BUILTIN, OUTPUT); ledOn();

ifdef LOG

Serial1.begin(115200);

endif

log(clientId);

Serial2.begin(115200); Serial1.setTimeout(10000);

// wait for connection while (!Serial1) ;

Serial1.flush();

log(F("setup done")); ledOff(); }

void clearSerial2() { while (Serial2.available()) Serial2.read(); }

int ducos1a(String lastHash, String expHash, int difficulty) { const char *c = expHash.c_str(); uint8_t length = expHash.length() / 2; uint8_t job[104];

for (size_t i = 0, j = 0; j < length; i += 2, j++) job[j] = (c[i] % 32 + 9) % 25 * 16 + (c[i + 1] % 32 + 9) % 25;

SHA1_CTX baseCtx; SHA1Init(&baseCtx); SHA1Update(&baseCtx, (uint8_t *)lastHash.c_str(), lastHash.length());

uint8_t buf[20];

for (int result = 0; result < difficulty 100 + 1; result++) { SHA1_CTX ctx = SHA1Copy(baseCtx); itoa(result, (char )buf, 10);

SHA1Update(&ctx, buf, strlen((char *)buf));
SHA1Final(buf, &ctx);

if (memcmp(buf, job, 20) == 0) // if found hash = expected hash -> result
  return result;

}

return -1; // not found }

ifdef ARDUINO_ARCH_AVR

void (*resetFn)(void) = 0;

endif

void reset() {

ifdef ARDUINO_ARCH_AVR

resetFn();

endif

ifdef ARDUINO_ARCH_STM32

NVIC_SystemReset();

endif

}

String lastHash; String expHash; uint32_t difficulty; long lastOkJobT = millis(); long t = 0;

void loop() { if (Serial2.available() > 0) { log(F("got data"));

lastHash = Serial2.readStringUntil(',');
log("LH: " + lastHash);

expHash = Serial2.readStringUntil(',');
log("EH: " + expHash);

difficulty = Serial2.readStringUntil(',').toInt() * 100;
log("DF: " + String(difficulty));

clearSerial2();
ledOn();

long startT = micros();

expHash.toUpperCase();
int result = ducos1a(lastHash, expHash, difficulty);

long elapsedT = micros() - startT;

ledOff();
clearSerial2();

Serial2.print(String(dec2bin(result)) + "," + String(dec2bin(elapsedT)) + "," + String(clientId) + "\n");

log("R: " + String(dec2bin(result)) + ", " + String(dec2bin(elapsedT)) + " s");

lastOkJobT = millis();

}

if (millis() - t > 1000) { t = millis();

long n = millis() - lastOkJobT;
log("last ok job " + String(n) + " ms ago");

ifdef RESET_NO_JOBS

if (n > NO_JOBS_RESET_S * 1000L)
{
  log(F("no jobs, reset"));
}

endif

} }`

BBS215 commented 2 years ago

Очень похоже на глючный UART. Надо перехватить UART трафик преобразователем, в обе стороны. Есть мнение, что данные искажаются. Заодно гляньте лог самой STM32, он вроде должен быть на USB

7020969 commented 2 years ago

Вот лог, который идет по другому сериалу с платы log_bluepill

BBS215 commented 2 years ago

Чёт фигня полная. А этот код что даёт? https://github.com/revoxhere/duino-coin/tree/master/Arduino_Code

7020969 commented 2 years ago

А этот код заработал. Сначала поругался на сложность, а потом стало работать. скорость 7.796 kH/s. это нормально для STM?

BBS215 commented 2 years ago

Да, вполне. Последите, чтобы процент принятых хешей был не меньше 99%.

7020969 commented 2 years ago

Пока меньше, 88

BBS215 commented 2 years ago

Последняя версия AVR_Miner.py пишет причину отбраковки хеша. "Incorrect difficulty" - должна быть только на первых хешах. Остальное - проблема.

pastet666 commented 2 years ago

А этот код заработал. Сначала поругался на сложность, а потом стало работать. скорость 7.796 kH/s. это нормально для STM?

Приветствую. А каким макаром прошивку в Stm32f103c8t6 blue pill заливали. Сильно не пинайте, я только учусь.

Olegppppp commented 2 years ago

У меня Stm32f405 не работает для майнинга пишет Closed COM com port19. Помогите решить вопрос нужна прошивка рабочая.

Olegppppp commented 2 years ago

А этот код заработал. Сначала поругался на сложность, а потом стало работать. скорость 7.796 kH/s. это нормально для STM?

Какой заработал дай ссылку на рабочий код

Olegppppp commented 2 years ago

Чёт фигня полная. А этот код что даёт? https://github.com/revoxhere/duino-coin/tree/master/Arduino_Code

Есть ли код для stm32f405 ? то что на этом сайте не совсем рабочее