Post
Topic
Board Кодеры
Re: Асикостойкий алгоритм PoW
by
Vtools
on 16/01/2018, 16:18:42 UTC
Вычислительные операции алгоритма должны быть заранее неизвестны и задаваться, например, исходя из хеша предыдущего блока.
Во-первых, это не помешает сделать асик.
Во-вторых, я буду дропать (не отдавать свой подсчет в сеть) блок N если после
него блок для блока N+1 будет выпадать неудобный мне алгоритм.

Ниже я привожу такой алгоритм, как он Вам, теперь всегда будете дропать?


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

Давайте подумаем как реализовать интерпретатор, можно например так:
1. Берем хеш предыдущего блока, его длина 32 байта
2. Считаем его программой из 32 строк
3. Каждый байт - это отдельная команда
4. Выполняем программу, ограниченное количество тактов (например 1000)

Состав АЛУ (регистры 2 байтовые):
Регистры:
00-Аккумулятор
01-03 - общего назначения

Память: 32 байта (собственно это входящий хеш, который нужно перемешать). Вся память разбита на 16 ячеек по 2 байта.
Все значения - это целые положительные числа длиной 16 бит.

Примеры команд (цифры в 16-м коде):
RM - загрузить в регистр R двухбайтовое число из ячейки M (memory)
4R - сложить значение из аккумулятора со значением из регистра R (registr) и поместить результат в аккумулятор
5R - аналогично вычитание
6R - аналогично умножение
7R - аналогично деление
8R - аналогично побитовое OR
9R - аналогично побитовое AND
AR - аналогично побитовое XOR
BR - аналогично SIN (!)
CL,DL - переход на строку L (label) если значение в аккумуляторе меньше 1^15 (C-переход на строки: 0-15, D-переход 16-31)
EL,FL - переход на строку L (label) если значение в аккумуляторе больше 1^15 (E-переход на строки: 0-15, F-переход 16-31)
Все остальные значения (4R-AR где значения R>3) приводят к перемешиванию памяти кратно значению в аккумуляторе.
где:
R-номер регистра 0-3
M-номер ячейки памяти (0-15)
L-номер строки программы (0-15)

Итого:
¼  всех случайных команд приводит к условному переходу
примерно ⅓ команд - к случайному наполнению аккумулятора
примерно ⅓ команд - к перемешиванию хеша

Можно убрать все арифметические операции (команды 4R-AR), а ввести только сложные тригонометрические функции, как например команда BR, чтобы затруднить работу на GPU