Bitcoin Forum

Local => Новички => Topic started by: Grumlin on March 29, 2013, 05:40:44 PM



Title: Генерация хеша
Post by: Grumlin on March 29, 2013, 05:40:44 PM
Люди, кому не лень, объясните пожалуйста, желательно на пальцах, каким образом происходит генерация хеша?
из литературы
Quote
Созданный блок будет принят остальными пользователями только в том случае, если SHA-256 хэш заголовка равен или ниже определенной цели, которая вычисляется из параметра bits. Например, если значение bits 0x1a0115cb, то целью является 0x0115cb * 2**(8*(0x1a - 3)) = 0x0000000000000115cb0000000000000000000000000000000000000000000000. Максимально возможная цель (то есть минимальная сложность) определяется значением bits 0x1d00ffff.
Quote
Как система проверки правильности решения (правильности найденного блока) помогает безопасности Bitcoin?

Чтоб понять идею процесса майнинга, давайте рассмотрим вот это:

 полезная нагрузка = <некоторые данные, касательно событий происходящих в Bitcoin сети>
 nonce = 1
 hash = SHA2( SHA2( полезная нагрузка + nonce ) )

Работа, производимая майнером (добытчиком) заключается в постоянном увеличении значения "nonce" до тех пор пока хэш-функция не выдаст значение, которое обладает очень редким свойством: оно должно быть меньше чем определённое пороговое значение. (Другими словами: Хэш значение должно "начинаться с определённого количества нулей", если вы рассматриваете хэш в представлении с фиксированной длиной то именно так это формулируется)

Как можно увидеть, в результате майнинга мы ничего такого особенного не вычисляем. Мы просто пытаемся найти число (называемое "nonce") которое, будучи добавленным к полезной нагрузке даст в результате вычисления хэш функции результат с определёнными свойствами.
не совсем допонимаю, как же все таки этот хеш мы высчитываем, и как высчитывается сложность?


Title: Re: Генерация хеша
Post by: Vicus on March 29, 2013, 05:43:40 PM
Насчет хеша: http://ru.wikipedia.org/wiki/SHA-2


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 29, 2013, 05:53:50 PM
не совсем допонимаю, как же все таки этот хеш мы высчитываем, и как высчитывается сложность?

По хэшу:
Берем [ПредыдущийХэш]+[Нонс].
Хэшируем с помощью SHA256 2 раза: SHA256(SHA256([ПредыдущийХэш]+[Нонс])).
Считаем сколько ноликов впереди.
Если ноликов достаточно много, то мы нашли нужный Нонс, иначе подставляем другой Нонс (обычно предыдущий увеличиваем на 1).

По сложности:
Смотрим за сколько минут в среднем находится Нонс.
Меняем требование на число ноликов так, чтобы в среднем было 10 минут.


Title: Re: Генерация хеша
Post by: Grumlin on March 29, 2013, 06:06:30 PM
не совсем допонимаю, как же все таки этот хеш мы высчитываем, и как высчитывается сложность?

По хэшу:
Берем [ПредыдущийХэш]+[Нонс].
Хэшируем с помощью SHA256 2 раза: SHA256(SHA256([ПредыдущийХэш]+[Нонс])).
Считаем сколько ноликов впереди.
Если ноликов достаточно много, то мы нашли нужный Нонс, иначе подставляем другой Нонс (обычно предыдущий увеличиваем на 1).

По сложности:
Смотрим за сколько минут в среднем находится Нонс.
Меняем требование на число ноликов так, чтобы в среднем было 10 минут.
как то не совсем описана, считаем количество ноликов. это прикольно, а если математически, то как?

плюс ещё, Берем [ПредыдущийХэш]+[Нонс], мы что делаем, записываем в строку "хеш+число" и от этой строки находим хеш, либо мы к предыдыщему хешу както математически прибавляем нонс?

