Post
Topic
Board Кодеры
Re: Решаем проблему с размером блока
by
kcaterpillar
on 09/04/2017, 07:37:39 UTC
Единственное преимущество, которое может получить майнер "легкого" блока в том, что он быстрее распространяется по сети. Таким образом у него меньше риск получить orphan блок. А сложность самого майнинга не зависит от кол-ва транзакций или размера блока, так как майнеры подбирают хэш от хэша всех транзакций (merkle tree root), изменяя только одно число в заголовке - nonce. А root-хэш от merkle tree, который строится из хэшей самих транзакций, во время майнинга пересчитывается очень редко.


Нет. Это не так. Последний год майнерами перебирается примерно 70-73 бита, в зависимости от текущей сложности. В поле Nonce заголовка блока 32 бита, остальные примерно 40 бит перебираются в так называемом extraNonce - оно находится в coinbase-транзакции,  это произвольные биты поля "in":"coinbase". Так как coinbase-транзакция должна быть первой в блоке, чтобы изменить эти 40 бит необходимо изменить и hashMerkleRoot. Сразу стоит заметить, что в случае увеличения сложности сети Биткойна (difficulty), количество перебираемых бит будет также увеличиваться за счёт coinbase-транзакции, т.е. соотношение extraNonce/Nonce ещё более увеличится.

Представим дерево Меркля с основанием внизу и корнем вверху, а coinbase-транзакцию в нём крайней нижней слева. Получится треугольник в случае полного заполнения транзакциями дерева (а это  оптимальный вариант для максимального количества транзакций в дереве).  Мы знаем, что хэши берутся не только от всех транзакций, но и от вершин дерева (узлов). Все хэши двойные, причём первый хэш вершины ещё и двухраундовый, в итоге получается, что ресурсные затраты на одну вершину дерева Меркля почти равны трём раундам SHA-256 - трём хэшам грубо говоря. Но нас интересуют не все хэши вершин, а только те, что находятся вдоль левого ребра нашего треугольника дерева. Потому как остальные вершины не изменяются.  С увеличением количества транзакций в блоке число транзакций растёт как квадратичная функция от числа степеней вершин (грубо говоря "этажей" дерева). А вот количество вершин вдоль левого ребра нашего дерева, т.е. тех вершин, которые будут изменятся при переборе coinbase - меняется как линейная функция. Именно поэтому при небольших размерах блока увеличение числа его транзакций не изменяет существенно затраты при майнинге - квадратичная функция "растёт" гораздо  быстрее линейной. Но при значительном увеличении транзакций в блоке этот линейный рост всё-таки даст о себе знать - майнить огромные блоки будет сложнее, затратнее более "легких" блоков, разница будет ощутимой.

Есть ещё один момент - в случае применения современных алгоритмов криптоанализа для оптимизации майнинга можно повысить его эффективность на 10%-15% по сравнению с классическим брутфорсом, но для применения таких алгоритмов потребуется использовать не последовательный (независимый) перебор extraNonce и Nonce как при брутфорсе, а всю логическую цепочку всех хэшей, т.е. все хеши, начиная от coinbase-транзакции. Такие криптоатаки на решение блока дадут ещё большее преимущество для  легких блоков с небольшим количеством транзакций.

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