Я знаю, что Сатоши больше нет рядом, чтобы спрашивать, поэтому спрашивать может быть бесполезно, но я надеюсь, что кто-то может что-то понять по этому поводу.
В майнинге биткойнов обычно используется поле extraNonce ( bnExtraNonce
в scriptSig coinbase tx) и поле nonce (32 бита). Почему Сатоши просто не увеличил поле nonce, и тогда не было бы необходимости в bnExtraNonce
? Есть ли какая-то причина, по которой поле nonce должно быть 32-битным? Кажется, было бы проще иметь 64-битное целое число в заголовке блока. Даже если он беспокоился о том, что целое число больше 32 бит, заголовок мог быть просто интерпретирован как два 32-битных целых числа nonce1
и nonce2
.
На этот вопрос было много хороших ответов. Прочитав их, я тоже попытаюсь ответить.
Поле coinbase транзакции coinbase (как оно называется) на самом деле представляет собой просто scriptSig, который не должен проходить какую-либо проверку своего содержимого (за исключением того, что он меньше 100 байтов и более новые требования BIP34). Сатоши знал, что вы можете поместить сюда произвольное содержание, поэтому он поместил своевременный заголовок новости в сценарий исходного блока Sig: «The Times 03/Jan/2009 Канцлер на пороге второй помощи банкам». Подобное сообщение также помогает подтвердить, что предварительный майнинг не проводился, поскольку сообщение не могло быть помещено в блок до даты публикации статьи.
Я думаю, что Сатоши думал, что 32-битное одноразовое пространство было излишним. Стандартный компьютер, подобный тому, на котором я это пишу, может получить около 3 MH/s, что составляет около 0,07% пути через один одноразовый диапазон, прежде чем вы сможете увеличить nTime и получить совершенно новый диапазон одноразовых номеров. Это не значит, что Сатоши думал, что когда-либо будет майнить только один процессор компьютера ( этот пост показывает, что это не так), но я уверен, что он думал, что в этом случае у каждого майнера будет свой собственный адрес.
Я не думаю, что Сатоши предвидел появление пулов, особенно в том довольно централизованном виде, в котором они существуют сегодня, и гибкость поля coinbase была просто использована майнинговыми пулами (что-то вроде взлома), когда хэш-мощность стала достаточно большой, чтобы пройти через более одного одноразового диапазона в секунду.
Из правил протокола не существует такого понятия, как дополнительный одноразовый номер.
В заголовке блока есть только 32-битный одноразовый номер (который можно очень быстро повторить), а на входе coinbase может быть до 100 произвольных байтов. Код генерации блоков внутри эталонного клиента традиционно помещает «дополнительный одноразовый номер» в эти произвольные байты, но содержимое может быть любым.
Мое предположение: кажется очевидным, что Сатоши не ожидал майнинга в пуле.
В мире без майнинга в пуле у вас просто было бы, чтобы каждое оборудование для майнинга, способное до 4 гигахэшей в секунду (GH/s), использовало свой собственный открытый ключ, гарантируя, что оно производит уникальный вывод транзакции coinbase. Поле времени может обновляться каждую секунду, поэтому одноразовый номер может быть сброшен на 0 при каждом обновлении времени.
В мире с объединенным майнингом несколько человек создают идентичные выходные данные транзакций coinbase (платят тому, кому оператор пула говорит платить), и они коллективно хешируют намного быстрее, чем 4 GH/s, исчерпывая диапазон одноразовых номеров до предполагаемого времени. быть обновленным. Это требует дополнительного одноразового номера, чтобы избежать проверки одними и теми же хэшами заголовков несколькими майнерами.
Так почему же Сатоши вообще создал лишний одноразовый номер? Похоже, это был простой способ узнать, сколько хэшей использовал майнер с момента запуска. Если вы посмотрите на базу монет из блока 1 (первый блок после блока генезиса), вы увидите, что это:
04 ......... Push 4 bytes to stack
ffff011d ... The same as the nBits field
01 ......... Push 1 byte to the stack
04 ......... Number of times nonce was reset so far: 4 <= 20 GH
По блоку 10 это 0x36 (54 <= 220 GH). Короче говоря, оригинальный дополнительный одноразовый номер может быть просто дополнительным инструментом отладки. Вы можете использовать nBits и дополнительный одноразовый номер, чтобы вычислить, сколько блоков в среднем должен был произвести майнер, и если это сильно отличается от того, сколько блоков он произвел, у вас могут возникнуть проблемы.
OP_RETURN
создания дополнительного поля nonce.На самом деле дополнительный одноразовый номер представляет собой произвольное целое число точности ( http://satoshi.nakamotoinstitute.org/posts/bitcointalk/115/ )
Я предполагаю, что это позволяет вносить произвольные изменения в блок даже в ситуации, когда нет никаких изменений с точки зрения транзакций. Это сделало бы еще менее вероятным появление неразрешимого пустого блока в период без транзакций. (Уже почти невозможно. Но хеши по своей природе непредсказуемы, поэтому Сатоши, возможно, просто был слишком параноиком, добавляя их.)
На самом деле нам вообще не нужен 32-битный одноразовый номер в заголовке блока. Все можно поместить в скрипт ввода coinbase. Итак, вопрос должен быть таким: можем ли мы иметь дело с 76-байтовым заголовком блока вместо 80-байтового?
морсекодер
морсекодер
морсекодер
Питер Уилле
морсекодер