Как Cardano войдет в эпоху Shelley

Перевод с английской статьи

В сегодняшней статье мы погрузимся в технические подробности, связанные с переходом протокола Cardano в эпоху Shelley. Вы сможете прочитать о хард-форках, а так же об инструменте, имеющем название Комбинатор хард-форка, который позволяет плавно переключаться между двумя версиями протокола.


Очень быстрый апгрейд колес в боксе.

Работа над проектом никогда не заканчивается

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

Каждый блокчейн-проект состоит из нескольких ключевых компонентов. Наиболее важными из них являются сетевой уровень, механизм консенсуса и бухгалтерский регистр. Существует зависимость между компонентами снизу вверх. Таким образом, это означает, что сначала блок попадает на сетевой уровень узла, где принимается решение, пропускать его дальше или нет. Дальнейшее решение об обновлении регистра принимает механизм консенсуса. Если блок принят, то он может быть добавлен в блокчейн.

Если копнуть немного глубже, то сетевой уровень отвечает за соединение узлов, выбор одноранговых узлов и передачу данных через интернет. Блоки и транзакции распределяются по интернету от узла к узлу. Узлы поддерживают мемпул в котором хранится набор всех транзакций, которые пока что не подтвердились и ожидают своей очереди для добавления в блок. Когда узел получает право на создание блока, он выбирает транзакции из мемпула и добавляет их в новый блок. Блоки, полученные сетевым уровнем, в дальнейшем используются механизмом консенсуса, который отвечает за проверку транзакций, принятие блоков и в основном выбирает цепочку, которая считается достоверной. В один момент времени в наличии может быть несколько конкурирующих цепочек, и механизм консенсуса должен выбрать одну из них. Механизм консенсуса также отвечает за принятие решения о создании блока. Механизм консенсуса принимает решения, основанные на текущем состоянии регистра. Необходимо поддерживать состояние, которое помогает принять решение о внедрении блока или отказа от него. Принятие нового блока изменяет состояние регистра и влияет на принятие следующего блока. Очень важно сделать компоненты максимально абстрактными и независимыми. Это облегчает внесение изменений в компоненты. Это также полезно для тестирования. Например, можно протестировать механизм консенсуса с помощью множества различных регистров. Или наоборот, он позволяет тестировать один и тот же регистр с помощью различных механизмов консенсуса.

Разветвление блокчейна

Блокчейны обычно модернизируются с помощью софтфорков и хардфорков. Команда разработчиков выпускает новую версию клиентского программного обеспечения с новыми функциями и объявляет об этом публично. Операторы узлов, включая операторов пулов, могут решить, заинтересованы ли они в обновлении. Вопрос всегда заключается в том, являются ли изменения в новой клиентской программе обратно совместимыми. Предположим, что новый клиент способен производить новую версию блоков. Если при этом старая версия клиента также способна работать с новой версией блоков, то это просто софтфорк. Мы можем сказать, что это изменение обратно совместимо. Операторы узлов могут не обновляться до новой версии клиента, и как старые, так и новые клиенты будут поддерживать один и тот же блокчейн.

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

В случае, когда новые клиенты поддерживают более длинную цепочку, а старые клиенты поддерживают более короткую, измеренную с точки зрения хардфорка, операторы старых клиентов вынуждены будут обновляться, чтобы участвовать в поддержании выигрышной цепочки. Обратите внимание, что абсолютное число старых или новых клиентов не определяет более длинную цепочку. Доминирование консенсуса в сети фактически определяет выигрышную цепочку. Если группа с более новой версией клиента имеет более высокую ставку, то она выиграет и будет поддерживать более длинную цепочку, несмотря на то, что абсолютное число узлов у нее меньше, чем число узлов у старых клиентов.

Команда разработчиков, естественно, надеется, что большинство операторов узлов обновят свои узлы до более новой версии клиента, и цепочка, состоящая из новой версии блоков, выиграет сразу после хардфорка. Цепочка, поддерживаемая старыми клиентами, скорее всего, исчезнет, потому что никто не заинтересован в ее поддержании. В этом случае можно сказать, что операторы приняли изменения, внесенные командой.

