Skip to content

Latest commit

 

History

History
70 lines (49 loc) · 7.3 KB

specification-ru.md

File metadata and controls

70 lines (49 loc) · 7.3 KB

Протокол Голос на блокчейне VIZ

Спецификация протокола

  • Тип протокола: Custom (Гибкий)
  • Название протокола: Voice (Голос)
  • Наименование протокола: V
  • Тип доступа: Обычный
  • Расширения: События Голоса
  • Описание протокола: Открытый протокол для обратно-связанных JSON объектов в блокчейне VIZ, созданный для активности аккаунтов с настраиваемыми типами данных.

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

Пример: Аккаунт А записал гибкую операцию в блоки: 100, 150, 200. Блокчейн хранит, что у аккаунта А последняя гибкая операция в блоке под номером 200. Мы можем достать операции из этого блока и найти там активность аккаунта А. Операция содержит JSON объект с атрибутом, который ссылается на предыдущий блок с аналогичной активностью: 150. Мы можем шаг за шагом спускаться и парсить обратно-связанные JSON объекты для получения всей активности аккаунта А. Вот и все! Лента активности в «прошлое» доступная в поступательной блокчейн архитектуре.

URL Схема

Используется новая схема url с форматом:

viz://@account/block-number/*protocol-shortname/

Такой формат предоставляет простой доступ к конкретной информации от аккаунта в нужном блоке. Наименование протокола опционально.

Структура объектов

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

Пример: Версия по умолчанию: 1. Атрибут опционален, если отмечен звездочкой *.

Атрибут коротко Атрибут полный Описание
v* version Увеличивается, если обратная совместимость сломана.
p previous Номер блока для предыдущего события аккаунта в текущем пространстве протокола.
t type Содержит тип объекта (t/p/e). Значение по умолчанию: t (text).
d data Содержит данные объекта.

Структура данных для типа t (text)

Описание типа: Простая короткая текстовая заметка без какой-либо разметки.

Атрибут коротко Атрибут полный Описание
t text Простая текстовая заметка.
r* reply Ссылка на отвечаемый контекст в формате viz:// url схемы.
s* share Ссылка на контекст которым делятся в любой url схеме.
b* beneficiaries Массив объектов содержащих аккаунт и вес {account,weight} для деталей награждений с бенефициарами.

Структура данных для типа p (publication)

Описание типа: Расширенный текст с поддержкой разметки voice markdown.

Атрибут коротко Атрибут полный Описание
t title Заголовок публикации.
m markdown Текст публикации в формате разметки voice markdown.
d* description Короткое описание пубилкации для предосмотра.
i* image Ссылка на изображение публикации для миниатюры в предосмотре.
r* reply Ссылка на отвечаемый контекст в формате viz:// url схемы.
s* share Ссылка на контекст которым делятся в любой url схеме.
b* beneficiaries Массив объектов содержащих аккаунт и вес {account,weight} для деталей награждений с бенефициарами.

Структура данных для типа e (encoded)

Описание типа: Зашифрованный через AES-256-CBC объект. Новый тип данных хранится в параметре nt (new type) либо внутри d/data, либо снаружи. При развертывании удаляется.

Атрибут коротко Атрибут полный Описание
d data Зашифрованная строка внутри которой хранится json объекта нужной структуры данных. Тип структуры хранится в параметре nt (new type) и может быть любым. В том числе вновь encoded.
nt* new type Опциональный новый тип объекта, который будет назначен при удачной расшифровке данных.
c* comment Комментарий к зашифрованному объекту. Позволяет оставить пометку как для себя, так и для стороннего наблюдателя (используется в основном для загадок и квестов с наградой внутри).