Управление

Назначение смарт-контракта golos.ctrl

Смарт-контракт golos.ctrl содержит логику выбора делегатов, в том числе процедуру регистрации аккаунта как делегата, процедуру голосования за делегата, а также определение списка наиболее рейтинговых делегатов.

Общее

В смарт-контракте управления находятся настройки, которые относятся к приложению в целом и которые изменяют параметры каких-либо подсистем (например, распределение эмиссии между пулами). Логика смарт-контракта управления позволяет другим смарт-контрактам получать значения этих настроек, в том числе: кривых графиков выплат, процентных соотношений распределяемых средств по пулам, ограничений на ресурсы батареек).

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

Параметры, устанавливаемые в смарт-контракте golos.ctrl

ctrl_param, types: [
    symbol_code ctrl_token,
    name multisig_acc,
    uint16_t max_witnesses,
    struct multisig_perms {
        uint16_t super_majority,
        uint16_t majority,
        uint16_t minority
    }, 
    uint16_t max_witness_votes,
    struct update_auth {
        uint32_t period
    }
]

Параметры:

  • ctrl_token — символ токена (тип данных, однозначно определяющий токен):

    • имя токена, состоящее из набора прописных букв;

    • поле, задающее точность стоимости токена в виде количества знаков после запятой.

  • multisig_acc — имя аккаунта, контролирующего многопользовательскую авторизацию;

  • max_witnesses — максимально допустимое количество делегатов, которое может принимать решение (подписывать транзакции) от имени приложения. Перечень таких делегатов содержит multisig_acc;

  • multisig_perms — необходимое количество подписей от верхушки делегатов, дающее разрешение (англ. permission) на выполнение действий от имени делегатов приложения. В зависимости от важности параметра на его изменение требуется соответствующий уровень разрешения. Имеется три уровня разрешения:

    • super_majority — высокий уровень разрешения, на получение которого требуется не менее «двух третей плюс один» голосов верхушки списка делегатов (если параметр "0", принимается умолчательное значение — "2/3+1");

    • majority — средний уровень разрешения, на получение которого требуется не менее «половины плюс один» голосов верхушки списка делегатов (если параметр "0", принимается умолчательное значение — "1/2+1");

    • minor_majority — низкий уровень разрешения, на получение которого требуется не менее «одной трети плюс один» голосов верхушки списка делегатов (если параметр "0", принимается умолчательное значение — "1/3+1");

  • max_witness_votes — максимально допустимое количество делегатов, за которое может проголосовать пользователь приложения;

  • update_auth — параметр, определяющий частоту обновления авторизации для аккаунта multisig_acc:

    • period — период обновления (в секундах). Повторная смена авторизации для аккаунта не выполняется, если с момента последнего обновления не прошло указанное количество секунд.

Операции-действия, применяемые в смарт-контракте golos.ctrl

Смарт-контракт golos.ctrl поддерживает следующие операции-действия: setparams, validateprms, regwitness, unregwitness, stopwitness, startwitness, votewitness, unvotewitn, changevest.

setparams

Операция-действие setparams используется для настройки параметров смарт-контракта golos.ctrl. Операция-действие имеет следующий вид:

void control::setparams(vector<ctrl_param> params)

Параметр params — значение в виде структуры, содержащей поля с настраиваемыми параметрами.

validateprms

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

void control::validateprms(vector<ctrl_param> params)

Параметр params — значение в виде структуры, содержащей проверяемые параметры.

regwitness

Операция-действие regwitness используется для регистрации кандидатов в делегаты приложения. Операция-действие regwitness имеет следующий вид:

void control::regwitness(
    name witness,
    string url
)

Параметры:

  • witness — имя кандидата в делегаты приложения;

  • url — адрес веб-сайта, откуда можно получить информацию о кандидате в делегаты, в том числе о мотивах, по которым он изъявил желание стать делегатом. Длина строки адреса не должна превышать 256 символов.

Выполнение операции-действия regwitness требует подписи самого кандидата в делегаты witness.

