Аккаунты и разрешения

Аккаунт - это учетная запись пользователя или группы пользователей, с помощью которой совершаются все операции в блокчейне VIZ. Каждому аккаунту в качестве идентификатора присваивается уникальное, доступное для человеческого восприятия имя длиной от 2 до 25 символов латинского алфавиты. Кроме того, имена аккаунтов могут указывать на пространства имен(домен), которые отделяются точкой. При этом только владелец домена может создать поддомен(например только аккаунт @domain может создать аккаунт @subdomain.domain). По умолчанию аккаунтом владеет только один человек и он должен прописать в нем четыре публичных ключа: главный ключ, активный ключ, регулярный ключ и коммуникативный ключ. Каждый публичный ключ должен быть создан из разных приватных ключей, используя алгоритм на базе эллиптической криптографии для кривой secp256k1(такая же кривая используется в Bitcoin).

Ниже в таблице приведены параметры для secp256k1

Параметр Значение
p 0xffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f
a 0
b 7
Gx 0x79be667e f9dcbbac 55a06295 ce870b07 029bfcdb 2dce28d9 59f2815b 16f81798
Gy 0x483ada77 26a3c465 5da4fbfc 0e1108a8 fd17b448 a6855419 9c47d08f fb10d4b8
n 0xffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141
h 1

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

Ниже в таблице описаны все ключи и операции, которые с помощью них можно совершать

Ключ Разрешения
Регулярный Отправка custom-транзакций, награда пользователей, изменение метаданных аккаунта, любые действия с комитетом.
Активный Все что можно делать с помощью регулярного ключа, вдобавок позволяет проводить операции с активами и голосовать за делегатов. То есть позволяет совершать активные действия в блокчейне VIZ, управлять им при помощи своей доли.
Главный Все что можно делать с помощью регулярного и активного, кроме того, с его помощью можно заменить ключи.
Коммуникативный Не позволяет подписывать транзакции, но с его помощью можно засекречивать сообщения, например шифровать при помощи алгоритма ECDH заметки с переводом токенов.

Аккаунт с несколькими пользователями

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

Стоит учитывать, что пользователь, который получил дополнительный ключ или аккаунт, которому приписана одна из трех ролей, ничем не ограничены при подписи транзакций от имени главного аккаунта, кроме как уровнем доступа ключа или роли. То есть, если пользователю выделен главный ключ или аккаунту приписана главная роль, то и пользователь, и аккаунт смогут сами распределять уровни доступа к главному аккаунту для других участников ДАО VIZ, и даже ограничить доступ первоначальному владельцу аккаунта.

Мультиподпись

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

Пример мультиподписи

Пусть в аккаунте с весовым порогом 100 прописано три пользователя: Алиса, Макс и Боб. У Боба будет вес 25 и у Макса будет — 25, а у Алисы вес будет 50. Тогда Бобу, чтобы отправить транзакцию, придется помимо своей подписи, попросить подпись у Алисы и Макса, ведь только тогда суммарный вес подписавшихся будет равен весовому порогу аккаунта 100. Аналогично нужно будет поступить Максу и Алисе, чтобы отправить транзакцию от имени аккаунта. Таким образом никто не сможет отправить транзакцию без соглашения всех участников, так можно избежать злоупотребление властью для каждого пользователя, ведь в данной ситуации никто в одиночку не сможет управлять аккаунтом. Транзакция может быть отправлена только с согласия все участников, в данном примере.

Регистрация

Чтобы создать новый аккаунт в VIZ, нужно отправить специальную транзакцию(account_create), которая зарегистрирует новую учетную запись. В этой транзакции нужно указать имя нового аккаунта(name), аккаунт-рефера(referrer), заполнить метаданные аккаунта(json_metadata), вписать четыре публичных ключа: главный(master_authority), активный(active_authority), регулярный(regular_authority), коммуникативный(memo) - или заместо ключей привязать к одноименным ролям уже существующие аккаунты, но коммуникативный ключ все равно придется прописать, так как под него роли нет. Кроме того, отправитель транзакции должен заплатить за создание аккаунта сумму не меньшую, чем указали делегаты, по умолчанию цена создания одного аккаунта равна 1 viz. Все ликвидные токены, которые заплатит регистратор будут конвертированы в Shares нового аккаунта.

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

