Viz.Doc - документация VIZ

_images/viz_doc.png

Что такое VIZ?

VIZ – это блокчейн-платформа для социальных приложений, пользователи которых могут награждать друг друга токенами из эмиссии (т.е. непрерывно «печатаемыми» блокчейном токенами) или их прямым переводом. За логику взаимодействий между пользователями отвечают приложения, блокчейн же обеспечивает проведение транзакций и надёжное неизменяемое хранение информации.

VIZ состоит из двух основных технических компонентов: базового консенсуса на основе Fair DPoS и интерфейса для работы с приложениями (API). Алгоритм консенсуса гарантирует, что одни и те же транзакции записываются в одинаковом порядке на всех нодах (компьютерах с установленным ПО блокчейна), а также обеспечивает базовые действия блокчейна: создание аккаунтов, распределение эмиссии, выплаты пользователям за их действия и некоторые другие. API представляет собой набор плагинов, которые написаны на языке C++, и доступ к этим плагинам через веб-интерфейсы.

image0

Чем VIZ отличается от Ethereum, Bitcoin и других подобных проектов

В отличие от многих криптопроектов вроде Ethereum или Bitcoin, в которых используются алгоритмы PoW или PoS, VIZ использует более демократичный алгоритм Fair DPoS. Это значит, что в сети главную роль играют не майнеры, а инвесторы, которые голосуют за создателей новых блоков – делегатов. Делегаты гарантируют стабильную работу блокчейна и получают за это выплаты из эмиссии. Однако система голосования устроена так, что владельцы большей доли сети имеют больший вес. Кроме того, только 21 делегат (десять, получивших наибольшее количество голосов, и одиннадцать из остальных) имеет право создавать новые блоки и управлять параметрами сети.

Чем VIZ отличается от BitShares

VIZ, так же как BitShares, написан на основе Graphene. Оба проекта используют DPoS для подтверждения транзакций. Но BitShares задумывался как финансовая платформа, где можно создавать свои токены и торговать ими. В VIZ заложена иная идея – это платформа для социальных приложений.

Чем VIZ отличается от Golos и Steem

Golos и Steem, так же как VIZ, созданы для социальных приложений. Однако два этих проекта задумывались как блог-платформы на блокчейне, где кураторы оценивают качество постов и решают, какую выплату получит автор. VIZ же позволяет получать награды за любые действия, даже за пределами блокчейна. Например, можно создать приложение, которое будет поощрять людей, заботящихся о пандах.

Чем VIZ отличается от EOS

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

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

Кто владеет VIZ

У VIZ нет владельцев. Каждый участник сети, будучи обладателем её доли, сам решает, в каком направлении должен развиваться проект, и способствует этому развитию по мере сил и возможностей.

Кто поддерживает код VIZ

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

Кто запустил блокчейн VIZ

Никто не знает, кем была запущена эта сеть.

Экономика и управление

С точки зрения (само)управления, VIZ стремится быть децентрализованным автономным обществом (DAO, DAC, ДАО). Это значит, что любой может купить долю в ДАО и влиять на управление им в соответствии с этой долей.

У VIZ нет владельцев, нет стоящей за ним компании или организации. Участники владеют долевыми токенами VIZ (shares) и решают, в каком направлении должен развиваться проект. Именно владельцы долей решают проблемы VIZ, обдумывают и предлагают изменения в код, выбирают людей, которые будут поддерживать работоспособность сети, прилагают усилия для популяризации VIZ.

Участники VIZ могут объединяться в группы для решения поставленных самим себе задач. Каждый участник - часть общества VIZ. Иными словами, VIZ – это не просто децентрализованная организация, это децентрализованная бирюзовая организация. А цель этой организации – создать и улучшать блокчейн, на основе которого можно разрабатывать социальные приложения.

Активы

Каждый пользователь VIZ может владеть двумя видами активов: ликвидными токенами viz и долевыми токенами shares.

Ликвидный токен

Ликвидный токен(viz) – это токены блокчейна, которые владелец может свободно перемещать между аккаунтами и конвертировать в деньги, криптовалюту и в долевые токены сети VIZ. Ликвидные токены имеет смысл держать только для торговли на бирже или для переводов между аккаунтами.

Долевой токен shares

Долевые токены(shares) дают их владельцу право выбирать делегатов, голосовать в Комитете и распределять эмиссию между участниками VIZ. От количества долевых токенов зависит влияние их держателя на процессы в ДАО: чем больше shares, тем выше влияние.

Shares не могут свободно перемещаться от аккаунта к аккаунту, а значит, не могут торговаться на бирже. Однако один участник может их делегировать (передать часть своих полномочий, «дать попользоваться») другому участнику. Когда второй участник получит делегированные первым участником средства, он повысит своё влияние ровно на делегированное количество shares, а первый своё влияние понизит. При этом полученные делегированием shares невозможно вывести в ликвидные viz. Делегированные shares можно отозвать в любой момент, они вернутся на счёт владельца через сутки.

Конвертация токенов

Ликвидные токены можно моментально обменять на долевые, но конвертация обратно займет 28 дней (см. Понижение доли). При этом коэффициент конвертации в одну и другую сторону равен 1:1 (1 shares за 1 viz и наоборот).

