Управление ролями участников¶
Список возможных ролей в блокчейн-платформе приведен в разделе «Авторизация участников».
Важно
Обязательным условием для изменения полномочий участников (добавления или удаления ролей) является наличие приватного ключа участника с ролью «permissioner» в keystore ноды, с которой осуществляется запрос.
Вариант №1 (через REST API)¶
Управление полномочиями участника выполняется путем подписания (метод sign) и рассылки (метод broadcast) permission-транзакций через REST API ноды.
Объект запроса для метода sign:
{
"type":102,
"sender":3GLWx8yUFcNSL3DER8kZyE4TpyAyNiEYsKG,
"senderPublicKey":4WnvQPit2Di1iYXDgDcXnJZ5yroKW54vauNoxdNeMi2g,
"fee":0,
"proofs":[""],
"target":3GPtj5osoYqHpyfmsFv7BMiyKsVzbG1ykfL,
"opType":"add",
"role":"contract_developer",
"dueTimestamp":null
}
Поля запроса:
type - тип транзакции для управления полномочиями участников (type = 102);
sender - адрес участника с полномочиями на выпуск permission-транзакций;
proofs - подпись транзакции;
target - адрес участника, для которого требуется установить или удалить полномочия;
role - полономочия участника, которые требуется установить или удалить. Возможные значения: «miner», «issuer», «dex», «permissioner», «blacklister», «banned», «contract_developer», «connection_manager»;
opType - тип операции «add» (добавить полномочия) или «remove» (удалить полномочия);
dueTimestamp - дата действия permission в формате timestamp. Поле является опциональным.
Полученный ответ от ноды передать методу broadcast.
Вариант №2 (через утилиту)¶
Используя утилиту Generators возможно автоматизировать процесс.
Пример запуска из консоли:
java -jar generators.jar GrantRolesApp [configfile]
Пример конфига:
permission-granter {
waves-crypto = no
chain-id = T
account = {
addresses = [
"3N2cQFfUDzG2iujBrFTnD2TAsCNohDxYu8w"
]
storage = ${user.home}"/node/keystore.dat"
password = "some string as password"
}
send-to = [
"devnet-aws-fr-2.we.wavesnodes.com:6864"
]
grants = [
{
address: "3N2cQFfUDzG2iujBrFTnD2TAsCNohDxYu8w"
assigns = [
{
permission = "miner",
operation = "add",
due-timestamp = 1527698744623
},
{
permission = "issuer",
operation = "add",
due-timestamp = 1527699744623
},
{
permission = "blacklister",
operation = "add"
},
{
permission = "permissioner",
operation = "remove"
}
]
}
]
txs-per-bucket = 10
}
Поле «due-timestamp» ограничивает время действия роли; Поля nodes, roles - обязательные.
Если у ноды уже задана какая-либо из ролей, которая задана в конфиге, то ситуация обрабатывается в соответствии с правилами:
Текущее состояние ноды |
Состояние полученное из транзакции |
Результат обработки |
---|---|---|
Роль не назначена |
Новая роль |
Success - назначается роль |
Назначена роль без dueDate |
Роль c dueDate |
Проверка dueDate, если меньше текущей, то IncorrectDatetime, иначе Success - назначается роль с duedate |
Назначена роль с dueDate |
Роль с dueDate |
Проверка dueDate, если меньше текущей, то IncorrectDatetime, иначе Success - обновление dueDate |
Назначена роль с dueDate |
Роль без dueDate |
Success - назначается роль без dueDate |
Назначена роль с/без dueDate |
Удаление роли |
Проверка адреса ноды, если <> адресу генезиса, то Success - удаляется роль |