Bitcoin Forum
May 06, 2024, 04:35:49 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1] 2 »  All
  Print  
Author Topic: Алгоритм майнинга  (Read 11603 times)
Wizard109 (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 0


View Profile
September 06, 2011, 08:05:52 AM
 #1

Интересует собцтвенно сабж. Извиняюсь если где-то уже разжевано, не нашел Sad

Из того что есть:
1) Высосанный из пальца (найденный в исходниках Smiley ) алгоритм. Звучит так: "Взять 80 байт из data, в конце 4 байта нулей заменить nOnce'ом, получить из этих 80 байт sha256 и потом sha256 из полученного хеша. В результате должны быть нули в конце/начале(пофиг, нет ни-там ни-там) этого хеша количество/маска которых определяется target'ом"
2) Проблема: "блин я их уже и переворачивал под разными углами менял dword'ы обращал байты и бегал с шаманским бубном а нулей нету нигде !"
3) То на чем тренируюсь, т.е. подставляю nOnce 0x3f83a747 (вроде - как подобранный хеш, поправьте если не так):
Quote
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"}
1714970149
Hero Member
*
Offline Offline

Posts: 1714970149

View Profile Personal Message (Offline)

Ignore
1714970149
Reply with quote  #2

1714970149
Report to moderator
1714970149
Hero Member
*
Offline Offline

Posts: 1714970149

View Profile Personal Message (Offline)

Ignore
1714970149
Reply with quote  #2

1714970149
Report to moderator
1714970149
Hero Member
*
Offline Offline

Posts: 1714970149

View Profile Personal Message (Offline)

Ignore
1714970149
Reply with quote  #2

1714970149
Report to moderator
No Gods or Kings. Only Bitcoin
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714970149
Hero Member
*
Offline Offline

Posts: 1714970149

View Profile Personal Message (Offline)

Ignore
1714970149
Reply with quote  #2

1714970149
Report to moderator
ArsenShnurkov
Legendary
*
Offline Offline

Activity: 1386
Merit: 1000



View Profile
September 06, 2011, 08:29:58 AM
 #2

Quote
подставляю nOnce 0x3f83a747