Понижение доли

Перевод из shares в viz называется «понижение доли» и занимает 28 суток для всей доли. За одни сутки обменивается 1/28 часть от общего количества shares. Если участник VIZ хочет вывести из доли не все shares, понижение пройдёт быстрее. Например, если в доле 28000 shares, а участник хочет вывести 1000 shares, вывод пройдёт за 1 день.

Чистые shares

Чистые shares – это количество долевых токенов аккаунта без учёта переданных и полученных путём делегирования. То есть это shares, которыми участник реально владеет, которые может обменять на viz. При голосовании за делегатов учитываются только чистые долевые токены.

Эффективные shares

Эффективные shares – это количество чистых долевых токенов с добавлением полученных делегированием и за вычетом делегированных. Эффективная доля учитывается при распределении эмиссии (награждении аккаунтов) и при голосовании в Комитете.

Эмиссия

Чтобы обеспечить оплату полезных действий в сети, в блокчейн заложен механизм эмиссии. Скорость эмиссии установлена в коде блокчейна и может меняться делегатами только через принятие обновления кода (т.е. через хардфорк). На момент старта блокчейна скорость эмиссии задана на уровне 10% в год. При этом абсолютный размер эмиссии пересчитывается раз в год.

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

Чтобы рассчитать, сколько токенов эмитируется вместе с каждым новым блоком, можно использовать следующую формулу:

Q = S * 10% / N

где Q – количество токенов, которое будет эмитировано, S – общее число всех токенов VIZ, которые есть в системе (включая shares в пересчете на VIZ) на момент начала годовой эмиссии, N – количество генерируемых блоков в год.

Рассчитать N можно по следующей формуле:

N = 365 * 24 * 60 * 60 / v,

где v – скорость генерации новых блоков, равная 3 секундам, а 365 * 24 * 60 * 60- количество секунд в одном годе(в VIZ один год равен 365 дням)

Эмитированные токены распределяются по нескольким направлениям:

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

Награды за деятельность и энергия аккаунта

Каждый аккаунт в сети VIZ может получить награду или наградить другого пользователя в виде shares из эмиссии. Эти награды выплачиваются из фонда наград, который пополняется раз в блок в соответствии с алгоритмом эмиссии. Размер награды зависит от веса награждающего аккаунта (доли shares аккаунта в общем количестве shares).

Некоторые действия аккаунта в блокчейне (в т.ч. награждение) тратят энергию аккаунта. При этом, чем больше энергии тратит аккаунт на награду, тем больше shares он может передать другому аккаунту при награждении.

Участник VIZ сам решает, какой процент энергии потратить на конкретную награду, то есть на какую сумму shares наградить получателя. Однако, если участник пользуется для награждения тем или иным приложением, это приложение может ограничивать процент затрачиваемой на награду энергии.

Энергия восстанавливается со временем. Максимальное количество энергии аккаунта равно 100%, в течение 24 часов плавно восстанавливается 20% полной энергии, то есть за 1 час 12 минут восстанавливается 1% полной энергии.

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

Рассмотрим процесс награждения более подробно.

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

Рассмотрим награждение из эмиссии на примере.

Когда Алиса награждает Боба, она сообщает блокчейну количество своих эффективных shares и процент энергии своего аккаунта, идущей на награждение.

Блокчейн перемножает эти данные и получает условную величину, которая называется rshares (награждающие shares). После чего rshares Алисы делятся на сумму всех rshares всех наград за последние 5 суток (включая их самих). Получается некий коэффициент, на который и умножается пул наград. Полученная величина начисляется Бобу в shares.

Пример.

*У Алисы 10000 эффективных shares. Она награждает Боба на 15% энергии. Соответственно, rshares данной награды = 10000 * 0,15 = 1500.

Пул наград равен 27397 viz. За последние 5 суток участники наградили других участников в сумме на 4379876 rshares (с учётом данной награды Алисы Бобу). Делим 1500 на 4379876 и умножаем на 27397. Получаем 9,382800 viz - это и будет награда Боба, которая зачисляется в его долю (в виде shares).

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

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

Награждающие shares

Награждающие shares (rshares) - это количество shares конкретного участника, которые он обозначил для участия в пуле конкуренции. Количество rshares зависит от эффективных shares награждающего участника и энергии, которую он готов затратить на награду. Рассчитываются rshares по следующей формуле:

rshares = S * E%

где S - количество эффективных shares участника, E% - количество энергии в процентах, которое он готов затратить на награду.

Пул конкуренции

Пул конкуренции - количество rshares всех участников. Rshares конкретного аккаунта участвуют в пуле конкуренции только в течение 5 дней после того, как за его награду были осуществлены выплаты. Это значит, что конкуренция уходит в «прошлое», то есть новые rshares будут конкурировать с теми, за которые уже были выплачены награды. Кроме того, если пул конкуренци пуст, то с первой же наградой уйдут все токены из фонда наград (но на практике такое событие крайне маловероятно).

«Спящие» shares

«Спящие» shares – это shares, которые не участвуют в распределении выплат из фонда наград. Чем больше спящих shares, тем меньше конкуренция, следовательно, тем большую награду может дать каждый активный участник.

Комитет

