Вики ZooBC
Транзакции

Группы аккаунтов

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

Один аккаунт, много адресов

Баланс группы, её токены и всё остальное, чем она владеет, находятся на бесключевом адресе группы, производном от транзакции, которая основала группу:

group address = 00000000 ‖ SHA3-256( "ZBC-GROUP" ‖ founding transaction hash )

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

Бесключевой адрес группы с одним балансом, вокруг которого контролёр, участник с правом тратить и участник только на приём; новый адрес вступает, и всё его имущество переходит в группу, старый уходит как новый пустой адрес
Бесключевой адрес группы с одним балансом, вокруг которого контролёр, участник с правом тратить и участник только на приём; новый адрес вступает, и всё его имущество переходит в группу, старый уходит как новый пустой адрес

Группа содержит до 100 адресов, включая контролёра. Участники могут быть любого типа ключа, способного подписывать (ZooBC, Bitcoin, Ethereum, Solana и другие; см. Ключи и типы аккаунтов), и участником может быть также мультиподписной аккаунт.

Вступление

Привязывает новый адрес только контролёр, транзакцией LinkAccount, и только с согласия этого адреса: подписи над дайджестом, привязанным к цепочке, с меткой «ZBC-GROUP-LINK», действительной не более чем на 5 760 блоков (сутки) вперёд и пригодной к использованию один раз. Согласием может быть собственная подпись адреса, пороговое число подписей мультиподписного аккаунта или personal_sign из Ethereum.

Вступление переносит в группу всё, чем владеет адрес, до 1 000 объектов: его баланс, токены, выпущенные токены, наборы данных, файлы, триггеры, расписания, предложения, ордера, спонсорства, а также регистрации узлов и сервисов.

Среди адресов, которые не могут вступить:

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

Выход и передача управления

Участник выходит транзакцией UnlinkAccount и ничего с собой не забирает: адрес начинает заново как новый пустой аккаунт. Всё, что он принёс, остаётся в группе.

Контролёр не может выйти, не передав управление. TransferGroupControl передаёт управление другому участнику, который должен дать согласие подписью с меткой «ZBC-GROUP-CONTROL»; после этого прежний контролёр становится участником только на приём.

Права

Новый участник может только принимать: он может получать платежи для группы и может выйти, но не может тратить. Контролёр меняет это транзакцией SetMemberPermissions:

  • бит 0: участник может тратить ZBC;
  • бит 1: участник может перемещать токены группы (для этого нужен и бит 0);
  • лимит в ZBC за период, где период — от 1 до 2 102 400 блоков (год); лимит 0 означает отсутствие лимита.

Лимит 5 ZBC за 5 760 блоков, например, — это суточное содержание в 5 ZBC.

Некоторые действия принадлежат только контролёру: LinkAccount, SetMemberPermissions, TransferGroupControl, SetSplitPolicy и SetTransactPolicy. Политика разделения группы применяется к деньгам, отправленным любому участнику (см. Политики разделения и транзакций).

Пул группы, у контролёра полные права, замок на привязке, установке прав и передаче управления, а участники помечены как «только приём», «может тратить без лимита», «может тратить 5 ZBC за 5 760 блоков» и «может перемещать токены»
Пул группы, у контролёра полные права, замок на привязке, установке прав и передаче управления, а участники помечены как «только приём», «может тратить без лимита», «может тратить 5 ZBC за 5 760 блоков» и «может перемещать токены»

Как соблюдаются лимиты

Лимит участника — правило консенсуса, а не настройка кошелька:

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

У каждого участника свой слот по правилу одной транзакции на аккаунт в блоке, потому что каждый подписывает своим адресом.

Токены и аренда

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

Группа платит аренду аккаунта, как любой аккаунт, плюс арендную плату за хранение своей записи: 96 байт и адрес контролёра плюс 40 байт и адрес каждого участника. Участники собственной аренды не платят. Группа, которая не может заплатить, распускается, а её оставшаяся пыль уходит в пул долголетия (см. ZBC никогда не сжигается).

См. также