Концепции APTOS | Ноды Валидатора
Tags: blockchain, aptos, webdev, tutorial
Published: 2022-08-30 14:16:19

Нода Aptos - это объект экосистемы Aptos, который отслеживает состояние блокчейна Aptos. Пользователи взаимодействуют с блокчейном через ноды Aptos. Существует два типа нод:

- Ноды Валидатора
- Полные ноды
Каждая нода Aptos состоит из нескольких логических компонентов:

- REST-сервис
- Mempool
- Консенсус (отключен в Полных нодах)
- Execution
- Виртуальная машина
- Хранилище
- Синхронизатор состояния

Программное обеспечение Aptos-core может быть настроено для работы в качестве ноды валидатора или полного ноды.

## Обзор

Когда транзакция подается в блокчейн Aptos, ноды-валидаторы запускают распределенный протокол консенсуса, выполняют транзакцию и сохраняют транзакцию и результаты выполнения в блокчейне. Ноды-валидаторы решают, какие транзакции и в каком порядке будут добавлены в блокчейн.

Блокчейн Aptos использует протокол консенсуса Byzantine Fault Tolerance (BFT) для ноды-валидаторов, чтобы согласовать журнал завершенных транзакций и результаты их выполнения. Ноды-валидаторы обрабатывают эти транзакции и включают их в свою локальную копию базы данных блокчейна. Это означает, что актуальные ноды-валидаторы всегда имеют локальную копию текущего состояния блокчейна.

Ноды-валидаторы напрямую общаются с другими нодами-валидатора через частную сеть. Полные ноды (FullNodes) являются внешним ресурсом проверки и/или распространения завершенной истории транзакций. Они получают транзакции от коллег и могут повторно выполнять их локально (так же, как валидатор выполняет транзакции). Полные ноды хранят результаты повторно выполненных транзакций в локальном хранилище. Таким образом, они могут опровергнуть любую нечестную игру со стороны валидаторов и предоставить доказательства в случае попытки переписать или изменить историю блокчейна. Это помогает смягчить последствия коррупции валидаторов и/или сговора.

> Протокол консенсуса AptosBFT обеспечивает отказоустойчивость до одной трети вредоносных нод-валидаторов.


## Mempool
Mempool - это компонент внутри каждой ноды, который хранит в памяти буфер транзакций, которые были представлены в блокчейн, но еще не согласованы или не выполнены. Этот буфер реплицируется между узлами-валидаторами и полными нодами.

Служба JSON-RPC полной ноды отправляет транзакции в mempool ноды валидатора. Mempool выполняет различные проверки транзакций для обеспечения их достоверности и защиты от DOS-атак. Когда новая транзакция проходит первичную проверку и добавляется в mempool, она затем распространяется по mempool других нод-валидаторов в сети.

Когда нода-валидатор временно становится лидером в протоколе консенсуса, консенсус извлекает транзакции из mempool и предлагает новый блок транзакций. Этот блок транслируется другим валидаторам и содержит общее упорядочивание всех транзакций в блоке. Затем каждый валидатор выполняет блок и подает голоса о том, принимать или не принимать предложение нового блока.

## Консенсус

Консенсус - это компонент, который отвечает за упорядочивание блоков транзакций и согласование результатов выполнения путем участия в протоколе консенсуса с другими нодами-валидатора в сети.

## Execution

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

## Виртуальная машина

Виртуальная машина используется для запуска программы Move внутри каждой транзакции и определения результатов выполнения. Mempool нода использует виртуальную машину для выполнения проверок транзакций, а execution использует виртуальную машину для выполнения транзакций.

## Хранилище

Компонент хранилища используется для сохранения согласованных блоков транзакций и результатов их выполнения в локальной базе данных.

## Синхронизатор состояния

Ноды используют свой компонент синхронизатора состояния, чтобы "догнать" последнее состояние блокчейна и оставаться в актуальном состоянии.