про сложность я имел ввиду, как она вообще щитается? т.е. откуда само число появляется? и как мы определяем, что хеш соответствует сложности?


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 29, 2013, 06:31:52 PM
как то не совсем описана, считаем количество ноликов. это прикольно, а если математически, то как?

плюс ещё, Берем [ПредыдущийХэш]+[Нонс], мы что делаем, записываем в строку "хеш+число" и от этой строки находим хеш, либо мы к предыдыщему хешу както математически прибавляем нонс?

про сложность я имел ввиду, как она вообще щитается? т.е. откуда само число появляется? и как мы определяем, что хеш соответствует сложности?

256 битов, полученных с помощью SHA256, являются 256-битным числом. Оно должно быть меньше определенного значения, зависящего от сложности. Больше сложность - меньше значение. Это если без подсчета ноликов.

[ПредыдущийХэш]+[Нонс] по сути записываем в строку. Хотя там не только эти 2 значения.

Сложность считается так - берем среднее значение времени, за которое были найдены нонсы последних блоков. Предположим, получили 5 минут. Значит сложность надо увеличить в 2 раза.


Title: Re: Генерация хеша
Post by: naima53 on March 29, 2013, 06:37:36 PM

Сложность считается так - берем среднее значение времени, за которое были найдены нонсы последних блоков. Предположим, получили 5 минут. Значит сложность надо увеличить в 2 раза.
А если время ускорилось?  ::)


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 29, 2013, 06:43:00 PM

Сложность считается так - берем среднее значение времени, за которое были найдены нонсы последних блоков. Предположим, получили 5 минут. Значит сложность надо увеличить в 2 раза.
А если время ускорилось?  ::)

Это если время ускорилось. Если, к примеру, стало 20 минут, то сложность надо уменьшить в 2 раза.


Title: Re: Генерация хеша
Post by: naima53 on March 29, 2013, 06:48:29 PM
Это если время ускорилось. Если, к примеру, стало 20 минут, то сложность надо уменьшить в 2 раза.
Так, а что является источником времени? Среднее время, выставленное на машинах нод?


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 29, 2013, 06:52:57 PM
Это если время ускорилось. Если, к примеру, стало 20 минут, то сложность надо уменьшить в 2 раза.
Так, а что является источником времени? Среднее время, выставленное на машинах нод?

Timestamp в блоках.


Title: Re: Генерация хеша
Post by: naima53 on March 29, 2013, 06:55:59 PM
Это если время ускорилось. Если, к примеру, стало 20 минут, то сложность надо уменьшить в 2 раза.
Так, а что является источником времени? Среднее время, выставленное на машинах нод?

Timestamp в блоках.
А там откуда берется?


Title: Re: Генерация хеша
Post by: Grumlin on March 29, 2013, 06:59:28 PM
[ПредыдущийХэш]+[Нонс] по сути записываем в строку. Хотя там не только эти 2 значения.
не путайте меня и людей, это операция сложения


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 29, 2013, 06:59:45 PM
Это если время ускорилось. Если, к примеру, стало 20 минут, то сложность надо уменьшить в 2 раза.
Так, а что является источником времени? Среднее время, выставленное на машинах нод?

Timestamp в блоках.
А там откуда берется?

Записывает майнер. Особо не помухлюет, потому что блоки с очень большим расхождением между реальным временем и заявленным игнорируются.


Title: Re: Генерация хеша
Post by: naima53 on March 29, 2013, 07:02:00 PM
Это если время ускорилось. Если, к примеру, стало 20 минут, то сложность надо уменьшить в 2 раза.
Так, а что является источником времени? Среднее время, выставленное на машинах нод?

Timestamp в блоках.
А там откуда берется?

