Комиссии
Каждая транзакция ZooBC платит комиссию в ZBC. Её минимум, минимальную комиссию, каждый узел вычисляет одинаково из самой транзакции и нескольких общих для сети параметров, поэтому кошелёк знает его до подписания. Всё, что объявлено сверх минимума, возвращается в том же блоке, а удержанные комиссии идут в лотерею, которая платит зарегистрированным узлам. Ничего не сжигается, и ни один узел или организация не забирает комиссии себе.
Минимальная комиссия
Минимальная комиссия состоит из двух частей:
floor = base action fee × fee scale
+ price of the body and message bytes, kept for the minimum window,
× number of registered nodes
- Базовая комиссия за действие — 2 500 000 атомарных единиц (0,025 ZBC). Отдельной базовой комиссии для каждого типа нет: платёж, выпуск токена и рыночный ордер начинаются с одной и той же базы.
- Шкала комиссий — это комиссия за перевод, по которой голосуют места реестра. Она начинается с 1,0 и может меняться раз в 30-дневный цикл (голосования по ценам).
- Плата за байты оценивает тело и сообщение транзакции, хранимые в течение минимального окна в 17 280 блоков (3 дня) в mainnet, по цене хранения наборов данных. Начиная с версии 0.5.8 она умножается на число зарегистрированных узлов на момент предыдущего блока, потому что каждый узел хранит копию этих байтов.
Поэтому минимальная комиссия простого платежа чуть больше 0,025 ZBC. Метод API узла GET /api/v1/blockchain/estimate-fee возвращает её до подписания.
Транзакция, объявившая меньше своей минимальной комиссии, отклоняется, а блок, который её содержит, недействителен. Тип 0, пустая транзакция, которая ничего не перемещает, тоже должна платить комиссию больше нуля. Узел никогда не отклоняет комиссию за то, что она слишком высокая. Несколько действий, объединённых в одну транзакцию, платят сумму того, что каждое действие заплатило бы отдельно, причём сообщение оплачивается один раз (одна транзакция на аккаунт в блоке и пакеты), и каждая вычисленная плата округляется вверх как минимум до одной атомарной единицы.
Переплата возвращается
Вы можете объявить больше минимума. Когда блок применяется, с вашего аккаунта списывается вся объявленная комиссия, а часть сверх минимума сразу же возвращается в том же блоке отдельной записью о возврате в истории вашего аккаунта. Например, платёж в testnet, объявивший 0,02550004 ZBC, был списан на 0,02500003 ZBC, а 0,00050001 ZBC вернулись. Поэтому переплата по ошибке ничего не стоит.
Но переплата ничего и не покупает. Пул ожидания узла упорядочивает транзакции по комиссии в расчёте на байт, которую узел действительно оставит себе, — а это минимальная комиссия, потому что переплата возвращается; при равенстве решает время поступления, затем идентификатор транзакции. Комиссия в десять раз выше минимальной даёт то же место, что и минимальная: более высокая комиссия не покупает ни более раннего места, ни защиты от вытеснения, когда пул заполнен, и не может вытолкнуть другие транзакции.
Куда уходят комиссии
Все комиссии, которые блок удерживает, попадают в его пул вознаграждения вместе с только что выпущенными монетами и долей пула долголетия, и лотерея coinbase распределяет этот пул между зарегистрированными узлами пропорционально их оценке участия. Узел, создавший блок, не имеет особых прав на комиссии. Они не сжигаются (ZBC никогда не сжигается), и ZooBC Foundation не берёт себе долю.
Один отдельный платёж устроен иначе. На встроенных рынках комиссия тейкера по сделке — 0,1 % в начале, удерживаемая из того, что получает тейкер, — достаётся производителю блока; мейкеры её не платят (рынки и ордера).
Обязанности без комиссии
Некоторые транзакции — это работа, которую узел выполняет для сети, а не для себя. Такие обязанности должны объявлять комиссию ровно ноль и исходить с собственного аккаунта зарегистрированного узла — адреса, построенного из его ключа узла:
- SubmitStorageProof — доказательство узла, что он хранит свои фрагменты хранимых файлов (пул децентрализованного хранения);
- AttestEvent — аттестация события узлом, на которую опираются триггеры, мост и вето релизов (триггеры и аттестации);
- SetConsensusParam, FeeVoteCommitment и FeeVoteReveal — голосования мест по ценам (голосования по ценам);
- EquivocationReport — доказательство того, что производитель подписал два блока на одном родителе (двойное подписание (эквивокация));
- подтверждение активности зарегистрированного узла, отправляемое как QueueAttendance с комиссией 0 (пропущенные ходы, приостановка и исключение).
Обязанность с любой другой комиссией или отправленная с любого другого ключа отклоняется. Бесплатно не значит без ограничений: у узла может быть не больше одной ожидающей обязанности на объект обязанности (один фрагмент хранения в одной эпохе, одно событие, один параметр, одно окно голосования), а обязанности идут по собственной полосе пула ожидания узла, так что обычный трафик не может их вытеснить.
Другие платежи
Некоторые возможности несут собственные платежи помимо комиссии, и они никогда не возвращаются: аренда эскроу (эскроу), депозит долговечности, который сохраняет транзакцию после обрезки истории (плата за сохранение данных (долговечность)), и содержание токена (содержание токена (продление)). Они попадают в пул долголетия, который в каждом блоке выплачивает узлам долю (пулы).