unregwitness

Операция-действие unregwitness используется для снятия кандидатуры пользователя из числа зарегистрированных в качестве кандидатов в делегаты приложения. Операция-действие unregwitness имеет следующий вид:

void control::unregwitness(name witness)

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

Вызвать unregwitness может как сам кандидат в делегаты (в случае самоотвода), так и делегат, усмотревший какое-либо несоответствие возможностей кандидата в делегаты желаемым требованиям к делегату, а также несоответствие данных, опубликованных на веб-сайте, его актуальным данным.

Условия выполнения операции-действия unregwitness:

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

  • транзакция должна быть подписана самим кандидатом в делегаты witness.

stopwitness

Операция-действие stopwitness используется для временного прекращения активных действий делегата (или кандидата в делегаты). Операция-действие имеет следующий вид:

void stopwitness(name witness)

Параметр witness — имя аккаунта делегата (или кандидата в делегаты), активность которого временно прекращается.

Условия выполнения операции-действия stopwitness:

  • аккаунт witness должен быть активным;

  • транзакция должна быть подписана аккаунтом witness.

Активность аккаунта witness может быть продолжена после выполнения им операции-действия startwitness

startwitness

Операция-действие startwitness используется для возобновления приостановленных активных действий делегата (или кандидата в делегаты). Операция-действие имеет следующий вид:

void startwitness(name witness)

Параметр witness — имя аккаунта делегата (или кандидата в делегаты), активность которого возобновляется.

Условия выполнения операции-действия startwitness:

  • активность аккаунта witness должна быть приостановлена, то есть ранее должна быть выполнена операция stopwitness;

  • транзакция должна быть подписана аккаунтом witness.

votewitness

Операция-действие votewitness используется для голосования за кандидата в делегаты приложения. Операция-действие votewitness имеет следующий вид:

void control::votewitness(
    name voter,
    name witness
)

Параметры:

  • voter — имя аккаунта, голосующего за кандидата в делегаты;

  • witness — имя кандидата в делегаты, за которого отдается голос.

Выполнение операции-действия votewitness требует подписи аккаунта voter.

Ограничения:

  • имя кандидата в делегаты witness предварительно должно быть зарегистрировано через вызов regwitness;

  • количество голосов, отданных аккаунтом voter за кандидаты в делегаты, не должно превышать значение параметра max_witness_votes.

unvotewitn

Операция-действие unvotewitn используется для снятия ранее отданного голоса за кандидата в делегаты приложения. Операция-действие unvotewitn имеет следующий вид:

void control::unvotewitn(
    name voter,
    name witness
)

Параметры:

  • voter — имя аккаунта, который намеревается снять свой ранее отданный голос за кандидата в делегаты;

  • witness — имя кандидата в делегаты, у которого снимается ранее отданный за него голос.

Выполнение операции-действия unvotewitn требует подписи аккаунта voter.

changevest

Операция-действие changevest является внутренней и пользователю недоступна. Используется смарт-контрактом вестинг для оповещения смарт-контракта управления об изменении количества вестинга на балансе пользователя. Операция-действие changevest имеет следующий вид:

void control::changevest(
    name who,
    asset diff
)

Параметры:

  • who — имя аккаунта, на балансе которого изменилась сумма вестинга;

  • diff — количество относительного изменения вестинга.

Вызов операции-действия changevest происходит автоматически при изменении суммы вестинга на балансе каждого из пользователей. Смарт-контракт вестинг информирует об этом изменении смарт-контракт управления. Поскольку сумма вестинга на балансе пользователя влияет на вес голоса этого пользователя, то рейтинг делегата, за которого проголосовал этот пользователь, также будет зависеть от вестинга этого пользователя. Смарт-контракт управления корректирует рейтинг среди верхушки делегатов с учетом полученной информации об изменении. Данные таблицы смарт-контракта вестинга при этом не модифицируются. При изменении списка верхушки делегатов также автоматически изменяется multisig_acc авторизация.

Last updated