mirror of https://github.com/voidlizard/hbs2
122 lines
3.2 KiB
Plaintext
122 lines
3.2 KiB
Plaintext
PEP: pep-03-reference-update
|
||
|
||
```
|
||
$$$ (set lang ru)
|
||
```
|
||
|
||
Reference представляет собой адресуемую мутабельную
|
||
ссылку на контент.
|
||
|
||
Предпосылки
|
||
===========
|
||
|
||
|
||
1. Ссылка (Reference) представляет собой единицу адресации "потока"
|
||
блоков (топики, чаты, блокчейны, статический файл с обновлениями
|
||
и так далее)
|
||
|
||
2. Со ссылкой ассоциируются владельцы/информация о списке тех,
|
||
кто может читать данные по ссылке / писать данные по ссылке
|
||
|
||
3. Пир должен знать, как обрабатывать операции над ссылкой, а именно
|
||
Парсить, проверять полномочия
|
||
|
||
4. Пир должен уметь обрабатывать команды изменения полномочий
|
||
|
||
|
||
Тезисы
|
||
======
|
||
|
||
|
||
1. При создании ссылки устанавливается первоначальный ACB
|
||
2. При создании ссылки устанавливается список доступных для неё операций
|
||
3. Операции над ACB являются предопределенными
|
||
4. Остальные операции определяется типом ссылки
|
||
|
||
|
||
Структуры данных
|
||
================
|
||
|
||
|
||
```
|
||
Ref:
|
||
ACB ;; ссылка на ACB
|
||
Journal ;; ссылка на merkle tree текущего журнала операций
|
||
Head ;; ссылка на текущее (commited) состояние ссылки
|
||
Proof ;; потенциально -- тип proof. Как его сделать расширяемым
|
||
;; пока что неизвестно, вероятно, это нечто, вычисляемое
|
||
;; из текущего состояния.
|
||
;; как оно вычисляется / в принципе может вычисляться пока не вполне
|
||
;; понятно, поэтому на текущий момент это проверка ACL:
|
||
;; хэш коммита >- принадлежит -> owners.
|
||
|
||
|
||
```
|
||
|
||
|
||
Команды протокола
|
||
=================
|
||
|
||
RefAddOwner : (STATE,BLOB)
|
||
----------------------------
|
||
|
||
acl: root
|
||
|
||
добавить owner
|
||
|
||
|
||
RefDelOwner : (STATE, BLOB)
|
||
----------------------------
|
||
|
||
acl: root
|
||
|
||
удалить owner
|
||
|
||
RefAddWriter : (STATE, BLOB)
|
||
----------------------------
|
||
|
||
acl: owner
|
||
|
||
добавить writer
|
||
|
||
RefDelWriter : (STATE, BLOB)
|
||
----------------------------
|
||
|
||
acl: owner
|
||
|
||
удалить writer
|
||
|
||
|
||
RefAddReader : (STATE, BLOB)
|
||
----------------------------
|
||
|
||
acl: owner
|
||
|
||
добавить reader
|
||
|
||
RefDelReader : (STATE, BLOB)
|
||
----------------------------
|
||
|
||
acl: owner
|
||
|
||
удалить reader
|
||
|
||
RefUpdateState : (STATE, OP, ARGS*)
|
||
-----------------------------------
|
||
|
||
acl: writer
|
||
|
||
|
||
RefCommit : (STATE, NEW-STATE, PROOF:PROOF-TYPE)
|
||
------------------------------------------------
|
||
|
||
acl: зависит от PROOF-TYPE
|
||
|
||
|
||
Обработка команд протокола
|
||
==========================
|
||
|
||
|
||
TODO: journal-types-implementation
|
||
|