# Жизненный цикл транзакции в Monad

## Отправка транзакции <a href="#transaction-submission" id="transaction-submission"></a>

Жизненный цикл транзакции начинается с того, что пользователь подготавливает подписанную транзакцию и отправляет ее на узел RPC.

Транзакции обычно подготавливаются фронтендом приложения, затем представляются кошельку пользователя для подписи. Большинство кошельков делают вызов RPC `eth_estimateGas` для заполнения **предела** газа для этой транзакции, хотя пользователь также может переопределить это в своем кошельке. Обычно у пользователя также спрашивают, какую **цену** газа он хочет установить для транзакции, которая представляет собой количество нативных токенов за единицу газа.

После того как пользователь подтверждает подпись в своем кошельке, подписанная транзакция отправляется на узел RPC с использованием вызова API `eth_sendTransaction` или `eth_sendRawTransaction`.

Следует отметить, что в Monad лимит газа является суммой газа передачи и газа выполнения. Газ передачи является постоянным значением.

## Передача памяти пула

Узел RPC пересылает ожидающую транзакцию другим узлам Monad, участвующим в согласовании. Набор ожидающих транзакций неофициально называется "памятью пула" (mempool). Дополнительные сведения о поведении[ памяти пула](https://prufiox.gitbook.io/monad-dlya-razrabotchikov/tekhnicheskoe-obsuzhdenie/konsensus/obshii-pul-tranzakcii-mempool) можно найти в документации по памяти пула.

Из соображений предотвращения спама узлы добавляют транзакцию в свою память пула только в том случае, если в резервном балансе [достаточно газа](https://prufiox.gitbook.io/monad-dlya-razrabotchikov/tekhnicheskoe-obsuzhdenie/konsensus/stoimost-transfera-i-rezervnyi-balans).

## Добавление в блок

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

Блоки распространяются по сети в соответствии с протоколом [MonadBFT](https://prufiox.gitbook.io/monad-dlya-razrabotchikov/tekhnicheskoe-obsuzhdenie/konsensus/monadbft). Кворумный сертификат (QC) для данного блока распространяется на следующем раунде согласования (т.е. отправляется следующим лидерам). После получения QC узлы голосуют друг за друга; когда узел видит, что 2/3 стейк-веса голосует "за", он окончательно фиксирует этот блок.

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

## Локальное выполнение

Как только узел завершает фиксацию блока, он начинает выполнение транзакций из этого блока. В целях эффективности транзакции выполняются [оптимистично параллельно](https://prufiox.gitbook.io/monad-dlya-razrabotchikov/tekhnicheskoe-obsuzhdenie/vypolnenie/parallelnoe-vypolnenie), но это также, как если бы транзакции выполнялись последовательно, поскольку результаты всегда фиксируются в исходном порядке.

## Запрос результата

Пользователь может запросить результат транзакции, вызвав методы `eth_getTransactionByHash` или `eth_getTransactionReceipt` на любом узле RPC. Узел RPC вернет результат, как только выполнение завершится локально на узле.
