реклама на сайте
подробности

 
 
> Майнинг - это не модно, но все же ..., Общий алгоритм вызывает ослажнения
RamZoom
сообщение Jul 3 2017, 20:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 30-03-14
Пользователь №: 81 150



Ниже в постах уже была затронута тема майнинга на ПЛИС, но полного понимания к сожалению нет. Любителей отписаться о том, что это не модно и не выгодно - согласен, но хочется довести тему до получения результата. Исходные данные: сайт Марсоход, Wiki с темой SHA-2 и конечно GitHub с исходниками на verilog и небольшая статейка на Биткоин форум с описанием преобразования исходного заголовка от пула программой cgmainer. Доп инфа: по UART плата получает 16 32-x битных пакетов = 512 бит. Сборка проекта и подгонка под недолгую работу ModelSim показала, что выполнение обоих модулей под названием sha256_transform стартует одновременно, после получения пакетов и течет куча данных. После нескольких запусков просто моделсим перестал стартовать. Заставка, вторая и вылетел. Такое впервые, еще не знаю что с этим делать, но не суть. От этой модели понимания не прибавилось. Сам SHA-256 говорит о том, что все операции будут производиться над 256-ти разрядными данными, а в проекте еще и над 512-ти разрядными. Часть из входных которых являются константы. Далее счетчики для получения nonce, golden nonce. Может кто по-человечески объяснить текстом или в виде структурок что в общем-то нужно делать с входными и выходными данными вышеупомянутых модулей, саму суть и принцип не в виде бесполезных ссылок, а с чувством, толком, расстановкой. Заранее спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jojo
сообщение Jul 4 2017, 21:47
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



На Openssl весь алгоритм выглядит так:

SHA256_Init(&sha256_pass1);
SHA256_Update(&sha256_pass1, (unsigned char*)&header, 64);
SHA256_Update(&sha256_pass1, ((unsigned char*)&header)+64, sizeof(block_header)-64);
SHA256_Final(hash1, &sha256_pass1);

SHA256_Init(&sha256_pass2);
SHA256_Update(&sha256_pass2, hash1, SHA256_DIGEST_LENGTH);
SHA256_Final(hash2, &sha256_pass2);


Следующие строки это просто вычисление первого хеша вручную, здесь ничего особенного нет, просто эксперимент.
Здесь мы имеем попытку разобраться с тем, что переносить в ПЛИС из всего алгоритма Bitcoin, см. дальше.
for (i = 0; i < 16; i++)
M[i] = 0;

hash[0] = (0xdc6a3b8d);
hash[1] = (0x0c69421a);
hash[2] = (0xcb1a5434);
hash[3] = (0xe536f7d5);
hash[4] = (0xc3c1b9e4);
hash[5] = (0x4cbb9b8f);
hash[6] = (0x95f0172e);
hash[7] = (0xfc48d2df);

M[0] = BSWAP32(0x871714dc);
M[1] = BSWAP32(0x53058b35);
M[2] = BSWAP32(0x19015f53);
M[3] = BSWAP32(0x33087548);
M[4] = 0x80000000;
M[15] = 0x00000280;

sha256 (M, hash);

Фишка здесь в том, что базовых операций SHA-2 здесь 3 штуки.
hash1 от блока sizeof(block_header) - 2 базовых операции, первая из которых от счётчика не зависит и кэшируется.
hash2 от hash1 (hash1 размером SHA256_DIGEST_LENGTH)- 1 базовая операция SHA-2.

Таким образом, нужно вычислять только 2 и 3 операции SHA-2, зависящие от счётчика.
В общем, всё здесь есть, кмк, чтобы разобраться.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.0136 секунд с 7
ELECTRONIX ©2004-2016