hbs2/docs/drafts/pep-04-01.txt

118 lines
4.1 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Простые ссылки
==============
Модель данных
-------------
```
value:
seqnum ; монотонно возрастающее число на каждый update
prev ; предыдущее значение блока | ничего
nonce ; некое произвольное значение
value ; значение ссылки ( hashref )
acb ; ( hashref) ссылка на ACB
metadata ; отсутствие | ссылка ( hashref ) | короткая строка
key ; публичный ключ, создавший, обновивший ссылку
sign ; подпись (TBD) - возьмем, что это подпись всего пакета, тогда
; у нас ссылка разбивается на две части - value и signature
```
Операции
--------
Создать ссылку
~~~~~~~~~~~~~~
Пользователь предоставлет заполненную/подписанную структуру (см. выше).
От неё вычисляется хэш и сама структура в сериализованном виде помещается
в хранилища, а файл в пространстве имён refs указывает на сериализованный блок
данной структуры.
Условия:
1. seqnum == 0
2. prev == отсутствие значения
3. key принадлежит ACB.root
Обновить ссылку
~~~~~~~~~~~~~~~
Команда протокола / API / RPC
Условия:
1. seqnum = prev.seqnum + 1
2. key принадлежит ACB.owners
3. Если current.acb /= prev.ACB, то ключ принадлежит root
Сериализованное значение блока записывается в storage,
ключ в refs устанавливается на хэш этого блока.
Получить значение ссылки
~~~~~~~~~~~~~~~~~~~~~~~~
Узел запрашивает значение ссылки у другого узла.
Если seq полученного значения больше, чем известное
нам, и ссылка валидируется --- то установить собственное
значение ссылки в полученное.
Если нет --- то оставить всё как есть.
Анонс ссылки
~~~~~~~~~~~~
Сообщение, что ссылка X имеет значение Y.
Узел получает значение Y, далее валидирует его
аналогично разделу "Получить значение ссылки".
Проверка подписи
~~~~~~~~~~~~~~~~
1. Сериализуем value
2. Проверяем подпись
Добавление ссылки в список ссылок пира
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
В соответствии с настройками, пир принимает
обновление ссылки или нет от другого пира.
Возможно, он принимает только существующие
ссылки, но не создаёт новые.
Валидированная ссылка помещается в storage,
ref/value обновляется.
Периодически перестраивается merkle tree
всех ссылок, каждый лист в этом дереве
--- указатель на блок (ссылка, значение ссылки).
Данное дерево может быть получено путём обхода каталога
refs, либо же может всегда поддерживаться в
актуальном состоянии.
Получение списка ссылок пира
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Пир посылает другому пиру запрос на получение
всех ссылок.
Пир отвечает адресом merkle tree указанной структуры
данных (merkle tree, где каждый лист - это пара
(ссылка/значение).