насколько я понимаю, идея в том, чтобы подбирать (увеличивать на 1) nOnce так, чтобы нули в сумме суммы появились
Wizard109 (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 0


View Profile
September 06, 2011, 08:33:09 AM
 #3

Тот что подставляю по идее подобранный. Потому и подставляю, чтоб проверить работоспособность и увидеть нули вживую Smiley
Wizard109 (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 0


View Profile
September 06, 2011, 08:34:38 AM
 #4

За ссылку спасибо кстате. Сколько лазил - такого источника еще не находил
Lis
Sr. Member
****
Offline Offline

Activity: 292
Merit: 251


Spice must flow!


View Profile
September 06, 2011, 08:40:05 AM
 #5

# находим хеш заголовка блока
example http://blockexplorer.com/block/00000000000271de9d8b94afff543366e290e995f3e3e337bb86a0b7bf02e8d1

Code:
echo 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 Offline

Activity: 6
Merit: 0


View Profile
September 06, 2011, 09:12:03 AM
 #6

Эээээ.... ммммм.... может я как-то поподробнее...

От сервера получаю:

Quote
midstate
data
hash1
target
Насколько я понимаю midstate какбэ... не особо нужен, hash1 тоже (ну тоесть они может и нужны но необязательны).
Основные поля: data и target.

Что я делаю с data:
Отрезаю первые 80 байт и заменяю nOnce'ом. nOnce подбирается, но для проверки юзаю подобранный.
Получаю первый хеш из 80 байт поля data, а из него второй, из #длина_хеша получившегося хеша, короче:

Quote
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:
Quote
Hash1: 428b17dba1e66bc6396657fb251d210e392c46fa733b56a113e0b275eeda5ffa
Hash2: 1c06b25d3ec4c14a7cccb1b46df152261894fb1e741dd7be09cf3dd939ba92b8
2) Обратный порядок байт в Data:
Quote
Hash1: 86a122e771252b18f0a7c587305b171fe733eb5dcd848aadc42606c519bff7b4
Hash2: 59febd6e8cf7318509fc3c38887b7e8341905338c2766b6eab7aa9c0307bfe58
Wizard109 (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 0


View Profile
September 06, 2011, 11:17:00 AM
 #7

Хм. Почти два дня угробил на глупость.
Тот тест что я постил выше... ээээ... наверное не работает или тут как-то замешан midstate и иже с ним

Я много наслушался размышлений в стиле "чего - как попробовать попереворачивать", но...
Вобщем странникам идущим путем дзена предлагается решение:

Действительно нужно взять первые 80 байт от data. Потом нужно в цикле брать dword и "переворачивать". Нпример строка 0102030405060708 становится 0403020108070605. В конце должно быть какое-то количество нулей, их и нужно подбирать (так называемый nOnce). Собственно алгоритм простейший. Берешь data, нули которые есть в конце заменяешь своими значениями (0x00..0xffffffff) и делаешь два хеша: хеш из данных и хеш из хеша. Себе я добавил данные типа firstnonce и lastnonce чтобы перебирать в определенном диапазоне. В текущих тестовых данных firstnonce сразу же дает профит:

Quote
MyHASH1: 8d621e9e0ae4b0e4b1124ffde910a264bf97ecae507616b6a3b2d367cc676b60
MyHASH: ad488916f30ea7f25f8ef9659af7904c71dc58be13db5bb4a4feba5300000000


Тестовые данные (midstate, hash1 и пр. отбалды ибо я их не юзаю пока. Нужны только data и target):
Quote
#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 Offline

Activity: 292
Merit: 251


Spice must flow!


View Profile
September 06, 2011, 12:25:47 PM
Last edit: September 06, 2011, 02:47:57 PM by Lis
 #8

UPDATE

сделал дамп решения вот что вышло:

я получил задание на поиск блока 144209
Code:
{u'hash1': u'00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000', u'data': u'0000000159239d7d15fac20cd745a8216f73f3b3202522f1b73e49f0000009150000000073bb4e72c484cc9572356f0fe3fefd084d52e1f62c8b2cbf1ac1d40c49c054124e661e491a096fe300000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000', u'midstate': u'1bc7b4a768a626fbe999a4ff3959026384860d624123bb03e1156c521378c717', u'target': u'ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000'}

на что мой майнер ответил
Code:
0000000159239d7d15fac20cd745a8216f73f3b3202522f1b73e49f0000009150000000073bb4e72c484cc9572356f0fe3fefd084d52e1f62c8b2cbf1ac1d40c49c054124e661e491a096fe32e6b0a1d000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000

как ты и сказал самое главное это "data"
парсим:
Code:
полученное задание
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

из полученных данных собираем строку которую будем дабхешить
Code:
01000000 версия блока (revers)
7d9d23590cc2fa1521a845d7b3f3736ff1222520f0493eb71509000000000000 хеш предыдущего блока (revers)
724ebb7395cc84c40f6f357208fdfee3f6e1524dbf2c8b2c0cd4c11a1254c049 Merkle root (revers)
491e664e date (hex unix format) (revers)
e36f091a Difficulty он же Bits (revers)
1d0a6b2e Nonce (revers)

полученное дабхешим
Code:
echo 010000007d9d23590cc2fa1521a845d7b3f3736ff1222520f0493eb71509000000000000724ebb7395cc84c40f6f357208fdfee3f6e1524dbf2c8b2c0cd4c11a1254c049491e664ee36f091a1d0a6b2e | xxd -r -p | sha256sum -b | xxd -r -p | sha256sum -b

получаем
Code:
74d934fa48604f6f8132e790e3f6886002141d14a1d5993768987ae400000000
и если это число перевернуть оно меньше перевернутого заданного target
Code:
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000

т.е. 00000000e47a98683799d5a1141d14026088f6e390e732816f4f6048fa34d974 < 00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff

You would like to thank?
btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
Lis
Sr. Member
****
Offline Offline

Activity: 292
Merit: 251


Spice must flow!


View Profile
September 06, 2011, 02:48:05 PM
 #9

перенесите тему плз к кодерам

You would like to thank?
btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
Wizard109 (OP)
Newbie
*
Offline Offline

Activity: 6
Merit: 0


View Profile
September 06, 2011, 05:43:38 PM
 #10

Ок. Идем дальше, кто знает что есть hash1 и midstate ?
Я просто ближе к кернел-девелопменту чем к математике и.т.п.

Готовые кодесы есть конечно... первая стадия - прикрутить такой кодес (поэтому интересно, их тоже нужно по'dword'но приводить к юзабельному виду ?) но вообще-то хотелось бы разобраться.
Lis
Sr. Member
****
Offline Offline

Activity: 292
Merit: 251


Spice must flow!


View Profile
September 06, 2011, 06:30:16 PM
 #11

Ок. Идем дальше, кто знает что есть hash1 и midstate ?
Я просто ближе к кернел-девелопменту чем к математике и.т.п.

Готовые кодесы есть конечно... первая стадия - прикрутить такой кодес (поэтому интересно, их тоже нужно по'dword'но приводить к юзабельному виду ?) но вообще-то хотелось бы разобраться.
увы я пока далее не продвинулся =(

You would like to thank?
btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
yo-blin
Legendary
*
Offline Offline

Activity: 2296
Merit: 1057



View Profile
January 17, 2012, 11:41:35 AM
 #12

Вот чего я не понял
Пулл сразу уже знает какой № блока он майнит ?

                __mmW████████mms_
            ,gW███████████████████Ws_
          gW█████████████████████████Ws.
        g███████████████████████████████s
      ,W█████████████████████████████████W.
     i████~*█████████████████████████A~████s
    i█████  '*█████████████████████A`  █████s
   ,██████    'M█████████████████A~    ██████i
   d██████      'M█████████████A~      ██████W
   ███████        'M█████████A~        ███████.
   ███████          'M█████A~          ███████[
   ███████     W_     'M█Af     ,W     ███████[
   ███████     ██W_     ~     ,W██     ███████`
   Y██████     ████W_       ,W████     ██████A
   '▀▀▀▀▀▀     ██████W.   ,m██████     ▀▀▀▀▀▀`
               ████████W_m████████
               ███████████████████.
      V███████████████████████████████████f
       '*███████████████████████████████A`
         '*███████████████████████████*`
            ~*█████████████████████*f`
               ~~*█████████████*f~
                      ~~~~~
..........

Monero (XMR)
ДОБРО ПОЖАЛОВАТЬ В РУССКОЯЗЫЧНОЕ СООБЩЕСТВО
.форум..telegram..youtube.
..........

.DON'T BUY MONERO,.
.IT'S BAD FOR BANKS...

Sign for rent, СОБИРАЮ МЕRIT! Smiley

NVC: 4YoBLincaRdAEG4v8tbZ4T26ZnKbT9SBsu
LZ
Legendary
*
Offline Offline

Activity: 1722
Merit: 1072


P2P Cryptocurrency


View Profile
January 17, 2012, 01:29:42 PM
 #13

В каждом блоке есть хеш предыдущего блока. Это цепочка.

My OpenPGP fingerprint: 5099EB8C0F2E68C63B4ECBB9A9D0993E04143362
yo-blin
Legendary
*
Offline Offline

Activity: 2296
Merit: 1057



View Profile
January 17, 2012, 01:35:47 PM
 #14

созданного тем же самым пуллом ?

                __mmW████████mms_
            ,gW███████████████████Ws_
          gW█████████████████████████Ws.
        g███████████████████████████████s
      ,W█████████████████████████████████W.
     i████~*█████████████████████████A~████s
    i█████  '*█████████████████████A`  █████s
   ,██████    'M█████████████████A~    ██████i
   d██████      'M█████████████A~      ██████W
   ███████        'M█████████A~        ███████.
   ███████          'M█████A~          ███████[
   ███████     W_     'M█Af     ,W     ███████[
   ███████     ██W_     ~     ,W██     ███████`
   Y██████     ████W_       ,W████     ██████A
   '▀▀▀▀▀▀     ██████W.   ,m██████     ▀▀▀▀▀▀`
               ████████W_m████████
               ███████████████████.
      V███████████████████████████████████f
       '*███████████████████████████████A`
         '*███████████████████████████*`
            ~*█████████████████████*f`
               ~~*█████████████*f~
                      ~~~~~
..........

Monero (XMR)
ДОБРО ПОЖАЛОВАТЬ В РУССКОЯЗЫЧНОЕ СООБЩЕСТВО
.форум..telegram..youtube.
..........

.DON'T BUY MONERO,.
.IT'S BAD FOR BANKS...

Sign for rent, СОБИРАЮ МЕRIT! Smiley

NVC: 4YoBLincaRdAEG4v8tbZ4T26ZnKbT9SBsu
LZ
Legendary
*
Offline Offline

Activity: 1722
Merit: 1072


P2P Cryptocurrency


View Profile
January 17, 2012, 03:13:30 PM
Last edit: January 17, 2012, 03:48:06 PM by lzsaver
 #15

Любым пулом или соломайнером. Если будет создано два блока с одинаковым
хешем предыдущего блока, то в цепочке сохранится только тот блок, с хешем
которого будет создан следующий, то есть эта цепочка будет сильнее другой.
Трансакции же из мертвой цепочки не пропадут, а будут занесены в сильную
цепочку, по крайней мере - если сплит сети не длился дольше 100 блоков. Smiley

Если нужны технические подробности, то рекомендую изучить код PyMiner. Smiley

My OpenPGP fingerprint: 5099EB8C0F2E68C63B4ECBB9A9D0993E04143362
btcsec
Hero Member
*****
Offline Offline

Activity: 803
Merit: 593


BITS.MEDIA


View Profile WWW
January 25, 2012, 04:55:10 PM
 #16

http://bitcoinmedia.com/proof-of-work-exposed/ кто что думает?

Bits.media - криптовалюты и блокчейн по-русски
Ninazu
Newbie
*
Offline Offline

Activity: 58
Merit: 0



View Profile
February 23, 2012, 03:33:34 PM
 #17

Что-то прояснилось по поводу midstate и hash1?

Code:
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 Offline

Activity: 292
Merit: 251


Spice must flow!


View Profile
February 24, 2012, 06:52:54 AM
 #18

Вопрос номер 2.
Если допустим считать хеш отнимая Nonce. От FFFFFFFF ->0. Мы найдём решение которое удовлетворит маску. Примет ли его система? Ведь по сути оно будет больше чем решение которое найдёт другой майнер, который будет считать от нуля
сравнивается не nonce а хеш если твой хеш найден быстрее или он сильнее (значительно меньше target) то сеть примет твой блок. Nonce можно перебирать хоть методом random()

You would like to thank?
btc: 14tAPpwzrfZqBeFVvfBZHiBdByYhsoFofn
SHawk
Sr. Member
****
Offline Offline

Activity: 658
Merit: 250


View Profile
March 15, 2012, 08:54:42 PM
 #19

Что-то прояснилось по поводу midstate и hash1?



Алгоритм хэширования работает с блоками по 512 бит. Результат хеширования - 256 бит. Алгоритм спроектирован так, что каждый блок он обрабатывает последовательно, модифицируя при этом хэш, накопившийся от обработки предыдущих блоков.
Поскольку перебираемый нонс находится в последнем блоке, то нет смысла для каждого нонса хешировать все с самого начала. Хэшируется только последний блок (data), в который вставляется каждый раз новый нонс. А вот результат хэширования всех предыдущих блоков передается майнеру в поле midstate. Именно это значение используется для инициализации хэш-функции на первой итерации перебора, что эквивалентно повторению процедуры хеширования от начала данных...
Balthazar
Legendary
*
Offline Offline

Activity: 3108
Merit: 1358



View Profile
April 07, 2012, 08:49:49 AM
 #20

midstate и hash1 это deprecated параметры и сегодня они не используются, передаются для совместимости.
Pages: [1] 2 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!