Перевод статьи от 1 марта 2018 года
Источник: BitMEX Research
Аннотация. В этой статье мы рассмотрим графическую схему биткойнового блока с древами Меркла и объясним, почему в блоке должно быть дополнительное дерево Меркла, связанное с обновлением Segregated Witness (SegWit). Также мы более подробно рассмотрим некоторые потенциальные минусы открытой и скрытой технологии AsicBoost, продолжая тему, начатую в нашем материале по этому вопросу, который был опубликован в сентябре 2017 года. После недавнего объявления владельца патента на эту технологию мы пришли к выводу, что новая инициатива Blockchain Defensive Patent License (BDPL), если ее эффективность подтвердится, может уменьшить минусы использования открытого AsicBoost в сети. С другой стороны, использование менее эффективного скрытого AsicBoost все еще сопряжено с некоторыми проблемами.
Это упрощенное представление структуры биткойнового блока и присутствующих в нем древ Меркла. Другие, более подробные схемы, можно найти у Джереми Рубена (Jeremy Rubin) и Тимо Ханке (Timo Hanke). (Источник: BitMEX Research)
Элементы схемы
Заголовок блока
Заголовок биткойнового блока (выделен серым) весит около 80 байт и содержит версию, хэш предыдущего блока, корень Меркла, метку времени, биты (уровень сложности) и произвольный код (nonce).
Возможный заголовок блока (кандидат)
Содержит все перечисленные выше элементы, кроме nonce.
Блоки данных
На схеме выше показано, что корень Меркла разделяется между двумя блоками данных, необходимыми для выполнения функции SHA256 (проверка доказательства выполнения работы) в системе биткойна. Объяснение этого явления можно найти в нашей статье, посвященной AsicBoost.
Второе древо Меркла
В обновлении SegWit появилось новое древо Меркла, имеющее ту же структуру, что и основное древо Меркла. Единственное отличие в том, что оно содержит данные свидетелей и не содержит транзакцию Coinbase. Относительное положение каждой транзакции на новом древе должно оставаться идентичным основному древу Меркла.
Для чего нужно второе древо Меркла?
Второе древо Меркла повышает сложность блока, что некоторые могут посчитать недостатком. SegWit представлял собой обновление протокола сети биткойна, в котором были исправлены основные ошибки, например, квадратичное масштабирование операций хэширования подписи (sighash) и пластичность транзакций. Данные свидетелей невозможно было добавить в основное древо Меркла, так как в противном случае транзакции были были признаны недействительными старыми узлами, что привело бы к образованию хардфорка.
Но нельзя сказать, что появления дополнительного древа Меркл можно было бы избежать, если бы SegWit был обновлением хардфорка, а не софтфорка. Хардфорк, образовавшийся в результате включения данных свидетелей в основное древо Меркл, привел бы к тому, что существующие кошельки посчитали бы новый формат транзакций недействительным. Такие кошельки не поддерживали бы новый формат транзакций, независимо от того, полностью ли они проверяют узлы, или нет. Как следствие, некоторые пользователи не смогли бы взаимодействовать друг с другом, и их средства могли бы просто потеряться в системе (или так казалось бы). В сети биткойна, работающей в реальном времени, обновление такого типа почти невозможно выполнить без существенных сбоев. Поэтому второе древо Меркла, повышающее сложность транзакций, понадобилось бы, даже если бы обновление SegWit было хардфорком.
AsicBoost
Как мы уже объясняли в предыдущей статье об AsicBoost, скрытый AsicBoost требует от майнера найти «коллизии» последних 4 байтов корня Меркла, используя тот факт, что алгоритм хеширования разделяет корень Меркла между двумя блоками данных. Скрытый AsicBoost подразумевает манипуляции с транзакциями, чего нет в открытом AsicBoost. Второе древо Меркла может затруднить использование скрытого AsicBoost, если размер блоков существенно не уменьшится, что можно обнаружить.
Потенциальные минусы и проблемы AsicBoost
Скрытый AsicBoost | Открытый AsicBoost | |
Патентная защита |
Этот потенциальный недостаток AsicBoost присутствует как в скрытой, так и в открытой версии. AsicBoost — запатентованная технология, и, как мы объясняли в статье, посвященной патентам, в системе блокчейна это может быть особенно опасно. Похоже, это один из главных недостатков AsicBoost, поскольку потенциально может дать одной майнинговой компании неоспоримое преимущество перед конкурентами, что приведет к образованию разрыва, который невозможно преодолеть в силу юридических ограничений. Это может подорвать саму суть ценностного предложения биткойна. Не исключено, что биткойновое сообщество создаст софтфорк, чтобы заблокировать AsicBoost, если проблема патентов приобретет большие масштабы. |
|
Меньшие блоки — меньше производительность |
Скрытый AsicBoost может стимулировать создание меньших или даже пустых блоков, что делает его более эффективным по сравнению с открытой версией. Это может привести к снижению производительности сети и увеличению комиссий. |
Н/д |
Нежелание переходить на SegWit и возможное утаивание реальных на то причин |
Пожалуй, самый большой недостаток AsicBoost в том, что он заставил некоторых майнеров отказаться от перехода на SegWit. На первый взгляд, это не такой уж и недостаток, но якобы нечестная кампания дезинформации о SegWit, разделившая криптосообщество на два лагеря, могла оказать значительное негативное влияние на экосистему. Но хотим отметить, что это всего лишь туманное и необоснованное обвинение, и неясно, есть ли связь между AsicBoost и неприятием SegWit. |
Н/д |
Стимул для манипуляций с древами Меркла и транзакциями |
Как показывает схема выше, скрытый AsicBoost дает майнерам возможность выполнять манипуляции с древом Меркла или транзакциями. Это может иметь негативные последствия для сети (за исключением небольших блоков). Открытый AsicBoost кажется намного более честным решением, которое требует изменения только поля в заголовке блока.. |
Н/д |
Тайное конкурентное преимущество |
Скрытый AsicBoost практически невозможно обнаружить, поэтому он может давать использующим его майнерам секретное конкурентное преимущество. Хотя в целом мы считаем, что прозрачность — штука хорошая, неясно, ощущает ли сеть, в которой действует скрытый AsicBoost, какие-либо негативные последствия такой секретности, помимо того, что указано в другом пункте этой таблицы. |
Н/д |
Снижение способности к обновлению софтфорка путем сигнализации версии и предупреждение от Bitcoin Core |
Н/д |
В открытом AsicBoost есть поле версии — на схеме выше оно расположено в верхней левой части. Это поле традиционно используется, чтобы показать, что майнер готов к обновлению путем софтфорка. В открытом AsicBoost это поле может содержать пробел, что может помешать его использованию в качестве сигнала готовности к обновлению.
Однако:
Еще одним недостатком открытого AsicBoost является то, что программное обеспечение Bitcoin Core может расценить необычное поле версии как неизвестное обновление сети и отправить пользователю предупреждение. |
На наш взгляд, технология AsicBoost необязательно плоха для сети. У скрытой версии AsicBoost есть проблема – она стимулирует создание небольших блоков, но большинство проблем открытой версии AsicBoost можно полностью или частично решить. В частности, если система BDPL окажется надежной и эффективной, минусы использования открытого AsicBoost будут сведены к нулю — по крайней мере, в данный момент ничего не приходит на ум.