Такую ограниченную версию GHOST, в которую анклы могут входить только до семи поколений, мы использовали по двум причинам. Во-первых, при неограниченном GHOST возникло бы слишком много сложностей с вычислениями, какие анклы конкретного блока валидны. Во-вторых, неограниченный GHOST в сочетании с предлагаемой Ethereum системой компенсаций ослабляет стимул майнить именно главную цепь блокчейна, а не цепь злоумышленника.
Комиссии
Поскольку участники сети загружают транзакции в блокчейн и проверяют валидность каждой из них, необходим некий регуляторный механизм, и обычно это – комиссии. По стандарту, который когда-то задал Bitcoin, выбор размера комиссии остается за отправителем. Предполагается, что минимальные значения будут устанавливаться динамически за счет решений майнеров. Bitcoin-сообщество широко одобрило такой подход как «рыночный», где стоимость определяется спросом и предложением. Но важно понимать, что проведение транзакций – не рынок, как бы ни хотелось видеть в майнере продавца, предоставляющего отправителю услугу за определенную плату. В реальности каждая транзакция, включенная майнером в блок, должна быть проведена всеми нодами сети, так что по большей части транзакцию осуществляет третья сторона, а не майнер. Здесь возникает риск трагедии общих ресурсов.
Однако при некоторых небрежных упрощениях этот недостаток удивительным образом самоустраняется. Происходит это следующим образом. Предположим, что…
1. Транзакция состоит из k операций и предлагает майнеру, который включит ее в блокчейн, комиссию kR, где R задается отправителем. Майнер заранее примерно представляет, какими будут R и k.
2. Себестоимость проведения операций для каждой ноды равна C (то есть все ноды одинаково эффективны).
3. Есть N майнящих нод c одинаковыми вычислительными мощностями (то есть одна нода – это 1 / N от всей мощности).
4. Нет полных нод, которые не задействованы в майнинге.
Майнер захочет включить в блок только те транзакции, комиссия с которых превысит себестоимость их проведения. Таким образом, предполагаемое вознаграждение составит kR / N, поскольку вероятность нахождения блока для майнера будет равняться 1 / N, а себестоимость проведения транзакции – kC. Следовательно, майнеры будут включать в блок такие транзакции, для которых kR / N > kC или же R > NC. Заметим, что R – устанавливаемая отправителем комиссия за одну операцию транзакции, так что это нижняя граница выгоды, которую он получит от этой транзакции, а NC – себестоимость проведения операции для всей сети. Соответственно, майнерам выгодно включать в блок только такие транзакции, где общая утилитарная выгода превышает себестоимость.
Однако у этой модели есть серьезные расхождения с реальностью.
1. Майнер, проводящий транзакцию, платит больше, чем верифицирующие ноды, поскольку дополнительное время верификации замедляет распространение блока в сети, из-за чего блок с большей вероятностью может залежаться.
2. Существуют полные ноды, которые не занимаются майнингом.
3. На практике вычислительные мощности майнеров могут распределяться крайне неравномерно.
4. Существуют аферисты, политические враги и просто странные люди, которые желают навредить сети, и они вполне могут создавать хитроумные контракты, стоимость которых будет гораздо ниже себестоимости для верифицирующих нод.
По первой причине майнерам выгоднее включать в блок поменьше транзакций, а вторая причина увеличивает NC, так что эти два действия хотя бы частично уравновешивают друг друга. Как именно? Пункты 3 и 4 представляют большую проблему, и для ее устранения мы просто вводим плавающий лимит: ни один блок не может иметь больше операций, чем BLK_LIMIT_FACTOR, умноженный на долгосрочное экспоненциально изменяющееся среднее значение. Вот как это выглядит:
blk.oplimit = floor((blk.parent.oplimit \* (EMAFACTOR – 1) +
floor(parent.opcount \* BLK\_LIMIT\_FACTOR)) / EMA\_FACTOR)
BLK_LIMIT_FACTOR и EMA_FACTOR – константы, на данный момент составляющие 65 536 и 1,5 соответственно, но эти значения, скорее всего, изменятся после более глубокого анализа.
Существует еще один фактор, сдерживающий разрастание блоков в Bitcoin: большие блоки будут распространяться дольше и, следовательно, больше рискуют залежаться. В Ethereum распространение блоков, требующих больше газа, также может занять больше времени как из-за их физического размера, так и из-за того, что им требуется больше времени на обработку переходов состояния транзакции для проверки. Этот сдерживающий фактор важен для Bitcoin, но не для Ethereum из-за протокола GHOST; следовательно, использование регулируемых лимитов блоков обеспечивает более стабильную опору для работы протокола.
Вычисление и полнота по Тьюрингу