RamZoom 0 3 июля, 2017 Опубликовано 3 июля, 2017 · Жалоба Ниже в постах уже была затронута тема майнинга на ПЛИС, но полного понимания к сожалению нет. Любителей отписаться о том, что это не модно и не выгодно - согласен, но хочется довести тему до получения результата. Исходные данные: сайт Марсоход, Wiki с темой SHA-2 и конечно GitHub с исходниками на verilog и небольшая статейка на Биткоин форум с описанием преобразования исходного заголовка от пула программой cgmainer. Доп инфа: по UART плата получает 16 32-x битных пакетов = 512 бит. Сборка проекта и подгонка под недолгую работу ModelSim показала, что выполнение обоих модулей под названием sha256_transform стартует одновременно, после получения пакетов и течет куча данных. После нескольких запусков просто моделсим перестал стартовать. Заставка, вторая и вылетел. Такое впервые, еще не знаю что с этим делать, но не суть. От этой модели понимания не прибавилось. Сам SHA-256 говорит о том, что все операции будут производиться над 256-ти разрядными данными, а в проекте еще и над 512-ти разрядными. Часть из входных которых являются константы. Далее счетчики для получения nonce, golden nonce. Может кто по-человечески объяснить текстом или в виде структурок что в общем-то нужно делать с входными и выходными данными вышеупомянутых модулей, саму суть и принцип не в виде бесполезных ссылок, а с чувством, толком, расстановкой. Заранее спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 3 июля, 2017 Опубликовано 3 июля, 2017 · Жалоба алгоритм вызывает ослажнения "ослажнения" от слова лажа? SHA-256 говорит о том, что все операции будут производиться над 256-ти разрядными данными, а в проекте еще и над 512-ти разрядными. Анекдот про говорящую лошадь помните? Точно SHA-256 так говорит или это вы так его услышали? По первому вопросу достаточно открыть словарь, по второму — Википедию, а в целом вам явно ещё рано этим заниматься. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RamZoom 0 3 июля, 2017 Опубликовано 3 июля, 2017 (изменено) · Жалоба На счет "лажа" верно. А вот на счет рано мне этим заниматься, извиняюсь за выражение, не вам решать. Никогда не понимал людей, которые сами ничего не понимают, а других учат с бесполезной клоунадой. Знаете подскажите, а если нет, то не стоит такого писать. И если интересно, как люди одной сферы деятельности помогают друг другу посмотрите http://www.eetop.cn. И никто там такой хе.... не пишет как вы. А то герои накатают два листа текста и держат под подушкой. Жалко подсказать. Убудет Изменено 3 июля, 2017 пользователем RamZoom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 3 июля, 2017 Опубликовано 3 июля, 2017 · Жалоба Лично у меня такую кашу в голове разгребать терпения не хватит, а если тут появится тот у кого хватит, я у него с удовольствием поучусь благодетели. Но всё-таки я тоже что-то полезное для вас сделал: указал что вы не только не удосужились прочитать хотя бы два первых экрана статьи википедии про сха-256, но даже и не осознали, что это НАДО сделать :-)))) Если бы прочитали, то узнали бы, скоко бит на входе, скоко на выходе, и одним бессмысленным вопросом стало бы меньше. А тогда и к следующему приступайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RamZoom 0 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба На счет Wiki вы погорячились. Было прочитано и неоднократно. На счет того, что нужно сделать, так это получить H2 = SHA256(SHA256(Block_Header)), где Block_Header как раз и являются входными данными. В него входят Version (32 bits) + hashPrevBlock (256 bits) + hashMerkleRoot (256 bits) + Timestamp (32 bits) + Target (32 bits) + Nonce (32 bits) + Padding + Length (384 bits) итого 1024 бита. Программа майнер выполняет операции, которые выполняются один раз и отправляет на плату 512 бит для обработки. Результатом будет 32 бита данных, рассчитанных за 64 раунда двух SHA256 модулей. А на счет благодетелей вопрос к тем, кто с этим уже разобрался или хочет разобраться, а не просто хоть что-нибудь написать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба И никто там такой хе.... не пишет как вы. А то герои накатают два листа текста и держат под подушкой. Жалко подсказать. Убудет ..вполне может и жалко людям, разве можно им в этом праве отказать? Вообще надо делать так - что то сделать самому, свой результат труда выложить на форум и (указывая пальчиком куда именно) сkазать что не нравится. А люди, может быть, что то и подскажут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jojo 0 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба ..вполне может и жалко людям, разве можно им в этом праве отказать? Вообще надо делать так - что то сделать самому, свой результат труда выложить на форум и (указывая пальчиком куда именно) сазать что не нравится. А люди, может быть, что то и подскажут. У меня должен был сохраниться исходник, поищу вечером. Помню что разобрался по трём страничкам в интернете https://bitcoin.stackexchange.com/questions...-really-solving https://en.bitcoin.it/wiki/Block_hashing_algorithm https://pastebin.com/bW3fQA2a Сейчас в ПЛИС просятся совсем другие коины.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jojo 0 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба Вот тест для блоков Bitcoin. 1.c.gz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RamZoom 0 4 июля, 2017 Опубликовано 4 июля, 2017 (изменено) · Жалоба Спасибо за файл! Но если не сложно и сможете ответить на несколько вопросов был бы вам очень благодарен. Итак начнем с начала... Стандарт FIPS-180-3 нам говорит о том, что нужно произвести предварительную подготовку, а именно дополнить значение до 512 бит, разделить сообщение на 8 32-х разрядных значений и проинициализировать начальное значение хэша. Если я все правильно понял первые два пункта нас не особо заботят, а полученные 512 бит записываются в строке unsigned int hash[8] {0xdc6a3b8d,0x0c69421a,0xcb1a5434,0xe536f7d5,0xc3c1b9e4,0x4cbb9b8f,0x95f0172e, 0xfc48d2df}; Далее необходимо подготовить последовательность блоков данных согласно формуле Wt. Насколько я понял за это отвечают строки for (i = 0; i < 16; i++) M = 0; M[0] = BSWAP32(0x871714dc); M[1] = BSWAP32(0x53058b35); M[2] = BSWAP32(0x19015f53); M[3] = BSWAP32(0x33087548); M[4] = 0x80000000; M[15] = 0x00000280; и вот здесь уже начинаются вопросы: почему они рассчитываются практически в конце выполнения алгоритма, а не после первоначальной инициализации для получения Wt? И почему они проинициализированы значениями 0x871714dc ..... Чуть выше по тексту в комментариях они присутствуют и на сколько я понял являются первыми значениями выполнения функции SHA256_Update? Что тоже не особо понятно SHA256_Update(&sha256_pass1, ((unsigned char*)&header)+64, sizeof(block_header)-64); /* data [0x0] 0x871714dc unsigned int - header.merkle_root, "871714dc... [0x1] 0x53058b35 unsigned int - header.timestamp = 0x53058b35; [0x2] 0x19015f53 unsigned int - header.bits = 0x19015f53; [0x3] 0x33087548 unsigned int - header.nonce = 856192328; */ Изменено 4 июля, 2017 пользователем RamZoom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jojo 0 4 июля, 2017 Опубликовано 4 июля, 2017 · Жалоба На 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 = 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, зависящие от счётчика. В общем, всё здесь есть, кмк, чтобы разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться