Аккаунты и разрешения¶
Аккаунт - это учетная запись пользователя или группы пользователей, с помощью которой совершаются все операции в блокчейне 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
Формат: мкБайт
Количество мкБайт, которое аккаунт использовал за с момента создания.
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 хардфорка этот параметр показывал количество голосов, которые аккаунт поставил разным постам.
custom_sequence¶
Добавлено: 2.0.0
Формат: Число
Количество custom-транзакций, которые отправил пользователь с момента 4 хардфорка.
custom_sequence_block_num¶
Добавлено: 2.0.0
Формат: Число
Номер последнего блока, в который была помещена последняя custom-транзакция аккаунта.
energy¶
Добавлено: 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
Формат: Массив
Массив содержащий массив главных ключей и массив аккаунтов привязанных к главной роли
active_authority¶
Добавлено: 1.0.0
Формат: Массив
Массив содержащий массив активных ключей и массив аккаунтов привязанных к активной роли
regular_authority¶
Добавлено: 1.0.0
Формат: Массив
Массив содержащий массив регулярных ключей и массив аккаунтов привязанных к регулярной роли
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
Формат: Время
Время голосования за последний пост. Устарело из-за смены экономической модели - отказ от позиционирования как блог платформа.