Регистрация через делегирование доли

Чтобы не тратить ликвидные токены, регистратор может создать новый аккаунт делегированием. Для этого он должен так же отправить транзакцию, но указать в ней не количество ликвидных токенов, которые готов потратить, а количество долевых токенов, которые он готов делегировать. Стоимость в viz всех делегированных Shares не должно быть меньшим, чем указали делегаты, по умолчанию общая стоимость должна составляет 10 viz. Вместе с делегированием регистратор может потратить и ликвидные токены, они так же будут конвертированы в Shares нового аккаунта, но на цену транзакции не повлияют, аккаунт будет создан или за viz или за Shares. Если количество viz достаточно для регистрации за ликвидные токены, то аккаунт будет создан за viz, если не достаточно, то за Shares. Если не достаточно и Shares, то аккаунт не будет создан вообще. Но в любом случае, при успехе, все токены и ликвидные, и долевые будут переведены на счет нового аккаунта.

Отозвать делегированные токены регистратор по умолчанию сможет через 28 дней или другой срок, который указали делегаты. Если регистратор попробует отозвать Shares раньше указанного срока, то они спишутся со счета нового аккаунта, но будут заморожены до тех пор, пока не пройдет 28 дней с момента регистрации. В случае заморозки долевыми токенами пользоваться не сможет ни регистратор, ни созданный аккаунт.

Регистрация через инвайт код

Подробнее про инвайт коды читайте в разделе: Инвайт коды.

Еще один удобный способ создать новый аккаунт — регистрация через инвайт коды. Для этого регистратор должен сформировать инвайт код на сумму не меньшую, чем указали делегаты, и пароль для него. Затем передать все это человеку, который хочет зарегистрировать аккаунт. После этот человек должен отправить специальную транзакцию(invite_registration), которая зарегистрирует новый аккаунт, потратив токены из инвайт кода. Если у человека уже есть аккаунт, то он может отправить транзакцию с помощью своей учетной записи и своего активного приватного ключа. Если у него еще нет аккаунта то можно отправить транзакцию с помощью аккаунта @invite, который принадлежит блокчейну, подписав ее приватным ключом 5KcfoRuDfkhrLCxVcE9x51J6KN9aM9fpb78tLrvvFckxVV6FyFW. При таком способе регистрации все токены так же будут конвертированы в Shares нового аккаунта. Однако стоить учитывать, что владелец пароля от инвайт кода может потратить средства средства не на регистрацию аккаунта, а на перевод средства на уже существующий аккаунт.

Анонимные аккаунты

Чтобы создавать анонимные аккаунты в блокчейн был встроен специальный аккаунт @anonymous. Чтобы зарегистрировать аккаунт, нужно перевести ему токены viz объемом не менее, чем указали делегаты. Кроме того, вместе с переводом нужно отправить заметку с публичным ключом нового аккаунта. Этот ключ будет прописан как главный, активный, регулярный и коммуникативный.

Когда @anonymous получит перевод, он создаст новый аккаунт по схеме @nX.anonymous, где X — номер анонимного аккаунта. Номер @anonymous приписывает сам, прибавляя единицу к количеству уже созданных анонимных аккаунтов.

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

Энергия

У каждого аккаунта в блокчейне есть запас энергии, который измеряется в процентах. Максимальное значение энергии 100% минимальное же может быть -100%, то есть меньше 0%. Энергия нужна для того, чтобы отправлять награды другим пользователям, если энергии не хватает, то аккаунт не сможет наградить участника необходимой суммой токенов, а если энергия равна 0% или меньше него, то аккаунт вообще не сможет отправить награду, но он по прежнему сможет совершать другие операции в блокчейне, например, он будет способен переводить токены между аккаунтами, голосовать за делегатов и делать все, что мог со 100% энергии. Подробнее про награды читайте в разделе Награды за деятельность.