Любой участник, который делает что-то полезное для ДАО, может запросить от ДАО VIZ компенсацию за свою деятельность или попросить ДАО спонсировать свои проекты, которые могут помочь в развитии блокчейна VIZ или приложений. Это может быть код для блокчейна, маркетинговая кампания, новый сайт или приложение, документация, программа помощи новичкам – всё, что придет в голову. Главное, чтобы это было полезно для VIZ с точки зрения сообщества. Степень полезности определяют члены сообщества.

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

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

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

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

Заявка считается принятой, если по истечении указанного срока она получает как минимум 10% (устанавливается делегатами) от всех возможных голосов, то есть от всех shares в системе (учитываются голоса и за, и против). Затем блокчейн вычисляет средневзвешенный процент за заявку и сумму к получению. Если сумма окажется больше или равна минимальной сумме заявки, то заявка будет одобрена, и получателю выплатят одобренную сумму. В противном случае заявка будет отклонена. Также заявка может быть отменена самим создателем, если он передумает.

Формула для вычисление итоговой суммы выплат после истечения срока голосования:

SUM(Wn * Pn) / SUM(Wn) * M,

где SUM - функция математической суммы, Wn - количество shares участника n, Pn - процент, который выставил участник n, M - максимальная сумма ликвидных токенов, которую указал создатель заявки.

Делегаты

Делегаты – это участники, которым другие участники ДАО VIZ доверили поддержание блокчейна: создание и подписание блоков, управление экономическими и другими параметрами, а также обновление кода блокчейна. Доверие к делегату выражается в количестве отданных за него голосов. При этом за один голос принимается один токен shares. То есть, чем больше доля аккаунта в ДАО, тем выше его влияние на выборы делегатов.

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

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

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

Пенальти и исключение делегата из цепи

В случае если делегат пропустит блок, ему назначается штраф (пенальти), который выражается во временном уменьшении количества голосов на определённый делегатами процент(по умолчанию равен 1%), и который будет погашен через некоторое время, которое также устанавливается делегатами(по умолчанию 24 часа).

Если в итоге у делегата будет 0 голосов, то есть суммарный процент штрафа окажется равен 100%, то делегат будет исключён из цепочки до тех пор, пока не будут погашены все штрафы.

Кроме того, возможен иной вариант исключения делегата из цепочки: если делегат пропустит более 200 блоков подряд, то он будет исключён из цепи до тех пор, пока вручную не исправит проблему, и пока не истечёт срок действия всех штрафов, заработанных за пропуск этих двухсот блоков.

Голосование за делегатов

Проголосовать за делегатов можно двумя способами:

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

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

Проголосовать можно максимум за 100 делегатов одновременно, при этом сила голоса распределяется равномерно между всеми ними (это и называется Fair DPOS). То есть, если участник проголосовал за 4 делегатов, то каждому достанется 25% от голосов аккаунта.

Управление параметрами сети

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

account_creation_fee – минимальная стоимость создания нового аккаунта в ликвидных токенах;

create_account_delegation_ratio – коэффициент, который показывает, во сколько раз больше токенов нужно затратить при создании аккаунта через делегирование долевых токенов, чем при создании за ликвидные токены (shares = account_creation_fee * create_account_delegation_ratio);

create_account_delegation_time – минимальный промежуток времени, по окончании которого пользователь может вернуть свои shares, затраченные на создание аккаунта с помощью делегирования (при обычном делегировании доля может быть возвращена через 1 день);

maximum_block_size – максимальный размер блока;

min_delegation – минимальное количество делегируемых shares;

bandwidth_reserve_below – максимальное количество shares аккаунта, при котором ему выделяется резервная пропускная способность;

bandwidth_reserve_percent – процент резервирования пропускной способности от всего канала для аккаунтов с количеством shares меньшим, чем bandwidth_reserve_below (может быть равен 0);

vote_accounting_min_rshares – минимальное количество rshares, при которых награда будет больше 0;

committee_request_approve_min_percent – минимальный процент от всех голосов, отданных за заявку в Комитете, при котором она считается подтвержденной;

inflation_witness_percent – процент от эмиссии, который распределяется между 21 делегатом, вошедшими в раунд подписи блоков;

inflation_ratio_committee_vs_reward_fund – процент оставшейся эмиссии, идущий в Комитет;

inflation_recalc_period – количество блоков, через которое блокчейн проверяет актуальность эмиссионных параметров;

data_operations_cost_additional_bandwidth - множитель для наценки количества пропускной способности, которую затратит аккаунт на отправку транзакций без ограничений по размеру (к таким транзакциям, например, относится custom-транзакция).

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

witness_miss_penalty_duration - количество секунд, через которое делегату возвращается количество голосов на witness_miss_penalty_percent процентов, если они были уменьшены из-за пропуска блоков.

Для обновления программного обеспечения блокчейна требуется согласие 17 делегатов в раунде. Значения голосуемых параметров равны медиане значений, установленных 21 делегатом в раунде.

Подробное описание голосуемых параметров

Ниже представлена таблица типов, которые использует блокчейн:

Тип Пример Диапазон Описание
VIZ актив “1.000 VIZ” от 0.001 VIZ Количество ликвидных токенов. Строка с десятичным числом с не более чем 3 цифрами после точки и обязательной припиской VIZ через пробел.Пример: “1.123 VIZ”
SHARE S актив “1.00000 0 SHARES” от 0.000001 SHARES Количество долевых токенов. Строка с десятичным числом с не более чем 6 цифрами после точки и обязательной припиской SHARES через пробел.Пример: “1.123456 SHARES”
µShar es 1000000 от 0 Количество микродолевых токенов. 1 µShares = 0.000001 SHARES; 1000000 µShares = 1.000000 SHARES. Целое число.
Проце нт 1000 от 1 до 10000 Процент в целом числовом формате. 0.01% = 1; 1% = 100; 100% = 10000;
Целое 1   Целое число

account_creation_fee

Добавлено: 1.0.0

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

Чтобы стать держателем долевого токена, необходимо зарегистрировать аккаунт. Аккаунт – это именованный «кошелёк», на котором хранятся средства участника - как ликвидные, так и долевые. Регистрация аккаунта не бесплатна: чтобы создать новый аккаунт, кто-то из уже существующих участников ДАО VIZ должен отправить транзакцию регистрации аккаунта и заплатить ликвидные токены, которые затем будут конвертированы в долевые токены нового аккаунта. Минимальное количество токенов, которое должен заплатить создатель, указаны в параметре account_creation_fee.

create_account_delegation_ratio

Добавлено: 1.0.0

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

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

Этот параметр отвечает за то, во сколько раз больше нужно потратить токенов при создании аккаунта через делегирование доли (shares = account_creation_fee * create_account_delegation_ratio).

create_account_delegation_time

Добавлено: 1.0.0

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

При создании аккаунта регистратор не может вернуть свою долю сразу, для этого ему придется ждать столько секунд, сколько указано в create_account_delegation_time.

maximum_block_size

Добавлено: 1.0.0

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

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

min_delegation

Добавлено: 1.0.0

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

Пользователь не может делегировать другому аккаунту количество shares меньшее, чем указано в min_delegation, в пересчёте на ликвидные токены.

bandwidth_reserve_below

Добавлено: 1.0.0

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

Если у аккаунта количество shares меньше, чем показатель bandwidth_reserve_below, то ему выделяется дополнительная пропускная способность. Это полезно для поддержания новичков в системе, иначе они не могли бы проводить операции при высокой загрузке пропускной способности блокчейна. С другой стороны, слишком щедрое выделение возможностей блокчейна микроаккаунтам может привести к спаму со стороны злоумышленников.

bandwidth_reserve_percent

Добавлено: 1.0.0

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

Процент от всей пропускной способности сети, который зарезервирован для аккаунтов с количеством shares меньшим, чем bandwidth_reserve_below. Если bandwidth_reserve_percent равен 0, то аккаунты с количеством shares меньшим, чем bandwidth_reserve_below, не смогут проводить транзакции.

vote_accounting_min_rshares

Добавлено: 1.0.0

Формат: µShares

Минимальное количество rshares, при которых награда будет больше 0.

Рассчитать rshares конкретного аккаунта можно по формуле

rshares = s  * e%

где s – количество эффективных shares, e% – процент от эффективных shares и одновременно количество затрачиваемой энергии при награде.

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

committee_request_approve_min_percent

Добавлено: 1.0.0

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

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

inflation_witness_percent

Добавлено: 2.0.0

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

Процент от эмиссии, который распределяется между 21 делегатом, вошедшими в раунд подписи блоков.

inflation_ratio_committee_vs_reward_fund

Добавлено: 2.0.0

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

Процент эмиссии, оставшейся после выделения средств делегатам, идущий в фонд Комитета (остальное направляется в фонд наград).

inflation_recalc_period

Добавлено: 2.0.0

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

Количество блоков, через которое блокчейн проверяет актуальность эмиссионных параметров (inflation_witness_percent, inflation_ratio_committee_vs_reward_fund). Если делегаты изменили какой-то из этих параметров, то блокчейн будет учитывать их не раньше, чем через inflation_recalc_period с последней проверки.

data_operations_cost_additional_bandwidth

Добавлено: 2.2.0

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

Множитель для наценки количества пропускной способности, которую затратит аккаунт на отправку транзакций без ограничений по размеру (к таким транзакциям, например, относится custom-транзакция).

Это значит, что аккаунт затратит на отправку транзакции в data_operations_cost_additional_bandwidth раз больше байт, чем она весит на самом деле (размер транзакции * data_operations_cost_additional_bandwidth). Смотрите раздел “Наценка на безграничные транзакции”.

witness_miss_penalty_percent

Добавлено: 2.2.0

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

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

Смотрите раздел “Пенальти”.

witness_miss_penalty_duration

Количество секунд, через которое делегату возвращается количество голосов на witness_miss_penalty_percent процентов, если они были уменьшены из-за пропуска блоков. Смотрите раздел “Пенальти”.

Пропускная способность

Определение

Пропускная способность — это максимальный размер транзакции в байтах, которую пользователь может отправить в блокчейн в данный момент времени. Объём пропускной способность зависит от количества Shares на счету у пользователя.

Описание

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

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

