Прочитал техническое описание биткойн-системы, вник, нашёл теоретическую уязвимость и её решение. Наверняка я не первый с такой идеей, но поверхностный гуглёж выдал разве что
эту тему.
Итак, чем опасна консолидация мощностей майнинга у крупных игроков рынка? А эта консолидация по мере роста базы транзакций и отрыва производительности ASICов от бытовых машин так или иначе происходить будет. В случае картельного сговора под влиянием государств (несогласным можно, например, запретить приобретать ASIC-фермы законом) есть возможность провернуть пару интересных операций:
1. "Замораживание" рынка. Картель дожидается очередного пересчёта сложности (раз в 2016 блоков) и резко выключает все свои ASIC-фермы. Если, например, у картеля было собрано 99% мощностей, то теперь блоки будут генерироваться в 100 раз медленнее (17 часов против 10 минут в обычном режиме) и проходить (включаться в блоки) будут только самые крупные транзакции - и/или с максимальной комиссией. Да, сложность пересчитается через 2016 блоков, но их генерация займёт уже не 2 недели, а 4 года. С учётом того, что сложность изменяется максимум в 4 раза единовременно, то время прихода рынка в себя возрастёт ещё на треть (5 лет фактически). После этого операцию можно будет повторить - вернуть за несколько недель сложность на первоначальный уровень и снова её сбросить.
Да, собрать 99% будет сложно, но, скажем, при относительно реальных 95% эту операцию можно будет проводить раз в год. Впрочем, я расцениваю этот сценарий как маловероятный, ибо есть вариант:
2. "Легализация" рынка. Картель обязывает всех участников официально регистрировать (привязывать к своей личности) свои публичные ключи, а транзакции с адресов с незарегистрированных ключей просто не принимает в блок. Так как 99 (95)% блоков теперь генерирует он, то переводы анонимов будут совершаться минимум в 100 (20) раз медленнее. На самом деле ещё медленнее - оставшиеся внекартельные майнеры не смогут отделить официальные адреса от неофициальных и будут включать в свои блоки и те и другие (база зарегистрированных адресов вряд ли будет публичной).
Решение довольно очевидно. Цель - не допускать сильного отрыва ASICов от бытовых мощностей. Так как б
ольшая часть времени майнинга тратится на перебор значения
Nonce в заголовке блока и пересчёт хэша, то при появлении высокопроизводительных ASICов нужно просто менять алгоритм хэширования заголовка блока (там как раз предусмотрено поле Version). При этом даже необязательно менять алгоритм хэширования транзакций (merkle tree, поле hashMerkleRoot в заголовке), ибо на пересчёт этого поля тратится копеечное время по сравнению с постоянным перехэшированием заголовка.
Остаётся проблема роста общей базы транзакций, но думаю, что она тоже решаема, по крайней мере, мне кажется, что сейчас это меньшая проблема - из-за относительно низкой цены на жёсткие диски.