Энергия тратится в двух случаях. Во-первых, когда аккаунт награждает участника, тогда пользователь сам указывает какое количество хочет потратит, и от этого количества зависит размер награды. Во-вторых, когда аккаунт делегирует Shares другому пользователю. Делегирование происходит в двух случаях: при регистрации аккаунта через делегирование и при делегировании доли уже существующему аккаунту. При любом способе делегирования инициатор не может сам указать количество энергии, которое будет затрачена, но оно прямо пропорционально количеству Shres, которое будет отправлено (чем больше Shares будет делегировано, тем больше будет затрачено энергии). Блокчейн рассчитывает количество, которое будет затрачено, по формуле: делегировано shares / эффективные shares * 100%. Каким бы способом аккаунт не расходовал энергию, ее количество влияет только на возможность отправлять награды другим участникам.

Тратиться энергия моментально, но восстанавливается она медленно: 20% за 24 часа, 1% за 1.2 часа и за 1 секунду восстанавливается всего 0.01% энергии.

Данные аккаунтов

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

Для начала ознакомьтесь с таблицей типов информации, который использует блокчейн:

Тип Пример Диапазон Описание
VIZ актив "1.000 VIZ" от 0.001 VIZ Количество ликвидных токенов. Строка с десятичным числом с не более чем 3 цифрами после точки и обязательной приписок VIZ через пробел.
Пример: "1.123 VIZ"
SHARES актив "1.000000 SHARES" от 0.000001 SHARES Количество долевых токенов. Строка с десятичным числом с не более чем 6 цифрами после точки и обязательной приписок SHARES через пробел.
Пример: "1.123456 SHARES"
µShares 1000000 от 1 Количество микродолевых токенов. 1 = 0.000001 SHARES; 1000000 = 1.000000 SHARES. Цело число.
Процент 1000 от 0 до 10000 Процент в целом числовом формате. 0.01% = 1; 1% = 100; 100% = 10000;
Целое 1 Целое число. Слишком большие числа могут быть представлены строковым типом.
Байт 1 Количество байт в целом числовом формате. Слишком большие значения записаны в виде строк.
мкБайт Количество микробайт в целом числовом формате. Слишком большие значения записаны в виде строк.
1 Байт = 1000000 Байт
Время "2018-09-30T05:58:57" Строковой тип времени в формате "YYYY-MM-DDThh:mm:ss".
JSON "{"param1":"value"}" Строка в формате JSON
Аккаунт "example" Имя аккаунта в строковом формате.
Ключ "VIZ8XwKjAkG5...." Публичный ключ в строковом формате с приставкой "VIZ".

average_bandwidth

Добавлено: 1.0.0

Формат: мкБайт

Значение скользящей средней для затраченной пропускной способности на момент последней транзакции.

lifetime_bandwidth

Добавлено: 1.0.0

Формат: мкБайт

Количество мкБайт, которое аккаунт использовал за с момента создания.

balance

Добавлено: 1.0.0

Формат: VIZ актив

Количество viz на балансе аккаунта.

vesting_shares

Добавлено: 1.0.0

Формат: SHARES актив

Количество чистых Shares аккаунта.

delegated_vesting_shares

Добавлено: 1.0.0

Формат: SHARES актив

Количество Shares, которое делегировал аккаунт другим пользователям.

received_vesting_shares

Добавлено: 1.0.0

Формат: SHARES актив

Количество полученных Shares путем делегирования.

next_vesting_withdrawal

Добавлено: 1.0.0

Формат: Время

Время когда произойдет следующие списание на vesting_withdraw_rate при включенном понижении доли.

to_withdraw

Добавлено: 1.0.0

Формат: µShares

Количество Shares, которое аккаунт запросил для понижения доли.

withdraw_routes

Добавлено: 1.0.0

Формат: µShares

Количество аккаунтов, с которыми аккаунт может поделить Shares во время понижения доли. Максимальное количество 10 человек.

vesting_withdraw_rate

Добавлено: 1.0.0

Формат: SHARES актив

Количество Shares которые будут списываться каждый день при включенном понижении доли.

benefactor_awards

Добавлено: 2.0.0

Формат: µShares

Количество µShares(мкShares) которые аккаунт получил в качестве бенефициарских выплат с наград за все время.

receiver_awards

Добавлено: 2.0.0

Формат: µShares

Количество µShares(мкShares) которые аккаунт получил в качестве наград за все время.

vote_count

Добавлено: 1.0.0

Формат: Целое

Количество наград, которое отправил аккаунт. До 4 хардфорка этот параметр показывал количество голосов, которые аккаунт поставил разным постам.

created

Добавлено: 1.0.0

Формат: Время

Время, когда был создан аккаунт.

custom_sequence

Добавлено: 2.0.0

Формат: Число

Количество custom-транзакций, которые отправил пользователь с момента 4 хардфорка.

custom_sequence_block_num

Добавлено: 2.0.0

Формат: Число

Номер последнего блока, в который была помещена последняя custom-транзакция аккаунта.

energy

Добавлено: 1.0.0

Формат: Процент

Количество энергии, которое осталось у аккаунта с момента отправки последней транзакции. Этот параметр обновится когда пользователь отправит новую транзакцию. Время, которое было затрачено на ее восстановление также будет учтено. Параметр обновляется по такой схеме, чтобы не расходовать ресурсы делегатов на ненужные расчеты.

id

Добавлено: 1.0.0

Формат: Целое

Цифровой уникальный идентификатор пользователя в системе.

name

Добавлено: 1.0.0

Формат: Аккаунт

Имя аккаунта.

json_metadata

Добавлено: 1.0.0

Формат: JSON

Метаданные аккаунта в формате JSON. В них можно, например, хранить информацию о профиле пользователя: имя, фамилия, сайт, социальные сети, пол, должность, место работы. У аккаунта @anonymous заместо JSON строки хранится количество анонимных аккаунтов. Параметр также может быть пустой строкой.

last_account_recovery

Добавлено: 1.0.0

Формат: Время

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

recovery_account

Добавлено: 1.0.0

Формат: Строка

Имя аккаунта, который может восстановить учетную запись пользователя. Если поле пусто, то доступ к аккаунту не сможет восстановить никто.

referrer

Добавлено: 1.0.0

Формат: Аккаунт

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

last_account_update

Добавлено: 1.0.0

Формат: Время

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

last_owner_update

Добавлено: 1.0.0

Формат: Время

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

last_owner_update

Добавлено: 1.0.0

Формат: Время

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

witness_votes

Добавлено: 1.0.0

Формат: Массив аккаунтов

Список делегатов, за которых проголосовал пользователь.

witnesses_voted_for

Добавлено: 1.0.0

Формат: µShares

Количество делегатов, за которое проголосовал аккаунт.

witnesses_vote_weight

Добавлено: 2.0.0

Формат: µShares

Количество голосов, которые отдал пользователь за каждого делегата. Рассчитывается по формуле: (чистые s=Shares + Shares прокси-аккаунта) / witnesses_voted_for.

proxied_vsf_votes

Добавлено: 1.0.0

Формат: Массив µShares из 4 элементов

Массив из 4 элементов, каждый из которых отображает количество Shares, которое доверили аккаунту другие аккаунты или прокси-аккаунту. Первый элемент показывает количество чистых Shares обычных аккаунтов, остальные три - количество чистых Shares прокси-аккаунтов. К прокси-аккаунту может быть привязано максимум три других прокси аккаунтов.

proxy

Добавлено: 1.0.0

Формат: Аккаунт

Имя прокси-аккаунта, которому пользователь доверил свои голоса за делегатов.

master_authority

Добавлено: 1.0.0

Формат: Массив

Массив содержащий массив главных ключей и массив аккаунтов привязанных к главной роли

account_auths

Добавлено: 1.0.0

Формат: Массив массивов аккаунтов и их весов

Список аккаунтов, привязанных к главной роли, и их весов.

Пример: account_auths: [[„example“, 20], [„owner“, 50]]

key_auths

Добавлено: 1.0.0

Формат: Массив массивов ключей и их весов

Список главных ключей и их весов.

