Стоимость трансфера и резервный баланс

Мотивация

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

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

Чтобы защититься от этого, Monad вводит стоимость для транзакции, которая передается по сети («стоимость передачи»), поддерживает резервный баланс для каждого аккаунта, который обновляется во время согласования, и взимает стоимость передачи с резервного баланса.

Стоимость передачи

В Monad есть плата за передачу транзакции по сети в блоке («стоимость передачи»). Это отдельная плата, отличная от стоимости выполнения.

Стоимость передачи необходима для предотвращения спама; стоимость минимальна, но отражает затраты на использование сетевых ресурсов.

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

Резервный баланс

Для каждого адреса узлы поддерживают два баланса:

  • резервный баланс, используемый для оплаты стоимости передачи;

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

Стоимость передачи удерживается с резервного баланса, когда транзакция включается в блок (согласование); она вычитается из баланса выполнения во время выполнения (двойное удержание) и возвращается на резервный баланс после прохождения периода задержки в D блоков (10 секунд).

Резерв является своего рода бюджетом для "заказов в полёте"; он существует, чтобы гарантировать, что в блоках включаются только те транзакции, за которые была произведена оплата. Вы можете считать, что баланс резерва уменьшается в реальном времени (то есть по мере достижения консенсуса); хотя представление узла о полном состоянии запаздывает, баланс резерва всегда отражает актуальные расходы.

Целевой резервный баланс

Целевой резервный баланс - это параметр для каждого аккаунта. По умолчанию предполагается, что он будет большим множителем (200x) стоимости передачи, чтобы пользователи могли отправлять большое количество заказов в полёте без проблем.

Пользователи, ожидающие отправки большого количества заказов в полёте с одного и того же EOA (внешнего аккаунта) могут изменить целевой резервный баланс, взаимодействуя с заложенным в смарт-контракт. Изменения резервного баланса рассматриваются как выполнение, т.е. они отражаются в резервном балансе только после прохождения периода задержки.

Last updated