Записывает майнер. Особо не помухлюет, потому что блоки с очень большим расхождением между реальным временем и заявленным игнорируются.
Что есть "реальным"? Статистика (среднее) по всем майнерам?
Иными словами Вы хотите сказать что у нас полная привязка к системной дате юзеров майнеров (хоть и распределенная) ?


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 29, 2013, 07:03:56 PM
Что есть "реальным"? Статистика (среднее) по всем майнерам?
Иными словами Вы хотите сказать что у нас полная привязка к системной дате юзеров майнеров (хоть и распределенная) ?

Реальное для каждого майнера свое. То, которые выставлено на компе.


Title: Re: Генерация хеша
Post by: Balthazar on March 29, 2013, 08:06:45 PM
Ё-мое, как можно не понимать таких вещей)

В качестве времени в сети используется значение, расчитываемое на базе локальногомвремени нод с отбросом неправдоподобно расходящихся значений. От него и должны плясать таймстампы, если сильно отличается (в биткоине "сильно" это 7200 секунд), то блок отклоняется.


Title: Re: Генерация хеша
Post by: gades on March 29, 2013, 08:12:42 PM
De-decentralization of Bitcoin
The Bitcoin Confiscation Of April 5, 2013

Интересны ссылки у вас в подписи :)


Title: Re: Генерация хеша
Post by: naima53 on March 29, 2013, 08:56:36 PM
Ё-мое, как можно не понимать таких вещей)
Я вот подумал гипотетически если все ноды ускорят время одновременно в 10 раз(не переведут стрелки а именно ускорят), то мы будем иметь в 10 раз снижение сложности?


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 29, 2013, 08:58:37 PM
Ё-мое, как можно не понимать таких вещей)
Я вот подумал гипотетически если все ноды ускорят время одновременно в 10 раз(не переведут стрелки а именно ускорят), то мы будем иметь в 10 раз снижение сложности?

Тогда им проще договориться, что сложность просто надо считать опять равной 1.


Title: Re: Генерация хеша
Post by: WhiteShum on March 29, 2013, 09:05:42 PM
De-decentralization of Bitcoin
The Bitcoin Confiscation Of April 5, 2013

Интересны ссылки у вас в подписи :)

А если подумать головой и поискать что это был за закон,то все фантазии сразу отпадут  :-\

п.с. когда обороты битков достигнут Х,то он может и останется децентрализованным,в чем я сомневаюсь на 99%,частично будет анонимным,
но будет подконтролен "уолл-стрит",никаких очередных теорий заговора,просто бизнес.


Title: Re: Генерация хеша
Post by: Grumlin on March 29, 2013, 09:13:11 PM
интересует вопрос, есть блок https://blockchain.info/block/00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048, если взять, предыдущий хеш, взять нонсе(перевести её в 16 систему), приплюсовать их, потом взять два раза sha 256, нифига не получается следующий хеш. Кто нибудь объяснит мне, откуда что берется?


Title: Re: Генерация хеша
Post by: needbmw on March 29, 2013, 09:17:07 PM
https://en.bitcoin.it/wiki/Block_hashing_algorithm

Bitcoin uses: SHA256(SHA256(Block_Header)) but you have to be careful about byte-order.


Title: Re: Генерация хеша
Post by: Grumlin on March 29, 2013, 09:29:10 PM
https://en.bitcoin.it/wiki/Block_hashing_algorithm

Bitcoin uses: SHA256(SHA256(Block_Header)) but you have to be careful about byte-order.
спасибо большое, наконецто разобрался


Title: Re: Генерация хеша
Post by: Grumlin on March 30, 2013, 03:38:46 PM
остался лишь маленький вопрос, откуда берется time???
в пояснении написано: Current timestamp as seconds since 1970-01-01T00:00 UTC
т.е. получается что, при генерации блока таймстемп меняется одновременно с нонс? т.е. в генерации у нас участвует не 1, а две переменные???


Title: Re: Генерация хеша
Post by: andervol on March 30, 2013, 04:10:32 PM
Дата не влияет на искомый хеш. Она просто запечатывается в блок.


