Протоколdocs/protocol/proof-of-work.md

Доказательство выполнения работы (Proof of work)

Proof of work Parano1d представляет собой хэш-код Poseidon2b с разделением доменов над фиксированными полями семантического заголовка. Он выполняется после доказательства HistoryStep, не зависящего от nonce.

Расписание полей

Губчатая конструкция (sponge) POWHDR__ поглощает ровно 16 элементов GF(2^128):

Индекс Поле
0–1 prev_block_hash
2–3 state_root
4–5 tx_root
6 timestamp
7 height
8–9 miner_address
10 128-битный nonce
11–12 difficulty_target
13 log_slots
14 active_slot_count
15 alloc_counter

32-байтные значения разделяются на две 128-битные половины в порядке байтов от младшего к старшему (little-endian). Скалярные целые дополняются нулями. При скорости поглощения, равной двум, расписание занимает ровно восемь блоков и не требует заполнения переменной длины.

Домен PoW отличается и от идентификатора блока с nonce, и от обязательства семантического заголовка без nonce.

Сравнение с целевым значением

Хэш-код и целевое значение интерпретируются как 256-битные целые в порядке байтов от младшего к старшему (little-endian). Значение nonce удовлетворяет условию:

text
pow_digest < difficulty_target

Равенство не проходит.

ASERT

Средняя цель в 20 секунд относится ко всему интервалу между принятыми блоками. В него входят подготовка доказательства, поиск nonce и распространение блока. ASERT использует опорную эпоху в шесть блоков и период полураспада 120 секунд. На каждой высоте проверка выводит точное целевое значение из канонической опорной точки, прошедшего времени и разницы высот.

Временная метка также должна превышать медиану времени предыдущих 11 заголовков и опережать локальные часы проверяющей ноды не более чем на 120 секунд.

Вычислительные реализации

Одна и та же фиксированная перестановка вычисляется пакетами nonce. Рабочий исполняемый файл при запуске выбирает наиболее производительную поддерживаемую реализацию:

  • pclmul как базовую реализацию на x86-64;
  • avx2+vpclmul при наличии;
  • avx512bw+vpclmul на поддерживаемых системах;
  • neon+pmull на ARM64.

Пакетное исполнение меняет пропускную способность, но не хэш-код. Скалярная реализация служит тестовым оракулом и не используется как резервная в рабочем режиме.

Граница внешнего майнинга

Внешний вычислитель получает точное расписание из 16 полей, индекс nonce и целевое значение. Он возвращает только канонический 16-байтный nonce в порядке байтов от младшего к старшему (little-endian). Перед фиксацией блока нода проверяет его относительно неизменяемого одноразового шаблона.

Вычислитель не может изменить транзакцию, корень State, выплату или доказательство. Решённый nonce для истёкшего либо устаревшего шаблона отвергается.

Техническая документация ParanO(1)dПоведение консенсуса определяется исходным кодом.