mirror of https://github.com/voidlizard/hbs2
pep-03
This commit is contained in:
parent
4bc442ac6c
commit
79960751ca
|
@ -182,4 +182,5 @@ fixme-set "workflow" "backlog" "HwCVP8sL7m"
|
|||
fixme-set "workflow" "test" "FHMMGPm8Kh"
|
||||
fixme-set "workflow" "test" "Ac1F6f2pni"
|
||||
fixme-set "assigned" "voidlizard" "Ac1F6f2pni"
|
||||
fixme-set "workflow" "wip" "4ZMqvoTMY3"
|
||||
fixme-set "workflow" "wip" "4ZMqvoTMY3"
|
||||
fixme-merged "146adg8Dyy" "HycuVXNhiZ"
|
|
@ -48,8 +48,7 @@ Ref:
|
|||
;; из текущего состояния.
|
||||
;; как оно вычисляется / в принципе может вычисляться пока не вполне
|
||||
;; понятно, поэтому на текущий момент это проверка ACL:
|
||||
;; хэш коммита >- принадлежит -> owners.
|
||||
|
||||
;; ключ публикатора коммита принадлежит owners.
|
||||
|
||||
```
|
||||
|
||||
|
@ -101,21 +100,94 @@ acl: owner
|
|||
|
||||
удалить reader
|
||||
|
||||
RefUpdateState : (STATE, OP, ARGS*)
|
||||
-----------------------------------
|
||||
RefUpdateState : (STATE, OP, ARGS:[ARG-TYPE])
|
||||
---------------------------------------------
|
||||
|
||||
acl: writer
|
||||
|
||||
OP: Опкод операции, определяется Reference
|
||||
|
||||
ARGS: список аргументов, возможно, пустой
|
||||
|
||||
ARG-TYPE: BLOB INT HASH
|
||||
|
||||
INT: целое число переменной размерности
|
||||
|
||||
BLOB: произвольная строка фиксированной длины
|
||||
|
||||
HASH: хэш блока
|
||||
|
||||
|
||||
RefCommit : (STATE, NEW-STATE, PROOF:PROOF-TYPE)
|
||||
------------------------------------------------
|
||||
|
||||
acl: зависит от PROOF-TYPE
|
||||
|
||||
RefGetJournal
|
||||
|
||||
acl: readers (?)
|
||||
|
||||
|
||||
Обработка команд протокола
|
||||
==========================
|
||||
|
||||
RefCommit
|
||||
---------
|
||||
|
||||
1. Проверить PROOF
|
||||
3. Построить MERKLE TREE журнала, однозначно упорядочив операции
|
||||
2. Текущий STATE = JOURNAL-MERKLE-TREE
|
||||
3. Удалить JOURNAL
|
||||
4. Создать новый пустой JOURNAL
|
||||
|
||||
RefGetJournal
|
||||
-------------
|
||||
|
||||
acl: reader (?)
|
||||
|
||||
1. Построить MERKLE TREE журнала, однозначно упорядочив операции
|
||||
2. Вернуть HASH(MERKLE-TREE) журнала
|
||||
|
||||
|
||||
Любая другая команда
|
||||
--------------------
|
||||
|
||||
1. Распарсить
|
||||
2. Проверить типы операндов
|
||||
3. Проверить ACL
|
||||
4. Записать в журнал
|
||||
|
||||
|
||||
Журнал должен позволять добавлять записи в конец без
|
||||
чтения всего журнала.
|
||||
|
||||
Команды в журнал добавляются последовательно по мере
|
||||
их поступления.
|
||||
|
||||
|
||||
|
||||
Резюме
|
||||
======
|
||||
|
||||
1. Состояние (state) однозначно задаётся потоком команд
|
||||
2. Каждая команда может иметь своим аргументом ссылку на HASH
|
||||
|
||||
|
||||
Утверждается, что имея подобный набор примитивов, мы можем построить
|
||||
определенный (определить) класс распределенных систем.
|
||||
|
||||
Так как ссылки на другие объекты задаются явно при помощи типа HASH,
|
||||
мы знаем, на какие объекты ссылается ссылка.
|
||||
|
||||
Таким образом, можно реализовать сборку мусора, когда объекты,
|
||||
на которых не ссылается ни одна ссылка, могут удаляться.
|
||||
|
||||
|
||||
TODO: journal-types-implementation
|
||||
- Добавление в конец без чтения всего журнала
|
||||
- Записи переменного размера
|
||||
- Задавать размер страницы
|
||||
- Запись может быть произвольного размера
|
||||
- Для записи выделяется целое число страниц
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue