Вычислительные операции алгоритма должны быть заранее неизвестны и задаваться, например, исходя из хеша предыдущего блока.
Во-первых, это не помешает сделать асик.
Во-вторых, я буду дропать (не отдавать свой подсчет в сеть) блок N если после
него блок для блока N+1 будет выпадать неудобный мне алгоритм.
Предлагаю такой вариант.
При получении нового блока определяется его хеш (а ещё лучше, хеш хеша), затем он проверяется на валидность. Валидным считается хеш, в котором присутствуют абсолютно все типы поддерживаемых вычислительных операций. Если хеш не валидный, то этот хеш незначительно изменяется согласно стандартной известной функции. В результате хеш во всех случаях получается валидный (то есть "неудобный").
Таким образом дропание блоков становится бесполезным занятием.