Перевод статьи https://cexplorer.io/article/understanding-cardano-s-global-state
Историю блокчейна можно рассматривать как его глобальное состояние. Однако для проверки новых транзакций ноде требуется только часть этой истории. С каждым добавленным блоком блокчейн расширяется, что делает неэффективной проверку новых транзакций в постоянно растущем контексте. В этой статье мы расскажем, как из истории блокчейна формируется глобальное состояние, используемое для проверки новых транзакций и создания новых блоков.
Блокчейн - это всего лишь история транзакций
Блокчейн можно рассматривать как историю транзакций. Каждый блок в цепочке содержит список транзакций, и с добавлением каждого нового блока история блокчейна (и, следовательно, глобальное состояние) меняется.
На рисунке ниже вы можете увидеть корреляцию между новыми добавленными блоками в блокчейн и изменением глобального состояния. Каждый новый добавленный блок представляет собой смену состояния.
Сетевой консенсус - это важнейший механизм, который гарантирует, что все ноды (справедливое большинство нод) в сети соглашаются с текущим состоянием блокчейна. Консенсус позволяет сети безопасно переходить из одного состояния в другое. Другими словами, прежде чем новый блок может быть добавлен в блокчейн, все ноды должны согласовать его валидность.
Чтобы блокчейн функционировал корректно, глобальное состояние на всех нодах распределенной сети должно быть одинаковым. Такая согласованность необходима для обеспечения целостности и безопасности блокчейна, а также для облегчения дальнейших изменений состояния.
Переход к новому состоянию на всех нодах сети происходит не мгновенно. Это постепенный процесс, хотя и кратковременный, из-за задержки в сети. В сети Cardano переход в новое состояние инициируется на ноде, которая генерирует новый блок, и завершается, когда все ноды сети получают этот блок. Если блок действителен и, следовательно, принят всеми нодами, происходит переход состояния, сопровождающийся изменением глобального состояния.
Действительно, изменение глобального состояния отражает не только изменение истории блокчейна. Контекст для проверки последующих блоков также меняется. Этот контекст не является полной историей блокчейна, охватывающей все отдельные транзакции. Вместо этого это подмножество этой истории, в частности, текущий набор UTxO, также называемый состоянием UTxO.
На рисунке вы можете видеть, как каждый блок, добавленный в блокчейн, изменяет текущий набор UTxO (глобальное состояние для проверки нового блока). Набор UTxO претерпел 5 удачных изменений с самого начала (СОСТОЯНИЕ 0), поскольку было добавлено 5 новых блоков.
Каждая нода в распределенной сети работает независимо, поддерживая свою уникальную версию блокчейна и текущий набор UTxO. Всякий раз, когда нода получает запрос на новый блок, который предлагается добавить в конец блокчейна, он должен пройти проверку. Входом для этого процесса проверки являются новый блок и текущий набор UTxO. Наряду с другими параметрами, указанными в хедере блока, ноде необходимо проверить все транзакции внутри блока. Результатом этой проверки является независимое решение ноды о том, включать ли блок в ее локальную версию блокчейна. Аналогичная процедура выполняется на всех нодах сети.
На рисунке вы можете видеть, как происходит проверка нового блока 6, который должен быть добавлен после БЛОКА 5. Входом для проверки являются новый блок и текущий набор UTxO. Результатом проверки является решение валидатора о том, является ли новый блок действительным (и будет добавлен в локальную версию блокчейна) или недействительным.
Состояние UTxO
Каждый раз, когда нода добавляет новый блок в свою локальную версию блокчейна, локальная версия набора UTxO также изменяется.
Состояние UTxO включает в себя все UTxO, которые были созданы как выходы транзакции и потенциально могут быть использованы в будущих транзакциях. Таким образом, это лишь малая часть всех UTxO, представленных за всю историю блокчейна Cardano.
Давайте кратко объясним, что такое UTxO в контексте глобального состояния.
UTxO - это независимые и неизменяемые объекты, которые можно использовать только один раз. Когда они будут израсходованы, они должны быть израсходованы полностью. UTxO - это объекты одноразового использования.
Как только UTxO создается в качестве выхода транзакции, он остается неизменным до тех пор, пока не будет израсходован в новой транзакции. Когда он израсходован, он полностью используется, и в качестве выхода новой транзакции создается новый UTxO.
При отправке транзакции в качестве входа указывается один или несколько UTxO, которые предназначены для дальнейшего расходования.
Когда UTxO на входе используется, это приводит к созданию нового UTxO или, возможно, нескольких новых UTxO. Совокупное количество токенов в UTxO на входах транзакции должно быть равно общему количеству токенов всех UTxO на выходах .
Что касается транзакций, то задача валидатора заключается в проверке того, что:
- Все UTxO на входе действительно являются частью текущего набора UTxO, т.е. они неизрасходованы и находятся в леджере.
- Совокупное количество токенов в UTxO на входах больше или равно общему количеству токенов всех UTxO на выходах, что обеспечивает сохранение ценности.
- Транзакция правильно подписана владельцами UTxO на входе, что гарантирует, что только законные владельцы могут расходовать UTxO.
Историю блокчейна можно представить в виде графика всех UTxO, как израсходованных, так и неизрасходованных. Этот график отображает полную историю всех UTxO, которые когда-либо происходили в блокчейне.
На рисунке ниже вы можете видеть, как UTxO используются транзакциями. UTxO на выходах (зеленые) становятся UTxO на входах (красными) в новых транзакциях. Все нерасходованные UTxO (синие) представляют собой подмножество глобального состояния, которое необходимо для проверки новых транзакций. Все синие UTxO могут стать входами для транзакции, т.е. быть израсходованы. Зеленые UTxO уже израсходованы, поэтому их нельзя израсходовать снова.
Текущее состояние блокчейна, которое требуется для проверки нового блока (новых транзакций в новом блоке), может быть отображено с помощью всех неизрасходованных UTxO. Они включены в состояние UTxO.
Таким образом, для проверки новых транзакций необязательно знать всю историю блокчейна (или иметь ее в текущей памяти). Вместо этого требуется только текущий набор неизрасходованных UTxO (все синие UTxO). Однако получение текущего набора UTxO обычно включает в себя обработку всей истории блокчейна, начиная с блока генезиса.
Важно отметить, что текущий набор UTxO также включает в себя те UTxO, которые были созданы в прошлом, то есть в предыдущих состояниях.
В каждом состоянии на рисунке был создан один блок. В новом состоянии N+5 набор UTxO, содержащий UTxO из состояний N+2, N+3 и N+4, будет использоваться для проверки транзакции. В новом блоке, который был создан в состоянии N+5, есть транзакция 14, пытающаяся расходовать UTxO из транзакции 10, и транзакция 15, пытающаяся расходовать UTxO из транзакции 11.
В состоянии N+5 к блокчейну был добавлен новый блок. Таким образом, также были созданы новые UTxO, которые были добавлены в текущий набор UTxO. При переходе в одно и то же состояние все израсходованные UTxO были удалены из текущего набора UTxO.
На рисунке вы можете видеть состояние UTxO, который состоит из всех неизрасходованных UTxO, независимо от переходов между состояниями.
Пользователи постоянно отправляют новые транзакции, некоторые из которых могут быть отправлены параллельно. Цель сети - обработать все транзакции, что означает, что она стремится включить действительные транзакции в блокчейн. Добавление нового блока в блокчейн означает изменение глобального состояния.
Новые транзакции ссылаются на UTxO из набора UTxO. UTxO из набора служат в качестве входов для всех транзакций и представляют собой часть изменений, которые произойдут при добавлении нового блока в блокчейн. Все UTxO, которые были на входах транзакций во вновь добавленном блоке, будут удалены из набора UTxO.
Каждая транзакция во вновь добавленном блоке включает в себя один или несколько новых UTxO, которые включены в набор UTxO. Это еще одно изменение.
Когда к блокчейну добавляется новый блок, нода одновременно удаляет израсходованные UTxO из набора UTxO и вводит в него вновь созданные UTxO.
На рисунке показано преобразование в наборе UTxO. В состоянии 0 вы видите шесть транзакций, которые будут включены в последующий блок. Красные UTxO - это те, которые служат в качестве входов для транзакции, что означает, что они должны быть израсходованы. Зеленые UTxO - это те, которые должны быть созданы. СОСТОЯНИЕ 1 соответствует состоянию после добавления нового блока. Красные UTxO были удалены из набора UTxO, а зеленые UTxO были добавлены. Следовательно, все UTxO в наборе UTxO можно израсходовать. Считайте, что недавно добавленные зеленые UTxO являются синими.
Транзакции на рисунке относятся к блоку, который был создан и отправлен в сеть в СОСТОЯНИИ 0. В СОСТОЯНИИ 1 он уже был добавлен в блокчейн. В СОСТОЯНИИ 1 уже создается новый блок, который не показан на рисунке. Вы можете представить себе новые транзакции, которые ссылаются на UTxO в наборе UTxO.
Вывод
Действительно, каждый UTxO может быть израсходован только один раз, что является фундаментальным правилом, помогающим предотвратить атаки с двойным расходованием средств. После того, как UTxO был использован, его нельзя использовать повторно в качестве входа для другой транзакции. Во время проверки блока валидатору несложно подтвердить, что все UTxO на входах уникальны и находятся в наборе UTxO. Архитектура модели UTxO в сочетании с процессом проверки транзакций упрощает задачу для валидатора блока по выявлению и предотвращению потенциальных атак с двойным расходованием средств. Это одна из основных функций безопасности технологии блокчейн.
Состояние UTxO, состоящий из одноразовых объектов, обладает преимуществом, поскольку обеспечивает высокий уровень распараллеливания внутри сети. Проверка транзакций осуществляется независимо друг от друга, что отражает независимое использование UTxO. Еще одним преимуществом является возможность локальной проверки транзакций перед отправкой, гарантируя, что они также пройдут проверку в сети. Как локальная, так и сетевая проверки зависят от одних и тех же UTxO на входе. В период между локальной проверкой и сетевой проверкой, перед включением транзакции в блок, UTxO на входах остаются неизменными. Следовательно, не должно быть никаких причин для сбоя транзакции.
// От переводчика: для получения дополнительных переведенных на русский язык статей о Cardano посетите русскоязычный раздел на форуме Cardano. Видеоролики о Cardano на русском языке можно найти на YouTube канале нашего замечательного амбасадора Тимура Сахабутдинова, а также на канале Чарльз Хоскинсон на русском. Хотите поговорить или задать вопрос о Cardano? Тогда приглашаем в наше уютное русскоязычное сообщество Cardano в Telegram. Оставайтесь на связи, все только начинается!