Wizard109 (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
September 06, 2011, 08:05:52 AM |
|
Интересует собцтвенно сабж. Извиняюсь если где-то уже разжевано, не нашел Из того что есть: 1) Высосанный из пальца (найденный в исходниках ) алгоритм. Звучит так: "Взять 80 байт из data, в конце 4 байта нулей заменить nOnce'ом, получить из этих 80 байт sha256 и потом sha256 из полученного хеша. В результате должны быть нули в конце/начале(пофиг, нет ни-там ни-там) этого хеша количество/маска которых определяется target'ом" 2) Проблема: "блин я их уже и переворачивал под разными углами менял dword'ы обращал байты и бегал с шаманским бубном а нулей нету нигде !" 3) То на чем тренируюсь, т.е. подставляю nOnce 0x3f83a747 (вроде - как подобранный хеш, поправьте если не так): Server: nginx/1.0.4 Date: Tue, 30 Aug 2011 23:11:04 GMT Content-Type: application/json; charset=utf-8 Connection: keep-alive X-Host-List: [{"host":"f1.deepbit.net","port":8332,"ttr":0},{"host":"f2.deepbit.net","port":8332,"ttr":10}] Expires: Tue, 30 Aug 2011 23:10:56 UTC Content-Length: 593 Cache-Control: no-cache, private, no-store Pragma: no-cache X-Long-Polling: /listenChannel X-Lift-Version: 2.3
{"result":{"midstate":"7598823b94e6048777a5f455d4fc04789fefb53fd3bf889b81b66235ef793ab6","data":"0000000195aceed772ae59178621bfd3079e20b50c9681a6c1fed72900000605000000007db50c1 ed21f3c24394105aa1a0e50a9352c7eee7e36423fc8d38be1e45383ea4e5d6ddb1a096fe3000000 0000000080000000000000000000000000000000000000000000000000000000000000000000000 0000000000080020000","hash1":"0000000000000000000000000000000000000000000000000000000000000000000000800000000 0000000000000000000000000000000000000000000010000","target":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000"},"error":null,"id":"1"}POST / HTTP/1.1 Connection: Keep-Alive Content-Length: 302 Host: pit.deepbit.net:8332 Content-Type: application/json Authorization: Basic Z29wb2NvZGVyQHlhbmRleC5ydV8wOmhndGg= User-Agent: phoenix/v1.6.2
{"params": ["0000000195aceed772ae59178621bfd3079e20b50c9681a6c1fed7290000060500000000ccb1b4d 570c89f509d6196fad47dc91cd648bd2dbb08dac13d9860cf95ac8d584e5d6dd91a096fe33f83a7 4700000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000"], "method": "getwork", "id": 1}HTTP/1.1 200 OK Server: nginx/1.0.4 Date: Tue, 30 Aug 2011 23:15:50 GMT Content-Type: application/json; charset=utf-8 Connection: keep-alive X-Host-List: [{"host":"f1.deepbit.net","port":8332,"ttr":0},{"host":"f2.deepbit.net","port":8332,"ttr":10}] Expires: Tue, 30 Aug 2011 23:15:42 UTC Content-Length: 37 Cache-Control: no-cache, private, no-store Pragma: no-cache X-Long-Polling: /listenChannel X-Lift-Version: 2.3
{"result":true,"error":null,"id":"1"}
|
|
|
|
ArsenShnurkov
Legendary
Offline
Activity: 1386
Merit: 1000
|
|
September 06, 2011, 08:29:58 AM |
|
подставляю nOnce 0x3f83a747 насколько я понимаю, идея в том, чтобы подбирать (увеличивать на 1) nOnce так, чтобы нули в сумме суммы появились
|
|
|
|
Wizard109 (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
September 06, 2011, 08:33:09 AM |
|
Тот что подставляю по идее подобранный. Потому и подставляю, чтоб проверить работоспособность и увидеть нули вживую
|
|
|
|
Wizard109 (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
September 06, 2011, 08:34:38 AM |
|
За ссылку спасибо кстате. Сколько лазил - такого источника еще не находил
|
|
|
|
Lis
Sr. Member
Offline
Activity: 293
Merit: 251
Spice must flow!
|
|
September 06, 2011, 08:40:05 AM |
|
# находим хеш заголовка блока example http://blockexplorer.com/block/00000000000271de9d8b94afff543366e290e995f3e3e337bb86a0b7bf02e8d1echo 010000008d42cab4b755d6e9f01ffe2d1ec8391325dfa2e1a8dc584ec0480100000000001d4575ddc877b25dd9b91284cedec424fbc7a583964f223ef8c4707410bcfe72614a574d5285021b0dd2aa13 | xxd -r -p | sha256sum -b | xxd -r -p | sha256sum -b
получим перевернутый результат хеша блока d1e802bfb7a086bb37e3e3f395e990e2663354ffaf948b9dde71020000000000 заголовок блока разбираем на запчасти "ver revers" 01000000 "prev_block revers" 8d42cab4b755d6e9f01ffe2d1ec8391325dfa2e1a8dc584ec048010000000000 "mrkl_root revers" 1d4575ddc877b25dd9b91284cedec424fbc7a583964f223ef8c4707410bcfe72 "time revers" 614a574d "bits(~target) revers" 5285021b "nonce revers" 0dd2aa13 revers значит перевернут побайтно "nonce revers" 0dd2aa13 => 13aad20d
|
You would like to thank? btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
|
|
|
Wizard109 (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
September 06, 2011, 09:12:03 AM |
|
Эээээ.... ммммм.... может я как-то поподробнее... От сервера получаю: midstate data hash1 target
Насколько я понимаю midstate какбэ... не особо нужен, hash1 тоже (ну тоесть они может и нужны но необязательны). Основные поля: data и target. Что я делаю с data: Отрезаю первые 80 байт и заменяю nOnce'ом. nOnce подбирается, но для проверки юзаю подобранный. Получаю первый хеш из 80 байт поля data, а из него второй, из #длина_хеша получившегося хеша, короче: char Hash[HASH_SIZE]; Sha256.GetHash(sha2::enuSHA256, (sha_byte*)&Data, sizeof(Data)); const char *RawHash = Sha256.RawHash(dwHashLen); memcpy(&Hash, RawHash, dwHashLen); Sha256.GetHash(sha2::enuSHA256, (sha_byte*)&Hash, dwHashLen) Тест провален. Мои результаты: 1) Прямой порядок байт в Data: Hash1: 428b17dba1e66bc6396657fb251d210e392c46fa733b56a113e0b275eeda5ffa Hash2: 1c06b25d3ec4c14a7cccb1b46df152261894fb1e741dd7be09cf3dd939ba92b8 2) Обратный порядок байт в Data: Hash1: 86a122e771252b18f0a7c587305b171fe733eb5dcd848aadc42606c519bff7b4 Hash2: 59febd6e8cf7318509fc3c38887b7e8341905338c2766b6eab7aa9c0307bfe58
|
|
|
|
Wizard109 (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
September 06, 2011, 11:17:00 AM |
|
Хм. Почти два дня угробил на глупость. Тот тест что я постил выше... ээээ... наверное не работает или тут как-то замешан midstate и иже с ним Я много наслушался размышлений в стиле "чего - как попробовать попереворачивать", но... Вобщем странникам идущим путем дзена предлагается решение: Действительно нужно взять первые 80 байт от data. Потом нужно в цикле брать dword и "переворачивать". Нпример строка 0102030405060708 становится 0403020108070605. В конце должно быть какое-то количество нулей, их и нужно подбирать (так называемый nOnce). Собственно алгоритм простейший. Берешь data, нули которые есть в конце заменяешь своими значениями (0x00..0xffffffff) и делаешь два хеша: хеш из данных и хеш из хеша. Себе я добавил данные типа firstnonce и lastnonce чтобы перебирать в определенном диапазоне. В текущих тестовых данных firstnonce сразу же дает профит: MyHASH1: 8d621e9e0ae4b0e4b1124ffde910a264bf97ecae507616b6a3b2d367cc676b60 MyHASH: ad488916f30ea7f25f8ef9659af7904c71dc58be13db5bb4a4feba5300000000
Тестовые данные (midstate, hash1 и пр. отбалды ибо я их не юзаю пока. Нужны только data и target): #define BITCOIN_TEST_DATA "{\"id\": \"26fffdfe-3890-11e0-8d10-fefd6d4ac335\", \"result\": {\"hash1\":\"0000000000000000000000000000000000000000000000000000000000000000000000800000000 0000000000000000000000000000000000000000000010000\", ""\"data\": \"00000001e5b5979c98525e7bdde6bc8a4ba5d64ac0acbd7f501f474500000a0b00000000391393c 3c94aacbb837347074f6e4fd62aa861536b1db5404f4a8441e214c29e4e051fdb1a0c2a12000000 0000000080000000000000000000000000000000000000000000000000000000000000000000000 0000000000080020000\", ""\"midstate\": \"7598823b94e6048777a5f455d4fc04789fefb53fd3bf889b81b66235ef793ab6\", ""\"target\": \"ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000\", \"firstnonce\":\"1734B7F4\", \"lastnonce\":\"1734B837\"}, \"error\": null}"
|
|
|
|
Lis
Sr. Member
Offline
Activity: 293
Merit: 251
Spice must flow!
|
|
September 06, 2011, 12:25:47 PM Last edit: September 06, 2011, 02:47:57 PM by Lis |
|
UPDATE сделал дамп решения вот что вышло: я получил задание на поиск блока 144209 {u'hash1': u'00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000', u'data': u'0000000159239d7d15fac20cd745a8216f73f3b3202522f1b73e49f0000009150000000073bb4e72c484cc9572356f0fe3fefd084d52e1f62c8b2cbf1ac1d40c49c054124e661e491a096fe300000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000', u'midstate': u'1bc7b4a768a626fbe999a4ff3959026384860d624123bb03e1156c521378c717', u'target': u'ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000'}
на что мой майнер ответил 0000000159239d7d15fac20cd745a8216f73f3b3202522f1b73e49f0000009150000000073bb4e72c484cc9572356f0fe3fefd084d52e1f62c8b2cbf1ac1d40c49c054124e661e491a096fe32e6b0a1d000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
как ты и сказал самое главное это "data" парсим: полученное задание 00000001 версия блока из частичек 59239d7d 15fac20c d745a821 6f73f3b3 202522f1 b73e49f0 00000915 00000000 собираем 0000000000000915b73e49f0202522f16f73f3b3d745a82115fac20c59239d7d что есть хеш блока 144208 73bb4e72 c484cc95 72356f0f e3fefd08 4d52e1f6 2c8b2cbf 1ac1d40c 49c05412 Merkle root пересоберем так же в 49c054121ac1d40c2c8b2cbf4d52e1f6e3fefd0872356f0fc484cc9573bb4e72 4e661e49 date (hex unix format) 1a096fe3 Difficulty он же Bits 00000000 Nonce 000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
отправленное решение 00000001 версия блока 59239d7d15fac20cd745a8216f73f3b3202522f1b73e49f00000091500000000 73bb4e72c484cc9572356f0fe3fefd084d52e1f62c8b2cbf1ac1d40c49c05412 4e661e49 date (hex unix format) 1a096fe3 Difficulty он же Bits 2e6b0a1d Nonce 000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
из полученных данных собираем строку которую будем дабхешить 01000000 версия блока (revers) 7d9d23590cc2fa1521a845d7b3f3736ff1222520f0493eb71509000000000000 хеш предыдущего блока (revers) 724ebb7395cc84c40f6f357208fdfee3f6e1524dbf2c8b2c0cd4c11a1254c049 Merkle root (revers) 491e664e date (hex unix format) (revers) e36f091a Difficulty он же Bits (revers) 1d0a6b2e Nonce (revers)
полученное дабхешим echo 010000007d9d23590cc2fa1521a845d7b3f3736ff1222520f0493eb71509000000000000724ebb7395cc84c40f6f357208fdfee3f6e1524dbf2c8b2c0cd4c11a1254c049491e664ee36f091a1d0a6b2e | xxd -r -p | sha256sum -b | xxd -r -p | sha256sum -b
получаем 74d934fa48604f6f8132e790e3f6886002141d14a1d5993768987ae400000000
и если это число перевернуть оно меньше перевернутого заданного target ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
т.е. 00000000e47a98683799d5a1141d14026088f6e390e732816f4f6048fa34d974 < 00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
You would like to thank? btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
|
|
|
Lis
Sr. Member
Offline
Activity: 293
Merit: 251
Spice must flow!
|
|
September 06, 2011, 02:48:05 PM |
|
перенесите тему плз к кодерам
|
You would like to thank? btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
|
|
|
Wizard109 (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
September 06, 2011, 05:43:38 PM |
|
Ок. Идем дальше, кто знает что есть hash1 и midstate ? Я просто ближе к кернел-девелопменту чем к математике и.т.п.
Готовые кодесы есть конечно... первая стадия - прикрутить такой кодес (поэтому интересно, их тоже нужно по'dword'но приводить к юзабельному виду ?) но вообще-то хотелось бы разобраться.
|
|
|
|
Lis
Sr. Member
Offline
Activity: 293
Merit: 251
Spice must flow!
|
|
September 06, 2011, 06:30:16 PM |
|
Ок. Идем дальше, кто знает что есть hash1 и midstate ? Я просто ближе к кернел-девелопменту чем к математике и.т.п.
Готовые кодесы есть конечно... первая стадия - прикрутить такой кодес (поэтому интересно, их тоже нужно по'dword'но приводить к юзабельному виду ?) но вообще-то хотелось бы разобраться.
увы я пока далее не продвинулся =(
|
You would like to thank? btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
|
|
|
yo-blin
Legendary
Offline
Activity: 2296
Merit: 1057
|
|
January 17, 2012, 11:41:35 AM |
|
Вот чего я не понял Пулл сразу уже знает какой № блока он майнит ?
|
Sign for rent, СОБИРАЮ МЕRIT! NVC: 4 YoBLincaRdAEG4v8tbZ4T26ZnKbT9SBsu
|
|
|
LZ
Legendary
Offline
Activity: 1722
Merit: 1072
P2P Cryptocurrency
|
|
January 17, 2012, 01:29:42 PM |
|
В каждом блоке есть хеш предыдущего блока. Это цепочка.
|
My OpenPGP fingerprint: 5099EB8C0F2E68C63B4ECBB9A9D0993E04143362
|
|
|
yo-blin
Legendary
Offline
Activity: 2296
Merit: 1057
|
|
January 17, 2012, 01:35:47 PM |
|
созданного тем же самым пуллом ?
|
Sign for rent, СОБИРАЮ МЕRIT! NVC: 4 YoBLincaRdAEG4v8tbZ4T26ZnKbT9SBsu
|
|
|
LZ
Legendary
Offline
Activity: 1722
Merit: 1072
P2P Cryptocurrency
|
|
January 17, 2012, 03:13:30 PM Last edit: January 17, 2012, 03:48:06 PM by lzsaver |
|
Любым пулом или соломайнером. Если будет создано два блока с одинаковым хешем предыдущего блока, то в цепочке сохранится только тот блок, с хешем которого будет создан следующий, то есть эта цепочка будет сильнее другой. Трансакции же из мертвой цепочки не пропадут, а будут занесены в сильную цепочку, по крайней мере - если сплит сети не длился дольше 100 блоков. Если нужны технические подробности, то рекомендую изучить код PyMiner.
|
My OpenPGP fingerprint: 5099EB8C0F2E68C63B4ECBB9A9D0993E04143362
|
|
|
btcsec
|
|
January 25, 2012, 04:55:10 PM |
|
|
|
|
|
Ninazu
Newbie
Offline
Activity: 58
Merit: 0
|
|
February 23, 2012, 03:33:34 PM |
|
Что-то прояснилось по поводу midstate и hash1? this.tryHash = function(midstate, half, data, hash1, target, nonce){ data[3] = nonce; this.sha.reset();
var h0 = this.sha.update(midstate, data).state; // compute first hash for (var i = 0; i < 8; i++) hash1[i] = h0[i]; // place it in the h1 holder this.sha.reset(); // reset to initial state var h = this.sha.update(hash1).state; // compute final hash if (h[7] == 0) { var ret = []; for (var i = 0; i < half.length; i++) ret.push(half[i]); for (var i = 0; i < data.length; i++) ret.push(data[i]); return ret; } else return null; }; Вот такую штуку нарыл. Может она сможет разъяснить Вопрос номер 2. Если допустим считать хеш отнимая Nonce. От FFFFFFFF ->0. Мы найдём решение которое удовлетворит маску. Примет ли его система? Ведь по сути оно будет больше чем решение которое найдёт другой майнер, который будет считать от нуля
|
|
|
|
Lis
Sr. Member
Offline
Activity: 293
Merit: 251
Spice must flow!
|
|
February 24, 2012, 06:52:54 AM |
|
Вопрос номер 2. Если допустим считать хеш отнимая Nonce. От FFFFFFFF ->0. Мы найдём решение которое удовлетворит маску. Примет ли его система? Ведь по сути оно будет больше чем решение которое найдёт другой майнер, который будет считать от нуля
сравнивается не nonce а хеш если твой хеш найден быстрее или он сильнее (значительно меньше target) то сеть примет твой блок. Nonce можно перебирать хоть методом random()
|
You would like to thank? btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
|
|
|
SHawk
|
|
March 15, 2012, 08:54:42 PM |
|
Что-то прояснилось по поводу midstate и hash1?
Алгоритм хэширования работает с блоками по 512 бит. Результат хеширования - 256 бит. Алгоритм спроектирован так, что каждый блок он обрабатывает последовательно, модифицируя при этом хэш, накопившийся от обработки предыдущих блоков. Поскольку перебираемый нонс находится в последнем блоке, то нет смысла для каждого нонса хешировать все с самого начала. Хэшируется только последний блок (data), в который вставляется каждый раз новый нонс. А вот результат хэширования всех предыдущих блоков передается майнеру в поле midstate. Именно это значение используется для инициализации хэш-функции на первой итерации перебора, что эквивалентно повторению процедуры хеширования от начала данных...
|
|
|
|
Balthazar
Legendary
Offline
Activity: 3108
Merit: 1359
|
|
April 07, 2012, 08:49:49 AM |
|
midstate и hash1 это deprecated параметры и сегодня они не используются, передаются для совместимости.
|
|
|
|
|