Nonce
Число, используемое один раз, которое майнеры подбирают при добыче блока в сетях Proof-of-Work, а также счётчик, предотвращающий повторное использование одной и той же транзакции на аккаунте.
Как это работает
Nonce — число, которое подбирают, чтобы результат вычисления удовлетворил заданному условию. Слово составлено из английского «number used once» — число, используемое один раз.
В майнинге это единственная часть блока, которую майнер может свободно менять. Он подставляет число, считает хеш блока и проверяет, оказался ли результат меньше целевого значения. Не подошло — прибавляет единицу и считает заново.
Именно этот перебор и есть работа в «доказательстве работы». Найти подходящее число можно только слепым перебором, а проверить чужую находку — одной операцией. На этой асимметрии держится вся защита сети.
Масштаб перебора
Поле nonce в биткоине занимает 32 бита. Считаем, на сколько его хватает современному оборудованию.
| Всего вариантов в поле | около 4,3 миллиарда |
| Скорость одного устройства | до 200 триллионов хешей в секунду |
| Время на весь перебор | доли секунды |
| Целевое время блока | 10 минут |
Поля давно не хватает: устройство перебирает все четыре миллиарда вариантов быстрее, чем за секунду. Поэтому майнеры меняют и другие части блока — метку времени и служебную транзакцию, — чтобы получить новый набор вариантов для перебора.
Где ещё встречается это слово
- Счётчик транзакций в EthereumЗдесь nonce означает совсем другое: порядковый номер операции с конкретного адреса. Он не даёт отправить один и тот же перевод дважды.
- Зависшая транзакцияЕсли операция с меньшим номером не подтверждена, все последующие ждут её. Отсюда приём «заменить транзакцию с тем же номером и большей комиссией».
- Одноразовые коды в криптографииВ шифровании таким числом гарантируют, что два одинаковых сообщения дадут разный результат.