Title: Re: Генерация хеша
Post by: Balthazar on March 30, 2013, 04:24:14 PM
Вообще-то влияет. По этой причине нельзя точно сказать дату создания блока, потому что прописанная на момент создания блока уже в прошлом.


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 30, 2013, 06:20:35 PM
остался лишь маленький вопрос, откуда берется time???
в пояснении написано: Current timestamp as seconds since 1970-01-01T00:00 UTC
т.е. получается что, при генерации блока таймстемп меняется одновременно с нонс? т.е. в генерации у нас участвует не 1, а две переменные???

Нет. Можно задать дату один раз и не менять пока не пробежишь все 4 миллиарда вариантов нонса.


Title: Re: Генерация хеша
Post by: arruah on March 31, 2013, 03:57:31 AM
Теперь объясните откуда берется комиссия? Раньше я при отправке на сатошидайс всегда платили 0.0005 биткоина теперь же удача чтобы такую маленькую комиссию запрашивала. Я не пойму механизма как он высчитывает комиссию?


Title: Re: Генерация хеша
Post by: Grumlin on March 31, 2013, 08:06:54 AM
Вообще-то влияет. По этой причине нельзя точно сказать дату создания блока, потому что прописанная на момент создания блока уже в прошлом.
тогда как все остальные проверяют блок, если они не знают время при котором сгенерировался искомый хеш? им что. получается для проверки время нужно подбирать???)))) думаю нет, следовательно время при котором сгенерировался нужный хеш и печатается в блок, так?

Теперь объясните откуда берется комиссия? Раньше я при отправке на сатошидайс всегда платили 0.0005 биткоина теперь же удача чтобы такую маленькую комиссию запрашивала. Я не пойму механизма как он высчитывает комиссию?
теперь давайте создайте тему там где нужно, и не засоряйте мою ненужными вещами не по теме


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 31, 2013, 08:09:50 AM
Вообще-то влияет. По этой причине нельзя точно сказать дату создания блока, потому что прописанная на момент создания блока уже в прошлом.
тогда как все остальные проверяют блок, если они не знают время при котором сгенерировался искомый хеш? им что. получается для проверки время нужно подбирать???)))) думаю нет, следовательно время при котором сгенерировался нужный хеш и печатается в блок, так?

Нет. Если поменять время, то поменяется хэш и найденный нонс не подойдет.


Title: Re: Генерация хеша
Post by: Storan on March 31, 2013, 10:17:29 AM
Вообще-то влияет. По этой причине нельзя точно сказать дату создания блока, потому что прописанная на момент создания блока уже в прошлом.
тогда как все остальные проверяют блок, если они не знают время при котором сгенерировался искомый хеш? им что. получается для проверки время нужно подбирать???)))) думаю нет, следовательно время при котором сгенерировался нужный хеш и печатается в блок, так?


Думаю тут имелось в виду, что в блоке указан timestamp полученный при его формировании. А по факту для сети блок появляется только в момент когда майнер подбирает нужный nonce.


Title: Re: Генерация хеша
Post by: naima53 on March 31, 2013, 11:47:52 AM
Вы меня совсем запутали  :D Так свое системное время майнер, нашедший блок вставляет или нет? Или вставляет после "одобрения" сетью (какой либо алгоритм % отклонения)??


Title: Re: Генерация хеша
Post by: Come-from-Beyond on March 31, 2013, 12:27:35 PM
Вы меня совсем запутали  :D Так свое системное время майнер, нашедший блок вставляет или нет? Или вставляет после "одобрения" сетью (какой либо алгоритм % отклонения)??

Вставляет, но ДО ТОГО как начнет искать нонс. Одобрения он не спрашивает, там вполне достаточный люфт.


Title: Re: Генерация хеша
Post by: Storan on March 31, 2013, 09:04:42 PM
Вроде с предыдущим попросом разобрались.

Знатоки, ответьте на такой:
Предусматривает ли Bitcoin, хотя бы в теории, возможную замену у будущих блоков алгоритма подсчёта хеша?

