Bitcoin Forum

Local => Кодеры => Topic started by: CoalChamber on February 12, 2015, 06:06:31 PM



Title: Мульти-хеш/-сложность (внезапная идея)
Post by: CoalChamber on February 12, 2015, 06:06:31 PM
Для того, чтобы найти блок, нам нужно, чтобы сложность текущего хеша curr_diff была больше текущей сложности сети trgt_diff: curr_diff > trgt_diff. Именно в этом и заключается проблема майнинга PoW-криптовалют: с увеличением сложности trgt_diff, новые блоки становится всё сложней и сложней находить.

И тут (внезапно) меня посетила мысль: а что, если в качестве значения параметра сложности использовать не какое-то единственное значение, а целый набор таких значений (назовём это мульти-сложность (multidifficulty), или, если хотите, многомерная сложность). Это дало бы больше свободы при поиске нужного значения хеша (тогда это получается уже мульти-хеш).

Как это работает (пример):
В качестве примера возьмем алгоритм X11. Он состоит из 11 криптофункций (КФ), которые вычисляются последовательно по цепочке, и результатом является единственное значение хеша. А что, если мы будем вычислять каждую из КФ параллельно? Тогда мы получим набор из 11 хешей со сложностью (curr_diff0, curr_diff1, ...,  curr_diff10), которая  будет сравниваться с целевой сложностью (trgt_diff0, trgt_diff1, ...,  trgt_diff10). Но, для нахождения блока, совсем необязательно, чтобы curr_diffX > trgt_diffX для каждой пары хешей из этого набора. Можно потребовать, чтобы это условие выполнялось для, скажем, как минимум 5 любых КФ из 11. Впрочем, это значение можно каким-либо образом регулировать (например, если блоки находятся слишком часто, увеличиваем этот параметр до 6, а если редко, то уменьшаем до 4 и т.п.)

На самом деле, пример с X11 не очень удачный, так как все 11 КФ там вычисляются параллельно, а значит они достаточно слабо коррелируют друг с другом. В идеале же, все генерирующие КФ для мульти-хеша должны обладать высокой степенью корреляции; лучше, если это будет одна функция, возращающая массив результатов (от одного набора данных).