Политики разделения и транзакций
Две настройки аккаунта определяют, что до него доходит. Политика разделения пересылает фиксированные доли каждого входящего зачисления, в ZBC или в любом токене, на адреса числом до десяти: роялти, выручка, разделённая между партнёрами, или автоматические сбережения. Политика транзакций отклоняет целые категории транзакций в обоих направлениях, так что, например, никто не может прислать аккаунту нежелательные токены. Каждая задаётся одной транзакцией и действует, пока её не изменят.
Политика разделения
Транзакция SetSplitPolicy (тип 54) перечисляет до 10 получателей, у каждого — доля в базисных пунктах (100 базисных пунктов составляют 1 %):
- каждая доля не меньше 1 базисного пункта, а все доли вместе — не больше 10 000 (100 %);
- ни один получатель не может встречаться дважды, и аккаунт не может назвать себя;
- каждый получатель должен быть способен хранить средства.
Тело 00 сбрасывает политику.
Что делится
Политика применяется к каждому входящему зачислению, в ZBC и в токенах: платежам, выплатам из эскроу, триггерам, выплатам потоков, платежам с вестингом, переводам токенов, исполнению сделок, выплатам приложений и вознаграждениям. Она не применяется к возвратам собственных денег аккаунта (например, эскроу, вернувшемуся к отправителю), к платежам расписаний в режиме списания и к выпускам через мост.
Каждая доля — это floor(amount × basis points ÷ 10,000), а всё, что не распределено, включая остатки от округления, остаётся на аккаунте. Доли не каскадируются: собственная политика разделения получателя не применяется к тому, что он получает через разделение, поэтому деньги не могут ходить по кругу. Получатель, политика транзакций которого отклоняет платежи, пропускается, и его доля остаётся на аккаунте.
В группе аккаунтов политику задаёт только контролёр, и политика группы применяется к деньгам, отправленным любому участнику. Адрес с политикой разделения не может вступить в группу.
Политика транзакций
Транзакция SetTransactPolicy (тип 50) записывает на аккаунт 2-байтовую маску. Каждый бит отклоняет одну категорию транзакций в обоих направлениях: аккаунт не будет ни отправлять, ни получать их.
| Бит | Категория |
|---|---|
| 0 | Платежи (Payments) |
| 1 | Приложения (Apps) |
| 2 | Токены (Tokens) |
| 3 | Обмен (Exchange) |
| 4 | Хранение данных (Data storage) |
| 5 | Эскроу и мультиподпись (Escrow and multisignature) |
| 6 | Инфраструктура узлов (Node infrastructure) |
| 7 | Мост (Bridge; AttestEvent) |
| 8 | Управление (Governance) |
Несколько типов никогда не отклоняются: Empty, SetTransactPolicy, SetSplitPolicy, типы долговечности и типы групп аккаунтов.
Как работает отклонение
Узел отклоняет транзакцию, которую запрещает политика, сразу при её отправке. Если блок всё же её несёт, она отскакивает: отправитель платит комиссию, и ничего не перемещается. Проверяется только получатель, названный в конверте транзакции, в момент её исполнения. Платежи, которые цепочка делает позже от имени более ранней транзакции, например платежи расписаний, освобождения триггеров и выплаты потоков, всё равно доходят до получателя, который отказался от таких транзакций.
Политика транзакций — не настройка комиссий, поскольку комиссии следуют из минимальной комиссии каждой транзакции, и она не выбирает производителей блоков, которых цепочка определяет жеребьёвкой. О лимитах расходов для участников общего аккаунта см. Группы аккаунтов.