Так как информация от пользователя размещается в одном блоке, а не разбивается по нескольким, то невозможно увеличить время передачи данных, как это происходит в классических системах передачи информации (когда время передачи данных зависит от скорости пропускного канала), поэтому VIZ просто запрещает отправлять транзакцию.

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

image0

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

Возьмём пустую банку. Её объём – это размер зарезервированной пропускной способности. Заполним банку наполовину водой – столько занимает одна транзакция. Теперь наденем на банку крышку с маленьким отверстием. Перевернём банку. Через некоторое время из неё вытечет половина воды. Перевернём банку обратно и снимем крышку. Нальём ещё воды объёмом, равным половине объёма банки. У нас осталось 1/4 свободного пространства. Теперь, если мы захотим налить ещё воды, объём которой равен половине объёма банки, нужно отлить не менее 1/4 объёма банки. Но мы не можем вылить этот объём сразу, для этого нам нужно надеть крышку с дыркой и перевернуть банку. Таким образом, можно сразу занять водой требуемый объём банки, но, чтобы освободить в ней ещё место, придётся ждать некоторое время. Так и с транзакциями. Можно быстро отправить транзакцию в блокчейн, но для отправки ещё одной, возможно, потребуется время.

Чем отличается частичное резервирование от полного

Давайте представим, что в VIZ используется система полного резервирования. Это значит, что каждый пользователь может использовать часть пропускного канала пропорционально его доле в сети. Но невозможно использовать блокчейн в одно и то же время, кроме того, многим не нужно занимать весь выделенный пропускной канал. Следовательно, часть сети будет простаивать, и она не сможет реализовать весь свой потенциал.

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

Как рассчитывается пропускная способность в VIZ

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

Условное обозначение Единица измерения Описание
Bnew байт Значение скользящей средней для пропускной способности, которое будет затрачено на данную транзакцию
Bold байт Значение для скользящей средней уже затраченной пропускной способности
N байт Размер новой транзакции
W секунды Количество секунд в неделе
T секунды Разница между временем, когда была отправлена последняя транзакция, и в данный момент
R процент(% ) Процент выделенной пропускной способности для аккаунтов с малой долей в сети. Этот параметр устанавливают делегаты
C целое число Число активных аккаунтов (отправляли хотя бы одну транзакцию за 30 дней) с малой долей сети
Smax Shares Объём доли конкретного аккаунта
S Shares Объём доли конкретного аккаунта с учётом процента, выделенного для аккаунтов с малой долей сети.
M Shares Объём доли всех аккаунтов
G байт Максимальный размер блока. Этот параметр устанавливается делегатами
K целое число Коэффициент резервирования пропускной способности от 1 до 2000
L целое число Количество блоков, которое будет сгенерировано за неделю
E байт G * L * K – максимальная пропускная способность при данной нагрузке

Примичание: значение R устанавливают делегаты, они же определяют, какой объём доли считать малым. Кроме того, делегаты могут запретить участникам с малым объёмом доли совершать транзакции.

Для каждого конкретного аккаунта устанавливается лимит пропускной способности (S / M) * Е, то есть пропорционально его доле в сети. Причем, S = Smax * (100% - R), если Smax считается нормальной, и S = M * R / C для аккаунтов с малой долей. Это значит, что часть пропускной способности отнимается от аккаунтов с достаточным стеком и распределяется среди аккаунтов с малой долей в сети. Если Bnew превысит зарезервированное значение, то аккаунт не сможет отправить новую транзакцию. В свою очередь, Bnew вычисляется по следующей формуле:

Bnew = MAX(0, (W - T) * Bold / W) + N.

Из формулы следует, что, чем больше времени прошло с последней транзакции, тем меньше будет Bnew, и, если последняя транзакция происходила семь дней назад, то MAX(0, (W - T) * Bold / W) = 0, а Bnew = N.

image1

Наценка на безграничные транзакции

Многие транзакции в VIZ ограничены в количестве информации, которую можно в них уместить. Например, при отправке перевода можно указать только количество токенов и заметку, размер которой не должен превышать 2 Кбайт. Но есть и другой тип транзакций, например, custom-транзакция, в которой основная информация может быть записана её отправителем в вольной форме. Размер данных в таких транзакциях почти не ограничен.

На такие безграничные транзакции система может делать наценку на некоторый множитель X(всё зависит от решения делегатов), тогда формула для Bnew будет иметь следующий вид:

Bnew = MAX(0, (W - T) * Bold / W) + N * X

Как VIZ определяет коэффициент резервирования

Каждый раз, когда значение скользящего среднего размера блока больше, чем 25% от максимального размера блока G, блокчейн уменьшает К в два раза. Когда нагрузка спадает, блокчейн снова увеличивает K, прибавляя единицу каждую минуту. Снижение K в два раза гарантирует, что аккаунты, которые использовали меньше 50% от предыдущей зарезервированной пропускной способности, не будут задеты, если нагрузку не вызвали держатели очень большого стека.

Формула расчета нового значения средней скользящей для размера блока:

Anew = (99 * Aold + Q) / 100

Условное обозначение Единица измерения Описание
Anew байт Новое значение скользящей средней для размера блока
Aold байт Последнее значение скользящей средней для размера блока
Q байт Размер нового блока