Хардфорк может быть довольно опасным из-за существования двух отдельных цепочек после активации. Однако в некоторых случаях предполагается именно такое поведение. Если новый проект должен быть создан с помощью хардфорка, то одновременно должны поддерживаться обе цепочки. Разветвление - это механизм обновления клиентов до более новых версий. Однако хардфорк может также создать новый проект, который вырастет из старого. И в этом случае обе цепи поддерживаются после хардфорка. Одна цепочка - старые клиенты, вторая - новые. В обоих случаях новые блоки должны постоянно добавляться. Примером такой ситуации является Ethereum Classic, который был создан на основе блокчейн-истории Ethereum. Биржи должны принять цепочку, и для новой монеты должен быть выбран новый тикер. Если будет создан новый проект, то любой, у кого были какие-либо монеты в оригинальном блокчейне, также будет иметь эти монеты в новом. После хардфорка обе цепочки имеют одинаковое прошлое, то есть одинаковые блоки и транзакции. Оно меняется в точке хардфорка, и будущее начинает отличаться для обеих цепочек.

Комбинатор хардфорка

Дизайн, описанный в первой главе, очень полезен, когда требуется обновить проект. Модернизация блокчейна сложна, и часто говорят, что это похоже на попытку заменить двигатель автомобиля, когда вы едете со скоростью 300 км/ч. Блокчейн глобален по своей природе, поэтому всегда есть прайм-тайм в каком-то месте на планете. Блокчейн не может быть остановлен на некоторое время только из-за обновления протокола. Пользователи должны заботиться только об обновлении кошелька и в идеальном случае ничего не замечать.

Все в экосистеме Cardano должны загрузить программное обеспечение, совместимое с Shelley, до хардфорка. Операторы стейк пулов должны будут загрузить новую клиентскую версию узла. Пользователям придется загрузить новый кошелек Daedalus. Новая версия клиента будет содержать код, необходимый для изменения. Это означает, что клиент может работать как с блоками Byron и Shelley, так и с регистрами. В настоящее время, до перехода к эпохе Shelley, основная сеть использует механизм консенсуса Ouroboros Byzantine Fault Tolerance (OBFT) в сети Byron. После запуска хардфорка Shelley узлы начнут производить и принимать исключительно блоки Shelley, и только блоки Shelley будут добавлены в регистр. Консенсус Ouroboros Praos заменит консенсус OBFT. Обратите внимание, что в нем уже присутствует логика ставок, реализованная в консенсусе Ouroboros Praos. В коде клиента Byron не было ничего, связанного со ставкой.

Там будет выбран блок, который вызовет изменение и переместит протокол из эпохи Byron в эпоху Shelley. Команда IOHK создала для этой цели комбинатор хардфорка, и он будет включен в новую версию клиента. Комбинатор хардфорка позволит узлу перейти от одной версии протокола блокчейна к другой. Комбинатор способен совместить два протокола таким образом, что пользователи не заметят переключения протоколов. Комбинатор может позволить узлу работать с первым протоколом вплоть до момента переключения на второй. Это произойдет мгновенно, сразу же после запуска хардфорка. Если вы помните нашу аналогию с автомобилем, то комбинатор хардфорка позволит надлежащим образом поменять мотор во время езды.

Переключение между протоколами без прерывания является сложной задачей для комбинатора хардфорка. В протоколе Cardano время разделено на эпохи, и каждая эпоха состоит из заданного количество слотов. Количество слотов изменится при активации хардфорка. Если более детально углубиться, то длина слотов также изменится с 20 секунд до 2 секунд или, возможно, даже до 1 секунды. В какой-то момент протокол должен перейти к новому консенсусному механизму и регистру. Это должно произойти на всех узлах в мире. Cardano должен просто продолжать выполнять сетевой консенсус и добавлять блоки в блокчейн без перерыва.

Резюме

Ожидается, что в будущем произойдет гораздо больше изменений в протоколе Cardano, при которых комбинатор хардфорка будет использоваться снова и снова. После эпохи Shelley будут эпохи Goguen, Basho, и Voltaire, и в каждой из них будет использоваться комбинатор. Комбинатор облегчит плавный переход от одной версии протокола к другой. Это невидимая, но очень важная и сложная часть программного обеспечения. Cardano создан таким образом, что позволяет расширять набор функций, и для этого существует механизм, который позволяет это сделать.