Стоимость трансфера и резервный баланс
Мотивация
Откладывание выполнения является чрезвычайно мощным, поскольку позволяет выполнению и согласованию происходить параллельно, массово расширяя бюджет времени для выполнения.
Очевидное возражение: теперь, когда у узлов согласования нет актуального представления о состоянии, что мешает им ошибочно включать транзакции с аккаунтов, которые израсходовали все свой газ? Это создаст вектор атаки отказом в обслуживании.
Чтобы защититься от этого, Monad вводит стоимость для транзакции, которая передается по сети («стоимость передачи»), поддерживает резервный баланс для каждого аккаунта, который обновляется во время согласования, и взимает стоимость передачи с резервного баланса.
Стоимость передачи
В Monad есть плата за передачу транзакции по сети в блоке («стоимость передачи»). Это отдельная плата, отличная от стоимости выполнения.
Стоимость передачи необходима для предотвращения спама; стоимость минимальна, но отражает затраты на использование сетевых ресурсов.
Возможно, что транзакция будет включена в согласование (и оплачена за передачу), но не будет иметь достаточного бюджета выполнения относительно указанного лимита газа. В этом случае на момент выполнения транзакция завершится с ошибкой, но будет оплачена газом до момента сбоя. Обратите внимание, что это ничем не отличается от Ethereum: транзакции, отправленные с недостаточным количеством эфира на счете, будут использовать этот эфир и завершаться с ошибкой. Оплата газа до момента сбоя необходима для предотвращения векторов атаки на выполнение.
Резервный баланс
Для каждого адреса узлы поддерживают два баланса:
резервный баланс, используемый для оплаты стоимости передачи;
баланс выполнения, используемый для оплаты выполнения транзакции.
Стоимость передачи удерживается с резервного баланса, когда транзакция включается в блок (согласование); она вычитается из баланса выполнения во время выполнения (двойное удержание) и возвращается на резервный баланс после прохождения периода задержки в D блоков (10 секунд).
Резерв является своего рода бюджетом для "заказов в полёте"; он существует, чтобы гарантировать, что в блоках включаются только те транзакции, за которые была произведена оплата. Вы можете считать, что баланс резерва уменьшается в реальном времени (то есть по мере достижения консенсуса); хотя представление узла о полном состоянии запаздывает, баланс резерва всегда отражает актуальные расходы.
Целевой резервный баланс
Целевой резервный баланс - это параметр для каждого аккаунта. По умолчанию предполагается, что он будет большим множителем (200x) стоимости передачи, чтобы пользователи могли отправлять большое количество заказов в полёте без проблем.
Пользователи, ожидающие отправки большого количества заказов в полёте с одного и того же EOA (внешнего аккаунта) могут изменить целевой резервный баланс, взаимодействуя с заложенным в смарт-контракт. Изменения резервного баланса рассматриваются как выполнение, т.е. они отражаются в резервном балансе только после прохождения периода задержки.
Last updated