Примичание: Если коэффициент резервирования постоянно падает ниже 100, то делегаты должны задуматься об увеличении пропускной способности сети, например, увеличив максимальный размер блока.

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

Аккаунт - это учётная запись участника или группы участников ДАО VIZ, с помощью которой совершаются операции в блокчейне VIZ.

При создании аккаунта в качестве идентификатора ему присваивается выбранное участником уникальное имя длиной от 2 до 25 символов латинского алфавита. Двухсимвольные аккаунты зарезервированы за самыми первыми участниками VIZ и больше не присваиваются. Изменить имя аккаунта после создания невозможно.

Владельцы аккаунтов могут создавать аккаунты «второго уровня», а те, в свою очередь - третьего и т.д., которые отделяются от основного аккаунта (и последующих) точкой. Например, аккаунт @name (и только он) может создать аккаунт @subname.name, тот, в свою очередь, @subsubname.subname.name и т.д.

Аккаунт имеет четыре пары ключей (публичный и приватный):

  • главный ключ,
  • активный ключ,
  • регулярный ключ,
  • коммуникативный ключ.

Каждый публичный ключ должен быть создан из разных приватных ключей с использованием алгоритма на базе эллиптической криптографии для кривой 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 одним из трёх приватных ключей, который соответствует главному, активному или регулярному публичному ключу. Коммуникативный ключ для отправки транзакций использоваться не может. Он используется для шифрования сообщений, например, в заметке с переводом токенов. При подписи стоит учитывать, что каждый ключ имеет свой уровень доступа, то есть разные ключи отвечают за разные типы транзакций.

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

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

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

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

Существует два варианта, как это сделать. Первый - добавить к аккаунту еще один ключ (главный, активный или регулярный) и передать второму пользователю. Второй - прописать в своей учетной записи главную, активную или регулярную роль для другого аккаунта, то есть связать один аккаунт с другим. Отличие роли от ключей состоит лишь в том, что владельцы привязанного аккаунта для подписи транзакций будут использовать свои приватные ключи.

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

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

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

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

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

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

Если при том же распределении весов участников мультиподписи весовой порог установлен на уровне 75, то для проведения транзакции достаточно подписи Алисы (вес 50) и любого из других участников мультиподписи (с весом 25). При этом Макс (25) и Боб (25) без участия Алисы (50) подписать транзакцию не смогут.

Регистрация

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

  • имя нового аккаунта (name);
  • имя аккаунта-рефера (referrer) - опционально;
  • метаданные аккаунта (json_metadata) - опционально;
  • четыре публичных ключа: главный (master_authority), активный (active_authority), регулярный (regular_authority), коммуникативный (memo).

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

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

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

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

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

Стоимость всех делегированных shares в viz должна быть не меньше, чем указали делегаты.

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

Если количества переведённых viz будет достаточно для регистрации за ликвидные токены, то аккаунт будет создан за viz, если не будет достаточно, то за делегированные shares. Если количества делегированных shares также будет недостаточно, то аккаунт не будет создан.

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

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

Регистрация с помощью чека на предъявителя

Подробнее про чеки читайте в разделе:Чеки на предъявителя.

Ещё один удобный способ создать новый аккаунт — оплата регистрации с помощью чека. Для этого будущий участник VIZ должен приобрести (купить или получить в подарок) чек VIZ на сумму не меньшую, чем указали делегаты в качестве платы за создание аккаунта.

Обладатель чека с помощью приложения или напрямую отправляет в блокчейн специальную транзакцию (invite_registration) с указанием приватного ключа чека и публичного будущего главного ключа аккаунта. Эта транзакция зарегистрирует новый аккаунт, потратив токены из чека. Все токены из чека будут конвертированы в shares нового аккаунта.

Если у человека уже есть аккаунт, то он может подписать транзакцию с помощью своей учетной записи и её приватного активного ключа. Если у него нет аккаунта, он может отправить транзакцию с помощью аккаунта @invite, который принадлежит блокчейну, подписав её приватным ключом 5KcfoRuDfkhrLCxVcE9x51J6KN9aM9fpb78tLrvvFckxVV6FyFW.

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

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

login:key,

где login - имя нового аккаунта, key - его ключ. Публичный ключ, в свою очередь, будет прописан как главный, активный, регулярный и коммуникативный.

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

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

Энергия

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

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

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

Делегирование происходит в двух случаях: при регистрации аккаунта через делегирование и при делегировании доли уже существующему аккаунту. При любом варианте делегирования инициатор не может сам указать количество энергии, которое будет затрачено, но оно прямо пропорционально количеству shares, которое будет отправлено (чем больше shares будет делегировано, тем больше будет затрачено энергии).

Блокчейн рассчитывает количество энергии, которое будет затрачено, по формуле делегировано shares / эффективные shares * 100%.

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

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

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

