Перейти к содержанию

Робот совета

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

Стол «Робот совета» видят только члены совета. Председатель дополнительно управляет автоматической подписью протоколов и видит страницу состояния робота.

Как устроено делегирование

  1. Член совета на странице «Действия автоматизации» по каждому типу решения выбирает, как робот голосует за него, и нажимает «Сохранить настройки»:
  2. Вручную — робот не трогает, голосует человек;
  3. Сразу — робот голосует «за» в момент появления повестки; для потоков, где совет заранее принял правило и проверять нечего;
  4. Как ‹член совета› — робот голосует так же, как выбранный член совета, и только после него: «за» → «за», «против» → «против», не проголосовал — робот молчит. Для решений, где документ должен проверить конкретный человек: совет договаривается, кто проверяет, остальные повторяют его голос. Повтор работает и по цепочке: если Анна повторяет за Петром, а Пётр — за председателем, голос Анны придёт вслед за голосом Петра.
  5. При первом сохранении на устройстве создаётся новый ключ. На аккаунте члена совета появляется отдельное разрешение «robot», привязанное только к голосованию в совете. Приватный ключ передаётся роботу по защищённому каналу и на устройстве не сохраняется. В блокчейн ключ не попадает.
  6. Настройки записываются в реестр автоматизаций контракта совета: имя разрешения, типы решений «сразу», пары «тип → за кем повторять», у председателя — типы решений, протоколы которых робот подписывает за него. Повторять за самим собой и за членом совета без права голоса контракт не даёт.
  7. Контракт при каждом голосе и каждом утверждении проверяет, что ключ подписи принадлежит заявленному разрешению аккаунта члена совета и что тип решения делегирован. Подпись чужим ключом или по неделегированному типу отклоняется.

Отзыв делается кнопкой «Отозвать делегирование»: запись в реестре стирается, разрешение снимается с аккаунта, ключ удаляется у робота. После отзыва робот не может подписать ничего от имени этого члена совета, даже если копия ключа где-то осталась.

Кворум робота

Решение принимается, когда «за» проголосовало больше половины состава совета. Робот доводит решение до протокола сам, только если делегировавших голоса членов совета с переданными ключами хватает для этого порога и председатель делегировал подпись протокола этого типа. Всё это видно в реестре по каждому типу решения:

  • кто из членов совета голосует сразу, кто за кем повторяет, передал ли ключ;
  • сколько голосов робот подаёт сразу, сколько придёт вслед за каждым ведомым, и сколько нужно: «кворум сразу», «кворум после голоса ‹X›» или «не набирается»;
  • подписывает ли протокол робот или председатель вручную;
  • правила, которые не сработают: замкнутый круг («Пётр и Анна повторяют друг за другом — никто не проголосует первым») или ведомый без права голоса.

Если кворума робота нет, робот голосует за тех, кто делегировал, а решение остаётся в повестке для ручного голосования. Протокол подписывается, когда кворум набран.

Что делает робот с решением

  1. Получает новую повестку делегированного типа и подаёт одной транзакцией голоса тех, кто выбрал «сразу», и тех, чей ведомый уже проголосовал. Остальные повторяющие ждут — в журнале это этап «ждёт голоса» с именами тех, кого ждут.
  2. Каждый новый голос по решению, ручной или робота, заново оценивает запись: кто из повторяющих теперь может голосовать. Голоса ложатся в блокчейн, робот проверяет кворум.
  3. Собирает протокол по шаблону этого типа решения, подписывает его ключом разрешения председателя и второй транзакцией утверждает и исполняет решение.

Каждый шаг записывается в журнал: этап, голоса, транзакции, ошибки. Сбой не теряется: робот повторяет попытку с растущей паузой, а после исчерпания попыток решение помечается как застрявшее и ждёт ручного повтора председателем на странице «Состояние робота».

Пределы полномочий

  • Робот не голосует и не подписывает по типам решений вне делегированного списка.
  • В режиме «как ‹член совета›» робот не голосует, пока ведомый не проголосовал, и повторяет его голос буквально — в том числе «против».
  • Робот не имеет активных ключей членов совета и не хранит ключи в блокчейне.
  • Ручной голос активным ключом принимается всегда, независимо от делегирования.
  • Срок действия делегирования, если задан, проверяет контракт: просроченное делегирование не действует.