Как получается одноразовый номер в заголовке блока?

Насколько я понимаю, одноразовый номер в заголовке блока Ethereum представляет собой целое число в определенном диапазоне (больше 0).

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

На самом деле, если я просматриваю блоки за последний год, я не могу найти ни одного, который бы не начинался с 0x88.

В «Желтой книге» Ethereum указано, что одноразовый номер — это 64-битный хэш.введите описание изображения здесь

Однако с функцией хэширования вряд ли можно было бы увидеть столько значений, начинающихся с 0x88.

Может ли кто-нибудь сказать мне, как одноразовый номер, используемый при поиске действительного хэша для блока в Ethereum, приводит к одноразовому номеру, показанному в заголовке блока?

Хотя я не могу полностью ответить на ваш вопрос, я заметил, что одноразовый номер заголовка блока, о котором сообщает etherscan (как в вашем примере), составляет 72 бита - похоже, что 0x88 только что был добавлен к 64-битному хешу. На самом деле это или "вопрос презентации", я не могу сказать.

Ответы (2)

В моей компании работает обозреватель блокчейнов .

Вот информация, которая у нас есть для этого связанного блока.

Я просмотрел необработанные данные, и ни один из одноразовых номеров на самом деле не начинается с 0x88 (как возвращается из вызова JSON RPC к узлу Parity (1.6.8)).

Похоже, что Etherscan добавляет это. Я не уверен, почему. Возможно, это как-то связано с тем, как Etherscan оснастил свой узел, или они просто добавили его в свой вывод.

Странный. etherchain.org и etherscan.io показывают его с 0x88префиксом, а несколько других обозревателей, которые я пробовал, не показывают (например, ваш). В коде Parity нет ничего, что могло бы его лишать при обслуживании RPC-запросов, но в коде Geth таких случаев много, особенно в тестовых случаях, когда одноразовый номер просто задается как 0x88. Пока без понятия :-)
Инфура также возвращается "nonce":"0x5ddbbf0826351997"к блоку 4168977.
Да, и чтобы подтвердить, я попробовал Geth 1.6.7 и получил те же данные (0x5ddbbf0826351997). Я совершенно сбит с толку. Ричард, у вас есть ссылки на эти тестовые случаи?

Спекулятивный ответ, который я изначально добавил в качестве комментария. Рада, что поправилась.


0x88 == 136, что является размером в байтах «блока» sha3 (тогда как для «блока» sha256 это будет 64 байта == 0x40).

«0x88», кажется, разбросано по всему коду, поэтому, вероятно, это префикс на стороне клиента, а не что-то добавленное обозревателями цепочек.

Итак... это, вероятно, просто способ указать, что одноразовый номер был хеширован с помощью sha3, а не другого алгоритма хеширования... (для проверки обратной совместимости и т. д.)