Для начала ознакомьтесь с таблицей типов информации, которые использует блокчейн:
Тип Пример Диапазон Описание
VIZ акти в “1.000 VIZ” от 0.001 VIZ Количество ликвидных токенов <./economy.html#viz-token> __. Строка с десятичным числом с не более чем 3 цифрами после точки и обязательной припиской VIZ через пробел. Пример: “1.123 VIZ”
SHAR ES акти в “1.000000 SHARES” от 0.000001 SHARES Количество долевых токенов. Строка с десятичным числом с не более чем 6 цифрами после точки и обязательной припиской SHARES через пробел. Пример: “1.123456 SHARES”
µSha res 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-3 0T05:58:57 ”   Строковой тип времени в формате “YYYY-MM-DDThh:mm:ss”.
JSON “{”param1“ :”value“}”   Строка в формате JSON
Акка унт “example”   Имя аккаунта в строковом формате.
Ключ “VIZ8XwKjA kG5….”   Публичный ключ в строковом формате с приставкой “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 и key_auths.

active_authority

Добавлено: 1.0.0

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

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

Содержит в себе account_auths и key_auths.

regular_authority

Добавлено: 1.0.0

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

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

Содержит в себе account_auths и key_auths.


account_auths и key_auths входят в состав параметров *_authority.

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

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

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

Чеки VIZ

Чек на предъявителя в VIZ представляет собой пару ключей (публичный и приватный), с которой связано некоторое количество токенов viz. С помощью публичного ключа можно убедиться, что средства чека не были использованы, а с помощью приватного - получить средства на счёт.

Если проводить аналогию с банковской сферой, то наиболее близким к этой системе понятием будет банковский чек на предъявителя, то есть ценная бумага, которая дает владельцу право получить от банка указанную в ней сумму. Но в блокчейне нет банка и ценных бумаг, поэтому чек - это запись особого вида.

Участник VIZ может выписать чек на любое количество ликвидных токенов, имеющихся на его счёте. Эти средства блокируются блокчейном в момент оформления чека и переводятся на счёт получателя в момент предъявления чека блокчейну. Получателем может быть любой аккаунт, в том числе и тот, что выписал чек (например, если владелец чека передумал его передавать).

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

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

Чтобы перевести средства с чека на любой другой аккаунт, обладателю приватного ключа требуется отправить транзакцию (claim_invite_balance), в которой нужно указать приватный ключ и аккаунт получателя. Если приватный ключ подойдёт к публичному, и аккаунт-получатель будет существовать, то на указанный аккаунт будет перечислена вся сумма ликвидных токенов, которая указана в чеке.

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

1 пример использования чеков. Подарок

В некоем городе живет человек по имени Боб. У его друга Макса сегодня день рождения. Боб решил подарить Максу несколько токенов viz, но он хочет сделать это красиво. Если Боб переведет токены до того, как придёт в гости, Макс всё узнает, и сюрприз испортится. Если он захочет перевести токены в присутствии Макса, то кто знает, какая неприятная ситуация случится - возможно, в этот момент Боб не сможет отправить транзакцию в блокчейн из-за медленного интернета. Тогда Боб решил поступить иначе: он сформирует чек, распечатает в виде QR-кода и подарит Максу в красивой открытке.

2 пример использования инвайт-кодов. Регистрация

Алиса решила зарегистрировать своего коллегу по работе Макса в ДАО VIZ, но Макс ещё не знает, какой хочет себе логин. Поэтому, чтобы долго не сидеть за компьютером, Алиса решила создать чек и передать его Макcу, чтобы тот зарегистрировал себе аккаунт, когда придёт домой.

Многоуровневые платные подписки

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

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

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

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

Цена конкретного уровня подписки будет во столько раз выше первого, во сколько номер уровня больше единицы (например, если первый уровень стоит 10 viz, то третий уровень будет стоить 30 viz).

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

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

Изменения в условиях подписки

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

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

1 пример использования подписок

Маша недавно открыла свой фитнес-клуб. Она решила, что будет хорошо, если посетители клуба смогут оформить абонемент на посещение занятий. Кроме того, она решила, что сделает три вида абонементов: обычный, супер и VIP.

Для реализации этой схемы она создала аккаунт в ДАО VIZ с названием @mashas-club и внедрила в него модель трехуровневой подписки, указав цену за первый уровень 100 viz и периодичность оплаты раз в месяц.

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

2 пример использования подписок

Благотворительный фонд помощи кошкам предлагает участникам VIZ оформить небольшие ежедневные платежи для пополнения фонда. Для этого он создаёт аккаунт @catsfund и настраивает 100-уровневую подписку с базовым платежом в 0,1 viz и периодичностью раз в сутки.

Любой желающий может подписаться на платежи в фонд, выбрав взнос в зависимости от своих желаний и возможностей: от 0,1 viz до 10 viz в день.

Трёхсторонние сделки

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

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

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

Этапы осуществления трёхсторонней сделки

Создание договора о трёхсторонней сделке

Для создания договора о трёхсторонней сделке инициатор (первая сторона сделки, отправитель) должен сформировать транзакцию заключения договора о трёхсторонней сделке.

В ней должны быть указаны:

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

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

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

Согласия агента и второй стороны

Чтобы договор вступил в силу, агент и вторая сторона должны дать согласие, отправив транзакцию согласия на трёхстороннюю сделку. При этом и агент, и вторая сторона должны дать согласие до истечения срока ратификации. Если стороны не успеют дать согласие до этого срока или откажутся давать согласие, то договор будет отменен. При отмене договора средства инициатора будут разморожены и возвращены ему.

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

