Доказательство выполнения работы (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 удовлетворяет условию:
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 для истёкшего либо устаревшего шаблона
отвергается.