Пример: key_auths: [[„VIZ6cMf37KNdYiqXNfaCf7VFQDuPUWE6z5dw9LYLbSSGg5kAN1RMi“, 20], [„VIZ6cMf38KNeYiqXNfsCf7VFQDuPUUE6z5dw9LYLbSSGg6kAN1RMi“, 50]]

active_authority

Добавлено: 1.0.0

Формат: Массив

Массив содержащий массив активных ключей и массив аккаунтов привязанных к активной роли

account_auths

Добавлено: 1.0.0

Формат: Массив массивов аккаунтов и их весов

Список аккаунтов, привязанных к активной роли, и их весов.

Пример: account_auths: [[„example“, 20], [„owner“, 50]]

key_auths

Добавлено: 1.0.0

Формат: Массив массивов ключей и их весов

Список активных ключей и их весов.

Пример: key_auths: [[„VIZ6cMf37KNdYiqXNfaCf7VFQDuPUWE6z5dw9LYLbSSGg5kAN1RMi“, 20], [„VIZ6cMf38KNeYiqXNfsCf7VFQDuPUUE6z5dw9LYLbSSGg6kAN1RMi“, 50]]

regular_authority

Добавлено: 1.0.0

Формат: Массив

Массив содержащий массив регулярных ключей и массив аккаунтов привязанных к регулярной роли

account_auths

Добавлено: 1.0.0

Формат: Массив массивов аккаунтов и их весов

Список аккаунтов, привязанных к регулярной роли, и их весов.

Пример: account_auths: [[„example“, 20], [„owner“, 50]]

key_auths

Добавлено: 1.0.0

Формат: Массив массивов ключей и их весов

Список регулярных ключей и их весов.

Пример: key_auths: [[„VIZ6cMf37KNdYiqXNfaCf7VFQDuPUWE6z5dw9LYLbSSGg5kAN1RMi“, 20], [„VIZ6cMf38KNeYiqXNfsCf7VFQDuPUUE6z5dw9LYLbSSGg6kAN1RMi“, 50]]

memo_key

Добавлено: 1.0.0

Формат: Ключ

Коммуникативный ключ аккаунта

awarded_rshares

Устарело: 2.0.0

Добавлено: 1.0.0

Формат: µShares

Количество rShares, которые могли участвовать в пуле конкуренции без затраты энергии вплоть до 4 хардфорка. Устарело из-за смены экономической модели - отказ от позиционирования как блог платформа.

curation_rewards

Устарело: 2.0.0

Добавлено: 1.0.0

Формат: µShares

Количество µShares(мкShares) которые аккаунт получил в качестве бенефициарских выплат с курируемых постов до 4 хардфорка. Устарело из-за смены экономической модели - отказ от позиционирования как блог платформа.

posting_rewards

Устарело: 2.0.0

Добавлено: 1.0.0

Формат: µShares

Количество µShares(мкShares) которые аккаунт получил за свои посты вплоть до 4 хардфорка. Устарело из-за смены экономической модели - отказ от позиционирования как блог платформа.

last_post

Устарело: 2.0.0

Добавлено: 1.0.0

Формат: Время

Время, когда был отправлен последний пост или комментарий. Устарело из-за смены экономической модели - отказ от позиционирования как блог платформа.

last_root_post

Устарело: 2.0.0

Добавлено: 1.0.0

Формат: Время

Время, когда был отправлен последний пост. Устарело из-за смены экономической модели - отказ от позиционирования как блог платформа.

last_vote_time

Устарело: 2.0.0

Добавлено: 1.0.0

Формат: Время

Время голосования за последний пост. Устарело из-за смены экономической модели - отказ от позиционирования как блог платформа.

content_count

Устарело: 2.0.0

Добавлено: 1.0.0

Формат: Целое

Количество постов пользователя. Устарело из-за смены экономической модели - отказ от позиционирования как блог платформа.

subcontent_count

Устарело: 2.0.0

Добавлено: 1.0.0

Формат: Целое

Количество комментариев пользователя. Устарело из-за смены экономической модели - отказ от позиционирования как блог платформа.