Добровольное завершение договора инициатором и получателем

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

При этом каждый участник вправе указать, какое количество токенов получит противоположная сторона. В пользу выбранной стороны с замороженного счёта спишется указанная сумма. Если в итоге на замороженном счёте сумма токенов окажется равной 0, то договор считается завершённым. Если же на замороженном счёте останется какое-либо количество токенов, то договор не будет завершён, пока стороны не договорятся, что делать с остатком.

Решение споров

Если стороны не смогут договориться, кому достанутся токены, или какое именно количество токенов должно быть перечислено каждой стороне с замороженного счёта, то любая из сторон вправе(инициатор или получатель), если не истек срок действия договора, отправить в блокчейн транзакцию о начале спора.

С этого момента в распоряжение агента перейдёт вся сумма токенов на замороженном счёте, и ни одна из сторон, в том числе агент, не смогут отклонить спор.

Как только агент получит возможность распоряжаться активами замороженного счёта, он должен решить, какая из двух сторон получит(инициатор или получатель) средства с замороженного счёта, и в каком размере.

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

Истечение срока действия договора

Если срок действия договора истёк, любая из двух сторон (инициатор или получатель) сможет забрать себе или передать другой стороне любую сумму с замороженного счёта. По истечении срока действия договора ни инициатор, ни получатель не смогут оспорить действия друг друга.

Словарь

DAO

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

Wikipedia[en],Bitcoinwiki[ru]

Fair DPoS

Fair DPoS - это подмножество алгоритмов DPoS, в котором сила голоса избирателя распределяется равномерно между всеми делегатами, за которых он проголосовал. То есть, если участник проголосовал за 4 делегатов, то каждому достанется 25% от силы его голоса.

Подробнее

DPoS

DPoS (Delegated proof-of-stake) — это алгоритм достижения консенсуса в децентрализованной среде, в которой участники, имеющие право голоса (обычно обладатели монет в системе), выбирают участников, которые будут формировать блоки(делегатов). Таким образом, избиратели могут не держать специальное оборудование для поддержки работы сети и управления ее параметрами, а избирать делегатов, которым они доверяют.

Особенность DPoS состоит в том, что сеть работает только за счет доверия избирателей к делегатам, в отличии от PoW или PoS, в которых формировать блоки(а значит поддерживать работу сети) может любой пользователь, установивший специальное оборудование.

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

Пропускная способность, газ, bandwidth

Механизм, который борется со злоупотреблением сетью, то есть со спамом.

Подробнее

Ликвидные токены

Ликвидные токены(viz) – это токены блокчейна, которые владелец может свободно перемещать между аккаунтами и конвертировать в деньги, криптовалюту и в долевые токены сети VIZ. Ликвидные токены имеет смысл держать только для торговли на бирже или для переводов между аккаунтами.

Подробнее

Долевой токен

Долевые токены(shares) дают их владельцу право выбирать делегатов, голосовать в Комитете и распределять эмиссию между участниками VIZ. От количества долевых токенов зависит влияние их держателя на процессы в ДАО: чем больше shares, тем выше влияние.

Подробнее

Бирюзовая организация

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

reinventingorganizationswiki[en], Wikipedia[ru]

Делегаты

Это участники сети, которым члены DAO VIZ доверили её поддержку: создание и подпись блоков, управление экономическими и другими параметрами, в том числе принятие хардфорков.

Подробнее

custom-транзакция

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

Контакты

Телеграм чат взаимопомощи и источник знаний: @viztower. Чат создателя этой документации, в нём всегда рады новичкам и разным, даже глупым, вопросам о блокчейне VIZ.

Политический Телеграм чат @viz_world. Здесь принимают важные решения, но новичку в нём не место. Если хотите задать какой-то вопрос, то лучше делайте это в @viztower.

Телеграм канал с важными новостями из мира VIZ: @viz_report

Твиттер: @viz_report

Steem: @viz.report

Golos: @viz.report

Помощь в развитии и распространение

Исходный текст документации принадлежит члену ДАО VIZ @ivanzar и всем другим членам ДАО VIZ.

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

Никто не имеет права требовать компенсации своих затрат, связанных с изменением или распространением документации, её копий и сопутствующих файлов, с одного участника ДАО VIZ, если этот участник не указал обратного(в устной, письменно или любой другой форме). Но любой, кто внесёт вклад в изменение или распространение документации или ее копий, а так же сопутствующих файлов, имеет право запросить награду в Комитете на любую сумму ликвидных токенов. Одобрить или отклонить заявку в комитет могут только участники ДАО VIZ.

Приведенный выше текст относится ко всем файлам документации(в том числе сопутствующим).


Для документов, которые находятся в интернете по адресу https://viz-doc.readthedocs.io, любой желающий может предложить изменения или дополнения, связавшись с владельцем(или владельцами) документов на указанном ресурсе любым известным способом. Все изменения или дополнения осуществляются на добровольной основе, но владелец(или владельцы) не гарантирует принятие этих изменений или дополнений. Человек, предложивший изменения или дополнения для документации по указанному адресу может запросить награду в Комитете.

Исходный текст документации и сопровождающии файлы можно скачать по адресу https://github.com/VizTower/viz-doc.