Недавно я начал обращать внимание на то, что происходит на криптобиржах, и, будучи разработчиком долгое время, решил взглянуть на то, что у нас есть в открытом доступе.
Итак, у меня есть вопрос ко всем крипто-гуру: как следует из спецификации протокола Биткойн, биткойн будет принимать ЛЮБОЙ одноразовый номер, который удовлетворяет условию целевых (блочных) битов. Каждый майнер, который я видел, использует последовательный цикл для nonce1 и nonce2. актуальный вопрос: почему люди реализуют +1 для одноразового номера в каждом потоке, вместо этого, скажем, имея 2 потока, один идет +1 с самого начала; второй отсчитывает -1 от конца интервала одноразовых номеров?
По моему скромному мнению, было бы быстрее, если бы вы запускали несколько потоков на одном и том же интервале... или, в идеальном мире, разделили бы весь интервал на N подинтервалов, оставив каждый поток выполнять свою часть. С математической точки зрения кажется, что при таком подходе мы получим более высокую вероятность попадания «золотого нонса», а не +1 на всем интервале. Я ошибаюсь здесь?
Имея все вышесказанное, я загрузил блокчейн и провел пару тестов, чтобы увидеть распределение одноразовых номеров в интервале uint32_t. результаты меня не удивили ... У меня довольно равномерное распределение одноразовых номеров, например: нечетный одноразовый номер: 49,997 четный одноразовый номер: 50,003
разделите uint32_t на 1024 одинаковых интервала и посмотрите, сколько одноразовых номеров из существующей цепочки блоков находится в каждом интервале. результаты те же: равномерное распределение.
опять же, почему это +1 в цикле майнера? даже несмотря на то, что (+3), (-2) дали бы (теоретически) больше шансов (быстрее) найти золотой одноразовый номер по сравнению с другими (+1).
Распределение выигравших одноразовых номеров смещено в сторону 0, потому что это эффект отбора : почти все начинают поиск одноразовых номеров, начиная с 0, поэтому первыми обнаруживаются младшие одноразовые номера, хотя могут быть и более высокие одноразовые номера, которые могут создать выигрышный блок:
Это очень хорошо иллюстрирует, что распределение одноразовых номеров является однородным:
источник: https://en.bitcoin.it/wiki/Distribution_of_nonces_and_hashes
Таким образом, +1 в цикле майнера — это самый простой способ изменить одноразовый номер, и он работает, потому что правильное распределение одноразового номера является однородным. ASIC часто работают с одноразовыми номерами по-разному. Кроме того, ASIC могут очень быстро сканировать весь диапазон одноразовых номеров, поэтому на самом деле не имеет значения, где вы начнете искать действительный одноразовый номер.
Если вы используете четыре потока и разделяете диапазон между четырьмя потоками, это означает, что каждый поток завершает свой диапазон и запускает новый в четыре раза чаще. Это явно проигрышное предложение по сравнению с предоставлением каждому потоку собственного полного диапазона.
Ник Оделл
Волшебник Оззи
Алекс Д
Алекс Д
Яннес
Алекс Д
Алекс Д
Алекс Д