Ну как пример: в версии 0.9 официального (ну и в альтернативных тоже) вводится условие: с блока 333333 начинаем считать/проверять не ша-2(ша-2(что-то_там_из_блока)), а ша-2(ша-3(что-то_там_из_блока)).

То есть дважды ша-2, это зашито в спецификации и аксиома, или просто традиция, которую даже с приходом asic не хотят нарушать?


Title: Re: Генерация хеша
Post by: rPman on April 01, 2013, 06:54:18 AM
Абсолютно нет никаких ограничений к этому. Кажется в каких то форках это даже было сделано неоднократно.
В коде bitcoin уже несколько раз были такие точки (после блока такого-то использовать такой то алгоритм)


Title: Re: Генерация хеша
Post by: Storan on April 01, 2013, 01:47:47 PM
Странно тогда, почему при разговорах о появлении асиков не начались разговоры о смене sha-256; и соответсвенно при появлении их в железе хеш-функцию не заменили.

Или текущим программистам проекта уже наплевать на децентрализацию, а больше беспокоит то - за сколько можно спихнуть свои BTC, когда-то намайненные "за идею", и вдруг ставшие пусть мелким, но состоянием?


Title: Re: Генерация хеша
Post by: naima53 on April 01, 2013, 01:59:12 PM
Странно тогда, почему при разговорах о появлении асиков не начались разговоры о смене sha-256; и соответсвенно при появлении их в железе хеш-функцию не заменили.

Или текущим программистам проекта уже наплевать на децентрализацию, а больше беспокоит то - за сколько можно спихнуть свои BTC, когда-то намайненные "за идею", и вдруг ставшие пусть мелким, но состоянием?
В идеале, асики не вызывут централизацию, наоборот, продавая устройства 50...200гх частным покупателям они распределяют мощность (пулы утрачивают свою централизацию, т.к. человек человеку рознь, один в гильдию подключит, другой в итзод, третий в п2пул, если доделают его под асик, а не все будут на 50бтц сидеть и на дипбите..)


Title: Re: Генерация хеша
Post by: Storan on April 01, 2013, 02:28:06 PM
Ну спорное утверждение. В интерпритации на разговорный - человеки с видюхами/фермами из видюх были стадом, кучкующимися в паре-тройке мест. Приходящие им на смену асик-майнеры (числом меньшие минимум на порядок, а то и два) самоорганизуются, в более распределённое сообщество.


Хотя может мысль и здравая. Асик-майнинг - чистый бизнес, и ничего идеалистического/любознательного. И с точки зрения доходов, имея машинку ограничено, но стабильно печатающую валюту, любой бизнесмен будет в силу своих возможностей стараться не допустить дискредитации этой валюты.


Title: Re: Генерация хеша
Post by: Balthazar on April 01, 2013, 07:36:35 PM
На самом деле, dblsha256 ASIC'и дают много перспектив. Майнящие ручки-флэшки и не только. Если это направление достаточно разовьется, то завалить сеть станет очень дорогим удовольствием.


Title: Re: Генерация хеша
Post by: Come-from-Beyond on April 01, 2013, 07:48:13 PM
На самом деле, dblsha256 ASIC'и дают много перспектив. Майнящие ручки-флэшки и не только. Если это направление достаточно разовьется, то завалить сеть станет очень дорогим удовольствием.

В свете существования Keccak сомнительно что будет много ручек-флешек майнящих dblsha256.


Title: Re: Генерация хеша
Post by: Balthazar on April 01, 2013, 10:25:40 PM
Quote
В свете существования Keccak
А биткоин тут каким боком? ::)


Title: Re: Генерация хеша
Post by: Come-from-Beyond on April 02, 2013, 07:14:17 AM
Quote
В свете существования Keccak
А биткоин тут каким боком? ::)

А... Не понял тебя просто.