Биткойн (и другие криптомонеты) одноразовый цикл

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

Итак, у меня есть вопрос ко всем крипто-гуру: как следует из спецификации протокола Биткойн, биткойн будет принимать ЛЮБОЙ одноразовый номер, который удовлетворяет условию целевых (блочных) битов. Каждый майнер, который я видел, использует последовательный цикл для nonce1 и nonce2. актуальный вопрос: почему люди реализуют +1 для одноразового номера в каждом потоке, вместо этого, скажем, имея 2 потока, один идет +1 с самого начала; второй отсчитывает -1 от конца интервала одноразовых номеров?

По моему скромному мнению, было бы быстрее, если бы вы запускали несколько потоков на одном и том же интервале... или, в идеальном мире, разделили бы весь интервал на N подинтервалов, оставив каждый поток выполнять свою часть. С математической точки зрения кажется, что при таком подходе мы получим более высокую вероятность попадания «золотого нонса», а не +1 на всем интервале. Я ошибаюсь здесь?

Имея все вышесказанное, я загрузил блокчейн и провел пару тестов, чтобы увидеть распределение одноразовых номеров в интервале uint32_t. результаты меня не удивили ... У меня довольно равномерное распределение одноразовых номеров, например: нечетный одноразовый номер: 49,997 четный одноразовый номер: 50,003

разделите uint32_t на 1024 одинаковых интервала и посмотрите, сколько одноразовых номеров из существующей цепочки блоков находится в каждом интервале. результаты те же: равномерное распределение.

опять же, почему это +1 в цикле майнера? даже несмотря на то, что (+3), (-2) дали бы (теоретически) больше шансов (быстрее) найти золотой одноразовый номер по сравнению с другими (+1).

Почему это будет быстрее, чем дать каждому потоку свой собственный заголовок блока?
Что быстрее угадать PIN-код?: случайное угадывание или начиная с 0000 и заканчивая 9999?
зависит от вашей удачи. но теоретически, если вы используете единый рандом, вы, скорее всего, найдете PIN-код быстрее. попробуйте. простое программное приложение покажет это вам. Имея в виду, что вам нужно снова и снова находить новые PIN-коды, случайный выбор дает вам некоторые преимущества.
@NickODell, попробуйте сами: запустите cpuminer с 64 потоками. скорость потока снизится, но количество принятых одноразовых номеров будет увеличиваться в течение ограниченного периода времени.
Я думаю, вы запутались, думая, что все майнеры вычисляют одно и то же, поэтому +2 может дать вам прогресс. Каждый майнер работает над другой случайной частью работы. Следующий момент, который вам нужно знать, это то, что алгоритм PoW не имеет прогресса: каждое число имеет одинаковый шанс, не имеет значения, начинаете ли вы в начале, в конце или в середине. Неважно, делаете ли вы +1, +2 или +случайно. Поэтому каждый выбирает самое простое.
@Jannes, спасибо за ваш вклад! в этом есть смысл
PoW — это не ответ. это дает вам интервалы. пул, дающие задания, им все равно, сможете ли вы сделать это быстрее. если вы можете, они настроят ваши биты / diff ... что, на мой взгляд, снова является красным флагом для высокоскоростного подхода «нечеткой логики», если я могу так сказать :)
извините за путаницу, я имел в виду «зеленый флаг» для нечеткой логики и красный для брутфорса / радуги.

Ответы (2)

Распределение выигравших одноразовых номеров смещено в сторону 0, потому что это эффект отбора : почти все начинают поиск одноразовых номеров, начиная с 0, поэтому первыми обнаруживаются младшие одноразовые номера, хотя могут быть и более высокие одноразовые номера, которые могут создать выигрышный блок:распределение выигрышных одноразовых значений

Это очень хорошо иллюстрирует, что распределение одноразовых номеров является однородным:гистограмма действительных одноразовых номеров и хэшей

источник: https://en.bitcoin.it/wiki/Distribution_of_nonces_and_hashes

Таким образом, +1 в цикле майнера — это самый простой способ изменить одноразовый номер, и он работает, потому что правильное распределение одноразового номера является однородным. ASIC часто работают с одноразовыми номерами по-разному. Кроме того, ASIC могут очень быстро сканировать весь диапазон одноразовых номеров, поэтому на самом деле не имеет значения, где вы начнете искать действительный одноразовый номер.

Даже в мире ASIC, имея в виду, что они могут сканировать весь интервал так быстро, не будет ли быстрее использовать случайный или другой алгоритм?
@AlexD Нет ничего проще, чем nonce++. ☺ Все, что больше этого (например, псевдо-"случайный [генератор чисел] или другой алгоритм"), только замедлит работу. Люди рассматривали решение SAT как альтернативу майнингу биткойнов методом грубой силы , но грубая сила все же быстрее.
До сих пор я не упоминал рандом :) псевдорандом - это путь в никуда в атаках брутфорсом :) но я почти уверен, что есть лучший способ брутфорса более эффективным способом! :)
@AlexD Если кто-то обнаружит лучший способ, Биткойн должен будет принять другой метод доказательства работы.
Раньше я думал, что для данного блока действительный одноразовый номер в конечном итоге будет найден с помощью +1 до успеха — действительно ли иногда случайный одноразовый номер не найден, и тогда майнер должен отказаться от блока и попробовать другой набор транзакций?
@PrinceM Да, это может произойти.
Почему число возможных одноразовых номеров конечно? Почему вы не можете просто продолжать увеличивать, пока не найдете его? Это "правило" или часть протокола? Или просто быстрее?
@PrinceM « Почему количество возможных одноразовых номеров конечно? » Поле одноразового номера в блоке биткойнов представляет собой 32-битное (4-байтовое) число, поэтому существует 2³² ≈ 4,3 миллиарда возможных чисел, которые оно может представлять. ASIC настолько быстры, что могут сканировать весь диапазон одноразовых номеров (делать ~ 4,3 миллиарда хэшей) почти мгновенно. Вот почему extraNonce полезен для поиска «выигрышного» блока.
@Geremia интересно, так что может быть одноразовый номер, который заставляет этот блок работать, просто он не обязательно «вписывается» в блок. Понятно!

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

Хотел бы я поставить тебе "-1". ваш ответ не имеет никакого смысла с точки зрения моего вопроса. Пожалуйста, прочтите еще раз. каждый поток делает то же самое, например: +1 внизу; следующим шагом будет -1 вверху. увеличит ли это энтропию?
@AlexD Наверное, я не понимаю, о чем ты говоришь. Поскольку каждый одноразовый номер имеет одинаковую вероятность, все, что имеет значение, это сколько одноразовых номеров в секунду вы можете попробовать. Какая польза от этой сложности?