Вики ZooBC
Токены и рынки

Политики разделения и транзакций

Две настройки аккаунта определяют, что до него доходит. Политика разделения пересылает фиксированные доли каждого входящего зачисления, в ZBC или в любом токене, на адреса числом до десяти: роялти, выручка, разделённая между партнёрами, или автоматические сбережения. Политика транзакций отклоняет целые категории транзакций в обоих направлениях, так что, например, никто не может прислать аккаунту нежелательные токены. Каждая задаётся одной транзакцией и действует, пока её не изменят.

Политика разделения

Транзакция SetSplitPolicy (тип 54) перечисляет до 10 получателей, у каждого — доля в базисных пунктах (100 базисных пунктов составляют 1 %):

  • каждая доля не меньше 1 базисного пункта, а все доли вместе — не больше 10 000 (100 %);
  • ни один получатель не может встречаться дважды, и аккаунт не может назвать себя;
  • каждый получатель должен быть способен хранить средства.

Тело 00 сбрасывает политику.

Что делится

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

Каждая доля — это floor(amount × basis points ÷ 10,000), а всё, что не распределено, включая остатки от округления, остаётся на аккаунте. Доли не каскадируются: собственная политика разделения получателя не применяется к тому, что он получает через разделение, поэтому деньги не могут ходить по кругу. Получатель, политика транзакций которого отклоняет платежи, пропускается, и его доля остаётся на аккаунте.

100 единиц поступают на аккаунт, разделитель которого отправляет 30 на A и 20 на B и оставляет 50; собственный разделитель A для этой доли отключён: каскада нет
100 единиц поступают на аккаунт, разделитель которого отправляет 30 на A и 20 на B и оставляет 50; собственный разделитель A для этой доли отключён: каскада нет

В группе аккаунтов политику задаёт только контролёр, и политика группы применяется к деньгам, отправленным любому участнику. Адрес с политикой разделения не может вступить в группу.

Политика транзакций

Транзакция 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, типы долговечности и типы групп аккаунтов.

Девять переключателей категорий, «Токены» выключены; входящий перевод токенов останавливается у ворот, его комиссия уходит в пул вознаграждения, а токены возвращаются отправителю
Девять переключателей категорий, «Токены» выключены; входящий перевод токенов останавливается у ворот, его комиссия уходит в пул вознаграждения, а токены возвращаются отправителю

Как работает отклонение

Узел отклоняет транзакцию, которую запрещает политика, сразу при её отправке. Если блок всё же её несёт, она отскакивает: отправитель платит комиссию, и ничего не перемещается. Проверяется только получатель, названный в конверте транзакции, в момент её исполнения. Платежи, которые цепочка делает позже от имени более ранней транзакции, например платежи расписаний, освобождения триггеров и выплаты потоков, всё равно доходят до получателя, который отказался от таких транзакций.

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

См. также